Add ray tracing invocation reorder extensions

Applications that use these extensions have shaders with new
instructions. The driver should receive the features struct
via a vkCreateDevice pNext chain to enable the feature. This
change simply adds this extension as a supported extension,
and adds the pNext structs to the supported structs.
This commit is contained in:
Neil Monday
2026-07-21 21:40:41 +09:00
committed by Baldur Karlsson
parent 4e8e179d32
commit 1e581d3c90
7 changed files with 137 additions and 14 deletions
+2 -2
View File
@@ -99,6 +99,7 @@ Maintainers can update this file by updating vk.xml in this folder and running `
* `VK_EXT_provoking_vertex`
* `VK_EXT_queue_family_foreign`
* `VK_EXT_rasterization_order_attachment_access`
* `VK_EXT_ray_tracing_invocation_reorder`
* `VK_EXT_rgba10x6_formats`
* `VK_EXT_robustness2`
* `VK_EXT_sample_locations`
@@ -265,6 +266,7 @@ Maintainers can update this file by updating vk.xml in this folder and running `
* `VK_NV_external_memory`
* `VK_NV_fragment_shader_barycentric`
* `VK_NV_geometry_shader_passthrough`
* `VK_NV_ray_tracing_invocation_reorder`
* `VK_NV_sample_mask_override_coverage`
* `VK_NV_shader_image_footprint`
* `VK_NV_shader_subgroup_partitioned`
@@ -333,7 +335,6 @@ The portability subset is only relevant on mac, which is not a supported platfor
* `VK_EXT_pipeline_library_group_handles`
* `VK_EXT_present_timing`
* `VK_EXT_primitive_restart_index`
* `VK_EXT_ray_tracing_invocation_reorder`
* `VK_EXT_shader_64bit_indexing`
* `VK_EXT_shader_float8`
* `VK_EXT_shader_long_vector`
@@ -453,7 +454,6 @@ The portability subset is only relevant on mac, which is not a supported platfor
* `VK_NV_present_barrier`
* `VK_NV_present_metering`
* `VK_NV_raw_access_chains`
* `VK_NV_ray_tracing_invocation_reorder`
* `VK_NV_ray_tracing_linear_swept_spheres`
* `VK_NV_ray_tracing_motion_blur`
* `VK_NV_ray_tracing_validation`
+9
View File
@@ -1801,6 +1801,10 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceProvokingVertexPropertiesEXT);
DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePushDescriptorProperties);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceRayQueryFeaturesKHR);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceRayTracingInvocationReorderPropertiesEXT);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceRayTracingPipelineFeaturesKHR);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceRayTracingPipelinePropertiesKHR);
@@ -2344,6 +2348,10 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceProvokingVertexPropertiesEXT);
DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePushDescriptorProperties);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceRayQueryFeaturesKHR);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceRayTracingInvocationReorderPropertiesEXT);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceRayTracingPipelineFeaturesKHR);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceRayTracingPipelinePropertiesKHR);
@@ -2877,6 +2885,7 @@ DECLARE_REFLECTION_ENUM(VkQueryResultFlagBits);
DECLARE_REFLECTION_ENUM(VkQueryType);
DECLARE_REFLECTION_ENUM(VkQueueFlagBits);
DECLARE_REFLECTION_ENUM(VkQueueGlobalPriority);
DECLARE_REFLECTION_ENUM(VkRayTracingInvocationReorderModeEXT);
DECLARE_REFLECTION_ENUM(VkRayTracingShaderGroupTypeKHR);
DECLARE_REFLECTION_ENUM(VkRenderingFlagBits);
DECLARE_REFLECTION_ENUM(VkRenderPassCreateFlagBits);
+8
View File
@@ -1381,6 +1381,10 @@ static const VkExtensionProperties supportedExtensions[] = {
VK_EXT_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_EXTENSION_NAME,
VK_EXT_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_SPEC_VERSION,
},
{
VK_EXT_RAY_TRACING_INVOCATION_REORDER_EXTENSION_NAME,
VK_EXT_RAY_TRACING_INVOCATION_REORDER_SPEC_VERSION,
},
{
VK_EXT_RGBA10X6_FORMATS_EXTENSION_NAME,
VK_EXT_RGBA10X6_FORMATS_SPEC_VERSION,
@@ -2071,6 +2075,10 @@ static const VkExtensionProperties supportedExtensions[] = {
VK_NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME,
VK_NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION,
},
{
VK_NV_RAY_TRACING_INVOCATION_REORDER_EXTENSION_NAME,
VK_NV_RAY_TRACING_INVOCATION_REORDER_SPEC_VERSION,
},
{
VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME,
VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_SPEC_VERSION,
+8 -4
View File
@@ -507,6 +507,14 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
VkPhysicalDevicePushDescriptorProperties); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_EXT, \
VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_EXT, \
VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_NV, \
VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_EXT, \
VkPhysicalDeviceRayTracingInvocationReorderPropertiesEXT); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_NV, \
VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR, \
VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR, \
@@ -1368,10 +1376,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_QUEUE_PERF_HINT_FEATURES_QCOM: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_QUEUE_PERF_HINT_PROPERTIES_QCOM: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAW_ACCESS_CHAINS_FEATURES_NV: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_EXT: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_NV: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_EXT: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_NV: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_LINEAR_SWEPT_SPHERES_FEATURES_NV: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV: \
+83 -8
View File
@@ -915,6 +915,12 @@ SERIALISE_VK_HANDLES();
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_EXT, \
VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT) \
\
/* VK_EXT_ray_tracing_invocation_reorder */ \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_EXT, \
VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT) \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_EXT, \
VkPhysicalDeviceRayTracingInvocationReorderPropertiesEXT) \
\
/* VK_EXT_rgba10x6_formats */ \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT, \
VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT) \
@@ -1687,6 +1693,12 @@ SERIALISE_VK_HANDLES();
PNEXT_STRUCT(VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV, \
VkExternalMemoryImageCreateInfoNV) \
\
/* VK_NV_ray_tracing_invocation_reorder */ \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_NV, \
VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV) \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_NV, \
VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV) \
\
/* VK_NV_shader_image_footprint */ \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV, \
VkPhysicalDeviceShaderImageFootprintFeaturesNV) \
@@ -2042,10 +2054,6 @@ SERIALISE_VK_HANDLES();
/* VK_EXT_primitive_restart_index */ \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_RESTART_INDEX_FEATURES_EXT) \
\
/* VK_EXT_ray_tracing_invocation_reorder */ \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_EXT) \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_EXT) \
\
/* VK_EXT_shader_64bit_indexing */ \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_64_BIT_INDEXING_FEATURES_EXT) \
\
@@ -2550,10 +2558,6 @@ SERIALISE_VK_HANDLES();
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV) \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV) \
\
/* VK_NV_ray_tracing_invocation_reorder */ \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_NV) \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_NV) \
\
/* VK_NV_ray_tracing_motion_blur */ \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV) \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV) \
@@ -14102,6 +14106,73 @@ void Deserialise(const VkPhysicalDeviceRayTracingPipelinePropertiesKHR &el)
DeserialiseNext(el.pNext);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT &el)
{
RDCASSERT(ser.IsReading() ||
el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_EXT);
SerialiseNext(ser, el.sType, el.pNext);
SERIALISE_MEMBER(rayTracingInvocationReorder);
}
template <>
void Deserialise(const VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT &el)
{
DeserialiseNext(el.pNext);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VkPhysicalDeviceRayTracingInvocationReorderPropertiesEXT &el)
{
RDCASSERT(ser.IsReading() ||
el.sType ==
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_EXT);
SerialiseNext(ser, el.sType, el.pNext);
SERIALISE_MEMBER(rayTracingInvocationReorderReorderingHint);
SERIALISE_MEMBER(maxShaderBindingTableRecordIndex);
}
template <>
void Deserialise(const VkPhysicalDeviceRayTracingInvocationReorderPropertiesEXT &el)
{
DeserialiseNext(el.pNext);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV &el)
{
RDCASSERT(ser.IsReading() ||
el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_NV);
SerialiseNext(ser, el.sType, el.pNext);
SERIALISE_MEMBER(rayTracingInvocationReorder);
}
template <>
void Deserialise(const VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV &el)
{
DeserialiseNext(el.pNext);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV &el)
{
RDCASSERT(ser.IsReading() ||
el.sType ==
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_NV);
SerialiseNext(ser, el.sType, el.pNext);
SERIALISE_MEMBER(rayTracingInvocationReorderReorderingHint);
}
template <>
void Deserialise(const VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV &el)
{
DeserialiseNext(el.pNext);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VkStridedDeviceAddressRegionKHR &el)
{
@@ -15476,6 +15547,10 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceProvokingVertexPropertiesEXT);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePushDescriptorProperties);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceRayQueryFeaturesKHR);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceRayTracingInvocationReorderPropertiesEXT);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceRayTracingPipelineFeaturesKHR);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceRayTracingPipelinePropertiesKHR);
+11
View File
@@ -3808,6 +3808,17 @@ rdcstr DoStringise(const VkProvokingVertexModeEXT &el)
END_ENUM_STRINGISE();
}
template <>
rdcstr DoStringise(const VkRayTracingInvocationReorderModeEXT &el)
{
BEGIN_ENUM_STRINGISE(VkRayTracingInvocationReorderModeEXT);
{
STRINGISE_ENUM(VK_RAY_TRACING_INVOCATION_REORDER_MODE_NONE_EXT)
STRINGISE_ENUM(VK_RAY_TRACING_INVOCATION_REORDER_MODE_REORDER_EXT)
}
END_ENUM_STRINGISE();
}
template <>
rdcstr DoStringise(const VkRayTracingShaderGroupTypeKHR &el)
{
@@ -3542,6 +3542,22 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi
}
END_PHYS_EXT_CHECK();
BEGIN_PHYS_EXT_CHECK(
VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_EXT);
{
CHECK_PHYS_EXT_FEATURE(rayTracingInvocationReorder);
}
END_PHYS_EXT_CHECK();
BEGIN_PHYS_EXT_CHECK(
VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_NV);
{
CHECK_PHYS_EXT_FEATURE(rayTracingInvocationReorder);
}
END_PHYS_EXT_CHECK();
BEGIN_PHYS_EXT_CHECK(VkPhysicalDeviceMaintenance5Features,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES);
{