panfrost: Set discard based on the resolve set
authorAlyssa Rosenzweig <alyssa@collabora.com>
Tue, 11 May 2021 19:38:52 +0000 (15:38 -0400)
committerMarge Bot <eric+marge@anholt.net>
Wed, 12 May 2021 12:47:53 +0000 (12:47 +0000)
This is a bit simpler and will allow resolve to be disabled
independently.

Signed-off-by: Alyssa Rosenzweig <alyssa@collabora.com>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6295>

src/gallium/drivers/panfrost/pan_job.c

index ba8f8aa..d61567d 100644 (file)
@@ -790,9 +790,7 @@ panfrost_batch_to_fb_info(const struct panfrost_batch *batch,
                                sizeof((fb->rts[i].clear_value)));
                 }
 
-                /* Discard RTs that have no draws or clear. */
-                if (!reserve && !((batch->clear | batch->draws) & mask))
-                        fb->rts[i].discard = true;
+                fb->rts[i].discard = !reserve && !(batch->resolve & mask);
 
                 rts[i].format = surf->format;
                 rts[i].dim = MALI_TEXTURE_DIMENSION_2D;
@@ -862,12 +860,8 @@ panfrost_batch_to_fb_info(const struct panfrost_batch *batch,
                 fb->zs.clear_value.stencil = batch->clear_stencil;
         }
 
-        /* Discard if Z/S are not updated */
-        if (!reserve && !((batch->draws | batch->clear) & PIPE_CLEAR_DEPTH))
-                fb->zs.discard.z = true;
-
-        if (!reserve && !((batch->draws | batch->clear) & PIPE_CLEAR_STENCIL))
-                fb->zs.discard.s = true;
+        fb->zs.discard.z = !reserve && !(batch->resolve & PIPE_CLEAR_DEPTH);
+        fb->zs.discard.s = !reserve && !(batch->resolve & PIPE_CLEAR_STENCIL);
 
         if (!fb->zs.clear.z &&
             ((batch->read & PIPE_CLEAR_DEPTH) ||