diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/drivers/vc4/vc4_draw.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/gallium/drivers/vc4/vc4_draw.c b/src/gallium/drivers/vc4/vc4_draw.c index 87c8a5f99c6..f44831f1e43 100644 --- a/src/gallium/drivers/vc4/vc4_draw.c +++ b/src/gallium/drivers/vc4/vc4_draw.c @@ -514,7 +514,7 @@ vc4_clear(struct pipe_context *pctx, unsigned buffers, */ if ((zsclear == PIPE_CLEAR_DEPTH || zsclear == PIPE_CLEAR_STENCIL) && - (rsc->initialized_buffers & ~zsclear) && + (rsc->initialized_buffers & ~(zsclear | job->cleared)) && util_format_is_depth_and_stencil(vc4->framebuffer.zsbuf->format)) { perf_debug("Partial clear of Z+stencil buffer, " "drawing a quad instead of fast clearing\n"); @@ -533,8 +533,12 @@ vc4_clear(struct pipe_context *pctx, unsigned buffers, /* Though the depth buffer is stored with Z in the high 24, * for this field we just need to store it in the low 24. */ - job->clear_depth = util_pack_z(PIPE_FORMAT_Z24X8_UNORM, depth); - job->clear_stencil = stencil; + if (buffers & PIPE_CLEAR_DEPTH) { + job->clear_depth = util_pack_z(PIPE_FORMAT_Z24X8_UNORM, + depth); + } + if (buffers & PIPE_CLEAR_STENCIL) + job->clear_stencil = stencil; rsc->initialized_buffers |= zsclear; } |