From deecc1ef86239f4aa9f7a28e2068245f4cd6f8eb Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Mon, 23 Jul 2018 14:08:54 -0700 Subject: [PATCH] v3d: Avoid the GFXH-1461 workaround if we have only Z or only S. This seems like a sensible precaution to avoid extra draws. It doesn't deal with the case of a Z24S8 buffer created by the window system for an application that happens to never use S. --- src/gallium/drivers/v3d/v3dx_draw.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/gallium/drivers/v3d/v3dx_draw.c b/src/gallium/drivers/v3d/v3dx_draw.c index 6aa58ceaafe..13143191d21 100644 --- a/src/gallium/drivers/v3d/v3dx_draw.c +++ b/src/gallium/drivers/v3d/v3dx_draw.c @@ -671,9 +671,11 @@ v3d_tlb_clear(struct v3d_job *job, unsigned buffers, * if it would be possible to need to emit a load of just one after * we've set up our TLB clears. */ - unsigned zsclear = buffers & PIPE_CLEAR_DEPTHSTENCIL; - if (zsclear && zsclear != PIPE_CLEAR_DEPTHSTENCIL) { - buffers &= ~zsclear; + if (buffers & PIPE_CLEAR_DEPTHSTENCIL && + (buffers & PIPE_CLEAR_DEPTHSTENCIL) != PIPE_CLEAR_DEPTHSTENCIL && + job->zsbuf && + util_format_is_depth_and_stencil(job->zsbuf->texture->format)) { + buffers &= ~PIPE_CLEAR_DEPTHSTENCIL; } for (int i = 0; i < VC5_MAX_DRAW_BUFFERS; i++) { @@ -732,7 +734,7 @@ v3d_tlb_clear(struct v3d_job *job, unsigned buffers, rsc->initialized_buffers |= bit; } - zsclear = buffers & PIPE_CLEAR_DEPTHSTENCIL; + unsigned zsclear = buffers & PIPE_CLEAR_DEPTHSTENCIL; if (zsclear) { struct v3d_resource *rsc = v3d_resource(v3d->framebuffer.zsbuf->texture); -- 2.11.0