radeonsi/sqtt: forward string markers to sqtt

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8746>
This commit is contained in:
Pierre-Eric Pelloux-Prayer 2021-01-27 11:59:59 +01:00 committed by Marge Bot
parent 3bd5120a57
commit 5dc823304b
4 changed files with 66 additions and 0 deletions

View file

@ -418,4 +418,35 @@ struct rgp_sqtt_marker_layout_transition {
static_assert(sizeof(struct rgp_sqtt_marker_layout_transition) == 8,
"rgp_sqtt_marker_layout_transition doesn't match RGP spec");
/**
* "User Event" RGP SQTT instrumentation marker (Table 8)
*/
struct rgp_sqtt_marker_user_event {
union {
struct {
uint32_t identifier : 4;
uint32_t reserved0 : 8;
uint32_t data_type : 8;
uint32_t reserved1 : 12;
};
uint32_t dword01;
};
};
struct rgp_sqtt_marker_user_event_with_length {
struct rgp_sqtt_marker_user_event user_event;
uint32_t length;
};
static_assert(sizeof(struct rgp_sqtt_marker_user_event) == 4,
"rgp_sqtt_marker_user_event doesn't match RGP spec");
enum rgp_sqtt_marker_user_event_type
{
UserEventTrigger = 0,
UserEventPop,
UserEventPush,
UserEventObjectName,
};
#endif

View file

@ -386,6 +386,9 @@ static void si_emit_string_marker(struct pipe_context *ctx, const char *string,
dd_parse_apitrace_marker(string, len, &sctx->apitrace_call_number);
if (sctx->thread_trace_enabled)
si_write_user_event(sctx, &sctx->gfx_cs, UserEventTrigger, string, len);
if (sctx->log)
u_log_printf(sctx->log, "\nString marker: %*s\n", len, string);
}

View file

@ -1569,6 +1569,10 @@ void
si_write_event_with_dims_marker(struct si_context* sctx, struct radeon_cmdbuf *rcs,
enum rgp_sqtt_marker_event_type api_type,
uint32_t x, uint32_t y, uint32_t z);
void
si_write_user_event(struct si_context* sctx, struct radeon_cmdbuf *rcs,
enum rgp_sqtt_marker_user_event_type type,
const char *str, int len);
bool si_init_thread_trace(struct si_context *sctx);
void si_destroy_thread_trace(struct si_context *sctx);
void si_handle_thread_trace(struct si_context *sctx, struct radeon_cmdbuf *rcs);

View file

@ -750,3 +750,31 @@ si_write_event_with_dims_marker(struct si_context* sctx, struct radeon_cmdbuf *r
si_emit_thread_trace_userdata(sctx, rcs, &marker, sizeof(marker) / 4);
sctx->sqtt_next_event = EventInvalid;
}
void
si_write_user_event(struct si_context* sctx, struct radeon_cmdbuf *rcs,
enum rgp_sqtt_marker_user_event_type type,
const char *str, int len)
{
if (type == UserEventPop) {
assert (str == NULL);
struct rgp_sqtt_marker_user_event marker = { 0 };
marker.identifier = RGP_SQTT_MARKER_IDENTIFIER_USER_EVENT;
marker.data_type = type;
si_emit_thread_trace_userdata(sctx, rcs, &marker, sizeof(marker) / 4);
} else {
assert (str != NULL);
struct rgp_sqtt_marker_user_event_with_length marker = { 0 };
marker.user_event.identifier = RGP_SQTT_MARKER_IDENTIFIER_USER_EVENT;
marker.user_event.data_type = type;
marker.length = align(len, 4);
uint8_t *buffer = alloca(sizeof(marker) + marker.length);
memset(buffer, 0, sizeof(marker) + marker.length);
memcpy(buffer, &marker, sizeof(marker));
memcpy(buffer + sizeof(marker), str, len);
si_emit_thread_trace_userdata(sctx, rcs, buffer, sizeof(marker) / 4 + marker.length / 4);
}
}