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.
This commit is contained in:
Eric Anholt 2018-07-23 14:08:54 -07:00
parent 301c32caf4
commit deecc1ef86

View file

@ -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);