From 649da9e744ece2912d546fb79f8a30ea11043d5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timur=20Krist=C3=B3f?= Date: Tue, 12 Nov 2024 10:40:07 +0100 Subject: [PATCH] radv: Separate option to print shader disassembly. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Timur Kristóf Reviewed-by: Konstantin Seurer Reviewed-by: Samuel Pitoiset Acked-by: Daniel Schürmann Part-of: --- docs/envvars.rst | 2 ++ src/amd/vulkan/radv_debug.h | 1 + src/amd/vulkan/radv_instance.c | 1 + src/amd/vulkan/radv_shader.c | 13 +++++++++---- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/docs/envvars.rst b/docs/envvars.rst index 834a16a6024..4ef0824eb9e 100644 --- a/docs/envvars.rst +++ b/docs/envvars.rst @@ -1434,6 +1434,8 @@ RADV driver environment variables Dump compute (and ray tracing) shaders. ``nir`` Dump NIR for selected shader stages. + ``asm`` + Dump shader disassembly for selected shader stages. .. envvar:: RADV_FORCE_FAMILY diff --git a/src/amd/vulkan/radv_debug.h b/src/amd/vulkan/radv_debug.h index a2dd4c92c94..61504cfba4a 100644 --- a/src/amd/vulkan/radv_debug.h +++ b/src/amd/vulkan/radv_debug.h @@ -70,6 +70,7 @@ enum { RADV_DEBUG_DUMP_MESH = 1ull << 54, RADV_DEBUG_DUMP_CS = 1ull << 55, RADV_DEBUG_DUMP_NIR = 1ull << 56, + RADV_DEBUG_DUMP_ASM = 1ull << 57, }; enum { diff --git a/src/amd/vulkan/radv_instance.c b/src/amd/vulkan/radv_instance.c index e801ab68c1e..9111f14461b 100644 --- a/src/amd/vulkan/radv_instance.c +++ b/src/amd/vulkan/radv_instance.c @@ -83,6 +83,7 @@ static const struct debug_control radv_debug_options[] = {{"nofastclears", RADV_ {"mesh", RADV_DEBUG_DUMP_MESH}, {"cs", RADV_DEBUG_DUMP_CS}, {"nir", RADV_DEBUG_DUMP_NIR}, + {"asm", RADV_DEBUG_DUMP_ASM}, {NULL, 0}}; const char * diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c index f8ba14e11e8..f21c95e4891 100644 --- a/src/amd/vulkan/radv_shader.c +++ b/src/amd/vulkan/radv_shader.c @@ -3142,11 +3142,16 @@ radv_shader_generate_debug_info(struct radv_device *device, bool dump_shader, bo radv_capture_shader_executable_info(device, shader, shaders, shader_count, binary); if (dump_shader) { - fprintf(stderr, "%s", radv_get_shader_name(info, shaders[0]->info.stage)); - for (int i = 1; i < shader_count; ++i) - fprintf(stderr, " + %s", radv_get_shader_name(info, shaders[i]->info.stage)); + const struct radv_physical_device *pdev = radv_device_physical(device); + const struct radv_instance *instance = radv_physical_device_instance(pdev); - fprintf(stderr, "\ndisasm:\n%s\n", shader->disasm_string); + if (instance->debug_flags & (RADV_DEBUG_DUMP_ASM | RADV_DEBUG_DUMP_SHADERS)) { + fprintf(stderr, "%s", radv_get_shader_name(info, shaders[0]->info.stage)); + for (int i = 1; i < shader_count; ++i) + fprintf(stderr, " + %s", radv_get_shader_name(info, shaders[i]->info.stage)); + + fprintf(stderr, "\ndisasm:\n%s\n", shader->disasm_string); + } } }