projects
/
mesa.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
swrast: fix selection/feedback regression
[mesa.git]
/
src
/
mesa
/
swrast
/
s_stencil.c
diff --git
a/src/mesa/swrast/s_stencil.c
b/src/mesa/swrast/s_stencil.c
index d0cbdd6917d837bf3b1c0ff88f123f0a1b4ec1a9..2e84ddec71fa2f874bd7ae818dfa4a0bc0acfb14 100644
(file)
--- a/
src/mesa/swrast/s_stencil.c
+++ b/
src/mesa/swrast/s_stencil.c
@@
-23,9
+23,9
@@
*/
*/
-#include "glheader.h"
-#include "context.h"
-#include "imports.h"
+#include "
main/
glheader.h"
+#include "
main/
context.h"
+#include "
main/
imports.h"
#include "s_context.h"
#include "s_depth.h"
#include "s_context.h"
#include "s_depth.h"
@@
-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));
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) {
(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 {
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);
_swrast_depth_test_span(ctx, span);
- compute_pass_fail_masks(n,
orig
Mask, mask, passMask, failMask);
+ compute_pass_fail_masks(n,
tmp
Mask, mask, passMask, failMask);
if (ctx->Stencil.ZFailFunc[face] != GL_KEEP) {
apply_stencil_op(ctx, ctx->Stencil.ZFailFunc[face], face,
if (ctx->Stencil.ZFailFunc[face] != GL_KEEP) {
apply_stencil_op(ctx, ctx->Stencil.ZFailFunc[face], face,
@@
-994,10
+997,12
@@
stencil_and_ztest_pixels( GLcontext *ctx, SWspan *span, GLuint face )
GLboolean
_swrast_stencil_and_ztest_span(GLcontext *ctx, SWspan *span)
{
GLboolean
_swrast_stencil_and_ztest_span(GLcontext *ctx, SWspan *span)
{
+ const GLuint face = (span->facing == 0) ? 0 : ctx->Stencil._BackFace;
+
if (span->arrayMask & SPAN_XY)
if (span->arrayMask & SPAN_XY)
- return stencil_and_ztest_pixels(ctx, span,
span->facing
);
+ return stencil_and_ztest_pixels(ctx, span,
face
);
else
else
- return stencil_and_ztest_span(ctx, span,
span->facing
);
+ return stencil_and_ztest_span(ctx, span,
face
);
}
}