[Mesa-dev] [PATCH v2] mesa: Initializes the stencil value masks to 0xFF instead of ~0u
Eduardo Lima Mitev
elima at igalia.com
Mon Dec 15 08:04:52 PST 2014
4.1.4 Stencil Test section of the GLES3 spec says: "In the initial state,
[...] the front and back stencil mask are both set to the value 2 s − 1,
where s is greater than or equal to the number of bits in the deepest
stencil buffer* supported by the GL implementation."
Since the maximum supported precision for stencil buffers is 8 bits, mask
values should be initialized to 2^8 - 1 = 0xFF.
Currently, these masks are initialized to max unsigned integer (~0u), which
causes their values to overflow to -1 when converted to signed int by glGet* APIs.
This patch intializes the stencil value masks to 0xFF instead.
Fixes 6 dEQP failing tests:
* dEQP-GLES3.functional.state_query.integers.stencil_value_mask_getfloat
* dEQP-GLES3.functional.state_query.integers.stencil_back_value_mask_getfloat
* dEQP-GLES3.functional.state_query.integers.stencil_value_mask_separate_getfloat
* dEQP-GLES3.functional.state_query.integers.stencil_value_mask_separate_both_getfloat
* dEQP-GLES3.functional.state_query.integers.stencil_back_value_mask_separate_getfloat
* dEQP-GLES3.functional.state_query.integers.stencil_back_value_mask_separate_both_getfloat
---
src/mesa/main/stencil.c | 24 ++++++++++++++++++------
1 file changed, 18 insertions(+), 6 deletions(-)
diff --git a/src/mesa/main/stencil.c b/src/mesa/main/stencil.c
index f65116a..71932cf 100644
--- a/src/mesa/main/stencil.c
+++ b/src/mesa/main/stencil.c
@@ -573,12 +573,24 @@ _mesa_init_stencil(struct gl_context *ctx)
ctx->Stencil.Ref[0] = 0;
ctx->Stencil.Ref[1] = 0;
ctx->Stencil.Ref[2] = 0;
- ctx->Stencil.ValueMask[0] = ~0U;
- ctx->Stencil.ValueMask[1] = ~0U;
- ctx->Stencil.ValueMask[2] = ~0U;
- ctx->Stencil.WriteMask[0] = ~0U;
- ctx->Stencil.WriteMask[1] = ~0U;
- ctx->Stencil.WriteMask[2] = ~0U;
+
+ /* 4.1.4 Stencil Test section of the GLES3 spec says:
+ *
+ * "In the initial state, [...] the front and back stencil mask are both
+ * set to the value 2 s − 1, where s is greater than or equal to the
+ * number of bits in the deepest stencil buffer* supported by the GL
+ * implementation."
+ *
+ * Since the maximum supported precision for stencil buffers is 8 bits,
+ * mask values should be initialized to 2^8 - 1 = 0xFF.
+ */
+ ctx->Stencil.ValueMask[0] = 0xFF;
+ ctx->Stencil.ValueMask[1] = 0xFF;
+ ctx->Stencil.ValueMask[2] = 0xFF;
+ ctx->Stencil.WriteMask[0] = 0xFF;
+ ctx->Stencil.WriteMask[1] = 0xFF;
+ ctx->Stencil.WriteMask[2] = 0xFF;
+
ctx->Stencil.Clear = 0;
ctx->Stencil._BackFace = 1;
}
--
2.1.3
More information about the mesa-dev
mailing list