mesa: add accessor for effective stencil ref
authorChris Forbes <chrisf@ijw.co.nz>
Mon, 13 May 2013 09:17:29 +0000 (21:17 +1200)
committerChris Forbes <chrisf@ijw.co.nz>
Wed, 15 May 2013 10:00:55 +0000 (22:00 +1200)
Clamps the stencil reference value to the range representable in the
currently-bound draw framebuffer's stencil attachment.

V2: Add spec quote.

NOTE: This is a candidate for stable branches.

Signed-off-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/mesa/main/stencil.h

index 1d5e01c42044bccc651c4d8bad396fffe58e1258..f2f7d37c6174610fd8da8fcfbbc775bfbdb1d422 100644 (file)
@@ -79,4 +79,18 @@ _mesa_update_stencil(struct gl_context *ctx);
 extern void 
 _mesa_init_stencil( struct gl_context * ctx );
 
+/* From the GL 4.3 spec, 17.3.5:
+ *    "Stencil comparison operations and queries of <ref> clamp its value
+ *    to the range [0, 2^s-1], where <s> is the number of bits in the
+ *    stencil buffer attached to the draw framebuffer."
+ */
+
+static inline GLint
+_mesa_get_stencil_ref(struct gl_context const *ctx, int face)
+{
+   GLint stencilMax = (1 << ctx->DrawBuffer->Visual.stencilBits) - 1;
+   GLint ref = ctx->Stencil.Ref[face];
+   return CLAMP(ref, 0, stencilMax);
+}
+
 #endif