radeonsi: write wave information into GPU hang reports
authorMarek Olšák <marek.olsak@amd.com>
Mon, 28 Nov 2016 22:41:38 +0000 (23:41 +0100)
committerMarek Olšák <marek.olsak@amd.com>
Fri, 10 Feb 2017 10:27:50 +0000 (11:27 +0100)
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 <nicolai.haehnle@amd.com>
src/gallium/drivers/radeonsi/si_debug.c

index cc3617f16592a8dd5f6d59153239e81d5a0ad8cf..e4a350f698547aecc23fa1217d19f7af418eeced 100644 (file)
@@ -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);