@@ -703,6 +703,7 @@ std::unique_ptr<CVulkanPhysicalDevice> CVulkanPhysicalDevice::create(core::smart
703
703
VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR subgroupUniformControlFlowFeatures = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR };
704
704
VkPhysicalDeviceRayTracingMotionBlurFeaturesNV rayTracingMotionBlurFeatures = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV };
705
705
VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR workgroupMemoryExplicitLayout = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR };
706
+ VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR raytracingMaintenance1Features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR };
706
707
VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM rasterizationOrderAttachmentAccessFeatures = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_ARM };
707
708
VkPhysicalDeviceColorWriteEnableFeaturesEXT colorWriteEnableFeatures = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT };
708
709
#if 0
@@ -712,8 +713,11 @@ std::unique_ptr<CVulkanPhysicalDevice> CVulkanPhysicalDevice::create(core::smart
712
713
addToPNextChain (&conditionalRenderingFeatures);
713
714
if (isExtensionSupported (VK_KHR_PERFORMANCE_QUERY_EXTENSION_NAME))
714
715
addToPNextChain (&performanceQueryFeatures);
715
- if (isExtensionSupported (VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME))
716
+ if (isExtensionSupported (VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME) && isExtensionSupported (VK_KHR_RAY_TRACING_MAINTENANCE_1_EXTENSION_NAME))
717
+ {
716
718
addToPNextChain (&accelerationStructureFeatures);
719
+ addToPNextChain (&raytracingMaintenance1Features);
720
+ }
717
721
if (isExtensionSupported (VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME))
718
722
addToPNextChain (&rayTracingPipelineFeatures);
719
723
if (isExtensionSupported (VK_NV_SHADER_SM_BUILTINS_EXTENSION_NAME))
@@ -1027,7 +1031,7 @@ std::unique_ptr<CVulkanPhysicalDevice> CVulkanPhysicalDevice::create(core::smart
1027
1031
1028
1032
features.mixedAttachmentSamples = isExtensionSupported (VK_AMD_MIXED_ATTACHMENT_SAMPLES_EXTENSION_NAME) || isExtensionSupported (VK_NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME);
1029
1033
1030
- if (isExtensionSupported (VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME))
1034
+ if (isExtensionSupported (VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME) && isExtensionSupported (VK_KHR_RAY_TRACING_MAINTENANCE_1_EXTENSION_NAME) )
1031
1035
{
1032
1036
features.accelerationStructure = accelerationStructureFeatures.accelerationStructure ;
1033
1037
features.accelerationStructureIndirectBuild = accelerationStructureFeatures.accelerationStructureIndirectBuild ;
@@ -1039,10 +1043,10 @@ std::unique_ptr<CVulkanPhysicalDevice> CVulkanPhysicalDevice::create(core::smart
1039
1043
}
1040
1044
}
1041
1045
1042
- if (isExtensionSupported (VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME))
1046
+ if (isExtensionSupported (VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME) && isExtensionSupported (VK_KHR_RAY_TRACING_MAINTENANCE_1_EXTENSION_NAME) )
1043
1047
{
1044
1048
features.rayTracingPipeline = rayTracingPipelineFeatures.rayTracingPipeline ;
1045
- if (!rayTracingPipelineFeatures.rayTracingPipelineTraceRaysIndirect )
1049
+ if (!rayTracingPipelineFeatures.rayTracingPipelineTraceRaysIndirect && !raytracingMaintenance1Features. rayTracingPipelineTraceRaysIndirect2 )
1046
1050
{
1047
1051
logger.log (" Not enumerating VkPhysicalDevice %p because it reports features contrary to Vulkan specification!" , system::ILogger::ELL_INFO, vk_physicalDevice);
1048
1052
return nullptr ;
@@ -1056,7 +1060,7 @@ std::unique_ptr<CVulkanPhysicalDevice> CVulkanPhysicalDevice::create(core::smart
1056
1060
features.rayTraversalPrimitiveCulling = rayTracingPipelineFeatures.rayTraversalPrimitiveCulling ;
1057
1061
}
1058
1062
1059
- features.rayQuery = isExtensionSupported (VK_KHR_RAY_QUERY_EXTENSION_NAME);
1063
+ features.rayQuery = isExtensionSupported (VK_KHR_RAY_QUERY_EXTENSION_NAME) && isExtensionSupported (VK_KHR_RAY_TRACING_MAINTENANCE_1_EXTENSION_NAME) ;
1060
1064
1061
1065
if (isExtensionSupported (VK_NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME))
1062
1066
features.representativeFragmentTest = representativeFragmentTestFeatures.representativeFragmentTest ;
@@ -1449,7 +1453,9 @@ core::smart_refctd_ptr<ILogicalDevice> CVulkanPhysicalDevice::createLogicalDevic
1449
1453
enableExtensionIfAvailable (VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME);
1450
1454
1451
1455
VkPhysicalDeviceAccelerationStructureFeaturesKHR accelerationStructureFeatures = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR,nullptr };
1456
+ VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR rayTracingMaintenance1Features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR,nullptr };
1452
1457
REQUIRE_EXTENSION_IF (enabledFeatures.accelerationStructure ,VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME,&accelerationStructureFeatures); // feature dependency taken care of
1458
+ REQUIRE_EXTENSION_IF (enabledFeatures.accelerationStructure ,VK_KHR_RAY_TRACING_MAINTENANCE_1_EXTENSION_NAME,&rayTracingMaintenance1Features); // feature dependency taken care of
1453
1459
1454
1460
VkPhysicalDeviceRayTracingPipelineFeaturesKHR rayTracingPipelineFeatures = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR,nullptr };
1455
1461
REQUIRE_EXTENSION_IF (enabledFeatures.rayTracingPipeline ,VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME,&rayTracingPipelineFeatures); // feature dependency taken care of
@@ -1797,6 +1803,10 @@ core::smart_refctd_ptr<ILogicalDevice> CVulkanPhysicalDevice::createLogicalDevic
1797
1803
1798
1804
// workgroupMemoryExplicitLayoutFeatures [LIMIT SO ENABLE EVERYTHING BY DEFAULT]
1799
1805
1806
+ // we require this extension if the base ones and their features are enabled
1807
+ rayTracingMaintenance1Features.rayTracingMaintenance1 = accelerationStructureFeatures.accelerationStructure ;
1808
+ rayTracingMaintenance1Features.rayTracingPipelineTraceRaysIndirect2 = rayTracingPipelineFeatures.rayTracingPipelineTraceRaysIndirect ;
1809
+
1800
1810
rasterizationOrderAttachmentAccessFeatures.rasterizationOrderColorAttachmentAccess = enabledFeatures.rasterizationOrderColorAttachmentAccess ;
1801
1811
rasterizationOrderAttachmentAccessFeatures.rasterizationOrderDepthAttachmentAccess = enabledFeatures.rasterizationOrderDepthAttachmentAccess ;
1802
1812
rasterizationOrderAttachmentAccessFeatures.rasterizationOrderStencilAttachmentAccess = enabledFeatures.rasterizationOrderStencilAttachmentAccess ;
0 commit comments