diff --git a/src/freedreno/vulkan/tu_perfetto.cc b/src/freedreno/vulkan/tu_perfetto.cc index 3281eca1873..93afa1f9bd1 100644 --- a/src/freedreno/vulkan/tu_perfetto.cc +++ b/src/freedreno/vulkan/tu_perfetto.cc @@ -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); \ } diff --git a/src/gallium/drivers/radeonsi/si_perfetto.cpp b/src/gallium/drivers/radeonsi/si_perfetto.cpp index 7c22f7995ea..9b57220934f 100644 --- a/src/gallium/drivers/radeonsi/si_perfetto.cpp +++ b/src/gallium/drivers/radeonsi/si_perfetto.cpp @@ -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); } }); diff --git a/src/intel/ds/intel_driver_ds.cc b/src/intel/ds/intel_driver_ds.cc index 9032aad3e7d..618cd2fa90a 100644 --- a/src/intel/ds/intel_driver_ds.cc +++ b/src/intel/ds/intel_driver_ds.cc @@ -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) diff --git a/src/util/perf/u_trace.py b/src/util/perf/u_trace.py index d0ef6ddf643..5921841ae5b 100644 --- a/src/util/perf/u_trace.py +++ b/src/util/perf/u_trace.py @@ -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,