gallium/draw: apply DRAW_PIPE_FLAG_MASK to all vertex elements
authorBrian Paul <brianp@vmware.com>
Fri, 22 Jan 2010 18:45:40 +0000 (11:45 -0700)
committerBrian Paul <brianp@vmware.com>
Fri, 22 Jan 2010 18:49:51 +0000 (11:49 -0700)
Depending on first/last provoking vertex either the first or last
element/index may have the extra DRAW_PIPE_x flags.  Mask off those
bits for all vertex elements to be safe (esp. for the quad case).
This may be overly cautious, but it's a cheap operation.

Fixes a segfault caused by large/bogus vertex indexes otherwise.

src/gallium/auxiliary/draw/draw_pipe.c

index c9fd1a793aea800169c978c06f98b87c08ffe2f8..11d6485dcf074021eb5b67292b54a20871387dc5 100644 (file)
@@ -187,14 +187,14 @@ static void do_triangle( struct draw_context *draw,
    do_triangle( draw,                                                   \
                 elts[i0],  /* flags */                                  \
                 verts + stride * (elts[i0] & ~DRAW_PIPE_FLAG_MASK),     \
-                verts + stride * elts[i1],                              \
-                verts + stride * elts[i2])
+                verts + stride * (elts[i1] & ~DRAW_PIPE_FLAG_MASK),     \
+                verts + stride * (elts[i2] & ~DRAW_PIPE_FLAG_MASK) );
 
 #define LINE(flags,i0,i1)                                       \
    do_line( draw,                                               \
             elts[i0],                                           \
             verts + stride * (elts[i0] & ~DRAW_PIPE_FLAG_MASK), \
-            verts + stride * elts[i1])
+            verts + stride * (elts[i1] & ~DRAW_PIPE_FLAG_MASK) );
 
 #define POINT(i0)                               \
    do_point( draw,                              \