From 4586451b2dde802ebe00d1410b30a8772b8afde0 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Fri, 12 Apr 2024 09:02:01 +0200 Subject: [PATCH] radv: add missing SQTT markers when an indirect indexed draw is used with DGC Since DGC preprocessing for IBO is supported, the driver generates an indexed indirect draw but SQTT markers were missing and this introduced complete non-sense in RGP captures. Fixes: e59a16bbb8f ("radv: use an indirect draw when IBO isn't updated as part of DGC") Signed-off-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_device_generated_commands.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/amd/vulkan/radv_device_generated_commands.c b/src/amd/vulkan/radv_device_generated_commands.c index 3b59b07eeb2..82592927d32 100644 --- a/src/amd/vulkan/radv_device_generated_commands.c +++ b/src/amd/vulkan/radv_device_generated_commands.c @@ -641,7 +641,7 @@ dgc_emit_pkt3_draw_indirect(nir_builder *b, struct dgc_cmdbuf *cs, nir_def *vtx_ static void dgc_emit_draw_indirect(nir_builder *b, struct dgc_cmdbuf *cs, nir_def *stream_base, nir_def *draw_params_offset, - bool indexed) + nir_def *sequence_id, bool indexed) { nir_def *vtx_base_sgpr = load_param16(b, vtx_base_sgpr); nir_def *stream_offset = nir_iadd(b, draw_params_offset, stream_base); @@ -649,8 +649,14 @@ dgc_emit_draw_indirect(nir_builder *b, struct dgc_cmdbuf *cs, nir_def *stream_ba nir_def *stream_addr = load_param64(b, stream_addr); nir_def *va = nir_iadd(b, stream_addr, nir_u2u64(b, stream_offset)); + dgc_emit_sqtt_begin_api_marker(b, cs, indexed ? ApiCmdDrawIndexedIndirect : ApiCmdDrawIndirect); + dgc_emit_sqtt_marker_event(b, cs, sequence_id, indexed ? EventCmdDrawIndexedIndirect : EventCmdDrawIndirect); + dgc_emit_pkt3_set_base(b, cs, va); dgc_emit_pkt3_draw_indirect(b, cs, vtx_base_sgpr, indexed); + + dgc_emit_sqtt_thread_trace_marker(b, cs); + dgc_emit_sqtt_end_api_marker(b, cs, indexed ? ApiCmdDrawIndexedIndirect : ApiCmdDrawIndirect); } static nir_def * @@ -1632,7 +1638,8 @@ build_dgc_prepare_shader(struct radv_device *dev) } nir_push_else(&b, NULL); { - dgc_emit_draw_indirect(&b, &cmd_buf, stream_base, load_param16(&b, draw_params_offset), true); + dgc_emit_draw_indirect(&b, &cmd_buf, stream_base, load_param16(&b, draw_params_offset), sequence_id, + true); } nir_pop_if(&b, NULL);