diff --git a/src/amd/common/ac_sqtt.h b/src/amd/common/ac_sqtt.h index 05798b7e1da19f6f80e5877881e17d33eb245840..6c1709a5730caafebd5e9c180c0abc91122f2f04 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 be2094b68ebd24750beeb288c20a683f4157d910..3775b9cd9ef57bc8f9b622aa8ebaf549c1d45e1e 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); \ @@ -613,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 @@ -1082,6 +1167,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)