Просмотр исходного кода

VK: Fixed VRS feature detection. Issue #3549. (#3555)

Branimir Karadžić 1 неделя назад
Родитель
Сommit
780ef58e97
1 измененных файлов с 25 добавлено и 5 удалено
  1. 25 5
      src/renderer_vk.cpp

+ 25 - 5
src/renderer_vk.cpp

@@ -1632,13 +1632,33 @@ VK_IMPORT_INSTANCE
 
 				if (s_extension[Extension::KHR_fragment_shading_rate].m_supported)
 				{
+					VkPhysicalDeviceFeatures2KHR deviceFeatures2;
+					deviceFeatures2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR;
+					deviceFeatures2.pNext = NULL;
+
+					VkBaseOutStructure* next = (VkBaseOutStructure*)&deviceFeatures2;
+
+					next->pNext = (VkBaseOutStructure*)&fragmentShadingRate;
 					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;
+					fragmentShadingRate.pNext = NULL;
+
+					vkGetPhysicalDeviceFeatures2KHR(m_physicalDevice, &deviceFeatures2);
 
-					nextFeatures = &fragmentShadingRate;
+					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) );