i915: Fix piglit fbo-nodepth-test on i830.
authorEric Anholt <eric@anholt.net>
Fri, 2 Mar 2012 21:09:51 +0000 (13:09 -0800)
committerEric Anholt <eric@anholt.net>
Sat, 3 Mar 2012 01:16:11 +0000 (17:16 -0800)
This is a direct port of fc4fba52cf7e9616c70dd76b4d6bdba6582e157b from
i915, and fixes GPU hangs when running piglit.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=41372
Reviewed-by: Eric Anholt <eric@anholt.net>
NOTE: This is a candidate for release branches.

src/mesa/drivers/dri/i915/i830_state.c
src/mesa/drivers/dri/i915/i830_vtbl.c

index 3136ced..c6f1b03 100644 (file)
@@ -436,7 +436,10 @@ i830DepthMask(struct gl_context * ctx, GLboolean flag)
    struct i830_context *i830 = i830_context(ctx);
 
    DBG("%s flag (%d)\n", __FUNCTION__, flag);
-   
+
+   if (!ctx->DrawBuffer || !ctx->DrawBuffer->Visual.depthBits)
+      flag = false;
+
    I830_STATECHANGE(i830, I830_UPLOAD_CTX);
 
    i830->state.Ctx[I830_CTXREG_ENABLES_2] &= ~ENABLE_DIS_DEPTH_WRITE_MASK;
@@ -795,6 +798,9 @@ i830Enable(struct gl_context * ctx, GLenum cap, GLboolean state)
       I830_STATECHANGE(i830, I830_UPLOAD_CTX);
       i830->state.Ctx[I830_CTXREG_ENABLES_1] &= ~ENABLE_DIS_DEPTH_TEST_MASK;
 
+      if (!ctx->DrawBuffer || !ctx->DrawBuffer->Visual.depthBits)
+        state = false;
+
       if (state)
          i830->state.Ctx[I830_CTXREG_ENABLES_1] |= ENABLE_DEPTH_TEST;
       else
index 8b25596..8acbc87 100644 (file)
@@ -826,8 +826,7 @@ i830_update_draw_buffer(struct intel_context *intel)
    /*
     * Update depth and stencil test state
     */
-   ctx->Driver.Enable(ctx, GL_DEPTH_TEST,
-                     (ctx->Depth.Test && fb->Visual.depthBits > 0));
+   ctx->Driver.Enable(ctx, GL_DEPTH_TEST, ctx->Depth.Test);
    ctx->Driver.Enable(ctx, GL_STENCIL_TEST,
                      (ctx->Stencil.Enabled && fb->Visual.stencilBits > 0));