mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 07:28:11 +02:00
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:
parent
26692deefc
commit
e5d3eba096
4 changed files with 9 additions and 12 deletions
|
|
@ -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); \
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue