@@ -703,6 +703,7 @@ std::unique_ptr<CVulkanPhysicalDevice> CVulkanPhysicalDevice::create(core::smart
703703 VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR subgroupUniformControlFlowFeatures = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR };
704704 VkPhysicalDeviceRayTracingMotionBlurFeaturesNV rayTracingMotionBlurFeatures = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV };
705705 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 };
706707 VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM rasterizationOrderAttachmentAccessFeatures = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_ARM };
707708 VkPhysicalDeviceColorWriteEnableFeaturesEXT colorWriteEnableFeatures = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT };
708709#if 0
@@ -712,8 +713,11 @@ std::unique_ptr<CVulkanPhysicalDevice> CVulkanPhysicalDevice::create(core::smart
712713 addToPNextChain (&conditionalRenderingFeatures);
713714 if (isExtensionSupported (VK_KHR_PERFORMANCE_QUERY_EXTENSION_NAME))
714715 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+ {
716718 addToPNextChain (&accelerationStructureFeatures);
719+ addToPNextChain (&raytracingMaintenance1Features);
720+ }
717721 if (isExtensionSupported (VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME))
718722 addToPNextChain (&rayTracingPipelineFeatures);
719723 if (isExtensionSupported (VK_NV_SHADER_SM_BUILTINS_EXTENSION_NAME))
@@ -1027,7 +1031,7 @@ std::unique_ptr<CVulkanPhysicalDevice> CVulkanPhysicalDevice::create(core::smart
10271031
10281032 features.mixedAttachmentSamples = isExtensionSupported (VK_AMD_MIXED_ATTACHMENT_SAMPLES_EXTENSION_NAME) || isExtensionSupported (VK_NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME);
10291033
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) )
10311035 {
10321036 features.accelerationStructure = accelerationStructureFeatures.accelerationStructure ;
10331037 features.accelerationStructureIndirectBuild = accelerationStructureFeatures.accelerationStructureIndirectBuild ;
@@ -1039,10 +1043,10 @@ std::unique_ptr<CVulkanPhysicalDevice> CVulkanPhysicalDevice::create(core::smart
10391043 }
10401044 }
10411045
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) )
10431047 {
10441048 features.rayTracingPipeline = rayTracingPipelineFeatures.rayTracingPipeline ;
1045- if (!rayTracingPipelineFeatures.rayTracingPipelineTraceRaysIndirect )
1049+ if (!rayTracingPipelineFeatures.rayTracingPipelineTraceRaysIndirect && !raytracingMaintenance1Features. rayTracingPipelineTraceRaysIndirect2 )
10461050 {
10471051 logger.log (" Not enumerating VkPhysicalDevice %p because it reports features contrary to Vulkan specification!" , system::ILogger::ELL_INFO, vk_physicalDevice);
10481052 return nullptr ;
@@ -1056,7 +1060,7 @@ std::unique_ptr<CVulkanPhysicalDevice> CVulkanPhysicalDevice::create(core::smart
10561060 features.rayTraversalPrimitiveCulling = rayTracingPipelineFeatures.rayTraversalPrimitiveCulling ;
10571061 }
10581062
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) ;
10601064
10611065 if (isExtensionSupported (VK_NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME))
10621066 features.representativeFragmentTest = representativeFragmentTestFeatures.representativeFragmentTest ;
@@ -1449,7 +1453,9 @@ core::smart_refctd_ptr<ILogicalDevice> CVulkanPhysicalDevice::createLogicalDevic
14491453 enableExtensionIfAvailable (VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME);
14501454
14511455 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 };
14521457 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
14531459
14541460 VkPhysicalDeviceRayTracingPipelineFeaturesKHR rayTracingPipelineFeatures = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR,nullptr };
14551461 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
17971803
17981804 // workgroupMemoryExplicitLayoutFeatures [LIMIT SO ENABLE EVERYTHING BY DEFAULT]
17991805
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+
18001810 rasterizationOrderAttachmentAccessFeatures.rasterizationOrderColorAttachmentAccess = enabledFeatures.rasterizationOrderColorAttachmentAccess ;
18011811 rasterizationOrderAttachmentAccessFeatures.rasterizationOrderDepthAttachmentAccess = enabledFeatures.rasterizationOrderDepthAttachmentAccess ;
18021812 rasterizationOrderAttachmentAccessFeatures.rasterizationOrderStencilAttachmentAccess = enabledFeatures.rasterizationOrderStencilAttachmentAccess ;
0 commit comments