72 lines
No EOL
1.9 KiB
C++
72 lines
No EOL
1.9 KiB
C++
/*
|
|
* Vulkan Example - Variable rate shading
|
|
*
|
|
* Copyright (C) 2020-2023 by Sascha Willems - www.saschawillems.de
|
|
*
|
|
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
|
*/
|
|
|
|
#include "vulkanexamplebase.h"
|
|
#include "VulkanglTFModel.h"
|
|
|
|
#define ENABLE_VALIDATION false
|
|
|
|
class VulkanExample : public VulkanExampleBase
|
|
{
|
|
public:
|
|
vkglTF::Model scene;
|
|
|
|
struct ShadingRateImage {
|
|
VkImage image{ VK_NULL_HANDLE };
|
|
VkDeviceMemory memory;
|
|
VkImageView view;
|
|
} shadingRateImage;
|
|
|
|
bool enableShadingRate = true;
|
|
bool colorShadingRate = false;
|
|
|
|
struct ShaderData {
|
|
vks::Buffer buffer;
|
|
struct Values {
|
|
glm::mat4 projection;
|
|
glm::mat4 view;
|
|
glm::mat4 model = glm::mat4(1.0f);
|
|
glm::vec4 lightPos = glm::vec4(0.0f, 2.5f, 0.0f, 1.0f);
|
|
glm::vec4 viewPos;
|
|
int32_t colorShadingRate;
|
|
} values;
|
|
} shaderData;
|
|
|
|
struct Pipelines {
|
|
VkPipeline opaque;
|
|
VkPipeline masked;
|
|
} pipelines;
|
|
|
|
VkPipelineLayout pipelineLayout;
|
|
VkDescriptorSet descriptorSet;
|
|
VkDescriptorSetLayout descriptorSetLayout;
|
|
|
|
VkPhysicalDeviceFragmentShadingRatePropertiesKHR physicalDeviceShadingRateImageProperties{};
|
|
VkPhysicalDeviceFragmentShadingRateFeaturesKHR enabledPhysicalDeviceShadingRateImageFeaturesKHR{};
|
|
|
|
PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR vkGetPhysicalDeviceFragmentShadingRatesKHR{ nullptr };
|
|
PFN_vkCmdSetFragmentShadingRateKHR vkCmdSetFragmentShadingRateKHR{ nullptr };
|
|
PFN_vkCreateRenderPass2KHR vkCreateRenderPass2KHR{ nullptr };
|
|
|
|
VulkanExample();
|
|
~VulkanExample();
|
|
virtual void getEnabledFeatures();
|
|
void handleResize();
|
|
void buildCommandBuffers();
|
|
void loadAssets();
|
|
void prepareShadingRateImage();
|
|
void setupDescriptors();
|
|
void preparePipelines();
|
|
void prepareUniformBuffers();
|
|
void updateUniformBuffers();
|
|
void prepare();
|
|
void setupFrameBuffer() override;
|
|
void setupRenderPass() override;
|
|
virtual void render();
|
|
virtual void OnUpdateUIOverlay(vks::UIOverlay* overlay);
|
|
}; |