From 169583a4addf7fd5a59b3897386d561c23b36a60 Mon Sep 17 00:00:00 2001 From: Friedrich Vock Date: Wed, 7 Jun 2023 09:54:50 +0200 Subject: [PATCH] radv/rt: Rework radv_GetRayTracingCaptureReplayShaderGroupHandlesKHR Part-of: --- src/amd/vulkan/radv_pipeline_rt.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/amd/vulkan/radv_pipeline_rt.c b/src/amd/vulkan/radv_pipeline_rt.c index e9d34f7..07164b7 100644 --- a/src/amd/vulkan/radv_pipeline_rt.c +++ b/src/amd/vulkan/radv_pipeline_rt.c @@ -788,8 +788,24 @@ radv_GetRayTracingShaderGroupStackSizeKHR(VkDevice device, VkPipeline _pipeline, } VKAPI_ATTR VkResult VKAPI_CALL -radv_GetRayTracingCaptureReplayShaderGroupHandlesKHR(VkDevice device, VkPipeline pipeline, uint32_t firstGroup, +radv_GetRayTracingCaptureReplayShaderGroupHandlesKHR(VkDevice device, VkPipeline _pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void *pData) { - return radv_GetRayTracingShaderGroupHandlesKHR(device, pipeline, firstGroup, groupCount, dataSize, pData); + RADV_FROM_HANDLE(radv_pipeline, pipeline, _pipeline); + struct radv_ray_tracing_pipeline *rt_pipeline = radv_pipeline_to_ray_tracing(pipeline); + struct radv_rt_capture_replay_handle *data = pData; + + memset(data, 0, groupCount * sizeof(struct radv_rt_capture_replay_handle)); + + for (uint32_t i = 0; i < groupCount; ++i) { + uint32_t recursive_shader = rt_pipeline->groups[firstGroup + i].recursive_shader; + if (recursive_shader != VK_SHADER_UNUSED_KHR) { + struct radv_shader *shader = + container_of(rt_pipeline->stages[recursive_shader].shader, struct radv_shader, base); + data[i].recursive_shader_alloc = radv_serialize_shader_arena_block(shader->alloc); + } + data[i].non_recursive_idx = rt_pipeline->groups[firstGroup + i].handle.any_hit_index; + } + + return VK_SUCCESS; } -- 2.7.4