diff options
| author | Brian Paul <brianp@vmware.com> | 2010-06-23 09:19:18 -0600 | 
|---|---|---|
| committer | Brian Paul <brianp@vmware.com> | 2010-06-23 09:20:02 -0600 | 
| commit | 292eecca8c4284cbb343d954b76586fcaa26de2a (patch) | |
| tree | 8b1ac5459cf37ba2207c4307dfbf85cb4c430ea0 /src | |
| parent | 985c2fca10b9338ef894cf8d34877dfbe7468e6e (diff) | |
draw: mask off DRAW_PIPE_FLAG_MASK bits in prim decompose code
Any elt may potentially have flags bits set so mask off those bits
everywhere.
Fixes crashes with demos/gamma.c, redbook/polys.c, etc. but polygon
stippling is still broken.
Diffstat (limited to 'src')
| -rw-r--r-- | src/gallium/auxiliary/draw/draw_pipe.c | 50 | 
1 files changed, 25 insertions, 25 deletions
| diff --git a/src/gallium/auxiliary/draw/draw_pipe.c b/src/gallium/auxiliary/draw/draw_pipe.c index 83556f10a8..a8b9dc6014 100644 --- a/src/gallium/auxiliary/draw/draw_pipe.c +++ b/src/gallium/auxiliary/draw/draw_pipe.c @@ -177,15 +177,15 @@ static void do_triangle( struct draw_context *draw,                  ( DRAW_PIPE_RESET_STIPPLE |     \                    DRAW_PIPE_EDGE_FLAG_0 |       \                    DRAW_PIPE_EDGE_FLAG_1 ),      \ -                verts + stride * elts[i0],      \ -                verts + stride * elts[i1],      \ -                verts + stride * elts[i2]);     \ +                verts + stride * (elts[i0] & ~DRAW_PIPE_FLAG_MASK),     \ +                verts + stride * (elts[i1] & ~DRAW_PIPE_FLAG_MASK),     \ +                verts + stride * (elts[i2] & ~DRAW_PIPE_FLAG_MASK));    \     do_triangle( draw,                           \                  ( DRAW_PIPE_EDGE_FLAG_1 |       \                    DRAW_PIPE_EDGE_FLAG_2 ),      \ -                verts + stride * elts[i0],      \ -                verts + stride * elts[i2],      \ -                verts + stride * elts[i3]) +                verts + stride * (elts[i0] & ~DRAW_PIPE_FLAG_MASK),     \ +                verts + stride * (elts[i2] & ~DRAW_PIPE_FLAG_MASK),     \ +                verts + stride * (elts[i3] & ~DRAW_PIPE_FLAG_MASK))  /* emit last quad vertex as last vertex in triangles */  #define QUAD_LAST_PV(i0,i1,i2,i3)               \ @@ -193,15 +193,15 @@ static void do_triangle( struct draw_context *draw,                  ( DRAW_PIPE_RESET_STIPPLE |     \                    DRAW_PIPE_EDGE_FLAG_0 |       \                    DRAW_PIPE_EDGE_FLAG_2 ),      \ -                verts + stride * elts[i0],      \ -                verts + stride * elts[i1],      \ -                verts + stride * elts[i3]);     \ +                verts + stride * (elts[i0] & ~DRAW_PIPE_FLAG_MASK),     \ +                verts + stride * (elts[i1] & ~DRAW_PIPE_FLAG_MASK),     \ +                verts + stride * (elts[i3] & ~DRAW_PIPE_FLAG_MASK));    \     do_triangle( draw,                           \                  ( DRAW_PIPE_EDGE_FLAG_0 |       \                    DRAW_PIPE_EDGE_FLAG_1 ),      \ -                verts + stride * elts[i1],      \ -                verts + stride * elts[i2],      \ -                verts + stride * elts[i3]) +                verts + stride * (elts[i1] & ~DRAW_PIPE_FLAG_MASK),     \ +                verts + stride * (elts[i2] & ~DRAW_PIPE_FLAG_MASK),     \ +                verts + stride * (elts[i3] & ~DRAW_PIPE_FLAG_MASK))  #define TRIANGLE(flags,i0,i1,i2)                                        \     do_triangle( draw,                                                   \ @@ -218,7 +218,7 @@ static void do_triangle( struct draw_context *draw,  #define POINT(i0)                               \     do_point( draw,                              \ -             verts + stride * elts[i0] ) +             verts + stride * (elts[i0] & ~DRAW_PIPE_FLAG_MASK) )  #define FUNC pipe_run  #define ARGS                                    \ @@ -296,14 +296,14 @@ void draw_pipeline_run( struct draw_context *draw,                    DRAW_PIPE_EDGE_FLAG_0 |                        \                    DRAW_PIPE_EDGE_FLAG_1 ),                       \                  verts + stride * ((i0) & ~DRAW_PIPE_FLAG_MASK),  \ -                verts + stride * (i1),                           \ -                verts + stride * (i2));                          \ +                verts + stride * ((i1) & ~DRAW_PIPE_FLAG_MASK),  \ +                verts + stride * ((i2) & ~DRAW_PIPE_FLAG_MASK)); \     do_triangle( draw,                                            \                  ( DRAW_PIPE_EDGE_FLAG_1 |                        \                    DRAW_PIPE_EDGE_FLAG_2 ),                       \                  verts + stride * ((i0) & ~DRAW_PIPE_FLAG_MASK),  \ -                verts + stride * (i2),                           \ -                verts + stride * (i3)) +                verts + stride * ((i2) & ~DRAW_PIPE_FLAG_MASK),  \ +                verts + stride * ((i3) & ~DRAW_PIPE_FLAG_MASK))  /* emit last quad vertex as last vertex in triangles */  #define QUAD_LAST_PV(i0,i1,i2,i3)                                \ @@ -312,31 +312,31 @@ void draw_pipeline_run( struct draw_context *draw,                    DRAW_PIPE_EDGE_FLAG_0 |                        \                    DRAW_PIPE_EDGE_FLAG_2 ),                       \                  verts + stride * ((i0) & ~DRAW_PIPE_FLAG_MASK),  \ -                verts + stride * (i1),                           \ -                verts + stride * (i3));                          \ +                verts + stride * ((i1) & ~DRAW_PIPE_FLAG_MASK),  \ +                verts + stride * ((i3) & ~DRAW_PIPE_FLAG_MASK)); \     do_triangle( draw,                                            \                  ( DRAW_PIPE_EDGE_FLAG_0 |                        \                    DRAW_PIPE_EDGE_FLAG_1 ),                       \                  verts + stride * ((i1) & ~DRAW_PIPE_FLAG_MASK),  \ -                verts + stride * (i2),                           \ -                verts + stride * (i3)) +                verts + stride * ((i2) & ~DRAW_PIPE_FLAG_MASK),  \ +                verts + stride * ((i3) & ~DRAW_PIPE_FLAG_MASK))  #define TRIANGLE(flags,i0,i1,i2)                                 \     do_triangle( draw,                                            \                  flags,  /* flags */                              \                  verts + stride * ((i0) & ~DRAW_PIPE_FLAG_MASK),  \ -                verts + stride * (i1),                           \ -                verts + stride * (i2)) +                verts + stride * ((i1) & ~DRAW_PIPE_FLAG_MASK),  \ +                verts + stride * ((i2) & ~DRAW_PIPE_FLAG_MASK))  #define LINE(flags,i0,i1)                                   \     do_line( draw,                                           \              flags,                                          \              verts + stride * ((i0) & ~DRAW_PIPE_FLAG_MASK), \ -            verts + stride * (i1)) +            verts + stride * ((i1) & ~DRAW_PIPE_FLAG_MASK))  #define POINT(i0)                               \     do_point( draw,                              \ -             verts + stride * i0 ) +             verts + stride * ((i0) & ~DRAW_PIPE_FLAG_MASK) )  #define FUNC pipe_run_linear  #define ARGS                                    \ | 
