i965/vs: Convert EdgeFlagPointer values appropriately for the VS on gen4.
authorEric Anholt <eric@anholt.net>
Fri, 27 Jul 2012 22:57:07 +0000 (15:57 -0700)
committerEric Anholt <eric@anholt.net>
Thu, 9 Aug 2012 16:07:49 +0000 (09:07 -0700)
Fixes piglit gl-2.0/edgeflag.

NOTE: This is a candidate for the 8.0 branch.
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_draw_upload.c

index 82dd81d03c0301323ed7842e96dc71441a2ce0e3..b606de226b16f7523dc5e0eb4fc319a507c4ebba 100644 (file)
@@ -721,6 +721,16 @@ static void brw_emit_vertices(struct brw_context *brw)
       uint32_t comp2 = BRW_VE1_COMPONENT_STORE_SRC;
       uint32_t comp3 = BRW_VE1_COMPONENT_STORE_SRC;
 
+      /* The gen4 driver expects edgeflag to come in as a float, and passes
+       * that float on to the tests in the clipper.  Mesa's current vertex
+       * attribute value for EdgeFlag is stored as a float, which works out.
+       * glEdgeFlagPointer, on the other hand, gives us an unnormalized
+       * integer ubyte.  Just rewrite that to convert to a float.
+       */
+      if (input->attrib == VERT_ATTRIB_EDGEFLAG &&
+          format == BRW_SURFACEFORMAT_R8_UINT)
+         format = BRW_SURFACEFORMAT_R8_SSCALED;
+
       switch (input->glarray->Size) {
       case 0: comp0 = BRW_VE1_COMPONENT_STORE_0;
       case 1: comp1 = BRW_VE1_COMPONENT_STORE_0;