freedreno: clear fixes
Some fixes for clearing only depth or only stencil. Signed-off-by: Rob Clark <robdclark@gmail.com>
This commit is contained in:
parent
90862c8507
commit
afc1b7c21f
|
@ -105,16 +105,27 @@ fd_clear(struct pipe_context *pctx, unsigned buffers,
|
||||||
OUT_PKT3(ring, CP_SET_CONSTANT, 2);
|
OUT_PKT3(ring, CP_SET_CONSTANT, 2);
|
||||||
OUT_RING(ring, CP_REG(REG_RB_COPY_CONTROL));
|
OUT_RING(ring, CP_REG(REG_RB_COPY_CONTROL));
|
||||||
reg = 0;
|
reg = 0;
|
||||||
if (buffers & PIPE_CLEAR_DEPTH) {
|
if (buffers & (PIPE_CLEAR_DEPTH | PIPE_CLEAR_STENCIL)) {
|
||||||
reg |= RB_COPY_CONTROL_CLEAR_MASK(0xf) |
|
reg |= RB_COPY_CONTROL_DEPTH_CLEAR_ENABLE;
|
||||||
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_RING(ring, reg);
|
||||||
|
|
||||||
OUT_PKT3(ring, CP_SET_CONSTANT, 2);
|
OUT_PKT3(ring, CP_SET_CONSTANT, 2);
|
||||||
OUT_RING(ring, CP_REG(REG_RB_DEPTH_CLEAR));
|
OUT_RING(ring, CP_REG(REG_RB_DEPTH_CLEAR));
|
||||||
reg = 0;
|
reg = 0;
|
||||||
if (fb->zsbuf) {
|
if (buffers & (PIPE_CLEAR_DEPTH | PIPE_CLEAR_STENCIL)) {
|
||||||
switch (fd_pipe2depth(fb->zsbuf->format)) {
|
switch (fd_pipe2depth(fb->zsbuf->format)) {
|
||||||
case DEPTHX_24_8:
|
case DEPTHX_24_8:
|
||||||
reg = (((uint32_t)(0xffffff * depth)) << 8) |
|
reg = (((uint32_t)(0xffffff * depth)) << 8) |
|
||||||
|
|
|
@ -322,7 +322,7 @@ emit_mem2gmem(struct fd_context *ctx, struct fd_ringbuffer *ring,
|
||||||
if (ctx->restore & (FD_BUFFER_DEPTH | FD_BUFFER_STENCIL))
|
if (ctx->restore & (FD_BUFFER_DEPTH | FD_BUFFER_STENCIL))
|
||||||
emit_mem2gmem_surf(ring, 0, bin_w * bin_h, pfb->zsbuf);
|
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]);
|
emit_mem2gmem_surf(ring, 1, 0, pfb->cbufs[0]);
|
||||||
|
|
||||||
/* TODO blob driver seems to toss in a CACHE_FLUSH after each DRAW_INDX.. */
|
/* TODO blob driver seems to toss in a CACHE_FLUSH after each DRAW_INDX.. */
|
||||||
|
|
Loading…
Reference in New Issue