From ac6fb2467fefa78de12af53490b70ab04e73749a Mon Sep 17 00:00:00 2001 From: Pierre-Eric Pelloux-Prayer Date: Fri, 19 Aug 2022 14:59:46 +0200 Subject: [PATCH] radeonsi: deal with ac_nir_translate failures MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ac_nir_translate can fail now so forward the translation result to si_llvm_compile_shader. If it's a failure, it'll print something like: radeonsi: can't compile a main shader part And the shader won't be used. Reviewed-by: Marek Olšák Part-of: --- src/gallium/drivers/radeonsi/si_shader_llvm.c | 3 ++- src/gallium/drivers/radeonsi/si_state_shaders.cpp | 7 ++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_shader_llvm.c b/src/gallium/drivers/radeonsi/si_shader_llvm.c index fc3f932bdd1..1dc2c1fac50 100644 --- a/src/gallium/drivers/radeonsi/si_shader_llvm.c +++ b/src/gallium/drivers/radeonsi/si_shader_llvm.c @@ -1069,7 +1069,8 @@ bool si_llvm_translate_nir(struct si_shader_context *ctx, struct si_shader *shad } } - ac_nir_translate(&ctx->ac, &ctx->abi, &ctx->args, nir); + if (!ac_nir_translate(&ctx->ac, &ctx->abi, &ctx->args, nir)) + return false; switch (sel->stage) { case MESA_SHADER_VERTEX: diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.cpp b/src/gallium/drivers/radeonsi/si_state_shaders.cpp index f14a1d6a812..9f5383c3183 100644 --- a/src/gallium/drivers/radeonsi/si_state_shaders.cpp +++ b/src/gallium/drivers/radeonsi/si_state_shaders.cpp @@ -3034,7 +3034,12 @@ static void si_init_shader_selector_async(void *job, void *gdata, int thread_ind /* Compile the shader if it hasn't been loaded from the cache. */ if (!si_compile_shader(sscreen, compiler, shader, debug)) { FREE(shader); - fprintf(stderr, "radeonsi: can't compile a main shader part\n"); + fprintf(stderr, + "radeonsi: can't compile a main shader part (type: %s, name: %s).\n" + "This is probably a driver bug, please report " + "it to https://gitlab.freedesktop.org/mesa/mesa/-/issues.\n", + gl_shader_stage_name(shader->selector->stage), + shader->selector->info.base.name); return; }