2020-09-01 21:51:06 +02:00
|
|
|
/*
|
|
|
|
|
* Vulkan Example - Variable rate shading
|
|
|
|
|
*
|
|
|
|
|
* Copyright (C) 2020 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;
|
|
|
|
|
VkDeviceMemory memory;
|
|
|
|
|
VkImageView view;
|
|
|
|
|
} shadingRateImage;
|
|
|
|
|
|
2020-09-04 09:26:30 +02:00
|
|
|
bool enableShadingRate = true;
|
2020-09-02 20:07:37 +02:00
|
|
|
bool colorShadingRate = false;
|
|
|
|
|
|
2020-09-01 21:51:06 +02:00
|
|
|
struct ShaderData {
|
|
|
|
|
vks::Buffer buffer;
|
|
|
|
|
struct Values {
|
|
|
|
|
glm::mat4 projection;
|
|
|
|
|
glm::mat4 view;
|
|
|
|
|
glm::mat4 model = glm::mat4(1.0f);
|
2020-09-05 12:15:54 +02:00
|
|
|
glm::vec4 lightPos = glm::vec4(0.0f, 2.5f, 0.0f, 1.0f);
|
2020-09-01 21:51:06 +02:00
|
|
|
glm::vec4 viewPos;
|
2020-09-02 20:07:37 +02:00
|
|
|
int32_t colorShadingRate;
|
2020-09-01 21:51:06 +02:00
|
|
|
} values;
|
|
|
|
|
} shaderData;
|
|
|
|
|
|
2020-09-04 09:26:30 +02:00
|
|
|
struct Pipelines {
|
2020-09-05 12:15:54 +02:00
|
|
|
VkPipeline opaque;
|
|
|
|
|
VkPipeline masked;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Pipelines basePipelines;
|
|
|
|
|
Pipelines shadingRatePipelines;
|
2020-09-04 09:26:30 +02:00
|
|
|
|
2020-09-01 21:51:06 +02:00
|
|
|
VkPipelineLayout pipelineLayout;
|
|
|
|
|
VkDescriptorSet descriptorSet;
|
|
|
|
|
VkDescriptorSetLayout descriptorSetLayout;
|
|
|
|
|
|
2020-09-02 19:14:11 +02:00
|
|
|
VkPhysicalDeviceShadingRateImagePropertiesNV physicalDeviceShadingRateImagePropertiesNV{};
|
|
|
|
|
VkPhysicalDeviceShadingRateImageFeaturesNV enabledPhysicalDeviceShadingRateImageFeaturesNV{};
|
2020-09-01 21:51:06 +02:00
|
|
|
PFN_vkCmdBindShadingRateImageNV vkCmdBindShadingRateImageNV;
|
|
|
|
|
|
|
|
|
|
VulkanExample();
|
|
|
|
|
~VulkanExample();
|
|
|
|
|
virtual void getEnabledFeatures();
|
|
|
|
|
void buildCommandBuffers();
|
|
|
|
|
void loadglTFFile(std::string filename);
|
|
|
|
|
void loadAssets();
|
|
|
|
|
void prepareShadingRateImage();
|
|
|
|
|
void setupDescriptors();
|
|
|
|
|
void preparePipelines();
|
|
|
|
|
void prepareUniformBuffers();
|
|
|
|
|
void updateUniformBuffers();
|
|
|
|
|
void prepare();
|
|
|
|
|
virtual void render();
|
|
|
|
|
virtual void OnUpdateUIOverlay(vks::UIOverlay* overlay);
|
|
|
|
|
};
|