[Mesa-dev] [PATCH 2/5] i965/vs: Add support for copying user edge flags.

Eric Anholt eric at anholt.net
Sat Jul 28 16:43:33 PDT 2012


Fixes the glsl skinning demo regression since changing to the new GLSL
compiler, and is part of fixing piglit gl-2.0-edgeflag.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=50079
NOTE: This is a candidate for the 8.0 branch.
---
 src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp |   13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
index c77dc91..de7dfce 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
@@ -2193,6 +2193,17 @@ vec4_visitor::emit_urb_slot(int mrf, int vert_result)
          emit_clip_distances(hw_reg, (vert_result - VERT_RESULT_CLIP_DIST0) * 4);
       }
       break;
+   case VERT_RESULT_EDGE:
+      /* This is present when doing unfilled polygons.  We're supposed to copy
+       * the edge flag from the user-provided vertex array
+       * (glEdgeFlagPointer), or otherwise we'll copy from the current value
+       * of that attribute (starts as 1.0f).  This is then used in clipping to
+       * determine which edges should be drawn as wireframe.
+       */
+      current_annotation = "edge flag";
+      emit(MOV(reg, src_reg(dst_reg(ATTR, VERT_ATTRIB_EDGEFLAG,
+                                    glsl_type::float_type, WRITEMASK_XYZW))));
+      break;
    case BRW_VERT_RESULT_PAD:
       /* No need to write to this slot */
       break;
@@ -2249,8 +2260,6 @@ vec4_visitor::emit_urb_writes()
     */
    assert ((max_usable_mrf - base_mrf) % 2 == 0);
 
-   /* FINISHME: edgeflag */
-
    /* First mrf is the g0-based message header containing URB handles and such,
     * which is implied in VS_OPCODE_URB_WRITE.
     */
-- 
1.7.10.4



More information about the mesa-dev mailing list