Mesa (main): radeonsi/sqtt: setup spm bo
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Apr 22 12:19:05 UTC 2022
Module: Mesa
Branch: main
Commit: e5e8b56236cd287b0cd70f02a64161a2b2031de2
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e5e8b56236cd287b0cd70f02a64161a2b2031de2
Author: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Date: Tue Mar 29 14:36:26 2022 +0200
radeonsi/sqtt: setup spm bo
The hardware will write SPM counters to this bo.
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15646>
---
src/gallium/drivers/radeonsi/si_perfcounter.c | 26 ++++++++++++++++++++++++++
src/gallium/drivers/radeonsi/si_sqtt.c | 11 ++++++++++-
2 files changed, 36 insertions(+), 1 deletion(-)
diff --git a/src/gallium/drivers/radeonsi/si_perfcounter.c b/src/gallium/drivers/radeonsi/si_perfcounter.c
index 571424f7fad..d191c44acb8 100644
--- a/src/gallium/drivers/radeonsi/si_perfcounter.c
+++ b/src/gallium/drivers/radeonsi/si_perfcounter.c
@@ -713,6 +713,26 @@ void si_init_perfcounters(struct si_screen *screen)
}
}
+static bool
+si_spm_init_bo(struct si_context *sctx)
+{
+ struct radeon_winsys *ws = sctx->ws;
+ uint64_t size = 32 * 1024 * 1024; /* Default to 32MB. */
+
+ sctx->spm_trace.buffer_size = size;
+ sctx->spm_trace.sample_interval = 4096; /* Default to 4096 clk. */
+
+ sctx->spm_trace.bo = ws->buffer_create(
+ ws, size, 4096,
+ RADEON_DOMAIN_VRAM,
+ RADEON_FLAG_NO_INTERPROCESS_SHARING |
+ RADEON_FLAG_GTT_WC |
+ RADEON_FLAG_NO_SUBALLOC);
+
+ return sctx->spm_trace.bo != NULL;
+}
+
+
static void
si_emit_spm_counters(struct si_context *sctx, struct radeon_cmdbuf *cs)
{
@@ -886,11 +906,17 @@ si_spm_init(struct si_context *sctx)
if (!ac_init_spm(info, pc, ARRAY_SIZE(spm_counters), spm_counters, &sctx->spm_trace))
return false;
+ if (!si_spm_init_bo(sctx))
+ return false;
+
return true;
}
void
si_spm_finish(struct si_context *sctx)
{
+ struct pb_buffer *bo = sctx->spm_trace.bo;
+ radeon_bo_reference(sctx->screen->ws, &bo, NULL);
+
ac_destroy_spm(&sctx->spm_trace);
}
diff --git a/src/gallium/drivers/radeonsi/si_sqtt.c b/src/gallium/drivers/radeonsi/si_sqtt.c
index cefbbec0518..a468a5fa1b6 100644
--- a/src/gallium/drivers/radeonsi/si_sqtt.c
+++ b/src/gallium/drivers/radeonsi/si_sqtt.c
@@ -389,6 +389,10 @@ si_thread_trace_start(struct si_context *sctx, int family, struct radeon_cmdbuf
sctx->thread_trace->bo,
RADEON_USAGE_READWRITE,
RADEON_DOMAIN_VRAM);
+ ws->cs_add_buffer(cs,
+ sctx->spm_trace.bo,
+ RADEON_USAGE_READWRITE,
+ RADEON_DOMAIN_VRAM);
si_cp_dma_wait_for_idle(sctx, cs);
@@ -432,6 +436,11 @@ si_thread_trace_stop(struct si_context *sctx, int family, struct radeon_cmdbuf *
RADEON_USAGE_READWRITE,
RADEON_DOMAIN_VRAM);
+ ws->cs_add_buffer(cs,
+ sctx->spm_trace.bo,
+ RADEON_USAGE_READWRITE,
+ RADEON_DOMAIN_VRAM);
+
si_cp_dma_wait_for_idle(sctx, cs);
/* Make sure to wait-for-idle before stopping SQTT. */
@@ -711,7 +720,7 @@ si_handle_thread_trace(struct si_context *sctx, struct radeon_cmdbuf *rcs)
/* Wait for SQTT to finish and read back the bo */
if (sctx->ws->fence_wait(sctx->ws, sctx->last_sqtt_fence, PIPE_TIMEOUT_INFINITE) &&
si_get_thread_trace(sctx, &thread_trace)) {
- ac_dump_rgp_capture(&sctx->screen->info, &thread_trace, NULL);
+ ac_dump_rgp_capture(&sctx->screen->info, &thread_trace, &sctx->spm_trace);
} else {
fprintf(stderr, "Failed to read the trace\n");
}
More information about the mesa-commit
mailing list