radeonsi: dump shader binary buffer contents
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Thu, 6 Dec 2018 11:35:36 +0000 (12:35 +0100)
committerMarek Olšák <marek.olsak@amd.com>
Thu, 13 Jun 2019 00:28:23 +0000 (20:28 -0400)
Help identify bugs related to corruption of shaders in memory,
or errors in shader upload / rtld.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/drivers/radeonsi/si_debug.c
src/gallium/drivers/radeonsi/si_debug_options.h

index 165e95c4ce59edc5fe7c8c4643eb682663d646ac..9df3175aa3c96756d11c5455c95ef31fd03e8167 100644 (file)
@@ -104,6 +104,24 @@ static void si_dump_shader(struct si_screen *sscreen,
                fwrite(shader->shader_log, shader->shader_log_size, 1, f);
        else
                si_shader_dump(sscreen, shader, NULL, processor, f, false);
+
+       if (shader->bo && sscreen->options.dump_shader_binary) {
+               unsigned size = shader->bo->b.b.width0;
+               fprintf(f, "BO: VA=%"PRIx64" Size=%u\n", shader->bo->gpu_address, size);
+
+               const char *mapped = sscreen->ws->buffer_map(shader->bo->buf, NULL,
+                                                      PIPE_TRANSFER_UNSYNCHRONIZED |
+                                                      PIPE_TRANSFER_READ |
+                                                      RADEON_TRANSFER_TEMPORARY);
+
+               for (unsigned i = 0; i < size; i += 4) {
+                       fprintf(f, " %4x: %08x\n", i, *(uint32_t*)(mapped + i));
+               }
+
+               sscreen->ws->buffer_unmap(shader->bo->buf);
+
+               fprintf(f, "\n");
+       }
 }
 
 struct si_log_chunk_shader {
index d5fe8499bb9b9233cf8200ce6bfcc26a43b11a93..64a1d2a59850d45dcf3c49a6579927f145adf7da 100644 (file)
@@ -2,6 +2,7 @@ OPT_BOOL(clear_db_cache_before_clear, false, "Clear DB cache before fast depth c
 OPT_BOOL(enable_nir, false, "Enable NIR")
 OPT_BOOL(aux_debug, false, "Generate ddebug_dumps for the auxiliary context")
 OPT_BOOL(sync_compile, false, "Always compile synchronously (will cause stalls)")
+OPT_BOOL(dump_shader_binary, false, "Dump shader binary as part of ddebug_dumps")
 OPT_BOOL(vs_fetch_always_opencode, false, "Always open code vertex fetches (less efficient, purely for testing)")
 OPT_BOOL(prim_restart_tri_strips_only, false, "Only enable primitive restart for triangle strips")