From 5d51ccd7d16b210d475b2b65c334b8efccfb639f Mon Sep 17 00:00:00 2001 From: Yogesh Mohan Marimuthu Date: Fri, 29 Jan 2021 15:58:45 +0530 Subject: [PATCH] ac/rgp,radeonsi,radv: pass struct thread_trace_data to ac_sqtt_dump_data() struct thread_trace_data holds struct rgp_code_object, struct rgp_loader_events, struct rgp_pso_correlation data. This data is required in function ac_sqtt_dump_data(). This patch makes the code changes required to pass struct thread_trace_data to function ac_sqtt_dump_data(). Signed-off-by: Yogesh Mohan Marimuthu Reviewed-by: Samuel Pitoiset Acked-by: Pierre-Eric Pelloux-Prayer Part-of: --- src/amd/common/ac_rgp.c | 10 +++++++--- src/amd/common/ac_rgp.h | 3 --- src/amd/common/ac_sqtt.h | 5 +++++ src/amd/vulkan/layers/radv_sqtt_layer.c | 4 +++- src/gallium/drivers/radeonsi/si_sqtt.c | 2 +- 5 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/amd/common/ac_rgp.c b/src/amd/common/ac_rgp.c index 4c61ddb1b43..d518a7fbdd0 100644 --- a/src/amd/common/ac_rgp.c +++ b/src/amd/common/ac_rgp.c @@ -587,7 +587,9 @@ static void ac_sqtt_fill_sqtt_data(struct sqtt_file_chunk_sqtt_data *chunk, int3 } static void ac_sqtt_dump_data(struct radeon_info *rad_info, - const struct ac_thread_trace *thread_trace, FILE *output) + const struct ac_thread_trace *thread_trace, + struct ac_thread_trace_data *thread_trace_data, + FILE *output) { struct sqtt_file_chunk_asic_info asic_info = {0}; struct sqtt_file_chunk_cpu_info cpu_info = {0}; @@ -640,7 +642,9 @@ static void ac_sqtt_dump_data(struct radeon_info *rad_info, } } -int ac_dump_thread_trace(struct radeon_info *info, const struct ac_thread_trace *thread_trace) +int ac_dump_thread_trace(struct radeon_info *info, + const struct ac_thread_trace *thread_trace, + struct ac_thread_trace_data *thread_trace_data) { char filename[2048]; struct tm now; @@ -658,7 +662,7 @@ int ac_dump_thread_trace(struct radeon_info *info, const struct ac_thread_trace if (!f) return -1; - ac_sqtt_dump_data(info, thread_trace, f); + ac_sqtt_dump_data(info, thread_trace, thread_trace_data, f); fprintf(stderr, "Thread trace capture saved to '%s'\n", filename); diff --git a/src/amd/common/ac_rgp.h b/src/amd/common/ac_rgp.h index bfff5709a34..0aa0fd5ef33 100644 --- a/src/amd/common/ac_rgp.h +++ b/src/amd/common/ac_rgp.h @@ -105,9 +105,6 @@ struct rgp_pso_correlation { simple_mtx_t lock; }; -int -ac_dump_thread_trace(struct radeon_info *info, - const struct ac_thread_trace *thread_trace); void ac_rgp_file_write_elf_object(FILE *output, size_t file_elf_start, struct rgp_code_object_record *record, diff --git a/src/amd/common/ac_sqtt.h b/src/amd/common/ac_sqtt.h index 28ffbf011e9..4b8e282c972 100644 --- a/src/amd/common/ac_sqtt.h +++ b/src/amd/common/ac_sqtt.h @@ -92,6 +92,11 @@ uint32_t ac_get_expected_buffer_size(struct radeon_info *rad_info, const struct ac_thread_trace_info *info); +int +ac_dump_thread_trace(struct radeon_info *info, + const struct ac_thread_trace *thread_trace, + struct ac_thread_trace_data *thread_trace_data); + /** * Identifiers for RGP SQ thread-tracing markers (Table 1) */ diff --git a/src/amd/vulkan/layers/radv_sqtt_layer.c b/src/amd/vulkan/layers/radv_sqtt_layer.c index f719db3a034..8a7590ae970 100644 --- a/src/amd/vulkan/layers/radv_sqtt_layer.c +++ b/src/amd/vulkan/layers/radv_sqtt_layer.c @@ -361,7 +361,9 @@ radv_handle_thread_trace(VkQueue _queue) radv_QueueWaitIdle(_queue); if (radv_get_thread_trace(queue, &thread_trace)) - ac_dump_thread_trace(&queue->device->physical_device->rad_info, &thread_trace); + ac_dump_thread_trace(&queue->device->physical_device->rad_info, + &thread_trace, + &queue->device->thread_trace); } else { bool frame_trigger = num_frames == queue->device->thread_trace.start_frame; bool file_trigger = false; diff --git a/src/gallium/drivers/radeonsi/si_sqtt.c b/src/gallium/drivers/radeonsi/si_sqtt.c index f86417ab54f..8fc751b9498 100644 --- a/src/gallium/drivers/radeonsi/si_sqtt.c +++ b/src/gallium/drivers/radeonsi/si_sqtt.c @@ -638,7 +638,7 @@ si_handle_thread_trace(struct si_context *sctx, struct radeon_cmdbuf *rcs) /* Wait for SQTT to finish and read back the bo */ if (sctx->ws->fence_wait(sctx->ws, sctx->last_sqtt_fence, PIPE_TIMEOUT_INFINITE) && si_get_thread_trace(sctx, &thread_trace)) { - ac_dump_thread_trace(&sctx->screen->info, &thread_trace); + ac_dump_thread_trace(&sctx->screen->info, &thread_trace, sctx->thread_trace); } else { fprintf(stderr, "Failed to read the trace\n"); }