The commit message is total non-sense. Exports are always executed regardless of EXEC.
Marek On Tue, Nov 1, 2016 at 5:32 AM, Dave Airlie <[email protected]> wrote: > From: Dave Airlie <[email protected]> > > 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 > [email protected] > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
