panvk/perfetto: Handle re-submittable command buffers

Reviewed-by: Lars-Ivar Hesselberg Simonsen <lars-ivar.simonsen@arm.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36609>
This commit is contained in:
Christoph Pillmayer
2025-08-07 11:18:59 +00:00
committed by Marge Bot
parent f37cf63880
commit 1d43bfa1cd
3 changed files with 20 additions and 0 deletions
+2
View File
@@ -51,6 +51,8 @@ panvk_utrace_create_buffer(struct u_trace_context *utctx, uint64_t size_B)
.size = size_B,
};
memset(addr_host, 0, size_B);
return container;
}
@@ -1,5 +1,6 @@
/*
* Copyright 2024 Google LLC
* Copyright 2025 Arm Ltd.
* SPDX-License-Identifier: MIT
*/
@@ -187,6 +188,11 @@ panvk_utrace_perfetto_begin_event(struct panvk_device *dev,
if (!ev)
return;
struct panvk_utrace_perfetto *utp = &dev->utrace.utp;
if (utp->queues[data->subqueue].stack_depth == 1) {
utp->base_ts_ns = ts_ns;
}
ev->begin_ns = ts_ns;
}
@@ -201,6 +207,14 @@ panvk_utrace_perfetto_end_event(
if (!ev)
return;
struct panvk_utrace_perfetto *utp = &dev->utrace.utp;
if (ev->begin_ns < utp->base_ts_ns) {
/* The event has started before the base event of this nested stack of
* events. Is is likely data from a previous submission, so we just drop
* it here. */
return;
}
PanVKRenderpassDataSource::Trace(
[=](PanVKRenderpassDataSource::TraceContext ctx) {
struct panvk_utrace_perfetto *utp = &dev->utrace.utp;
@@ -51,6 +51,10 @@ struct panvk_utrace_perfetto {
uint64_t next_clock_snapshot;
uint64_t event_id;
/* Use this to reject unwritten timestamps with leftover data from previous
* submissions. */
uint64_t base_ts_ns;
struct panvk_utrace_perfetto_queue queues[PANVK_UTRACE_PERFETTO_QUEUE_COUNT];
};