gallium: don't enable stencil test if no stencil buffer.
authorBrian Paul <brian.paul@tungstengraphics.com>
Tue, 25 Mar 2008 01:59:59 +0000 (19:59 -0600)
committerBrian Paul <brian.paul@tungstengraphics.com>
Tue, 25 Mar 2008 01:59:59 +0000 (19:59 -0600)
Also, if not doing two-sided stencil, set back-face state = front-face state.

src/mesa/state_tracker/st_atom_depth.c

index 827ad3b548b83a23edea7624c64603fa53b938e1..03057e37fa0fe8c64423ff71c43e2588de0dbdd2 100644 (file)
@@ -105,7 +105,7 @@ update_depth_stencil_alpha(struct st_context *st)
        st->ctx->Query.CurrentOcclusionObject->Active)
       dsa->depth.occlusion_count = 1;
 
-   if (st->ctx->Stencil.Enabled) {
+   if (st->ctx->Stencil.Enabled && st->ctx->Visual.stencilBits > 0) {
       dsa->stencil[0].enabled = 1;
       dsa->stencil[0].func = st_compare_func_to_pipe(st->ctx->Stencil.Function[0]);
       dsa->stencil[0].fail_op = gl_stencil_op_to_pipe(st->ctx->Stencil.FailFunc[0]);
@@ -125,6 +125,9 @@ update_depth_stencil_alpha(struct st_context *st)
          dsa->stencil[1].value_mask = st->ctx->Stencil.ValueMask[1] & 0xff;
          dsa->stencil[1].write_mask = st->ctx->Stencil.WriteMask[1] & 0xff;
       }
+      else {
+         dsa->stencil[1] = dsa->stencil[0];
+      }
    }
 
    if (st->ctx->Color.AlphaEnabled) {