mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 19:58:09 +02:00
freedreno: add support for markers.
Signed-off-by: amber@igalia.com Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20727>
This commit is contained in:
parent
ab9dd18b68
commit
a6ac4cbae8
3 changed files with 66 additions and 4 deletions
|
|
@ -243,6 +243,58 @@ fd_emit_string_marker(struct pipe_context *pctx, const char *string,
|
|||
fd_batch_reference(&batch, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
fd_cs_magic_write_string(void *cs, struct u_trace_context *utctx, int magic,
|
||||
const char *fmt, va_list args)
|
||||
{
|
||||
struct fd_context *ctx =
|
||||
container_of(utctx, struct fd_context, trace_context);
|
||||
int fmt_len = vsnprintf(NULL, 0, fmt, args);
|
||||
int len = 4 + fmt_len + 1;
|
||||
char *string = (char *)malloc(len);
|
||||
|
||||
/* format: <magic><formatted string>\0 */
|
||||
*(uint32_t *)string = magic;
|
||||
vsnprintf(string + 4, fmt_len + 1, fmt, args);
|
||||
|
||||
if (ctx->screen->gen >= 5) {
|
||||
fd_emit_string5((struct fd_ringbuffer *)cs, string, len);
|
||||
} else {
|
||||
fd_emit_string((struct fd_ringbuffer *)cs, string, len);
|
||||
}
|
||||
free(string);
|
||||
}
|
||||
|
||||
void
|
||||
fd_cs_trace_msg(struct u_trace_context *utctx, void *cs, const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
int magic = CP_NOP_MESG;
|
||||
fd_cs_magic_write_string(cs, utctx, magic, fmt, args);
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
void
|
||||
fd_cs_trace_start(struct u_trace_context *utctx, void *cs, const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
int magic = CP_NOP_BEGN;
|
||||
fd_cs_magic_write_string(cs, utctx, magic, fmt, args);
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
void
|
||||
fd_cs_trace_end(struct u_trace_context *utctx, void *cs, const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
int magic = CP_NOP_END;
|
||||
fd_cs_magic_write_string(cs, utctx, magic, fmt, args);
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
/**
|
||||
* If we have a pending fence_server_sync() (GPU side sync), flush now.
|
||||
* The alternative to try to track this with batch dependencies gets
|
||||
|
|
|
|||
|
|
@ -716,6 +716,13 @@ void fd_context_setup_common_vbos(struct fd_context *ctx);
|
|||
void fd_context_cleanup_common_vbos(struct fd_context *ctx);
|
||||
void fd_emit_string(struct fd_ringbuffer *ring, const char *string, int len);
|
||||
void fd_emit_string5(struct fd_ringbuffer *ring, const char *string, int len);
|
||||
__attribute__((format(printf, 3, 4))) void
|
||||
fd_cs_trace_msg(struct u_trace_context *utctx, void *cs, const char *fmt, ...);
|
||||
__attribute__((format(printf, 3, 4))) void
|
||||
fd_cs_trace_start(struct u_trace_context *utctx, void *cs, const char *fmt,
|
||||
...);
|
||||
__attribute__((format(printf, 3, 4))) void
|
||||
fd_cs_trace_end(struct u_trace_context *utctx, void *cs, const char *fmt, ...);
|
||||
|
||||
struct pipe_context *fd_context_init(struct fd_context *ctx,
|
||||
struct pipe_screen *pscreen,
|
||||
|
|
|
|||
|
|
@ -62,10 +62,12 @@ def begin_end_tp(name, args=[], tp_struct=None, tp_print=None,
|
|||
args=args,
|
||||
tp_struct=tp_struct,
|
||||
tp_perfetto='fd_start_{0}'.format(name),
|
||||
tp_print=tp_print)
|
||||
tp_print=tp_print,
|
||||
tp_markers='fd_cs_trace_start')
|
||||
Tracepoint('end_{0}'.format(name),
|
||||
toggle_name=name,
|
||||
tp_perfetto='fd_end_{0}'.format(name))
|
||||
tp_perfetto='fd_end_{0}'.format(name),
|
||||
tp_markers='fd_cs_trace_end')
|
||||
|
||||
|
||||
def singular_tp(name, args=[], tp_struct=None, tp_print=None,
|
||||
|
|
@ -77,12 +79,13 @@ def singular_tp(name, args=[], tp_struct=None, tp_print=None,
|
|||
toggle_name=name,
|
||||
args=args,
|
||||
tp_struct=tp_struct,
|
||||
tp_print=tp_print)
|
||||
tp_print=tp_print,
|
||||
tp_markers='fd_cs_trace_msg')
|
||||
|
||||
begin_end_tp('state_restore')
|
||||
|
||||
singular_tp('flush_batch',
|
||||
args=[TracepointArg(type='struct fd_batch *', var='batch', c_format='%x'),
|
||||
args=[TracepointArg(type='struct fd_batch *', var='batch', c_format='%p'),
|
||||
TracepointArg(type='uint16_t', var='cleared', c_format='%x'),
|
||||
TracepointArg(type='uint16_t', var='gmem_reason', c_format='%x'),
|
||||
TracepointArg(type='uint16_t', var='num_draws', c_format='%u')],
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue