From 2b04594fe3b5dc1a904adfb71bd53379056dc247 Mon Sep 17 00:00:00 2001 From: saschawillems Date: Sat, 4 Nov 2017 10:29:45 +0100 Subject: [PATCH] Enable device features, only display sample rate shading option if supported by device --- .../deferredmultisampling.cpp | 10 +++++-- multisampling/multisampling.cpp | 29 ++++++++++++++++--- 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/deferredmultisampling/deferredmultisampling.cpp b/deferredmultisampling/deferredmultisampling.cpp index b197d560..2687d82a 100644 --- a/deferredmultisampling/deferredmultisampling.cpp +++ b/deferredmultisampling/deferredmultisampling.cpp @@ -215,6 +215,10 @@ public: // Enable physical device features required for this example virtual void getEnabledFeatures() { + // Enable sample rate shading filtering if supported + if (deviceFeatures.sampleRateShading) { + enabledFeatures.sampleRateShading = VK_TRUE; + } // Enable anisotropic filtering if supported if (deviceFeatures.samplerAnisotropy) { enabledFeatures.samplerAnisotropy = VK_TRUE; @@ -1179,8 +1183,10 @@ public: if (overlay->checkBox("MSAA", &useMSAA)) { buildCommandBuffers(); } - if (overlay->checkBox("Sample rate shading", &useSampleShading)) { - buildDeferredCommandBuffer(); + if (vulkanDevice->features.sampleRateShading) { + if (overlay->checkBox("Sample rate shading", &useSampleShading)) { + buildDeferredCommandBuffer(); + } } } } diff --git a/multisampling/multisampling.cpp b/multisampling/multisampling.cpp index a08d8103..e3324459 100644 --- a/multisampling/multisampling.cpp +++ b/multisampling/multisampling.cpp @@ -121,6 +121,25 @@ public: uniformBuffer.destroy(); } + // Enable physical device features required for this example + virtual void getEnabledFeatures() + { + // Enable sample rate shading filtering if supported + if (deviceFeatures.sampleRateShading) { + enabledFeatures.sampleRateShading = VK_TRUE; + } + // Enable texture compression + if (deviceFeatures.textureCompressionBC) { + enabledFeatures.textureCompressionBC = VK_TRUE; + } + else if (deviceFeatures.textureCompressionASTC_LDR) { + enabledFeatures.textureCompressionASTC_LDR = VK_TRUE; + } + else if (deviceFeatures.textureCompressionETC2) { + enabledFeatures.textureCompressionETC2 = VK_TRUE; + } + } + // Creates a multi sample render target (image and view) that is used to resolve // into the visible frame buffer target in the render pass void setupMultisampleTarget() @@ -628,7 +647,7 @@ public: shaderStages[1] = loadShader(getAssetPath() + "shaders/mesh/mesh.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); // Setup multi sampling multisampleState.rasterizationSamples = sampleCount; // Number of samples to use for rasterization - + VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.MSAA)); // MSAA with sample shading pipeline @@ -744,9 +763,11 @@ public: virtual void OnUpdateUIOverlay(vks::UIOverlay *overlay) { - if (overlay->header("Settings")) { - if (overlay->checkBox("Sample rate shading", &useSampleShading)) { - buildCommandBuffers(); + if (vulkanDevice->features.sampleRateShading) { + if (overlay->header("Settings")) { + if (overlay->checkBox("Sample rate shading", &useSampleShading)) { + buildCommandBuffers(); + } } } }