r600: don't enable depth test if there is no depth buffer
authorJerome Glisse <jglisse@redhat.com>
Fri, 23 Apr 2010 09:56:06 +0000 (11:56 +0200)
committerJerome Glisse <jglisse@redhat.com>
Fri, 23 Apr 2010 09:56:06 +0000 (11:56 +0200)
If there is no depth buffer bound to current context don't
enable depth test. GL states that if depth test is enabled
without depth buffer it's as if depth buffer always pass.

Signed-off-by: Jerome Glisse <jglisse@redhat.com>
src/mesa/drivers/dri/r600/r700_state.c

index 12eaebbc16b6b6dd2e38cd213d6252fd031a0fb1..0d7cb8ecfe5c14b73bd57159217e8bc4eaf1e3a3 100644 (file)
@@ -252,12 +252,15 @@ void r700UpdateShaderStates(GLcontext * ctx)
 
 static void r700SetDepthState(GLcontext * ctx)
 {
+       struct radeon_renderbuffer *rrb;
        context_t *context = R700_CONTEXT(ctx);
        R700_CHIP_CONTEXT *r700 = (R700_CHIP_CONTEXT*)(&context->hw);
 
        R600_STATECHANGE(context, db);
 
-    if (ctx->Depth.Test)
+       rrb = radeon_get_depthbuffer(&context->radeon);
+
+    if (ctx->Depth.Test && rrb && rrb->bo)
     {
         SETbit(r700->DB_DEPTH_CONTROL.u32All, Z_ENABLE_bit);
         if (ctx->Depth.Mask)