Module: Mesa
Branch: main
Commit: 3f14fd8578549e34db2f564396f300819b2ff10f
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3f14fd8578549e34db2f564396f300819b2ff10f

Author: Samuel Pitoiset <[email protected]>
Date:   Mon Apr 24 17:33:41 2023 +0200

radv: reserve command buffer index for SQTT

These indexes are used to match command buffers with queue events.

Signed-off-by: Samuel Pitoiset <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22670>

---

 src/amd/vulkan/layers/radv_sqtt_layer.c | 21 ++++++++++++++-------
 src/amd/vulkan/radv_private.h           |  2 ++
 2 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/src/amd/vulkan/layers/radv_sqtt_layer.c 
b/src/amd/vulkan/layers/radv_sqtt_layer.c
index ab0e331869c..d0afb8b580c 100644
--- a/src/amd/vulkan/layers/radv_sqtt_layer.c
+++ b/src/amd/vulkan/layers/radv_sqtt_layer.c
@@ -245,7 +245,7 @@ radv_write_event_marker(struct radv_cmd_buffer *cmd_buffer,
    marker.identifier = RGP_SQTT_MARKER_IDENTIFIER_EVENT;
    marker.api_type = api_type;
    marker.cmd_id = cmd_buffer->state.num_events++;
-   marker.cb_id = 0;
+   marker.cb_id = cmd_buffer->sqtt_cb_id;
 
    if (vertex_offset_user_data == UINT_MAX || instance_offset_user_data == 
UINT_MAX) {
       vertex_offset_user_data = 0;
@@ -272,7 +272,7 @@ radv_write_event_with_dims_marker(struct radv_cmd_buffer 
*cmd_buffer,
    marker.event.identifier = RGP_SQTT_MARKER_IDENTIFIER_EVENT;
    marker.event.api_type = api_type;
    marker.event.cmd_id = cmd_buffer->state.num_events++;
-   marker.event.cb_id = 0;
+   marker.event.cb_id = cmd_buffer->sqtt_cb_id;
    marker.event.has_thread_dims = 1;
 
    marker.thread_x = x;
@@ -320,8 +320,15 @@ radv_describe_begin_cmd_buffer(struct radv_cmd_buffer 
*cmd_buffer)
    if (likely(!cmd_buffer->device->thread_trace.bo))
       return;
 
+   /* Reserve a command buffer ID for SQTT. */
+   enum amd_ip_type ip_type =
+      radv_queue_family_to_ring(cmd_buffer->device->physical_device, 
cmd_buffer->qf);
+   union rgp_sqtt_marker_cb_id cb_id =
+      ac_sqtt_get_next_cmdbuf_id(&cmd_buffer->device->thread_trace, ip_type);
+   cmd_buffer->sqtt_cb_id = cb_id.all;
+
    marker.identifier = RGP_SQTT_MARKER_IDENTIFIER_CB_START;
-   marker.cb_id = 0;
+   marker.cb_id = cmd_buffer->sqtt_cb_id;
    marker.device_id_low = device_id;
    marker.device_id_high = device_id >> 32;
    marker.queue = cmd_buffer->qf;
@@ -343,7 +350,7 @@ radv_describe_end_cmd_buffer(struct radv_cmd_buffer 
*cmd_buffer)
       return;
 
    marker.identifier = RGP_SQTT_MARKER_IDENTIFIER_CB_END;
-   marker.cb_id = 0;
+   marker.cb_id = cmd_buffer->sqtt_cb_id;
    marker.device_id_low = device_id;
    marker.device_id_high = device_id >> 32;
 
@@ -407,7 +414,7 @@ radv_describe_barrier_end_delayed(struct radv_cmd_buffer 
*cmd_buffer)
    cmd_buffer->state.pending_sqtt_barrier_end = false;
 
    marker.identifier = RGP_SQTT_MARKER_IDENTIFIER_BARRIER_END;
-   marker.cb_id = 0;
+   marker.cb_id = cmd_buffer->sqtt_cb_id;
 
    marker.num_layout_transitions = cmd_buffer->state.num_layout_transitions;
 
@@ -461,7 +468,7 @@ radv_describe_barrier_start(struct radv_cmd_buffer 
*cmd_buffer, enum rgp_barrier
    cmd_buffer->state.sqtt_flush_bits = 0;
 
    marker.identifier = RGP_SQTT_MARKER_IDENTIFIER_BARRIER_START;
-   marker.cb_id = 0;
+   marker.cb_id = cmd_buffer->sqtt_cb_id;
    marker.dword02 = reason;
 
    radv_emit_thread_trace_userdata(cmd_buffer, &marker, sizeof(marker) / 4);
@@ -507,7 +514,7 @@ radv_describe_pipeline_bind(struct radv_cmd_buffer 
*cmd_buffer,
       return;
 
    marker.identifier = RGP_SQTT_MARKER_IDENTIFIER_BIND_PIPELINE;
-   marker.cb_id = 0;
+   marker.cb_id = cmd_buffer->sqtt_cb_id;
    marker.bind_point = pipelineBindPoint;
    marker.api_pso_hash[0] = pipeline->pipeline_hash;
    marker.api_pso_hash[1] = pipeline->pipeline_hash >> 32;
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index e5182529a0c..aad1e0b4df9 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -1809,6 +1809,8 @@ struct radv_cmd_buffer {
    } video;
 
    uint64_t shader_upload_seq;
+
+   uint32_t sqtt_cb_id;
 };
 
 static inline bool

Reply via email to