Module: Mesa Branch: main Commit: ef52d803a933d7bc20b852bb31e41f6323f1b68e URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ef52d803a933d7bc20b852bb31e41f6323f1b68e
Author: Marek Olšák <[email protected]> Date: Sun Apr 10 21:12:37 2022 -0400 radeonsi: dump shaders after si_shader_binary_upload to fix printed LDS stat lds_size is set by si_shader_binary_upload, so it always printed zero. Reviewed-by: Pierre-Eric Pelloux-Prayer <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15965> --- src/gallium/drivers/radeonsi/si_compute.c | 10 ++++++---- src/gallium/drivers/radeonsi/si_shader.c | 11 +++++------ src/gallium/drivers/radeonsi/si_shader_llvm_gs.c | 8 ++++---- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_compute.c b/src/gallium/drivers/radeonsi/si_compute.c index 72ef90fbdce..0d4e4985a97 100644 --- a/src/gallium/drivers/radeonsi/si_compute.c +++ b/src/gallium/drivers/radeonsi/si_compute.c @@ -177,11 +177,11 @@ static void si_create_compute_state_async(void *job, void *gdata, int thread_ind if (si_shader_cache_load_shader(sscreen, ir_sha1_cache_key, shader)) { simple_mtx_unlock(&sscreen->shader_cache_mutex); - si_shader_dump_stats_for_shader_db(sscreen, shader, debug); - si_shader_dump(sscreen, shader, debug, stderr, true); - if (!si_shader_binary_upload(sscreen, shader, 0)) program->shader.compilation_failed = true; + + si_shader_dump_stats_for_shader_db(sscreen, shader, debug); + si_shader_dump(sscreen, shader, debug, stderr, true); } else { simple_mtx_unlock(&sscreen->shader_cache_mutex); @@ -274,8 +274,10 @@ static void *si_create_compute_state(struct pipe_context *ctx, const struct pipe const amd_kernel_code_t *code_object = si_compute_get_code_object(program, 0); code_object_to_config(code_object, &program->shader.config); + bool ok = si_shader_binary_upload(sctx->screen, &program->shader, 0); si_shader_dump(sctx->screen, &program->shader, &sctx->debug, stderr, true); - if (!si_shader_binary_upload(sctx->screen, &program->shader, 0)) { + + if (!ok) { fprintf(stderr, "LLVM failed to upload shader\n"); free((void *)program->shader.binary.elf_buffer); FREE(program); diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index 30042633f62..cab47793228 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -2246,15 +2246,14 @@ bool si_create_shader_variant(struct si_screen *sscreen, struct ac_llvm_compiler } si_fix_resource_usage(sscreen, shader); - si_shader_dump(sscreen, shader, debug, stderr, true); /* Upload. */ - if (!si_shader_binary_upload(sscreen, shader, 0)) { - fprintf(stderr, "LLVM failed to upload shader\n"); - return false; - } + bool ok = si_shader_binary_upload(sscreen, shader, 0); + si_shader_dump(sscreen, shader, debug, stderr, true); - return true; + if (!ok) + fprintf(stderr, "LLVM failed to upload shader\n"); + return ok; } void si_shader_binary_clean(struct si_shader_binary *binary) diff --git a/src/gallium/drivers/radeonsi/si_shader_llvm_gs.c b/src/gallium/drivers/radeonsi/si_shader_llvm_gs.c index fb105bf0857..ec77d2fc65d 100644 --- a/src/gallium/drivers/radeonsi/si_shader_llvm_gs.c +++ b/src/gallium/drivers/radeonsi/si_shader_llvm_gs.c @@ -533,13 +533,13 @@ struct si_shader *si_generate_gs_copy_shader(struct si_screen *sscreen, bool ok = false; if (si_compile_llvm(sscreen, &ctx.shader->binary, &ctx.shader->config, ctx.compiler, &ctx.ac, debug, MESA_SHADER_GEOMETRY, "GS Copy Shader", false)) { - if (si_can_dump_shader(sscreen, MESA_SHADER_GEOMETRY)) - fprintf(stderr, "GS Copy Shader:\n"); - si_shader_dump(sscreen, ctx.shader, debug, stderr, true); - assert(!ctx.shader->config.scratch_bytes_per_wave); if (!ctx.shader->config.scratch_bytes_per_wave) ok = si_shader_binary_upload(sscreen, ctx.shader, 0); + + if (si_can_dump_shader(sscreen, MESA_SHADER_GEOMETRY)) + fprintf(stderr, "GS Copy Shader:\n"); + si_shader_dump(sscreen, ctx.shader, debug, stderr, true); } si_llvm_dispose(&ctx);
