From bfb801538606999234acc51f49b580a12d3525e2 Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Mon, 13 May 2013 21:17:29 +1200 Subject: [PATCH] mesa: add accessor for effective stencil ref 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 Reviewed-by: Paul Berry Reviewed-by: Kenneth Graunke Reviewed-by: Ian Romanick (cherry picked from commit 38f65162af772af6d05627e3af6e8b7caf03ec8f) --- src/mesa/main/stencil.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/mesa/main/stencil.h b/src/mesa/main/stencil.h index b772bfd6e6f..38d48488cd6 100644 --- a/src/mesa/main/stencil.h +++ b/src/mesa/main/stencil.h @@ -78,4 +78,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 clamp its value + * to the range [0, 2^s-1], where 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