nouveau: only enable the depth test if there actually is a depth buffer
authorIlia Mirkin <imirkin@alum.mit.edu>
Fri, 15 Aug 2014 05:25:06 +0000 (01:25 -0400)
committerIlia Mirkin <imirkin@alum.mit.edu>
Fri, 12 Sep 2014 04:50:56 +0000 (00:50 -0400)
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Cc: "10.2 10.3" <mesa-stable@lists.freedesktop.org>
src/mesa/drivers/dri/nouveau/nv04_state_fb.c
src/mesa/drivers/dri/nouveau/nv04_state_raster.c
src/mesa/drivers/dri/nouveau/nv10_state_fb.c
src/mesa/drivers/dri/nouveau/nv10_state_raster.c
src/mesa/drivers/dri/nouveau/nv20_state_fb.c

index 8b0857d281d379e439712bf616a5fabc38ec18de..4c17190b8c44776293e1154a3bf62a4982a18287 100644 (file)
@@ -93,6 +93,7 @@ nv04_emit_framebuffer(struct gl_context *ctx, int emit)
 
        /* Recompute the scissor state. */
        context_dirty(ctx, SCISSOR);
+       context_dirty(ctx, CONTROL);
 }
 
 void
index 41261195d814e99026b293f408f30210f65655ce..26cf32f2a25ada2c7289b8d2e94f9c00f3fea184 100644 (file)
@@ -123,6 +123,7 @@ void
 nv04_emit_control(struct gl_context *ctx, int emit)
 {
        struct nv04_context *nv04 = to_nv04_context(ctx);
+       struct gl_framebuffer *fb = ctx->DrawBuffer;
        int cull = ctx->Polygon.CullFaceMode;
        int front = ctx->Polygon.FrontFace;
 
@@ -146,9 +147,9 @@ nv04_emit_control(struct gl_context *ctx, int emit)
                                 NV04_TEXTURED_TRIANGLE_CONTROL_CULL_MODE_CCW;
 
        /* Depth test. */
-       if (ctx->Depth.Test)
+       if (ctx->Depth.Test && fb->Visual.depthBits > 0)
                nv04->ctrl[0] |= NV04_TEXTURED_TRIANGLE_CONTROL_Z_ENABLE;
-       if (ctx->Depth.Mask)
+       if (ctx->Depth.Mask && fb->Visual.depthBits > 0)
                nv04->ctrl[0] |= NV04_TEXTURED_TRIANGLE_CONTROL_Z_WRITE;
 
        nv04->ctrl[0] |= get_comparison_op(ctx->Depth.Func) << 16;
index fb66b2d5494db0874b057fe31aecbfb14e66e22a..75931849eb9ffd1cde5caf2f14de5e2121cbc640 100644 (file)
@@ -152,6 +152,7 @@ nv10_emit_framebuffer(struct gl_context *ctx, int emit)
 
        context_dirty(ctx, VIEWPORT);
        context_dirty(ctx, SCISSOR);
+       context_dirty(ctx, DEPTH);
 }
 
 void
index da414a0b06b84ac133035b0c8b92d4bc6a90d2a7..d34cf91dafdeb5ae1d82007d5dfacd746d8a1125 100644 (file)
@@ -97,11 +97,12 @@ void
 nv10_emit_depth(struct gl_context *ctx, int emit)
 {
        struct nouveau_pushbuf *push = context_push(ctx);
+       struct gl_framebuffer *fb = ctx->DrawBuffer;
 
        BEGIN_NV04(push, NV10_3D(DEPTH_TEST_ENABLE), 1);
-       PUSH_DATAb(push, ctx->Depth.Test);
+       PUSH_DATAb(push, ctx->Depth.Test && fb->Visual.depthBits > 0);
        BEGIN_NV04(push, NV10_3D(DEPTH_WRITE_ENABLE), 1);
-       PUSH_DATAb(push, ctx->Depth.Mask);
+       PUSH_DATAb(push, ctx->Depth.Mask && fb->Visual.depthBits > 0);
        BEGIN_NV04(push, NV10_3D(DEPTH_FUNC), 1);
        PUSH_DATA (push, nvgl_comparison_op(ctx->Depth.Func));
 }
index 6e3049e402ee690bf6f8fd12996a0bd3bd2d35ac..cc6b6b06196af17c555fcebb111c6acde06d23ef 100644 (file)
@@ -128,6 +128,7 @@ nv20_emit_framebuffer(struct gl_context *ctx, int emit)
        /* Recompute the viewport/scissor state. */
        context_dirty(ctx, VIEWPORT);
        context_dirty(ctx, SCISSOR);
+       context_dirty(ctx, DEPTH);
 }
 
 void