mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-06 13:10:10 +01:00
radv: emit pipeline bind markers for SQTT
I suspect this marker to be useful for correlating pipeline shaders. 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/8995>
This commit is contained in:
parent
8721a6cbf2
commit
335c8b68d2
4 changed files with 52 additions and 0 deletions
|
|
@ -449,4 +449,30 @@ enum rgp_sqtt_marker_user_event_type
|
|||
UserEventObjectName,
|
||||
};
|
||||
|
||||
/**
|
||||
* "Pipeline bind" RGP SQTT instrumentation marker (Table 12)
|
||||
*/
|
||||
struct rgp_sqtt_marker_pipeline_bind {
|
||||
union {
|
||||
struct {
|
||||
uint32_t identifier : 4;
|
||||
uint32_t ext_dwords : 3;
|
||||
uint32_t bind_point : 1;
|
||||
uint32_t cb_id : 20;
|
||||
uint32_t reserved : 4;
|
||||
};
|
||||
uint32_t dword01;
|
||||
};
|
||||
union {
|
||||
uint32_t api_pso_hash[2];
|
||||
struct {
|
||||
uint32_t dword02;
|
||||
uint32_t dword03;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
static_assert(sizeof(struct rgp_sqtt_marker_pipeline_bind) == 12,
|
||||
"rgp_sqtt_marker_pipeline_bind doesn't match RGP spec");
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -290,6 +290,27 @@ radv_describe_layout_transition(struct radv_cmd_buffer *cmd_buffer,
|
|||
cmd_buffer->state.num_layout_transitions++;
|
||||
}
|
||||
|
||||
void
|
||||
radv_describe_pipeline_bind(struct radv_cmd_buffer *cmd_buffer,
|
||||
VkPipelineBindPoint pipelineBindPoint,
|
||||
struct radv_pipeline *pipeline)
|
||||
{
|
||||
struct rgp_sqtt_marker_pipeline_bind marker = {0};
|
||||
struct radeon_cmdbuf *cs = cmd_buffer->cs;
|
||||
uint64_t pipeline_idx = (uintptr_t)pipeline;
|
||||
|
||||
if (likely(!cmd_buffer->device->thread_trace.bo))
|
||||
return;
|
||||
|
||||
marker.identifier = RGP_SQTT_MARKER_IDENTIFIER_BIND_PIPELINE;
|
||||
marker.cb_id = 0;
|
||||
marker.bind_point = pipelineBindPoint;
|
||||
marker.api_pso_hash[0] = pipeline_idx;
|
||||
marker.api_pso_hash[1] = pipeline_idx >> 32;
|
||||
|
||||
radv_emit_thread_trace_userdata(cmd_buffer->device, cs, &marker, sizeof(marker) / 4);
|
||||
}
|
||||
|
||||
/* TODO: Improve the way to trigger capture (overlay, etc). */
|
||||
static void
|
||||
radv_handle_thread_trace(VkQueue _queue)
|
||||
|
|
|
|||
|
|
@ -4478,6 +4478,8 @@ void radv_CmdBindPipeline(
|
|||
assert(!"invalid bind point");
|
||||
break;
|
||||
}
|
||||
|
||||
radv_describe_pipeline_bind(cmd_buffer, pipelineBindPoint, pipeline);
|
||||
}
|
||||
|
||||
void radv_CmdSetViewport(
|
||||
|
|
|
|||
|
|
@ -2598,6 +2598,9 @@ void radv_describe_barrier_end(struct radv_cmd_buffer *cmd_buffer);
|
|||
void radv_describe_barrier_end_delayed(struct radv_cmd_buffer *cmd_buffer);
|
||||
void radv_describe_layout_transition(struct radv_cmd_buffer *cmd_buffer,
|
||||
const struct radv_barrier_data *barrier);
|
||||
void radv_describe_pipeline_bind(struct radv_cmd_buffer *cmd_buffer,
|
||||
VkPipelineBindPoint pipelineBindPoint,
|
||||
struct radv_pipeline *pipeline);
|
||||
|
||||
struct radeon_winsys_sem;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue