On Mon, Sep 24, 2012 at 12:43:17AM +0200, Vincent Lejeune wrote: > --- > src/gallium/drivers/r600/r600_llvm.c | 36 > ++++++++++++++++++++++++++++++++++ > src/gallium/drivers/r600/r600_shader.c | 13 +++++++----- > 2 files changed, 44 insertions(+), 5 deletions(-) >
Same as patch 3, just make sure there are no TGSI compiler regressions. Reviewed-by: Tom Stellard <[email protected]> > diff --git a/src/gallium/drivers/r600/r600_llvm.c > b/src/gallium/drivers/r600/r600_llvm.c > index e77758b..a82d3b6 100644 > --- a/src/gallium/drivers/r600/r600_llvm.c > +++ b/src/gallium/drivers/r600/r600_llvm.c > @@ -86,6 +86,42 @@ static void llvm_load_input( > "llvm.R600.load.input", > ctx->soa.bld_base.base.elem_type, ®, 1, > LLVMReadNoneAttribute); > + > + if (decl->Semantic.Name == TGSI_SEMANTIC_COLOR && > ctx->two_side) { > + unsigned back_reg = > ctx->tgsi_inputs.r600_inputs[input_index] > + .potential_back_facing_reg; > + unsigned back_soa_index = radeon_llvm_reg_index_soa( > + ctx->tgsi_inputs.r600_inputs[back_reg].gpr > + , chan); > + LLVMValueRef backcolor_reg = lp_build_const_int32( > + ctx->soa.bld_base.base.gallivm, > + back_soa_index); > + LLVMValueRef backcolor = build_intrinsic( > + ctx->soa.bld_base.base.gallivm->builder, > + "llvm.R600.load.input", > + ctx->soa.bld_base.base.elem_type, > &backcolor_reg, 1, > + LLVMReadNoneAttribute); > + LLVMValueRef face_reg = lp_build_const_int32( > + ctx->soa.bld_base.base.gallivm, > + ctx->face_input * 4); > + LLVMValueRef face = build_intrinsic( > + ctx->soa.bld_base.base.gallivm->builder, > + "llvm.R600.load.input", > + ctx->soa.bld_base.base.elem_type, > + &face_reg, 1, > + LLVMReadNoneAttribute); > + LLVMValueRef is_face_positive = LLVMBuildFCmp( > + ctx->soa.bld_base.base.gallivm->builder, > + LLVMRealUGT, face, > + > lp_build_const_float(ctx->soa.bld_base.base.gallivm, 0.0f), > + ""); > + ctx->inputs[soa_index] = LLVMBuildSelect( > + ctx->soa.bld_base.base.gallivm->builder, > + is_face_positive, > + ctx->inputs[soa_index], > + backcolor, > + ""); > + } > } > } > > diff --git a/src/gallium/drivers/r600/r600_shader.c > b/src/gallium/drivers/r600/r600_shader.c > index 310ab62..86ac7ec 100644 > --- a/src/gallium/drivers/r600/r600_shader.c > +++ b/src/gallium/drivers/r600/r600_shader.c > @@ -1119,7 +1119,7 @@ static int tgsi_split_literal_constant(struct > r600_shader_ctx *ctx) > return 0; > } > > -static int process_twoside_color_inputs(struct r600_shader_ctx *ctx) > +static int process_twoside_color_inputs(struct r600_shader_ctx *ctx, > unsigned use_llvm) > { > int i, r, count = ctx->shader->ninput; > > @@ -1130,9 +1130,12 @@ static int process_twoside_color_inputs(struct > r600_shader_ctx *ctx) > if ((r = evergreen_interp_input(ctx, > back_facing_reg))) > return r; > } > - r = select_twoside_color(ctx, i, back_facing_reg); > - if (r) > - return r; > + > + if (!use_llvm) { > + r = select_twoside_color(ctx, i, > back_facing_reg); > + if (r) > + return r; > + } > } > } > return 0; > @@ -1392,7 +1395,7 @@ static int r600_shader_from_tgsi(struct r600_context * > rctx, struct r600_pipe_sh > } > > if (shader->two_side && ctx.colors_used) { > - if ((r = process_twoside_color_inputs(&ctx))) > + if ((r = process_twoside_color_inputs(&ctx, use_llvm))) > return r; > } > > -- > 1.7.11.4 > > _______________________________________________ > mesa-dev mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-dev
