On Sat, 2018-09-22 at 12:38 +1000, Timothy Arceri wrote: > This ports the fix from 3d41757788ac. Both LLVM 7 & 8 continue > to have this problem. > > It fixes rendering issues in some menu and loading screens of > Civ VI which can be seen in the trace from bug 104602. >
Thank you. Added this patch to 18.2 queue. J.A. > Note: This does not fix the black triangles on Vega for bug > 104602. > > Cc: mesa-sta...@lists.freedesktop.org > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104602 > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107276 > --- > .../drivers/radeonsi/si_shader_tgsi_alu.c | 41 ++++++++++++++----- > 1 file changed, 30 insertions(+), 11 deletions(-) > > diff --git a/src/gallium/drivers/radeonsi/si_shader_tgsi_alu.c > b/src/gallium/drivers/radeonsi/si_shader_tgsi_alu.c > index f54d025aec0..814362bc963 100644 > --- a/src/gallium/drivers/radeonsi/si_shader_tgsi_alu.c > +++ b/src/gallium/drivers/radeonsi/si_shader_tgsi_alu.c > @@ -494,18 +494,37 @@ static void emit_bfe(const struct lp_build_tgsi_action > *action, > struct lp_build_emit_data *emit_data) > { > struct si_shader_context *ctx = si_shader_context(bld_base); > - LLVMValueRef bfe_sm5; > - LLVMValueRef cond; > - > - bfe_sm5 = ac_build_bfe(&ctx->ac, emit_data->args[0], > - emit_data->args[1], emit_data->args[2], > - emit_data->info->opcode == TGSI_OPCODE_IBFE); > > - /* Correct for GLSL semantics. */ > - cond = LLVMBuildICmp(ctx->ac.builder, LLVMIntUGE, emit_data->args[2], > - LLVMConstInt(ctx->i32, 32, 0), ""); > - emit_data->output[emit_data->chan] = > - LLVMBuildSelect(ctx->ac.builder, cond, emit_data->args[0], > bfe_sm5, ""); > + if (HAVE_LLVM < 0x0700) { > + LLVMValueRef bfe_sm5 = > + ac_build_bfe(&ctx->ac, emit_data->args[0], > + emit_data->args[1], emit_data->args[2], > + emit_data->info->opcode == > TGSI_OPCODE_IBFE); > + > + /* Correct for GLSL semantics. */ > + LLVMValueRef cond = LLVMBuildICmp(ctx->ac.builder, LLVMIntUGE, > emit_data->args[2], > + LLVMConstInt(ctx->i32, 32, > 0), ""); > + emit_data->output[emit_data->chan] = > + LLVMBuildSelect(ctx->ac.builder, cond, > emit_data->args[0], bfe_sm5, ""); > + } else { > + /* FIXME: LLVM 7 returns incorrect result when count is 0. > + * https://bugs.freedesktop.org/show_bug.cgi?id=107276 > + */ > + LLVMValueRef zero = ctx->i32_0; > + LLVMValueRef bfe_sm5 = > + ac_build_bfe(&ctx->ac, emit_data->args[0], > + emit_data->args[1], emit_data->args[2], > + emit_data->info->opcode == > TGSI_OPCODE_IBFE); > + > + /* Correct for GLSL semantics. */ > + LLVMValueRef cond = LLVMBuildICmp(ctx->ac.builder, LLVMIntUGE, > emit_data->args[2], > + LLVMConstInt(ctx->i32, 32, > 0), ""); > + LLVMValueRef cond2 = LLVMBuildICmp(ctx->ac.builder, LLVMIntEQ, > emit_data->args[2], > + zero, ""); > + bfe_sm5 = LLVMBuildSelect(ctx->ac.builder, cond, > emit_data->args[0], bfe_sm5, ""); > + emit_data->output[emit_data->chan] = > + LLVMBuildSelect(ctx->ac.builder, cond2, zero, bfe_sm5, > ""); > + } > } > > /* this is ffs in C */ _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev