llvmpipe: fix frontface behavior again
authorZack Rusin <zackr@vmware.com>
Sat, 3 Aug 2013 02:08:25 +0000 (22:08 -0400)
committerZack Rusin <zackr@vmware.com>
Sat, 3 Aug 2013 02:21:29 +0000 (22:21 -0400)
Lets make sure the frontface is 1 for front and -1 for back.
Discussed with Roland and Jose.

Signed-off-by: Zack Rusin <zackr@vmware.com>
src/gallium/drivers/llvmpipe/lp_state_setup.c

index cecfbcebe6174ea4646bdb5a9e3d9943a8e6361c..dab5096c61dd11fe956babb88ae20a2d380d90a9 100644 (file)
@@ -182,9 +182,17 @@ 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 face_val = LLVMBuildFSub(builder, a0_0f,
-                                         lp_build_const_float(gallivm, 0.5),
-                                         "");
+   /* Our face val is either 1 or 0 so we do
+    * face = (val * 2) - 1
+    * to make it 1 or -1
+    */
+   LLVMValueRef face_val =
+      LLVMBuildFAdd(builder,
+                    LLVMBuildFMul(builder, a0_0f,
+                                  lp_build_const_float(gallivm, 2.0),
+                                  ""),
+                    lp_build_const_float(gallivm, -1.0),
+                    "");
    LLVMValueRef a0 = vec4f(gallivm, face_val, zero, zero, zero, "facing");
    LLVMValueRef zerovec = vec4f_from_scalar(gallivm, zero, "zero");