diff --git a/src/amd/vulkan/radv_pipeline_compute.c b/src/amd/vulkan/radv_pipeline_compute.c index 3486ef9a283..14c728f6fd0 100644 --- a/src/amd/vulkan/radv_pipeline_compute.c +++ b/src/amd/vulkan/radv_pipeline_compute.c @@ -142,7 +142,7 @@ radv_compile_cs(struct radv_device *device, struct vk_pipeline_cache *cache, str cs_shader->dbg.stages = 1 << MESA_SHADER_COMPUTE; cs_shader->dbg.dump_shader = dump_shader; - radv_shader_dump_debug_info(device, dump_shader, *cs_binary, cs_shader, &cs_stage->nir, 1, &cs_stage->info); + radv_shader_dump_asm(device, &cs_shader->dbg, &cs_stage->info); if (dump_shader) simple_mtx_unlock(&instance->shader_dump_mtx); diff --git a/src/amd/vulkan/radv_pipeline_graphics.c b/src/amd/vulkan/radv_pipeline_graphics.c index 380840e4d20..4354b02feaa 100644 --- a/src/amd/vulkan/radv_pipeline_graphics.c +++ b/src/amd/vulkan/radv_pipeline_graphics.c @@ -2430,7 +2430,7 @@ radv_create_gs_copy_shader(struct radv_device *device, struct vk_pipeline_cache copy_shader->dbg.nir_string = nir_string; copy_shader->dbg.stages = 1 << MESA_SHADER_VERTEX; copy_shader->dbg.dump_shader = dump_shader; - radv_shader_dump_debug_info(device, dump_shader, *gs_copy_binary, copy_shader, &nir, 1, &gs_copy_stage.info); + radv_shader_dump_asm(device, ©_shader->dbg, &gs_copy_stage.info); } if (dump_shader) @@ -2507,8 +2507,7 @@ radv_graphics_shaders_nir_to_asm(struct radv_device *device, struct vk_pipeline_ shaders[s]->dbg.stages |= 1 << nir_shaders[i]->info.stage; shaders[s]->dbg.dump_shader = dump_shader; - radv_shader_dump_debug_info(device, dump_shader, binaries[s], shaders[s], nir_shaders, shader_count, - &stages[s].info); + radv_shader_dump_asm(device, &shaders[s]->dbg, &stages[s].info); if (dump_shader) simple_mtx_unlock(&instance->shader_dump_mtx); diff --git a/src/amd/vulkan/radv_pipeline_rt.c b/src/amd/vulkan/radv_pipeline_rt.c index 9653e5dc7a1..42bebd0ecc1 100644 --- a/src/amd/vulkan/radv_pipeline_rt.c +++ b/src/amd/vulkan/radv_pipeline_rt.c @@ -533,7 +533,7 @@ radv_rt_nir_to_asm(struct radv_device *device, struct vk_pipeline_cache *cache, if (stack_size) *stack_size = DIV_ROUND_UP(shader->config.scratch_bytes_per_wave, shader->info.wave_size); - radv_shader_dump_debug_info(device, dump_shader, binary, shader, shaders, num_shaders, &stage->info); + radv_shader_dump_asm(device, &shader->dbg, &stage->info); if (shader && keep_executable_info && stage->spirv.size) { shader->dbg.spirv = malloc(stage->spirv.size); diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c index 6e55f31bbbe..bb15993ad79 100644 --- a/src/amd/vulkan/radv_shader.c +++ b/src/amd/vulkan/radv_shader.c @@ -3350,20 +3350,21 @@ radv_shader_nir_to_asm(struct radv_device *device, struct radv_shader_stage *pl_ } void -radv_shader_dump_debug_info(struct radv_device *device, bool dump_shader, struct radv_shader_binary *binary, - struct radv_shader *shader, struct nir_shader *const *shaders, int shader_count, - struct radv_shader_info *info) +radv_shader_dump_asm(struct radv_device *device, const struct radv_shader_debug_info *debug, + const struct radv_shader_info *info) { - if (dump_shader) { + if (debug->dump_shader) { const struct radv_physical_device *pdev = radv_device_physical(device); const struct radv_instance *instance = radv_physical_device_instance(pdev); if (instance->debug_flags & RADV_DEBUG_DUMP_ASM) { - 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 char *sep = ""; + u_foreach_bit (stage, debug->stages) { + fprintf(stderr, "%s%s", sep, radv_get_shader_name(info, stage)); + sep = " + "; + } - fprintf(stderr, "\ndisasm:\n%s\n", shader->dbg.disasm_string); + fprintf(stderr, "\ndisasm:\n%s\n", debug->disasm_string); } } } diff --git a/src/amd/vulkan/radv_shader.h b/src/amd/vulkan/radv_shader.h index 67ee618f45a..4916e97ec2e 100644 --- a/src/amd/vulkan/radv_shader.h +++ b/src/amd/vulkan/radv_shader.h @@ -530,9 +530,8 @@ struct radv_shader_binary *radv_shader_nir_to_asm(struct radv_device *device, st const struct radv_graphics_state_key *gfx_state, bool keep_shader_info, bool keep_statistic_info); -void radv_shader_dump_debug_info(struct radv_device *device, bool dump_shader, struct radv_shader_binary *binary, - struct radv_shader *shader, struct nir_shader *const *shaders, int shader_count, - struct radv_shader_info *info); +void radv_shader_dump_asm(struct radv_device *device, const struct radv_shader_debug_info *debug, + const struct radv_shader_info *info); struct radv_instance; char *radv_dump_nir_shaders(const struct radv_instance *instance, struct nir_shader *const *shaders, int shader_count);