diff options
author | Nicolai Hähnle <[email protected]> | 2018-12-06 12:35:36 +0100 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2019-06-12 20:28:23 -0400 |
commit | 66da60f4dae01b770be38f10b5781a47c61b3b7d (patch) | |
tree | 2bfa0d7d463137348ab3f6b2f689de3bae93b5e5 /src/gallium/drivers/radeonsi/si_debug.c | |
parent | bf11c594ddc230addcf9eccdcd04c50ffb3d9692 (diff) |
radeonsi: dump shader binary buffer contents
Help identify bugs related to corruption of shaders in memory,
or errors in shader upload / rtld.
Reviewed-by: Marek Olšák <[email protected]>
Diffstat (limited to 'src/gallium/drivers/radeonsi/si_debug.c')
-rw-r--r-- | src/gallium/drivers/radeonsi/si_debug.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/gallium/drivers/radeonsi/si_debug.c b/src/gallium/drivers/radeonsi/si_debug.c index 165e95c4ce5..9df3175aa3c 100644 --- a/src/gallium/drivers/radeonsi/si_debug.c +++ b/src/gallium/drivers/radeonsi/si_debug.c @@ -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 { |