summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/radeonsi/si_debug.c
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2016-11-28 23:41:38 +0100
committerMarek Olšák <[email protected]>2017-02-10 11:27:50 +0100
commit3de8c5a3c59fa79b139d9630c82fc4537aa3e004 (patch)
treea33845b976e8dea07849bc78ab823dab0a215a4e /src/gallium/drivers/radeonsi/si_debug.c
parentdc2d9b8da14b97376cca9c87e2408763b11bdaa7 (diff)
radeonsi: write wave information into GPU hang reports
UMR is our new debugging tool. It must have +s set for Mesa to use it without root privileges: sudo chmod +s .../umr Reviewed-by: Nicolai Hähnle <[email protected]>
Diffstat (limited to 'src/gallium/drivers/radeonsi/si_debug.c')
-rw-r--r--src/gallium/drivers/radeonsi/si_debug.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/gallium/drivers/radeonsi/si_debug.c b/src/gallium/drivers/radeonsi/si_debug.c
index cc3617f1659..e4a350f6985 100644
--- a/src/gallium/drivers/radeonsi/si_debug.c
+++ b/src/gallium/drivers/radeonsi/si_debug.c
@@ -468,6 +468,21 @@ static void si_dump_descriptors(struct si_context *sctx,
num_elements[i], f);
}
+static void si_dump_command(const char *title, const char *command, FILE *f)
+{
+ char line[2000];
+
+ FILE *p = popen(command, "r");
+ if (!p)
+ return;
+
+ fprintf(f, COLOR_YELLOW "%s: " COLOR_RESET "\n", title);
+ while (fgets(line, sizeof(line), p))
+ fputs(line, f);
+ fprintf(f, "\n\n");
+ pclose(p);
+}
+
static void si_dump_debug_state(struct pipe_context *ctx, FILE *f,
unsigned flags)
{
@@ -486,6 +501,11 @@ static void si_dump_debug_state(struct pipe_context *ctx, FILE *f,
si_dump_shader(sctx->screen, &sctx->gs_shader, f);
si_dump_shader(sctx->screen, &sctx->ps_shader, f);
+ if (flags & PIPE_DUMP_DEVICE_STATUS_REGISTERS) {
+ si_dump_command("Active waves", "umr -wa | column -t", f);
+ si_dump_command("Wave information", "umr -O bits -wa", f);
+ }
+
si_dump_descriptor_list(&sctx->descriptors[SI_DESCS_RW_BUFFERS],
"", "RW buffers", SI_NUM_RW_BUFFERS, f);
si_dump_descriptors(sctx, &sctx->vs_shader, f);