i915: Make stencil test for no-stencil handling match depth test.
i915_update_draw_buffers() already handles the fallback bit for missing stencil region, so here we just need to handle whether the GL thinks we have stencil data or not (and disable the test if so).
This commit is contained in:
parent
fc4fba52cf
commit
79fee3a76b
|
@ -843,27 +843,17 @@ i915Enable(struct gl_context * ctx, GLenum cap, GLboolean state)
|
|||
break;
|
||||
|
||||
case GL_STENCIL_TEST:
|
||||
{
|
||||
GLboolean hw_stencil = GL_FALSE;
|
||||
if (ctx->DrawBuffer) {
|
||||
struct intel_renderbuffer *irbStencil
|
||||
= intel_get_renderbuffer(ctx->DrawBuffer, BUFFER_STENCIL);
|
||||
hw_stencil = (irbStencil && irbStencil->region);
|
||||
}
|
||||
if (hw_stencil) {
|
||||
dw = i915->state.Ctx[I915_CTXREG_LIS5];
|
||||
if (state)
|
||||
dw |= (S5_STENCIL_TEST_ENABLE | S5_STENCIL_WRITE_ENABLE);
|
||||
else
|
||||
dw &= ~(S5_STENCIL_TEST_ENABLE | S5_STENCIL_WRITE_ENABLE);
|
||||
if (dw != i915->state.Ctx[I915_CTXREG_LIS5]) {
|
||||
i915->state.Ctx[I915_CTXREG_LIS5] = dw;
|
||||
I915_STATECHANGE(i915, I915_UPLOAD_CTX);
|
||||
}
|
||||
}
|
||||
else {
|
||||
FALLBACK(&i915->intel, I915_FALLBACK_STENCIL, state);
|
||||
}
|
||||
if (!ctx->DrawBuffer || !ctx->DrawBuffer->Visual.stencilBits)
|
||||
state = false;
|
||||
|
||||
dw = i915->state.Ctx[I915_CTXREG_LIS5];
|
||||
if (state)
|
||||
dw |= (S5_STENCIL_TEST_ENABLE | S5_STENCIL_WRITE_ENABLE);
|
||||
else
|
||||
dw &= ~(S5_STENCIL_TEST_ENABLE | S5_STENCIL_WRITE_ENABLE);
|
||||
if (dw != i915->state.Ctx[I915_CTXREG_LIS5]) {
|
||||
i915->state.Ctx[I915_CTXREG_LIS5] = dw;
|
||||
I915_STATECHANGE(i915, I915_UPLOAD_CTX);
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
@ -799,8 +799,7 @@ i915_update_draw_buffer(struct intel_context *intel)
|
|||
* Update depth and stencil test state
|
||||
*/
|
||||
ctx->Driver.Enable(ctx, GL_DEPTH_TEST, ctx->Depth.Test);
|
||||
ctx->Driver.Enable(ctx, GL_STENCIL_TEST,
|
||||
(ctx->Stencil.Enabled && fb->Visual.stencilBits > 0));
|
||||
ctx->Driver.Enable(ctx, GL_STENCIL_TEST, ctx->Stencil.Enabled);
|
||||
|
||||
intel->vtbl.set_draw_region(intel, colorRegions, depthRegion,
|
||||
fb->_NumColorDrawBuffers);
|
||||
|
|
Loading…
Reference in New Issue