mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-05 01:20:42 +00:00
Add support for VK_KHR_ray_tracing_maintenance1
This commit is contained in:
@@ -187,6 +187,7 @@ Maintainers can update this file by updating vk.xml in this folder and running `
|
||||
* `VK_KHR_present_wait`
|
||||
* `VK_KHR_push_descriptor`
|
||||
* `VK_KHR_ray_query`
|
||||
* `VK_KHR_ray_tracing_maintenance1`
|
||||
* `VK_KHR_ray_tracing_pipeline`
|
||||
* `VK_KHR_ray_tracing_position_fetch`
|
||||
* `VK_KHR_relaxed_block_layout`
|
||||
@@ -260,7 +261,6 @@ KHR extensions will definitely be implemented at some point, though KHR extensio
|
||||
* `VK_KHR_maintenance8`
|
||||
* `VK_KHR_map_memory2`
|
||||
* `VK_KHR_pipeline_binary`
|
||||
* `VK_KHR_ray_tracing_maintenance1`
|
||||
|
||||
## KHR Portability
|
||||
|
||||
|
||||
@@ -1148,6 +1148,7 @@ enum class VulkanChunk : uint32_t
|
||||
vkCreateRayTracingPipelinesKHR,
|
||||
vkCmdSetRenderingAttachmentLocationsKHR,
|
||||
vkCmdSetRenderingInputAttachmentIndicesKHR,
|
||||
vkCmdTraceRaysIndirect2KHR,
|
||||
Max,
|
||||
};
|
||||
|
||||
@@ -1468,6 +1469,7 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceProvokingVertexPropertiesEXT);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePushDescriptorProperties);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceRayQueryFeaturesKHR);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceRayTracingPipelineFeaturesKHR);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceRayTracingPipelinePropertiesKHR);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR);
|
||||
@@ -1918,6 +1920,7 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceProvokingVertexPropertiesEXT);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePushDescriptorProperties);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceRayQueryFeaturesKHR);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceRayTracingPipelineFeaturesKHR);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceRayTracingPipelinePropertiesKHR);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR);
|
||||
|
||||
@@ -1658,6 +1658,10 @@ static const VkExtensionProperties supportedExtensions[] = {
|
||||
VK_KHR_RAY_QUERY_EXTENSION_NAME,
|
||||
VK_KHR_RAY_QUERY_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_KHR_RAY_TRACING_MAINTENANCE_1_EXTENSION_NAME,
|
||||
VK_KHR_RAY_TRACING_MAINTENANCE_1_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME,
|
||||
VK_KHR_RAY_TRACING_PIPELINE_SPEC_VERSION,
|
||||
@@ -4356,6 +4360,8 @@ bool WrappedVulkan::ProcessChunk(ReadSerialiser &ser, VulkanChunk chunk)
|
||||
case VulkanChunk::vkCreateRayTracingPipelinesKHR:
|
||||
return Serialise_vkCreateRayTracingPipelinesKHR(ser, VK_NULL_HANDLE, VK_NULL_HANDLE,
|
||||
VK_NULL_HANDLE, 0, NULL, NULL, NULL);
|
||||
case VulkanChunk::vkCmdTraceRaysIndirect2KHR:
|
||||
return Serialise_vkCmdTraceRaysIndirect2KHR(ser, VK_NULL_HANDLE, 0);
|
||||
|
||||
// chunks that are reserved but not yet serialised
|
||||
case VulkanChunk::vkResetCommandPool:
|
||||
|
||||
@@ -3024,4 +3024,8 @@ public:
|
||||
VkDeviceSize vkGetRayTracingShaderGroupStackSizeKHR(VkDevice device, VkPipeline pipeline,
|
||||
uint32_t group,
|
||||
VkShaderGroupShaderKHR groupShader);
|
||||
|
||||
// VK_KHR_ray_tracing_maintenance1
|
||||
IMPLEMENT_FUNCTION_SERIALISED(void, vkCmdTraceRaysIndirect2KHR, VkCommandBuffer commandBuffer,
|
||||
VkDeviceAddress indirectDeviceAddress);
|
||||
};
|
||||
|
||||
@@ -544,7 +544,8 @@
|
||||
DeclExt(EXT_subgroup_size_control); \
|
||||
DeclExt(EXT_shader_subgroup_ballot); \
|
||||
DeclExt(EXT_shader_subgroup_vote); \
|
||||
DeclExt(KHR_shader_subgroup_uniform_control_flow);
|
||||
DeclExt(KHR_shader_subgroup_uniform_control_flow); \
|
||||
DeclExt(KHR_ray_tracing_maintenance1);
|
||||
|
||||
// for simplicity and since the check itself is platform agnostic,
|
||||
// these aren't protected in platform defines
|
||||
@@ -678,7 +679,8 @@
|
||||
CheckExt(EXT_subgroup_size_control, VK13); \
|
||||
CheckExt(EXT_shader_subgroup_ballot, VK11); \
|
||||
CheckExt(EXT_shader_subgroup_vote, VK11); \
|
||||
CheckExt(KHR_shader_subgroup_uniform_control_flow, VKXX);
|
||||
CheckExt(KHR_shader_subgroup_uniform_control_flow, VKXX); \
|
||||
CheckExt(KHR_ray_tracing_maintenance1, VKXX);
|
||||
|
||||
#define HookInitVulkanInstanceExts_PhysDev() \
|
||||
HookInitExtension(KHR_surface, GetPhysicalDeviceSurfaceSupportKHR); \
|
||||
@@ -1044,6 +1046,7 @@
|
||||
HookInitExtension(KHR_ray_tracing_pipeline, GetRayTracingCaptureReplayShaderGroupHandlesKHR); \
|
||||
HookInitExtension(KHR_ray_tracing_pipeline, GetRayTracingShaderGroupHandlesKHR); \
|
||||
HookInitExtension(KHR_ray_tracing_pipeline, GetRayTracingShaderGroupStackSizeKHR); \
|
||||
HookInitExtension(KHR_ray_tracing_maintenance1, CmdTraceRaysIndirect2KHR); \
|
||||
HookInitExtension_Device_Win32(); \
|
||||
HookInitExtension_Device_Linux(); \
|
||||
HookInitExtension_Device_Android(); \
|
||||
@@ -1949,6 +1952,8 @@
|
||||
pipeline, uint32_t, group, VkShaderGroupShaderKHR, groupShader); \
|
||||
HookDefine2(void, vkCmdSetRayTracingPipelineStackSizeKHR, VkCommandBuffer, commandBuffer, \
|
||||
uint32_t, pipelineStackSize); \
|
||||
HookDefine2(void, vkCmdTraceRaysIndirect2KHR, VkCommandBuffer, commandBuffer, VkDeviceAddress, \
|
||||
indirectDeviceAddress); \
|
||||
HookDefine_Win32(); \
|
||||
HookDefine_Linux(); \
|
||||
HookDefine_Android(); \
|
||||
|
||||
@@ -416,6 +416,8 @@ 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_MAINTENANCE_1_FEATURES_KHR, \
|
||||
VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR, \
|
||||
VkPhysicalDeviceRayTracingPipelineFeaturesKHR); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR, \
|
||||
@@ -1139,7 +1141,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_NV: \
|
||||
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_MAINTENANCE_1_FEATURES_KHR: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_VALIDATION_FEATURES_NV: \
|
||||
|
||||
@@ -1293,6 +1293,10 @@ SERIALISE_VK_HANDLES();
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR, \
|
||||
VkPhysicalDeviceRayQueryFeaturesKHR) \
|
||||
\
|
||||
/* VK_KHR_ray_tracing_maintenance1 */ \
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR, \
|
||||
VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR) \
|
||||
\
|
||||
/* VK_KHR_ray_tracing_pipeline */ \
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR, \
|
||||
VkRayTracingPipelineCreateInfoKHR) \
|
||||
@@ -1843,9 +1847,6 @@ SERIALISE_VK_HANDLES();
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_DEVICE_PIPELINE_BINARY_INTERNAL_CACHE_CONTROL_KHR) \
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PIPELINE_BINARY_HANDLES_INFO_KHR) \
|
||||
\
|
||||
/* VK_KHR_ray_tracing_maintenance1 */ \
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR) \
|
||||
\
|
||||
/* VK_KHR_video_decode_av1 */ \
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_CAPABILITIES_KHR) \
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_PICTURE_INFO_KHR) \
|
||||
@@ -12579,6 +12580,23 @@ void DoSerialise(SerialiserType &ser, VkDeviceOrHostAddressKHR &el)
|
||||
SERIALISE_MEMBER(deviceAddress);
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
void DoSerialise(SerialiserType &ser, VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR &el)
|
||||
{
|
||||
RDCASSERT(ser.IsReading() ||
|
||||
el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR);
|
||||
SerialiseNext(ser, el.sType, el.pNext);
|
||||
|
||||
SERIALISE_MEMBER(rayTracingMaintenance1);
|
||||
SERIALISE_MEMBER(rayTracingPipelineTraceRaysIndirect2);
|
||||
}
|
||||
|
||||
template <>
|
||||
void Deserialise(const VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR &el)
|
||||
{
|
||||
DeserialiseNext(el.pNext);
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
void DoSerialise(SerialiserType &ser, VkPhysicalDeviceRayQueryFeaturesKHR &el)
|
||||
{
|
||||
@@ -13054,6 +13072,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceProvokingVertexPropertiesEXT);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePushDescriptorProperties);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceRayQueryFeaturesKHR);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceRayTracingPipelineFeaturesKHR);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceRayTracingPipelinePropertiesKHR);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR);
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
template <>
|
||||
rdcstr DoStringise(const VulkanChunk &el)
|
||||
{
|
||||
RDCCOMPILE_ASSERT((uint32_t)VulkanChunk::Max == 1215, "Chunks changed without updating names");
|
||||
RDCCOMPILE_ASSERT((uint32_t)VulkanChunk::Max == 1216, "Chunks changed without updating names");
|
||||
|
||||
BEGIN_ENUM_STRINGISE(VulkanChunk)
|
||||
{
|
||||
@@ -247,6 +247,7 @@ rdcstr DoStringise(const VulkanChunk &el)
|
||||
STRINGISE_ENUM_CLASS(vkCreateRayTracingPipelinesKHR)
|
||||
STRINGISE_ENUM_CLASS(vkCmdSetRenderingAttachmentLocationsKHR)
|
||||
STRINGISE_ENUM_CLASS(vkCmdSetRenderingInputAttachmentIndicesKHR)
|
||||
STRINGISE_ENUM_CLASS(vkCmdTraceRaysIndirect2KHR)
|
||||
STRINGISE_ENUM_CLASS_NAMED(Max, "Max Chunk");
|
||||
}
|
||||
END_ENUM_STRINGISE()
|
||||
|
||||
@@ -3436,6 +3436,14 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi
|
||||
}
|
||||
END_PHYS_EXT_CHECK();
|
||||
|
||||
BEGIN_PHYS_EXT_CHECK(VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR,
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR);
|
||||
{
|
||||
CHECK_PHYS_EXT_FEATURE(rayTracingMaintenance1);
|
||||
CHECK_PHYS_EXT_FEATURE(rayTracingPipelineTraceRaysIndirect2);
|
||||
}
|
||||
END_PHYS_EXT_CHECK();
|
||||
|
||||
BEGIN_PHYS_EXT_CHECK(VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR,
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_POSITION_FETCH_FEATURES_KHR);
|
||||
{
|
||||
|
||||
@@ -5426,6 +5426,82 @@ void WrappedVulkan::vkCmdTraceRaysIndirectKHR(
|
||||
}
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
bool WrappedVulkan::Serialise_vkCmdTraceRaysIndirect2KHR(SerialiserType &ser,
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkDeviceAddress indirectDeviceAddress)
|
||||
{
|
||||
SERIALISE_ELEMENT(commandBuffer);
|
||||
SERIALISE_ELEMENT(indirectDeviceAddress).Important();
|
||||
|
||||
Serialise_DebugMessages(ser);
|
||||
|
||||
SERIALISE_CHECK_READ_ERRORS();
|
||||
|
||||
if(IsReplayingAndReading())
|
||||
{
|
||||
m_LastCmdBufferID = GetResourceManager()->GetOriginalID(GetResID(commandBuffer));
|
||||
|
||||
if(IsActiveReplaying(m_State))
|
||||
{
|
||||
if(InRerecordRange(m_LastCmdBufferID))
|
||||
{
|
||||
commandBuffer = RerecordCmdBuf(m_LastCmdBufferID);
|
||||
|
||||
uint32_t eventId = HandlePreCallback(commandBuffer, ActionFlags::DispatchRay);
|
||||
|
||||
ObjDisp(commandBuffer)->CmdTraceRaysIndirect2KHR(Unwrap(commandBuffer), indirectDeviceAddress);
|
||||
|
||||
if(eventId && m_ActionCallback->PostDispatch(eventId, ActionFlags::DispatchRay, commandBuffer))
|
||||
{
|
||||
ObjDisp(commandBuffer)->CmdTraceRaysIndirect2KHR(Unwrap(commandBuffer), indirectDeviceAddress);
|
||||
|
||||
m_ActionCallback->PostRemisc(eventId, ActionFlags::Clear, commandBuffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ObjDisp(commandBuffer)->CmdTraceRaysIndirect2KHR(Unwrap(commandBuffer), indirectDeviceAddress);
|
||||
|
||||
{
|
||||
AddEvent();
|
||||
|
||||
ActionDescription action;
|
||||
action.flags = ActionFlags::DispatchRay | ActionFlags::Indirect;
|
||||
|
||||
AddAction(action);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void WrappedVulkan::vkCmdTraceRaysIndirect2KHR(VkCommandBuffer commandBuffer,
|
||||
VkDeviceAddress indirectDeviceAddress)
|
||||
{
|
||||
SCOPED_DBG_SINK();
|
||||
|
||||
SERIALISE_TIME_CALL(
|
||||
ObjDisp(commandBuffer)->CmdTraceRaysIndirect2KHR(Unwrap(commandBuffer), indirectDeviceAddress));
|
||||
|
||||
if(IsCaptureMode(m_State))
|
||||
{
|
||||
VkResourceRecord *record = GetRecord(commandBuffer);
|
||||
|
||||
CACHE_THREAD_SERIALISER();
|
||||
|
||||
ser.SetActionChunk();
|
||||
SCOPED_SERIALISE_CHUNK(VulkanChunk::vkCmdTraceRaysIndirect2KHR);
|
||||
Serialise_vkCmdTraceRaysIndirect2KHR(ser, commandBuffer, indirectDeviceAddress);
|
||||
|
||||
record->AddChunk(scope.Get(&record->cmdInfo->alloc));
|
||||
|
||||
// all buffers referenced are BDA so they are already forcibly and pessimistically referenced
|
||||
}
|
||||
}
|
||||
|
||||
INSTANTIATE_FUNCTION_SERIALISED(void, vkCmdDraw, VkCommandBuffer commandBuffer, uint32_t vertexCount,
|
||||
uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance);
|
||||
|
||||
@@ -5547,3 +5623,5 @@ INSTANTIATE_FUNCTION_SERIALISED(void, vkCmdTraceRaysIndirectKHR, VkCommandBuffer
|
||||
const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
|
||||
const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable,
|
||||
VkDeviceAddress indirectDeviceAddress);
|
||||
INSTANTIATE_FUNCTION_SERIALISED(void, vkCmdTraceRaysIndirect2KHR, VkCommandBuffer commandBuffer,
|
||||
VkDeviceAddress indirectDeviceAddress);
|
||||
|
||||
Reference in New Issue
Block a user