diff --git a/docs/envvars.rst b/docs/envvars.rst index 84b52eb7fbd..834a16a6024 100644 --- a/docs/envvars.rst +++ b/docs/envvars.rst @@ -1432,6 +1432,8 @@ RADV driver environment variables Dump mesh shaders. ``cs`` Dump compute (and ray tracing) shaders. + ``nir`` + Dump NIR 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 322226e0a4b..a2dd4c92c94 100644 --- a/src/amd/vulkan/radv_debug.h +++ b/src/amd/vulkan/radv_debug.h @@ -69,6 +69,7 @@ enum { RADV_DEBUG_DUMP_TASK = 1ull << 53, RADV_DEBUG_DUMP_MESH = 1ull << 54, RADV_DEBUG_DUMP_CS = 1ull << 55, + RADV_DEBUG_DUMP_NIR = 1ull << 56, }; enum { diff --git a/src/amd/vulkan/radv_instance.c b/src/amd/vulkan/radv_instance.c index 7e95d08afd2..e801ab68c1e 100644 --- a/src/amd/vulkan/radv_instance.c +++ b/src/amd/vulkan/radv_instance.c @@ -82,6 +82,7 @@ static const struct debug_control radv_debug_options[] = {{"nofastclears", RADV_ {"task", RADV_DEBUG_DUMP_TASK}, {"mesh", RADV_DEBUG_DUMP_MESH}, {"cs", RADV_DEBUG_DUMP_CS}, + {"nir", RADV_DEBUG_DUMP_NIR}, {NULL, 0}}; const char * diff --git a/src/amd/vulkan/radv_pipeline_compute.c b/src/amd/vulkan/radv_pipeline_compute.c index 23a1acd5789..d8cd1424924 100644 --- a/src/amd/vulkan/radv_pipeline_compute.c +++ b/src/amd/vulkan/radv_pipeline_compute.c @@ -119,10 +119,14 @@ radv_compile_cs(struct radv_device *device, struct vk_pipeline_cache *cache, str radv_postprocess_nir(device, NULL, cs_stage); bool dump_shader = radv_can_dump_shader(device, cs_stage->nir); + bool dump_nir = dump_shader && (instance->debug_flags & (RADV_DEBUG_DUMP_NIR | RADV_DEBUG_DUMP_SHADERS)); if (dump_shader) { simple_mtx_lock(&instance->shader_dump_mtx); - nir_print_shader(cs_stage->nir, stderr); + + if (dump_nir) { + nir_print_shader(cs_stage->nir, stderr); + } } char *nir_string = NULL; diff --git a/src/amd/vulkan/radv_pipeline_graphics.c b/src/amd/vulkan/radv_pipeline_graphics.c index 8277378899d..ca6258b0a4f 100644 --- a/src/amd/vulkan/radv_pipeline_graphics.c +++ b/src/amd/vulkan/radv_pipeline_graphics.c @@ -2340,10 +2340,15 @@ radv_graphics_shaders_nir_to_asm(struct radv_device *device, struct vk_pipeline_ for (unsigned i = 0; i < shader_count; ++i) dump_shader |= radv_can_dump_shader(device, nir_shaders[i]); + bool dump_nir = dump_shader && (instance->debug_flags & (RADV_DEBUG_DUMP_NIR | RADV_DEBUG_DUMP_SHADERS)); + if (dump_shader) { simple_mtx_lock(&instance->shader_dump_mtx); - for (uint32_t i = 0; i < shader_count; i++) - nir_print_shader(nir_shaders[i], stderr); + + if (dump_nir) { + for (uint32_t i = 0; i < shader_count; i++) + nir_print_shader(nir_shaders[i], stderr); + } } char *nir_string = NULL; diff --git a/src/amd/vulkan/radv_pipeline_rt.c b/src/amd/vulkan/radv_pipeline_rt.c index 79b7139c184..9ff63a8f6f3 100644 --- a/src/amd/vulkan/radv_pipeline_rt.c +++ b/src/amd/vulkan/radv_pipeline_rt.c @@ -435,13 +435,17 @@ radv_rt_nir_to_asm(struct radv_device *device, struct vk_pipeline_cache *cache, } bool dump_shader = radv_can_dump_shader(device, shaders[0]); + bool dump_nir = dump_shader && (instance->debug_flags & (RADV_DEBUG_DUMP_NIR | RADV_DEBUG_DUMP_SHADERS)); bool replayable = pipeline->base.base.create_flags & VK_PIPELINE_CREATE_2_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR; if (dump_shader) { simple_mtx_lock(&instance->shader_dump_mtx); - for (uint32_t i = 0; i < num_shaders; i++) - nir_print_shader(shaders[i], stderr); + + if (dump_nir) { + for (uint32_t i = 0; i < num_shaders; i++) + nir_print_shader(shaders[i], stderr); + } } char *nir_string = NULL;