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, &reg, 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

Reply via email to