u_trace: Fix trace_payload_as_extra_func desync between drivers

Buffer with indirect args wasn't passed to the function which
adds extra event args. Since function definition depends on the
common code, the definition is moved to a single place.

Fixes: 0a17035b5c
("u_trace: add support for indirect data")

Signed-off-by: Danylo Piliaiev <dpiliaiev@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31090>
This commit is contained in:
Danylo Piliaiev 2024-09-09 14:04:23 +02:00 committed by Marge Bot
parent 26692deefc
commit e5d3eba096
4 changed files with 9 additions and 12 deletions

View file

@ -182,8 +182,6 @@ stage_push(struct tu_device *dev)
return &p->stages[p->stage_depth++];
}
typedef void (*trace_payload_as_extra_func)(perfetto::protos::pbzero::GpuRenderStageEvent *, const void*);
static struct tu_perfetto_stage *
stage_pop(struct tu_device *dev)
{
@ -207,6 +205,7 @@ stage_start(struct tu_device *dev,
const char *app_event,
const void *payload = nullptr,
size_t payload_size = 0,
const void *indirect = nullptr,
trace_payload_as_extra_func payload_as_extra = nullptr)
{
struct tu_perfetto_stage *stage = stage_push(dev);
@ -245,6 +244,7 @@ static void
stage_end(struct tu_device *dev, uint64_t ts_ns, enum tu_stage_id stage_id,
const void *flush_data,
const void* payload = nullptr,
const void *indirect = nullptr,
trace_payload_as_extra_func payload_as_extra = nullptr)
{
struct tu_perfetto_stage *stage = stage_pop(dev);
@ -296,12 +296,12 @@ stage_end(struct tu_device *dev, uint64_t ts_ns, enum tu_stage_id stage_id,
if (stage->payload) {
if (stage->start_payload_function)
((trace_payload_as_extra_func) stage->start_payload_function)(
event, stage->payload);
event, stage->payload, nullptr);
free((void *)stage->payload);
}
if (payload && payload_as_extra)
payload_as_extra(event, payload);
payload_as_extra(event, payload, indirect);
});
}
@ -480,7 +480,7 @@ tu_perfetto_submit(struct tu_device *dev,
const void *indirect_data) \
{ \
stage_start( \
dev, ts_ns, stage_id, NULL, payload, sizeof(*payload), \
dev, ts_ns, stage_id, NULL, payload, sizeof(*payload), indirect_data, \
(trace_payload_as_extra_func) &trace_payload_as_extra_start_##event_name); \
} \
\
@ -490,7 +490,7 @@ tu_perfetto_submit(struct tu_device *dev,
const void *indirect_data) \
{ \
stage_end( \
dev, ts_ns, stage_id, flush_data, payload, \
dev, ts_ns, stage_id, flush_data, payload, indirect_data, \
(trace_payload_as_extra_func) &trace_payload_as_extra_end_##event_name); \
}

View file

@ -154,9 +154,6 @@ static void send_descriptors(SIRenderpassDataSource::TraceContext &ctx,
sync_timestamp(ctx, device);
}
typedef void (*trace_payload_as_extra_func)(perfetto::protos::pbzero::GpuRenderStageEvent *,
const void*);
static void begin_event(struct si_ds_queue *queue, uint64_t ts_ns, enum si_ds_queue_stage stage_id)
{
PERFETTO_LOG("begin event called - ts_ns=%" PRIu64, ts_ns);
@ -237,7 +234,7 @@ static void end_event(struct si_ds_queue *queue, uint64_t ts_ns, enum si_ds_queu
event->set_submission_id(submission_id);
if (payload && payload_as_extra) {
payload_as_extra(event, payload);
payload_as_extra(event, payload, nullptr);
}
});

View file

@ -229,8 +229,6 @@ send_descriptors(IntelRenderpassDataSource::TraceContext &ctx,
sync_timestamp(ctx, device);
}
typedef void (*trace_payload_as_extra_func)(perfetto::protos::pbzero::GpuRenderStageEvent *, const void*, const void *);
static void
begin_event(struct intel_ds_queue *queue, uint64_t ts_ns,
enum intel_ds_queue_stage stage_id)

View file

@ -679,6 +679,8 @@ UNUSED static const char *${basename}_names[] = {
% endfor
};
typedef void (*trace_payload_as_extra_func)(perfetto::protos::pbzero::GpuRenderStageEvent *, const void*, const void*);
% for trace_name, trace in TRACEPOINTS.items():
static void UNUSED
trace_payload_as_extra_${trace_name}(perfetto::protos::pbzero::GpuRenderStageEvent *event,