radv: Separate option to print shader disassembly.

Signed-off-by: Timur Kristóf <timur.kristof@gmail.com>
Reviewed-by: Konstantin Seurer <konstantin.seurer@gmail.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Acked-by: Daniel Schürmann <daniel@schuermann.dev>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32079>
This commit is contained in:
Timur Kristóf 2024-11-12 10:40:07 +01:00
parent 3f92c0bbe9
commit 649da9e744
4 changed files with 13 additions and 4 deletions

View file

@ -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

View file

@ -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 {

View file

@ -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 *

View file

@ -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);
}
}
}