mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-03-09 18:10:29 +01:00
radv/sqtt: describe begin/end command buffers with user markers
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4031>
This commit is contained in:
parent
31ecf0b17d
commit
dcfc08f5b8
3 changed files with 108 additions and 0 deletions
|
|
@ -45,6 +45,63 @@ enum rgp_sqtt_marker_identifier {
|
||||||
RGP_SQTT_MARKER_IDENTIFIER_RESERVED6 = 0xF
|
RGP_SQTT_MARKER_IDENTIFIER_RESERVED6 = 0xF
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RGP SQ thread-tracing marker for the start of a command buffer. (Table 2)
|
||||||
|
*/
|
||||||
|
struct rgp_sqtt_marker_cb_start {
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
uint32_t identifier : 4;
|
||||||
|
uint32_t ext_dwords : 3;
|
||||||
|
uint32_t cb_id : 20;
|
||||||
|
uint32_t queue : 5;
|
||||||
|
};
|
||||||
|
uint32_t dword01;
|
||||||
|
};
|
||||||
|
union {
|
||||||
|
uint32_t device_id_low;
|
||||||
|
uint32_t dword02;
|
||||||
|
};
|
||||||
|
union {
|
||||||
|
uint32_t device_id_high;
|
||||||
|
uint32_t dword03;
|
||||||
|
};
|
||||||
|
union {
|
||||||
|
uint32_t queue_flags;
|
||||||
|
uint32_t dword04;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
static_assert(sizeof(struct rgp_sqtt_marker_cb_start) == 16,
|
||||||
|
"rgp_sqtt_marker_cb_start doesn't match RGP spec");
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* RGP SQ thread-tracing marker for the end of a command buffer. (Table 3)
|
||||||
|
*/
|
||||||
|
struct rgp_sqtt_marker_cb_end {
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
uint32_t identifier : 4;
|
||||||
|
uint32_t ext_dwords : 3;
|
||||||
|
uint32_t cb_id : 20;
|
||||||
|
uint32_t reserved : 5;
|
||||||
|
};
|
||||||
|
uint32_t dword01;
|
||||||
|
};
|
||||||
|
union {
|
||||||
|
uint32_t device_id_low;
|
||||||
|
uint32_t dword02;
|
||||||
|
};
|
||||||
|
union {
|
||||||
|
uint32_t device_id_high;
|
||||||
|
uint32_t dword03;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
static_assert(sizeof(struct rgp_sqtt_marker_cb_end) == 12,
|
||||||
|
"rgp_sqtt_marker_cb_end doesn't match RGP spec");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* API types used in RGP SQ thread-tracing markers for the "General API"
|
* API types used in RGP SQ thread-tracing markers for the "General API"
|
||||||
* packet.
|
* packet.
|
||||||
|
|
@ -145,6 +202,49 @@ radv_write_end_general_api_marker(struct radv_cmd_buffer *cmd_buffer,
|
||||||
radv_emit_thread_trace_userdata(cs, &marker, sizeof(marker) / 4);
|
radv_emit_thread_trace_userdata(cs, &marker, sizeof(marker) / 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
radv_describe_begin_cmd_buffer(struct radv_cmd_buffer *cmd_buffer)
|
||||||
|
{
|
||||||
|
uint64_t device_id = (uint64_t)cmd_buffer->device;
|
||||||
|
struct rgp_sqtt_marker_cb_start marker = {};
|
||||||
|
struct radeon_cmdbuf *cs = cmd_buffer->cs;
|
||||||
|
|
||||||
|
if (likely(!cmd_buffer->device->thread_trace_bo))
|
||||||
|
return;
|
||||||
|
|
||||||
|
marker.identifier = RGP_SQTT_MARKER_IDENTIFIER_CB_START;
|
||||||
|
marker.cb_id = 0;
|
||||||
|
marker.device_id_low = device_id;
|
||||||
|
marker.device_id_high = device_id >> 32;
|
||||||
|
marker.queue = cmd_buffer->queue_family_index;
|
||||||
|
marker.queue_flags = VK_QUEUE_COMPUTE_BIT |
|
||||||
|
VK_QUEUE_TRANSFER_BIT |
|
||||||
|
VK_QUEUE_SPARSE_BINDING_BIT;
|
||||||
|
|
||||||
|
if (cmd_buffer->queue_family_index == RADV_QUEUE_GENERAL)
|
||||||
|
marker.queue_flags |= VK_QUEUE_GRAPHICS_BIT;
|
||||||
|
|
||||||
|
radv_emit_thread_trace_userdata(cs, &marker, sizeof(marker) / 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
radv_describe_end_cmd_buffer(struct radv_cmd_buffer *cmd_buffer)
|
||||||
|
{
|
||||||
|
uint64_t device_id = (uint64_t)cmd_buffer->device;
|
||||||
|
struct rgp_sqtt_marker_cb_end marker = {};
|
||||||
|
struct radeon_cmdbuf *cs = cmd_buffer->cs;
|
||||||
|
|
||||||
|
if (likely(!cmd_buffer->device->thread_trace_bo))
|
||||||
|
return;
|
||||||
|
|
||||||
|
marker.identifier = RGP_SQTT_MARKER_IDENTIFIER_CB_END;
|
||||||
|
marker.cb_id = 0;
|
||||||
|
marker.device_id_low = device_id;
|
||||||
|
marker.device_id_high = device_id >> 32;
|
||||||
|
|
||||||
|
radv_emit_thread_trace_userdata(cs, &marker, sizeof(marker) / 4);
|
||||||
|
}
|
||||||
|
|
||||||
#define API_MARKER(cmd_name, args...) \
|
#define API_MARKER(cmd_name, args...) \
|
||||||
RADV_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer); \
|
RADV_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer); \
|
||||||
radv_write_begin_general_api_marker(cmd_buffer, ApiCmd##cmd_name); \
|
radv_write_begin_general_api_marker(cmd_buffer, ApiCmd##cmd_name); \
|
||||||
|
|
|
||||||
|
|
@ -3441,6 +3441,8 @@ VkResult radv_BeginCommandBuffer(
|
||||||
if (unlikely(cmd_buffer->device->trace_bo))
|
if (unlikely(cmd_buffer->device->trace_bo))
|
||||||
radv_cmd_buffer_trace_emit(cmd_buffer);
|
radv_cmd_buffer_trace_emit(cmd_buffer);
|
||||||
|
|
||||||
|
radv_describe_begin_cmd_buffer(cmd_buffer);
|
||||||
|
|
||||||
cmd_buffer->status = RADV_CMD_BUFFER_STATUS_RECORDING;
|
cmd_buffer->status = RADV_CMD_BUFFER_STATUS_RECORDING;
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
@ -3794,6 +3796,8 @@ VkResult radv_EndCommandBuffer(
|
||||||
*/
|
*/
|
||||||
si_cp_dma_wait_for_idle(cmd_buffer);
|
si_cp_dma_wait_for_idle(cmd_buffer);
|
||||||
|
|
||||||
|
radv_describe_end_cmd_buffer(cmd_buffer);
|
||||||
|
|
||||||
vk_free(&cmd_buffer->pool->alloc, cmd_buffer->state.attachments);
|
vk_free(&cmd_buffer->pool->alloc, cmd_buffer->state.attachments);
|
||||||
vk_free(&cmd_buffer->pool->alloc, cmd_buffer->state.subpass_sample_locs);
|
vk_free(&cmd_buffer->pool->alloc, cmd_buffer->state.subpass_sample_locs);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2419,6 +2419,10 @@ void radv_emit_thread_trace_userdata(struct radeon_cmdbuf *cs,
|
||||||
int radv_dump_thread_trace(struct radv_device *device,
|
int radv_dump_thread_trace(struct radv_device *device,
|
||||||
const struct radv_thread_trace *trace);
|
const struct radv_thread_trace *trace);
|
||||||
|
|
||||||
|
/* radv_sqtt_layer_.c */
|
||||||
|
void radv_describe_begin_cmd_buffer(struct radv_cmd_buffer *cmd_buffer);
|
||||||
|
void radv_describe_end_cmd_buffer(struct radv_cmd_buffer *cmd_buffer);
|
||||||
|
|
||||||
struct radeon_winsys_sem;
|
struct radeon_winsys_sem;
|
||||||
|
|
||||||
uint64_t radv_get_current_time(void);
|
uint64_t radv_get_current_time(void);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue