Merge remote branch 'upstream/gallium-0.1' into nouveau-gallium-0.1
[mesa.git] / src / mesa / state_tracker / st_atom_depth.c
index 827ad3b548b83a23edea7624c64603fa53b938e1..0e791ceb20873dfec2282c9caee42d29a69a458a 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]);
@@ -115,7 +115,7 @@ update_depth_stencil_alpha(struct st_context *st)
       dsa->stencil[0].value_mask = st->ctx->Stencil.ValueMask[0] & 0xff;
       dsa->stencil[0].write_mask = st->ctx->Stencil.WriteMask[0] & 0xff;
 
-      if (st->ctx->Stencil.TestTwoSide) {
+      if (st->ctx->Stencil._TestTwoSide) {
          dsa->stencil[1].enabled = 1;
          dsa->stencil[1].func = st_compare_func_to_pipe(st->ctx->Stencil.Function[1]);
          dsa->stencil[1].fail_op = gl_stencil_op_to_pipe(st->ctx->Stencil.FailFunc[1]);
@@ -125,6 +125,10 @@ 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];
+         dsa->stencil[1].enabled = 0;
+      }
    }
 
    if (st->ctx->Color.AlphaEnabled) {
@@ -138,10 +142,10 @@ update_depth_stencil_alpha(struct st_context *st)
 
 
 const struct st_tracked_state st_update_depth_stencil_alpha = {
-   .name = "st_update_depth_stencil",
-   .dirty = {
-      .mesa = (_NEW_DEPTH|_NEW_STENCIL|_NEW_COLOR),
-      .st  = 0,
+   "st_update_depth_stencil",                          /* name */
+   {                                                   /* dirty */
+      (_NEW_DEPTH|_NEW_STENCIL|_NEW_COLOR),            /* mesa */
+      0,                                               /* st */
    },
-   .update = update_depth_stencil_alpha
+   update_depth_stencil_alpha                          /* update */
 };