softpipe: fix computation of fragment[FACE] attribute
authorBrian Paul <brianp@vmware.com>
Sun, 18 Apr 2010 15:46:25 +0000 (09:46 -0600)
committerBrian Paul <brianp@vmware.com>
Sun, 18 Apr 2010 16:02:11 +0000 (10:02 -0600)
In TGSI, front facing is +1 and back-facing is -1.  We were computing
this attribute as +1 and 0 before.  However, the value isn't actually
used anywhere because we machine->Face attribute overrides it in
tgsi_exec.c.  That could be changed, removing some special-case code...

src/gallium/drivers/softpipe/sp_setup.c

index 61be55c..7e2b580 100644 (file)
@@ -387,6 +387,7 @@ setup_sort_vertices(struct setup_context *setup,
    /* We need to know if this is a front or back-facing triangle for:
     *  - the GLSL gl_FrontFacing fragment attribute (bool)
     *  - two-sided stencil test
+    * 0 = front-facing, 1 = back-facing
     */
    setup->facing = 
       ((det > 0.0) ^ 
@@ -664,7 +665,8 @@ setup_tri_coefficients(struct setup_context *setup)
       }
 
       if (spfs->info.input_semantic_name[fragSlot] == TGSI_SEMANTIC_FACE) {
-         setup->coef[fragSlot].a0[0] = 1.0f - setup->facing;
+         /* convert 0 to 1.0 and 1 to -1.0 */
+         setup->coef[fragSlot].a0[0] = setup->facing * -2.0f + 1.0f;
          setup->coef[fragSlot].dadx[0] = 0.0;
          setup->coef[fragSlot].dady[0] = 0.0;
       }
@@ -1019,7 +1021,8 @@ setup_line_coefficients(struct setup_context *setup,
       }
 
       if (spfs->info.input_semantic_name[fragSlot] == TGSI_SEMANTIC_FACE) {
-         setup->coef[fragSlot].a0[0] = 1.0f - setup->facing;
+         /* convert 0 to 1.0 and 1 to -1.0 */
+         setup->coef[fragSlot].a0[0] = setup->facing * -2.0f + 1.0f;
          setup->coef[fragSlot].dadx[0] = 0.0;
          setup->coef[fragSlot].dady[0] = 0.0;
       }
@@ -1265,7 +1268,8 @@ sp_setup_point(struct setup_context *setup,
       }
 
       if (spfs->info.input_semantic_name[fragSlot] == TGSI_SEMANTIC_FACE) {
-         setup->coef[fragSlot].a0[0] = 1.0f - setup->facing;
+         /* convert 0 to 1.0 and 1 to -1.0 */
+         setup->coef[fragSlot].a0[0] = setup->facing * -2.0f + 1.0f;
          setup->coef[fragSlot].dadx[0] = 0.0;
          setup->coef[fragSlot].dady[0] = 0.0;
       }