From: Dave Airlie <airl...@redhat.com> This just a discussion holder patch, radv has generated a shader using discard that lowers the kilp intrinsic into
s_mov_b64 exec, 0 ; BEFE0180 however that means exports never happen, and I think this leads to a GPU hang as the frag shader must make at least one NULL export. This hacks just replaces kilp intrinsic with an explcit export and endpgm for now. I'm sure it's probably all sorts of wrong. Either way I expect the fix has to be in the compiler, but this patch lets me get CTS to run again --- src/amd/common/ac_nir_to_llvm.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c index a655806..4dd0d79 100644 --- a/src/amd/common/ac_nir_to_llvm.c +++ b/src/amd/common/ac_nir_to_llvm.c @@ -2614,6 +2614,27 @@ static void emit_barrier(struct nir_to_llvm_context *ctx) ctx->voidt, NULL, 0, 0); } +static void +si_export_mrt_color(struct nir_to_llvm_context *ctx, + LLVMValueRef *color, unsigned param, bool is_last); + +static void emit_discard(struct nir_to_llvm_context *ctx) +{ + ctx->shader_info->fs.can_discard = true; + + /* workaround LLVM lowering kilp to an execmask set to 0, + * which later means we don't do an export and hang the GPU. + */ + if (1) { + si_export_mrt_color(ctx, NULL, V_008DFC_SQ_EXP_NULL, true); + LLVMBuildRetVoid(ctx->builder); + } else { + emit_llvm_intrinsic(ctx, "llvm.AMDGPU.kilp", + LLVMVoidTypeInContext(ctx->context), + NULL, 0, 0); + } +} + static LLVMValueRef visit_load_local_invocation_index(struct nir_to_llvm_context *ctx) { @@ -2921,10 +2942,7 @@ static void visit_intrinsic(struct nir_to_llvm_context *ctx, result = visit_image_size(ctx, instr); break; case nir_intrinsic_discard: - ctx->shader_info->fs.can_discard = true; - emit_llvm_intrinsic(ctx, "llvm.AMDGPU.kilp", - LLVMVoidTypeInContext(ctx->context), - NULL, 0, 0); + emit_discard(ctx); break; case nir_intrinsic_memory_barrier: emit_waitcnt(ctx); -- 2.5.5 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev