From 881f4d6036df17bdd9ea43284e939745ac9d497f 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: (cherry picked from commit 4586451b2dde802ebe00d1410b30a8772b8afde0) --- .pick_status.json | 2 +- src/amd/vulkan/radv_device_generated_commands.c | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index c7838197287..8245fb62f49 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -2714,7 +2714,7 @@ "description": "radv: add missing SQTT markers when an indirect indexed draw is used with DGC", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "e59a16bbb8fb770bc11bbacfa2254d6a958c7cb8", "notes": null diff --git a/src/amd/vulkan/radv_device_generated_commands.c b/src/amd/vulkan/radv_device_generated_commands.c index 486be831fa8..4b8b3d11d68 100644 --- a/src/amd/vulkan/radv_device_generated_commands.c +++ b/src/amd/vulkan/radv_device_generated_commands.c @@ -589,7 +589,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); @@ -597,8 +597,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 * @@ -1307,7 +1313,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);