From 8866e6582d6697ac138bec30e4cef3034c0b4703 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Wed, 7 Sep 2022 14:29:56 +0200 Subject: [PATCH 1/3] radv: emit SQTT markers for RT related commands This reports RT commands like vkCmdTraceRaysKHR and vkCmdBuildAccelerationStructuresKHR in RGP. Signed-off-by: Samuel Pitoiset Reviewed-by: Bas Nieuwenhuizen Part-of: --- src/amd/common/ac_sqtt.h | 8 +++ src/amd/vulkan/layers/radv_sqtt_layer.c | 84 ++++++++++++++++++++++++- 2 files changed, 89 insertions(+), 3 deletions(-) diff --git a/src/amd/common/ac_sqtt.h b/src/amd/common/ac_sqtt.h index 05798b7e1da1..6c1709a5730c 100644 --- a/src/amd/common/ac_sqtt.h +++ b/src/amd/common/ac_sqtt.h @@ -289,6 +289,14 @@ enum rgp_sqtt_marker_event_type EventInternalUnknown = 26, EventCmdDrawIndirectCount = 27, EventCmdDrawIndexedIndirectCount = 28, + /* gap */ + EventCmdTraceRaysKHR = 30, + EventCmdTraceRaysIndirectKHR = 31, + EventCmdBuildAccelerationStructuresKHR = 32, + EventCmdBuildAccelerationStructuresIndirectKHR = 33, + EventCmdCopyAccelerationStructureKHR = 34, + EventCmdCopyAccelerationStructureToMemoryKHR = 35, + EventCmdCopyMemoryToAccelerationStructureKHR = 36, EventInvalid = 0xffffffff }; diff --git a/src/amd/vulkan/layers/radv_sqtt_layer.c b/src/amd/vulkan/layers/radv_sqtt_layer.c index be2094b68ebd..27ded222a779 100644 --- a/src/amd/vulkan/layers/radv_sqtt_layer.c +++ b/src/amd/vulkan/layers/radv_sqtt_layer.c @@ -414,15 +414,19 @@ sqtt_QueuePresentKHR(VkQueue _queue, const VkPresentInfoKHR *pPresentInfo) return VK_SUCCESS; } -#define EVENT_MARKER_ALIAS(cmd_name, api_name, ...) \ +#define EVENT_MARKER_BASE(cmd_name, api_name, event_name, ...) \ RADV_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer); \ radv_write_begin_general_api_marker(cmd_buffer, ApiCmd##api_name); \ - cmd_buffer->state.current_event_type = EventCmd##api_name; \ + cmd_buffer->state.current_event_type = EventCmd##event_name; \ radv_Cmd##cmd_name(__VA_ARGS__); \ cmd_buffer->state.current_event_type = EventInternalUnknown; \ radv_write_end_general_api_marker(cmd_buffer, ApiCmd##api_name); -#define EVENT_MARKER(cmd_name, ...) EVENT_MARKER_ALIAS(cmd_name, cmd_name, __VA_ARGS__); +#define EVENT_MARKER_ALIAS(cmd_name, api_name, ...) \ + EVENT_MARKER_BASE(cmd_name, api_name, api_name, __VA_ARGS__); + +#define EVENT_MARKER(cmd_name, ...) \ + EVENT_MARKER_ALIAS(cmd_name, cmd_name, __VA_ARGS__); VKAPI_ATTR void VKAPI_CALL sqtt_CmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, @@ -596,7 +600,81 @@ sqtt_CmdCopyQueryPoolResults(VkCommandBuffer commandBuffer, VkQueryPool queryPoo dstOffset, stride, flags); } +#define EVENT_RT_MARKER(cmd_name, ...) \ + EVENT_MARKER_BASE(cmd_name, Dispatch, cmd_name, __VA_ARGS__); + +#define EVENT_RT_MARKER_ALIAS(cmd_name, event_name, ...) \ + EVENT_MARKER_BASE(cmd_name, Dispatch, event_name, __VA_ARGS__); + +VKAPI_ATTR void VKAPI_CALL +sqtt_CmdTraceRaysKHR(VkCommandBuffer commandBuffer, + const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable, + const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable, + const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable, + const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable, + uint32_t width, uint32_t height, uint32_t depth) +{ + EVENT_RT_MARKER(TraceRaysKHR, commandBuffer, pRaygenShaderBindingTable, pMissShaderBindingTable, + pHitShaderBindingTable, pCallableShaderBindingTable, width, height, depth); +} + +VKAPI_ATTR void VKAPI_CALL +sqtt_CmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer, + const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable, + const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable, + const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable, + const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable, + VkDeviceAddress indirectDeviceAddress) +{ + EVENT_RT_MARKER(TraceRaysIndirectKHR, commandBuffer, pRaygenShaderBindingTable, + pMissShaderBindingTable, pHitShaderBindingTable, pCallableShaderBindingTable, + indirectDeviceAddress); +} + +VKAPI_ATTR void VKAPI_CALL +sqtt_CmdTraceRaysIndirect2KHR(VkCommandBuffer commandBuffer, VkDeviceAddress indirectDeviceAddress) +{ + EVENT_RT_MARKER_ALIAS(TraceRaysIndirect2KHR, TraceRaysIndirectKHR, commandBuffer, + indirectDeviceAddress); +} + +VKAPI_ATTR void VKAPI_CALL +sqtt_CmdBuildAccelerationStructuresKHR(VkCommandBuffer commandBuffer, uint32_t infoCount, + const VkAccelerationStructureBuildGeometryInfoKHR *pInfos, + const VkAccelerationStructureBuildRangeInfoKHR *const *ppBuildRangeInfos) +{ + EVENT_RT_MARKER(BuildAccelerationStructuresKHR, commandBuffer, infoCount, pInfos, + ppBuildRangeInfos); +} + +VKAPI_ATTR void VKAPI_CALL +sqtt_CmdCopyAccelerationStructureKHR(VkCommandBuffer commandBuffer, + const VkCopyAccelerationStructureInfoKHR *pInfo) +{ + EVENT_RT_MARKER(CopyAccelerationStructureKHR, commandBuffer, pInfo); +} + +VKAPI_ATTR void VKAPI_CALL +sqtt_CmdCopyAccelerationStructureToMemoryKHR(VkCommandBuffer commandBuffer, + const VkCopyAccelerationStructureToMemoryInfoKHR *pInfo) +{ + EVENT_RT_MARKER(CopyAccelerationStructureToMemoryKHR, commandBuffer, pInfo); +} + +VKAPI_ATTR void VKAPI_CALL +sqtt_CmdCopyMemoryToAccelerationStructureKHR(VkCommandBuffer commandBuffer, + const VkCopyMemoryToAccelerationStructureInfoKHR *pInfo) +{ + EVENT_RT_MARKER(CopyMemoryToAccelerationStructureKHR, commandBuffer, pInfo); +} + +#undef EVENT_RT_MARKER_ALIAS +#undef EVENT_RT_MARKER + #undef EVENT_MARKER +#undef EVENT_MARKER_ALIAS +#undef EVENT_MARKER_BASE + #define API_MARKER_ALIAS(cmd_name, api_name, ...) \ RADV_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer); \ radv_write_begin_general_api_marker(cmd_buffer, ApiCmd##api_name); \ -- GitLab From 2e04aeb1e5297bceb58d7400dcd38889a8fc0e80 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Thu, 8 Sep 2022 15:01:51 +0200 Subject: [PATCH 2/3] radv: capture RT pipelines from the SQTT layer They were just not recorded. Signed-off-by: Samuel Pitoiset Reviewed-by: Bas Nieuwenhuizen Part-of: --- src/amd/vulkan/layers/radv_sqtt_layer.c | 35 +++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/amd/vulkan/layers/radv_sqtt_layer.c b/src/amd/vulkan/layers/radv_sqtt_layer.c index 27ded222a779..1d169b1159aa 100644 --- a/src/amd/vulkan/layers/radv_sqtt_layer.c +++ b/src/amd/vulkan/layers/radv_sqtt_layer.c @@ -1160,6 +1160,41 @@ fail: return result; } +VKAPI_ATTR VkResult VKAPI_CALL +sqtt_CreateRayTracingPipelinesKHR(VkDevice _device, VkDeferredOperationKHR deferredOperation, + VkPipelineCache pipelineCache, uint32_t count, + const VkRayTracingPipelineCreateInfoKHR *pCreateInfos, + const VkAllocationCallbacks *pAllocator, VkPipeline *pPipelines) +{ + RADV_FROM_HANDLE(radv_device, device, _device); + VkResult result; + + result = radv_CreateRayTracingPipelinesKHR(_device, deferredOperation, pipelineCache, count, + pCreateInfos, pAllocator, pPipelines); + if (result != VK_SUCCESS) + return result; + + for (unsigned i = 0; i < count; i++) { + RADV_FROM_HANDLE(radv_pipeline, pipeline, pPipelines[i]); + + if (!pipeline) + continue; + + result = radv_register_pipeline(device, pipeline); + if (result != VK_SUCCESS) + goto fail; + } + + return VK_SUCCESS; + +fail: + for (unsigned i = 0; i < count; i++) { + sqtt_DestroyPipeline(_device, pPipelines[i], pAllocator); + pPipelines[i] = VK_NULL_HANDLE; + } + return result; +} + VKAPI_ATTR void VKAPI_CALL sqtt_DestroyPipeline(VkDevice _device, VkPipeline _pipeline, const VkAllocationCallbacks *pAllocator) -- GitLab From a14354cf21e4f4361ff396471891082b0cd7b3d9 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Thu, 8 Sep 2022 16:24:25 +0200 Subject: [PATCH 3/3] radv: fix reporting RT shaders in RGP RGP expects a compute bind point. This allows it to show ISA of RT shaders and also enables instruction timing. Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/7213 Signed-off-by: Samuel Pitoiset Reviewed-by: Bas Nieuwenhuizen Part-of: --- src/amd/vulkan/layers/radv_sqtt_layer.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/amd/vulkan/layers/radv_sqtt_layer.c b/src/amd/vulkan/layers/radv_sqtt_layer.c index 1d169b1159aa..3775b9cd9ef5 100644 --- a/src/amd/vulkan/layers/radv_sqtt_layer.c +++ b/src/amd/vulkan/layers/radv_sqtt_layer.c @@ -691,7 +691,14 @@ sqtt_CmdBindPipeline(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipeline API_MARKER(BindPipeline, commandBuffer, pipelineBindPoint, _pipeline); - radv_describe_pipeline_bind(cmd_buffer, pipelineBindPoint, pipeline); + if (pipelineBindPoint == VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR) { + /* RGP seems to expect a compute bind point to detect and report RT pipelines, which makes + * sense somehow given that RT shaders are compiled to an unified compute shader. + */ + radv_describe_pipeline_bind(cmd_buffer, VK_PIPELINE_BIND_POINT_COMPUTE, pipeline); + } else { + radv_describe_pipeline_bind(cmd_buffer, pipelineBindPoint, pipeline); + } } VKAPI_ATTR void VKAPI_CALL -- GitLab