freedreno: clear fixes
authorRob Clark <robdclark@gmail.com>
Tue, 5 Mar 2013 22:49:43 +0000 (17:49 -0500)
committerRob Clark <robdclark@gmail.com>
Tue, 19 Mar 2013 14:49:30 +0000 (10:49 -0400)
Some fixes for clearing only depth or only stencil.

Signed-off-by: Rob Clark <robdclark@gmail.com>
src/gallium/drivers/freedreno/freedreno_clear.c
src/gallium/drivers/freedreno/freedreno_gmem.c

index 04d85ad919870fb6db0504987614d1bd744c45d4..545e8ad312586243de108c0c8aaed71c73f1a37e 100644 (file)
@@ -105,16 +105,27 @@ fd_clear(struct pipe_context *pctx, unsigned buffers,
        OUT_PKT3(ring, CP_SET_CONSTANT, 2);
        OUT_RING(ring, CP_REG(REG_RB_COPY_CONTROL));
        reg = 0;
-       if (buffers & PIPE_CLEAR_DEPTH) {
-               reg |= RB_COPY_CONTROL_CLEAR_MASK(0xf) |
-                               RB_COPY_CONTROL_DEPTH_CLEAR_ENABLE;
+       if (buffers & (PIPE_CLEAR_DEPTH | PIPE_CLEAR_STENCIL)) {
+               reg |= RB_COPY_CONTROL_DEPTH_CLEAR_ENABLE;
+               switch (fd_pipe2depth(fb->zsbuf->format)) {
+               case DEPTHX_24_8:
+                       if (buffers & PIPE_CLEAR_DEPTH)
+                               reg |= RB_COPY_CONTROL_CLEAR_MASK(0xe);
+                       if (buffers & PIPE_CLEAR_STENCIL)
+                               reg |= RB_COPY_CONTROL_CLEAR_MASK(0x1);
+                       break;
+               case DEPTHX_16:
+                       if (buffers & PIPE_CLEAR_DEPTH)
+                               reg |= RB_COPY_CONTROL_CLEAR_MASK(0xf);
+                       break;
+               }
        }
        OUT_RING(ring, reg);
 
        OUT_PKT3(ring, CP_SET_CONSTANT, 2);
        OUT_RING(ring, CP_REG(REG_RB_DEPTH_CLEAR));
        reg = 0;
-       if (fb->zsbuf) {
+       if (buffers & (PIPE_CLEAR_DEPTH | PIPE_CLEAR_STENCIL)) {
                switch (fd_pipe2depth(fb->zsbuf->format)) {
                case DEPTHX_24_8:
                        reg = (((uint32_t)(0xffffff * depth)) << 8) |
index dae60c6d5d9f4d164537665b1c6522ffdfeb8cc5..52b637629f2bd5c8c4db8bf103fc2e09e800d828 100644 (file)
@@ -322,7 +322,7 @@ emit_mem2gmem(struct fd_context *ctx, struct fd_ringbuffer *ring,
        if (ctx->restore & (FD_BUFFER_DEPTH | FD_BUFFER_STENCIL))
                emit_mem2gmem_surf(ring, 0, bin_w * bin_h, pfb->zsbuf);
 
-       if (ctx->resolve & FD_BUFFER_COLOR)
+       if (ctx->restore & FD_BUFFER_COLOR)
                emit_mem2gmem_surf(ring, 1, 0, pfb->cbufs[0]);
 
        /* TODO blob driver seems to toss in a CACHE_FLUSH after each DRAW_INDX.. */