mesa: Always use the original mask to update stencil buffer
in stencil_and_ztest_pixels. fix #12263
This commit is contained in:
@@ -923,6 +923,8 @@ stencil_and_ztest_pixels( GLcontext *ctx, SWspan *span, GLuint face )
|
||||
ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
|
||||
_swrast_get_values(ctx, rb, n, x, y, stencil, sizeof(GLubyte));
|
||||
|
||||
_mesa_memcpy(origMask, mask, n * sizeof(GLubyte));
|
||||
|
||||
(void) do_stencil_test(ctx, face, n, stencil, mask);
|
||||
|
||||
if (ctx->Depth.Test == GL_FALSE) {
|
||||
@@ -930,11 +932,12 @@ stencil_and_ztest_pixels( GLcontext *ctx, SWspan *span, GLuint face )
|
||||
n, stencil, mask);
|
||||
}
|
||||
else {
|
||||
_mesa_memcpy(origMask, mask, n * sizeof(GLubyte));
|
||||
GLubyte tmpMask[MAX_WIDTH];
|
||||
_mesa_memcpy(tmpMask, mask, n * sizeof(GLubyte));
|
||||
|
||||
_swrast_depth_test_span(ctx, span);
|
||||
|
||||
compute_pass_fail_masks(n, origMask, mask, passMask, failMask);
|
||||
compute_pass_fail_masks(n, tmpMask, mask, passMask, failMask);
|
||||
|
||||
if (ctx->Stencil.ZFailFunc[face] != GL_KEEP) {
|
||||
apply_stencil_op(ctx, ctx->Stencil.ZFailFunc[face], face,
|
||||
|
||||
Reference in New Issue
Block a user