diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/mesa/swrast/s_stencil.c | 10 | 
1 files changed, 6 insertions, 4 deletions
diff --git a/src/mesa/swrast/s_stencil.c b/src/mesa/swrast/s_stencil.c index 2c484d5393..09dd4ef883 100644 --- a/src/mesa/swrast/s_stencil.c +++ b/src/mesa/swrast/s_stencil.c @@ -25,9 +25,7 @@  #include "glheader.h"  #include "context.h" -#include "macros.h"  #include "imports.h" -#include "fbobject.h"  #include "s_context.h"  #include "s_depth.h" @@ -441,6 +439,10 @@ stencil_and_ztest_span(GLcontext *ctx, struct sw_span *span, GLuint face)     if (do_stencil_test( ctx, face, n, stencil, mask ) == GL_FALSE) {        /* all fragments failed the stencil test, we're done. */        span->writeAll = GL_FALSE; +      if (!rb->GetPointer(ctx, rb, 0, 0)) { +         /* put updated stencil values into buffer */ +         rb->PutRow(ctx, rb, n, x, y, stencil, NULL); +      }        return GL_FALSE;     } @@ -498,7 +500,7 @@ stencil_and_ztest_span(GLcontext *ctx, struct sw_span *span, GLuint face)      * Write updated stencil values back into hardware stencil buffer.      */     if (!rb->GetPointer(ctx, rb, 0, 0)) { -      rb->PutRow(ctx, rb, n, x, y, stencil, mask); +      rb->PutRow(ctx, rb, n, x, y, stencil, NULL);     }     span->writeAll = GL_FALSE; @@ -1191,7 +1193,7 @@ _swrast_clear_stencil_buffer( GLcontext *ctx, struct gl_renderbuffer *rb )           /* no bit masking */           if (width == rb->Width && rb->DataType == GL_UNSIGNED_BYTE) {              /* optimized case */ -            /* XXX bottom-to-op raster assumed! */ +            /* Note: bottom-to-top raster assumed! */              GLubyte *stencil = rb->GetPointer(ctx, rb, x, y);              GLuint len = width * height * sizeof(GLubyte);              _mesa_memset(stencil, clearVal, len);  | 
