diff options
author | Marek Olšák <[email protected]> | 2017-06-09 20:37:34 +0200 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2017-06-22 01:48:30 +0200 |
commit | c2408838c83719cb133332c7adac71ef50503259 (patch) | |
tree | e09e430dd0678f4398b500824966ce16114bde51 /src/mesa | |
parent | d28cc798bdf10c7e85189dc2dc3461d63e2fbfc7 (diff) |
mesa: replace _mesa_update_stencil() with helper functions
The idea is to remove the dependency on _mesa_update_state_locked,
so that st/mesa can skip it for stencil state updates, and then stop
setting _NEW_STENCIL in mesa/main if the driver is st/mesa.
The main motivation is to stop invoking _mesa_update_state_locked for
certain state groups.
Reviewed-by: Nicolai Hähnle <[email protected]>
Reviewed-by: Brian Paul <[email protected]>
Reviewed-by: Timothy Arceri <[email protected]>
Diffstat (limited to 'src/mesa')
26 files changed, 78 insertions, 66 deletions
diff --git a/src/mesa/drivers/common/driverfuncs.c b/src/mesa/drivers/common/driverfuncs.c index db0a107fe89..5008ae8feaf 100644 --- a/src/mesa/drivers/common/driverfuncs.c +++ b/src/mesa/drivers/common/driverfuncs.c @@ -250,7 +250,7 @@ _mesa_init_driver_state(struct gl_context *ctx) ctx->Driver.Enable(ctx, GL_LINE_SMOOTH, ctx->Line.SmoothFlag); ctx->Driver.Enable(ctx, GL_POLYGON_STIPPLE, ctx->Polygon.StippleFlag); ctx->Driver.Enable(ctx, GL_SCISSOR_TEST, ctx->Scissor.EnableFlags); - ctx->Driver.Enable(ctx, GL_STENCIL_TEST, ctx->Stencil._Enabled); + ctx->Driver.Enable(ctx, GL_STENCIL_TEST, ctx->Stencil.Enabled); ctx->Driver.Enable(ctx, GL_TEXTURE_1D, GL_FALSE); ctx->Driver.Enable(ctx, GL_TEXTURE_2D, GL_FALSE); ctx->Driver.Enable(ctx, GL_TEXTURE_RECTANGLE_NV, GL_FALSE); diff --git a/src/mesa/drivers/dri/i915/i915_state.c b/src/mesa/drivers/dri/i915/i915_state.c index 715db1fffa3..232fc9dce19 100644 --- a/src/mesa/drivers/dri/i915/i915_state.c +++ b/src/mesa/drivers/dri/i915/i915_state.c @@ -127,7 +127,7 @@ i915_update_stencil(struct gl_context * ctx) S5_STENCIL_PASS_Z_PASS_SHIFT)); /* Set back state if different from front. */ - if (ctx->Stencil._TestTwoSide) { + if (_mesa_stencil_is_two_sided(ctx)) { set_ctx_bits(I915_CTXREG_BF_STENCIL_OPS, BFO_STENCIL_REF_MASK | BFO_STENCIL_TEST_MASK | diff --git a/src/mesa/drivers/dri/i915/intel_pixel.c b/src/mesa/drivers/dri/i915/intel_pixel.c index feb1a3f97e8..b536c9b56d5 100644 --- a/src/mesa/drivers/dri/i915/intel_pixel.c +++ b/src/mesa/drivers/dri/i915/intel_pixel.c @@ -28,6 +28,7 @@ #include "main/accum.h" #include "main/enums.h" #include "main/state.h" +#include "main/stencil.h" #include "main/bufferobj.h" #include "main/context.h" #include "swrast/swrast.h" @@ -110,7 +111,7 @@ intel_check_blit_fragment_ops(struct gl_context * ctx, bool src_alpha_is_one) return false; } - if (ctx->Stencil._Enabled) { + if (_mesa_stencil_is_enabled(ctx)) { DBG("fallback due to image stencil\n"); return false; } diff --git a/src/mesa/drivers/dri/i915/intel_pixel_copy.c b/src/mesa/drivers/dri/i915/intel_pixel_copy.c index 213cdbd0f53..e447511f587 100644 --- a/src/mesa/drivers/dri/i915/intel_pixel_copy.c +++ b/src/mesa/drivers/dri/i915/intel_pixel_copy.c @@ -28,6 +28,7 @@ #include "main/glheader.h" #include "main/image.h" #include "main/state.h" +#include "main/stencil.h" #include "main/mtypes.h" #include "main/condrender.h" #include "main/fbobject.h" @@ -111,7 +112,7 @@ do_blit_copypixels(struct gl_context * ctx, return false; } - if (ctx->Stencil._Enabled) { + if (_mesa_stencil_is_enabled(ctx)) { perf_debug("glCopyPixels(): Unsupported stencil test state\n"); return false; } diff --git a/src/mesa/drivers/dri/i965/brw_cc.c b/src/mesa/drivers/dri/i965/brw_cc.c index 78d3bc86d13..f0aa7b89704 100644 --- a/src/mesa/drivers/dri/i965/brw_cc.c +++ b/src/mesa/drivers/dri/i965/brw_cc.c @@ -72,7 +72,7 @@ static void upload_cc_unit(struct brw_context *brw) memset(cc, 0, sizeof(*cc)); /* _NEW_STENCIL | _NEW_BUFFERS */ - if (ctx->Stencil._Enabled) { + if (brw->stencil_enabled) { const unsigned back = ctx->Stencil._BackFace; cc->cc0.stencil_enable = 1; @@ -88,7 +88,7 @@ static void upload_cc_unit(struct brw_context *brw) cc->cc1.stencil_write_mask = ctx->Stencil.WriteMask[0]; cc->cc1.stencil_test_mask = ctx->Stencil.ValueMask[0]; - if (ctx->Stencil._TestTwoSide) { + if (brw->stencil_two_sided) { cc->cc0.bf_stencil_enable = 1; cc->cc0.bf_stencil_func = intel_translate_compare_func(ctx->Stencil.Function[back]); @@ -106,7 +106,7 @@ static void upload_cc_unit(struct brw_context *brw) /* Not really sure about this: */ if (ctx->Stencil.WriteMask[0] || - (ctx->Stencil._TestTwoSide && ctx->Stencil.WriteMask[back])) + (brw->stencil_two_sided && ctx->Stencil.WriteMask[back])) cc->cc0.stencil_write_enable = 1; } diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c index 05b0d8d04ec..ec87817c517 100644 --- a/src/mesa/drivers/dri/i965/brw_context.c +++ b/src/mesa/drivers/dri/i965/brw_context.c @@ -43,6 +43,7 @@ #include "main/vtxfmt.h" #include "main/texobj.h" #include "main/framebuffer.h" +#include "main/stencil.h" #include "vbo/vbo_context.h" @@ -201,6 +202,13 @@ intel_update_state(struct gl_context * ctx) _mesa_unlock_context_textures(ctx); + if (new_state & (_NEW_STENCIL | _NEW_BUFFERS)) { + brw->stencil_enabled = _mesa_stencil_is_enabled(ctx); + brw->stencil_two_sided = _mesa_stencil_is_two_sided(ctx); + brw->stencil_write_enabled = + _mesa_stencil_is_write_enabled(ctx, brw->stencil_two_sided); + } + intel_prepare_render(brw); /* Resolve the depth buffer's HiZ buffer. */ diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h index f4b5b8335fe..2eea3030115 100644 --- a/src/mesa/drivers/dri/i965/brw_context.h +++ b/src/mesa/drivers/dri/i965/brw_context.h @@ -774,6 +774,11 @@ struct brw_context */ bool needs_unlit_centroid_workaround; + /** Derived stencil states. */ + bool stencil_enabled; + bool stencil_two_sided; + bool stencil_write_enabled; + struct isl_device isl_dev; struct blorp_context blorp; diff --git a/src/mesa/drivers/dri/i965/brw_draw.c b/src/mesa/drivers/dri/i965/brw_draw.c index d1309ac4837..821f1e24e94 100644 --- a/src/mesa/drivers/dri/i965/brw_draw.c +++ b/src/mesa/drivers/dri/i965/brw_draw.c @@ -391,7 +391,7 @@ brw_postdraw_set_buffers_need_resolve(struct brw_context *brw) } if (ctx->Extensions.ARB_stencil_texturing && - stencil_irb && ctx->Stencil._WriteEnabled) { + stencil_irb && brw->stencil_write_enabled) { brw_render_cache_set_add_bo(brw, stencil_irb->mt->bo); } diff --git a/src/mesa/drivers/dri/i965/brw_wm.c b/src/mesa/drivers/dri/i965/brw_wm.c index 0f075a11f75..a93f4c50379 100644 --- a/src/mesa/drivers/dri/i965/brw_wm.c +++ b/src/mesa/drivers/dri/i965/brw_wm.c @@ -474,7 +474,7 @@ brw_wm_populate_key(struct brw_context *brw, struct brw_wm_prog_key *key) lookup |= BRW_WM_IZ_DEPTH_WRITE_ENABLE_BIT; /* _NEW_STENCIL | _NEW_BUFFERS */ - if (ctx->Stencil._Enabled) { + if (brw->stencil_enabled) { lookup |= BRW_WM_IZ_STENCIL_TEST_ENABLE_BIT; if (ctx->Stencil.WriteMask[0] || diff --git a/src/mesa/drivers/dri/i965/gen7_misc_state.c b/src/mesa/drivers/dri/i965/gen7_misc_state.c index d417f7c2994..6c69fa8ba59 100644 --- a/src/mesa/drivers/dri/i965/gen7_misc_state.c +++ b/src/mesa/drivers/dri/i965/gen7_misc_state.c @@ -108,7 +108,7 @@ gen7_emit_depth_stencil_hiz(struct brw_context *brw, OUT_BATCH((depth_mt ? depth_mt->pitch - 1 : 0) | (depthbuffer_format << 18) | ((hiz ? 1 : 0) << 22) | - ((stencil_mt != NULL && ctx->Stencil._WriteEnabled) << 27) | + ((stencil_mt != NULL && brw->stencil_write_enabled) << 27) | (brw_depth_writes_enabled(brw) << 28) | (surftype << 29)); diff --git a/src/mesa/drivers/dri/i965/gen8_depth_state.c b/src/mesa/drivers/dri/i965/gen8_depth_state.c index c961c8d7aed..29f16b7960b 100644 --- a/src/mesa/drivers/dri/i965/gen8_depth_state.c +++ b/src/mesa/drivers/dri/i965/gen8_depth_state.c @@ -219,7 +219,7 @@ gen8_emit_depth_stencil_hiz(struct brw_context *brw, emit_depth_packets(brw, depth_mt, brw_depthbuffer_format(brw), surftype, brw_depth_writes_enabled(brw), - stencil_mt, ctx->Stencil._WriteEnabled, + stencil_mt, brw->stencil_write_enabled, hiz, width, height, depth, lod, min_array_element); } @@ -287,7 +287,7 @@ pma_fix_enable(const struct brw_context *brw) * !3DSTATE_DEPTH_BUFFER::Stencil Buffer Enable || * !3DSTATE_STENCIL_BUFFER::Stencil Buffer Enable */ - const bool stencil_writes_enabled = ctx->Stencil._WriteEnabled; + const bool stencil_writes_enabled = brw->stencil_write_enabled; /* 3DSTATE_PS_EXTRA::Pixel Shader Computed Depth Mode != PSCDEPTH_OFF */ const bool ps_computes_depth = @@ -340,7 +340,7 @@ gen8_write_pma_stall_bits(struct brw_context *brw, uint32_t pma_stall_bits) * Flush is also necessary. */ const uint32_t render_cache_flush = - ctx->Stencil._WriteEnabled ? PIPE_CONTROL_RENDER_TARGET_FLUSH : 0; + brw->stencil_write_enabled ? PIPE_CONTROL_RENDER_TARGET_FLUSH : 0; brw_emit_pipe_control_flush(brw, PIPE_CONTROL_CS_STALL | PIPE_CONTROL_DEPTH_CACHE_FLUSH | diff --git a/src/mesa/drivers/dri/i965/genX_state_upload.c b/src/mesa/drivers/dri/i965/genX_state_upload.c index 064880b8209..8c6d3ff012e 100644 --- a/src/mesa/drivers/dri/i965/genX_state_upload.c +++ b/src/mesa/drivers/dri/i965/genX_state_upload.c @@ -1182,7 +1182,7 @@ genX(upload_depth_stencil_state)(struct brw_context *brw) wmds.DepthTestFunction = intel_translate_compare_func(depth->Func); } - if (stencil->_Enabled) { + if (brw->stencil_enabled) { wmds.StencilTestEnable = true; wmds.StencilWriteMask = stencil->WriteMask[0] & 0xff; wmds.StencilTestMask = stencil->ValueMask[0] & 0xff; @@ -1196,9 +1196,9 @@ genX(upload_depth_stencil_state)(struct brw_context *brw) wmds.StencilPassDepthFailOp = intel_translate_stencil_op(stencil->ZFailFunc[0]); - wmds.StencilBufferWriteEnable = stencil->_WriteEnabled; + wmds.StencilBufferWriteEnable = brw->stencil_write_enabled; - if (stencil->_TestTwoSide) { + if (brw->stencil_two_sided) { wmds.DoubleSidedStencilEnable = true; wmds.BackfaceStencilWriteMask = stencil->WriteMask[b] & 0xff; wmds.BackfaceStencilTestMask = stencil->ValueMask[b] & 0xff; diff --git a/src/mesa/drivers/dri/i965/intel_pixel.c b/src/mesa/drivers/dri/i965/intel_pixel.c index d4f86fdffe0..e2babf83c47 100644 --- a/src/mesa/drivers/dri/i965/intel_pixel.c +++ b/src/mesa/drivers/dri/i965/intel_pixel.c @@ -26,6 +26,7 @@ #include "main/accum.h" #include "main/enums.h" #include "main/state.h" +#include "main/stencil.h" #include "main/bufferobj.h" #include "main/context.h" #include "swrast/swrast.h" @@ -107,7 +108,7 @@ intel_check_blit_fragment_ops(struct gl_context * ctx, bool src_alpha_is_one) return false; } - if (ctx->Stencil._Enabled) { + if (_mesa_stencil_is_enabled(ctx)) { DBG("fallback due to image stencil\n"); return false; } diff --git a/src/mesa/drivers/dri/i965/intel_pixel_copy.c b/src/mesa/drivers/dri/i965/intel_pixel_copy.c index 05c35bd61b3..986707c9d80 100644 --- a/src/mesa/drivers/dri/i965/intel_pixel_copy.c +++ b/src/mesa/drivers/dri/i965/intel_pixel_copy.c @@ -25,6 +25,7 @@ #include "main/image.h" #include "main/state.h" +#include "main/stencil.h" #include "main/mtypes.h" #include "main/condrender.h" #include "main/fbobject.h" @@ -115,7 +116,7 @@ do_blit_copypixels(struct gl_context * ctx, return false; } - if (ctx->Stencil._Enabled) { + if (brw->stencil_enabled) { perf_debug("glCopyPixels(): Unsupported stencil test state\n"); return false; } diff --git a/src/mesa/drivers/dri/nouveau/nv04_state_raster.c b/src/mesa/drivers/dri/nouveau/nv04_state_raster.c index fbcc840f891..69664fb40ad 100644 --- a/src/mesa/drivers/dri/nouveau/nv04_state_raster.c +++ b/src/mesa/drivers/dri/nouveau/nv04_state_raster.c @@ -175,7 +175,7 @@ nv04_emit_control(struct gl_context *ctx, int emit) if (ctx->Stencil.WriteMask[0]) nv04->ctrl[0] |= NV04_MULTITEX_TRIANGLE_CONTROL0_STENCIL_WRITE; - if (ctx->Stencil._Enabled) + if (_mesa_stencil_is_enabled(ctx)) nv04->ctrl[1] |= NV04_MULTITEX_TRIANGLE_CONTROL1_STENCIL_ENABLE; nv04->ctrl[1] |= get_comparison_op(ctx->Stencil.Function[0]) << 4 | diff --git a/src/mesa/drivers/dri/nouveau/nv10_state_raster.c b/src/mesa/drivers/dri/nouveau/nv10_state_raster.c index ffde87ab27b..d537f7bc229 100644 --- a/src/mesa/drivers/dri/nouveau/nv10_state_raster.c +++ b/src/mesa/drivers/dri/nouveau/nv10_state_raster.c @@ -145,7 +145,7 @@ nv10_emit_stencil_func(struct gl_context *ctx, int emit) struct nouveau_pushbuf *push = context_push(ctx); BEGIN_NV04(push, NV10_3D(STENCIL_ENABLE), 1); - PUSH_DATAb(push, ctx->Stencil._Enabled); + PUSH_DATAb(push, _mesa_stencil_is_enabled(ctx)); BEGIN_NV04(push, NV10_3D(STENCIL_FUNC_FUNC), 3); PUSH_DATA (push, nvgl_comparison_op(ctx->Stencil.Function[0])); diff --git a/src/mesa/drivers/dri/radeon/radeon_common.c b/src/mesa/drivers/dri/radeon/radeon_common.c index ee4d5f80418..6e4b4c48808 100644 --- a/src/mesa/drivers/dri/radeon/radeon_common.c +++ b/src/mesa/drivers/dri/radeon/radeon_common.c @@ -306,7 +306,6 @@ void radeon_draw_buffer(struct gl_context *ctx, struct gl_framebuffer *fb) if (ctx->Driver.Enable) { ctx->Driver.Enable(ctx, GL_DEPTH_TEST, (ctx->Depth.Test && fb->Visual.depthBits > 0)); - /* Need to update the derived ctx->Stencil._Enabled first */ ctx->Driver.Enable(ctx, GL_STENCIL_TEST, (ctx->Stencil.Enabled && fb->Visual.stencilBits > 0)); } else { diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 65f638b89e6..8872c38a02b 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -856,9 +856,6 @@ struct gl_stencil_attrib GLboolean Enabled; /**< Enabled flag */ GLboolean TestTwoSide; /**< GL_EXT_stencil_two_side */ GLubyte ActiveFace; /**< GL_EXT_stencil_two_side (0 or 2) */ - GLboolean _Enabled; /**< Enabled and stencil buffer present */ - GLboolean _WriteEnabled; /**< _Enabled and non-zero writemasks */ - GLboolean _TestTwoSide; GLubyte _BackFace; /**< Current back stencil state (1 or 2) */ GLenum Function[3]; /**< Stencil function */ GLenum FailFunc[3]; /**< Fail function */ diff --git a/src/mesa/main/state.c b/src/mesa/main/state.c index b7e165fab62..d1d0c2cd998 100644 --- a/src/mesa/main/state.c +++ b/src/mesa/main/state.c @@ -379,9 +379,6 @@ _mesa_update_state_locked( struct gl_context *ctx ) if (new_state & (_NEW_LIGHT | _NEW_PROGRAM)) update_twoside( ctx ); - if (new_state & (_NEW_STENCIL | _NEW_BUFFERS)) - _mesa_update_stencil( ctx ); - if (new_state & _NEW_PIXEL) _mesa_update_pixel( ctx ); diff --git a/src/mesa/main/stencil.c b/src/mesa/main/stencil.c index 4bd7b8803ef..612ad38dcc1 100644 --- a/src/mesa/main/stencil.c +++ b/src/mesa/main/stencil.c @@ -607,34 +607,6 @@ _mesa_StencilMaskSeparate(GLenum face, GLuint mask) /** - * Update derived stencil state. - */ -void -_mesa_update_stencil(struct gl_context *ctx) -{ - const GLint face = ctx->Stencil._BackFace; - - ctx->Stencil._Enabled = (ctx->Stencil.Enabled && - ctx->DrawBuffer->Visual.stencilBits > 0); - - ctx->Stencil._TestTwoSide = - ctx->Stencil._Enabled && - (ctx->Stencil.Function[0] != ctx->Stencil.Function[face] || - ctx->Stencil.FailFunc[0] != ctx->Stencil.FailFunc[face] || - ctx->Stencil.ZPassFunc[0] != ctx->Stencil.ZPassFunc[face] || - ctx->Stencil.ZFailFunc[0] != ctx->Stencil.ZFailFunc[face] || - ctx->Stencil.Ref[0] != ctx->Stencil.Ref[face] || - ctx->Stencil.ValueMask[0] != ctx->Stencil.ValueMask[face] || - ctx->Stencil.WriteMask[0] != ctx->Stencil.WriteMask[face]); - - ctx->Stencil._WriteEnabled = - ctx->Stencil._Enabled && - (ctx->Stencil.WriteMask[0] != 0 || - (ctx->Stencil._TestTwoSide && ctx->Stencil.WriteMask[face] != 0)); -} - - -/** * Initialize the context stipple state. * * \param ctx GL context. diff --git a/src/mesa/main/stencil.h b/src/mesa/main/stencil.h index ccb86469189..dc371ec36cd 100644 --- a/src/mesa/main/stencil.h +++ b/src/mesa/main/stencil.h @@ -86,11 +86,6 @@ _mesa_StencilMaskSeparate_no_error(GLenum face, GLuint mask); extern void GLAPIENTRY _mesa_StencilMaskSeparate(GLenum face, GLuint mask); - -extern void -_mesa_update_stencil(struct gl_context *ctx); - - extern void _mesa_init_stencil( struct gl_context * ctx ); @@ -108,4 +103,35 @@ _mesa_get_stencil_ref(struct gl_context const *ctx, int face) return CLAMP(ref, 0, stencilMax); } +static inline bool +_mesa_stencil_is_enabled(const struct gl_context *ctx) +{ + return ctx->Stencil.Enabled && + ctx->DrawBuffer->Visual.stencilBits > 0; +} + +static inline bool +_mesa_stencil_is_two_sided(const struct gl_context *ctx) +{ + const int face = ctx->Stencil._BackFace; + + return _mesa_stencil_is_enabled(ctx) && + (ctx->Stencil.Function[0] != ctx->Stencil.Function[face] || + ctx->Stencil.FailFunc[0] != ctx->Stencil.FailFunc[face] || + ctx->Stencil.ZPassFunc[0] != ctx->Stencil.ZPassFunc[face] || + ctx->Stencil.ZFailFunc[0] != ctx->Stencil.ZFailFunc[face] || + ctx->Stencil.Ref[0] != ctx->Stencil.Ref[face] || + ctx->Stencil.ValueMask[0] != ctx->Stencil.ValueMask[face] || + ctx->Stencil.WriteMask[0] != ctx->Stencil.WriteMask[face]); +} + +static inline bool +_mesa_stencil_is_write_enabled(const struct gl_context *ctx, bool is_two_sided) +{ + return _mesa_stencil_is_enabled(ctx) && + (ctx->Stencil.WriteMask[0] != 0 || + (is_two_sided && + ctx->Stencil.WriteMask[ctx->Stencil._BackFace] != 0)); +} + #endif diff --git a/src/mesa/state_tracker/st_atom_depth.c b/src/mesa/state_tracker/st_atom_depth.c index 432de4bde3d..3b2beaf6ed7 100644 --- a/src/mesa/state_tracker/st_atom_depth.c +++ b/src/mesa/state_tracker/st_atom_depth.c @@ -128,7 +128,7 @@ st_update_depth_stencil_alpha(struct st_context *st) dsa->stencil[0].writemask = ctx->Stencil.WriteMask[0] & 0xff; sr.ref_value[0] = _mesa_get_stencil_ref(ctx, 0); - if (ctx->Stencil._TestTwoSide) { + if (_mesa_stencil_is_two_sided(ctx)) { const GLuint back = ctx->Stencil._BackFace; dsa->stencil[1].enabled = 1; dsa->stencil[1].func = st_compare_func_to_pipe(ctx->Stencil.Function[back]); diff --git a/src/mesa/swrast/s_context.c b/src/mesa/swrast/s_context.c index 9cb03b38c01..71389c698f2 100644 --- a/src/mesa/swrast/s_context.c +++ b/src/mesa/swrast/s_context.c @@ -29,6 +29,7 @@ #include "main/bufferobj.h" #include "main/mtypes.h" #include "main/samplerobj.h" +#include "main/stencil.h" #include "main/teximage.h" #include "program/prog_parameter.h" #include "program/prog_statevars.h" @@ -61,7 +62,7 @@ _swrast_update_rasterflags( struct gl_context *ctx ) if (ctx->Depth.Test) rasterMask |= DEPTH_BIT; if (swrast->_FogEnabled) rasterMask |= FOG_BIT; if (ctx->Scissor.EnableFlags) rasterMask |= CLIP_BIT; - if (ctx->Stencil._Enabled) rasterMask |= STENCIL_BIT; + if (_mesa_stencil_is_enabled(ctx)) rasterMask |= STENCIL_BIT; for (i = 0; i < ctx->Const.MaxDrawBuffers; i++) { if (!ctx->Color.ColorMask[i][0] || !ctx->Color.ColorMask[i][1] || diff --git a/src/mesa/swrast/s_span.c b/src/mesa/swrast/s_span.c index 49fc580fb1d..81835636a57 100644 --- a/src/mesa/swrast/s_span.c +++ b/src/mesa/swrast/s_span.c @@ -39,6 +39,7 @@ #include "main/imports.h" #include "main/image.h" #include "main/samplerobj.h" +#include "main/stencil.h" #include "main/teximage.h" #include "s_atifragshader.h" @@ -1213,14 +1214,14 @@ _swrast_write_rgba_span( struct gl_context *ctx, SWspan *span) } /* Stencil and Z testing */ - if (ctx->Stencil._Enabled || ctx->Depth.Test) { + if (_mesa_stencil_is_enabled(ctx) || ctx->Depth.Test) { if (!(span->arrayMask & SPAN_Z)) _swrast_span_interpolate_z(ctx, span); if (ctx->Transform.DepthClamp) _swrast_depth_clamp_span(ctx, span); - if (ctx->Stencil._Enabled) { + if (_mesa_stencil_is_enabled(ctx)) { /* Combined Z/stencil tests */ if (!_swrast_stencil_and_ztest_span(ctx, span)) { /* all fragments failed test */ diff --git a/src/mesa/swrast/s_triangle.c b/src/mesa/swrast/s_triangle.c index 876a74b0863..9e4f81e0e0a 100644 --- a/src/mesa/swrast/s_triangle.c +++ b/src/mesa/swrast/s_triangle.c @@ -36,6 +36,7 @@ #include "main/mtypes.h" #include "main/state.h" #include "main/samplerobj.h" +#include "main/stencil.h" #include "main/teximage.h" #include "program/prog_instruction.h" @@ -1023,7 +1024,7 @@ _swrast_choose_triangle( struct gl_context *ctx ) ctx->Depth.Test && ctx->Depth.Mask == GL_FALSE && ctx->Depth.Func == GL_LESS && - !ctx->Stencil._Enabled && + !_mesa_stencil_is_enabled(ctx) && depthRb && depthRb->Format == MESA_FORMAT_Z_UNORM16) { if (ctx->Color.ColorMask[0][0] == 0 && diff --git a/src/mesa/swrast_setup/ss_triangle.c b/src/mesa/swrast_setup/ss_triangle.c index b92c20be2b7..8f034d8aaf0 100644 --- a/src/mesa/swrast_setup/ss_triangle.c +++ b/src/mesa/swrast_setup/ss_triangle.c @@ -29,6 +29,7 @@ #include "main/glheader.h" #include "main/macros.h" #include "main/mtypes.h" +#include "main/stencil.h" #include "tnl/t_context.h" @@ -255,7 +256,7 @@ void _swsetup_choose_trifuncs( struct gl_context *ctx ) */ if (ctx->Polygon.FrontMode != GL_FILL || ctx->Polygon.BackMode != GL_FILL || - (ctx->Stencil.Enabled && ctx->Stencil._TestTwoSide)) + (ctx->Stencil.Enabled && _mesa_stencil_is_two_sided(ctx))) ind |= SS_UNFILLED_BIT; tnl->Driver.Render.Triangle = tri_tab[ind]; |