From 780ef58e97095fb5daf4e83c2789db4352eccb16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Sun, 18 Jan 2026 08:26:03 -0800 Subject: [PATCH] VK: Fixed VRS feature detection. Issue #3549. (#3555) --- src/renderer_vk.cpp | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/src/renderer_vk.cpp b/src/renderer_vk.cpp index cb81bef99..44eb1ceec 100644 --- a/src/renderer_vk.cpp +++ b/src/renderer_vk.cpp @@ -1632,13 +1632,33 @@ VK_IMPORT_INSTANCE if (s_extension[Extension::KHR_fragment_shading_rate].m_supported) { - fragmentShadingRate.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR; - fragmentShadingRate.pNext = (VkBaseOutStructure*)nextFeatures; - fragmentShadingRate.pipelineFragmentShadingRate = VK_TRUE; - fragmentShadingRate.primitiveFragmentShadingRate = VK_TRUE; - fragmentShadingRate.attachmentFragmentShadingRate = VK_FALSE; + VkPhysicalDeviceFeatures2KHR deviceFeatures2; + deviceFeatures2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR; + deviceFeatures2.pNext = NULL; - nextFeatures = &fragmentShadingRate; + VkBaseOutStructure* next = (VkBaseOutStructure*)&deviceFeatures2; + + next->pNext = (VkBaseOutStructure*)&fragmentShadingRate; + fragmentShadingRate.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR; + fragmentShadingRate.pNext = NULL; + + vkGetPhysicalDeviceFeatures2KHR(m_physicalDevice, &deviceFeatures2); + + if (!fragmentShadingRate.pipelineFragmentShadingRate + || !fragmentShadingRate.primitiveFragmentShadingRate) + { + s_extension[Extension::KHR_fragment_shading_rate].m_supported = false; + } + else + { + fragmentShadingRate.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR; + fragmentShadingRate.pNext = (VkBaseOutStructure*)nextFeatures; + fragmentShadingRate.pipelineFragmentShadingRate = VK_TRUE; + fragmentShadingRate.primitiveFragmentShadingRate = VK_TRUE; + fragmentShadingRate.attachmentFragmentShadingRate = VK_FALSE; + + nextFeatures = &fragmentShadingRate; + } } bx::memSet(&m_deviceFeatures, 0, sizeof(m_deviceFeatures) );