[Mesa-dev] [PATCH 1/2] llvmpipe: make the front-face behavior match the gallium spec

Roland Scheidegger sroland at vmware.com
Wed Jul 31 17:59:20 PDT 2013


Am 31.07.2013 13:38, schrieb Zack Rusin:
> The spec says that front-face is true if the value is >0 and false
> if it's <0. To make sure that we follow the spec, lets just
> subtract 0.5 from our value (llvmpipe did 1 for frontface and 0
> otherwise), which will get us a positive num for frontface and
> negative for backface.
> 
> Signed-off-by: Zack Rusin <zackr at vmware.com>
> ---
>  src/gallium/drivers/llvmpipe/lp_state_setup.c |    5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/src/gallium/drivers/llvmpipe/lp_state_setup.c b/src/gallium/drivers/llvmpipe/lp_state_setup.c
> index bb5cfc4..cecfbce 100644
> --- a/src/gallium/drivers/llvmpipe/lp_state_setup.c
> +++ b/src/gallium/drivers/llvmpipe/lp_state_setup.c
> @@ -182,7 +182,10 @@ emit_facing_coef(struct gallivm_state *gallivm,
>     LLVMValueRef a0_0 = args->facing;
>     LLVMValueRef a0_0f = LLVMBuildSIToFP(builder, a0_0, float_type, "");
>     LLVMValueRef zero = lp_build_const_float(gallivm, 0.0);
> -   LLVMValueRef a0 = vec4f(gallivm, a0_0f, zero, zero, zero, "facing");
> +   LLVMValueRef face_val = LLVMBuildFSub(builder, a0_0f,
> +                                         lp_build_const_float(gallivm, 0.5),
> +                                         "");
> +   LLVMValueRef a0 = vec4f(gallivm, face_val, zero, zero, zero, "facing");
>     LLVMValueRef zerovec = vec4f_from_scalar(gallivm, zero, "zero");
>  
>     store_coef(gallivm, args, slot, a0, zerovec, zerovec);
> 

Looks good though I suspect using shl/sub before sitofp would be
slightly cheaper than the fsub. Hard to tell though :-).
Reviewed-by: Roland Scheidegger <sroland at vmware.com>


More information about the mesa-dev mailing list