* Fix clang Objective-C++ flags for macOS command line builds * Fix getAssetPath() and getShaderBasePath() for macOS command line builds * Protect debugUtilsMessageCallback() from failing when pMessageIdName is NULL * Fix a few clang function override and mismatched type warnings * Fix validation layer warnings on exit for computeraytracing example * Fix regression in text visibility toggle for textOverlay example * Support VK_USE_PLATFORM_METAL_EXT vs. deprecated VK_USE_PLATFORM_MACOS_MVK / DVK_USE_PLATFORM_IOS_MVK * Check dynamic state features before enabling capabilities in dynamicstate example * Fix vkCmdDraw() vertexCount argument (PARTICLE_COUNT) in particlesystem example * Update examples list and restore benchmarking script (to top level) * Fix validation warning in descriptorindexing example * Fix device max recursion depth validation warnings in ray tracing examples * Fix OpenMP build settings for texture3d example on all platforms * Update and simplify build instructions for macOS * Update CI script with correct library path for libomp on macOS x86_64 * Update CI scipt to install libomp prior to macOS builds * Trying one more time to get the CI script working for macOS libomp * Fix vertexCount argument using calculated size in particlesystem example * Fix combined image descriptor offset calculation in descriptorbuffer example * macOS: Support non-system level Vulkan SDK installs, with fallback to MoltenVK library
70 lines
1.9 KiB
C++
70 lines
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"
|
|
|
|
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() override;
|
|
void handleResize();
|
|
void buildCommandBuffers() override;
|
|
void loadAssets();
|
|
void prepareShadingRateImage();
|
|
void setupDescriptors();
|
|
void preparePipelines();
|
|
void prepareUniformBuffers();
|
|
void updateUniformBuffers();
|
|
void prepare() override;
|
|
void setupFrameBuffer() override;
|
|
void setupRenderPass() override;
|
|
virtual void render() override;
|
|
virtual void OnUpdateUIOverlay(vks::UIOverlay* overlay) override;
|
|
};
|