Mesa (main): zink: massively simplify zink_clear_depth_stencil

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Jul 18 03:57:15 UTC 2022


Module: Mesa
Branch: main
Commit: f1f08e3529de26953e243d3e2e99fa89bbcbe619
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=f1f08e3529de26953e243d3e2e99fa89bbcbe619

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Wed Jul  6 08:39:44 2022 -0400

zink: massively simplify zink_clear_depth_stencil

this now just uses renderpass clears

Acked-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17366>

---

 src/gallium/drivers/zink/zink_clear.c | 52 ++++++++---------------------------
 1 file changed, 12 insertions(+), 40 deletions(-)

diff --git a/src/gallium/drivers/zink/zink_clear.c b/src/gallium/drivers/zink/zink_clear.c
index e6927b13c3f..1ce1d039b73 100644
--- a/src/gallium/drivers/zink/zink_clear.c
+++ b/src/gallium/drivers/zink/zink_clear.c
@@ -530,48 +530,20 @@ zink_clear_depth_stencil(struct pipe_context *pctx, struct pipe_surface *dst,
                          bool render_condition_enabled)
 {
    struct zink_context *ctx = zink_context(pctx);
-   struct zink_resource *res = zink_resource(dst->texture);
-   struct u_rect rect = {dstx, dstx + width, dsty, dsty + height};
-   bool needs_rp = !zink_blit_region_fills(rect, dst->texture->width0, dst->texture->height0);
-   needs_rp |= check_3d_layers(dst);
-   bool cur_attachment = zink_csurface(ctx->fb_state.zsbuf) == zink_csurface(dst);
    bool render_condition_active = ctx->render_condition_active;
-   if (cur_attachment) { //current depth attachment
-      struct pipe_scissor_state scissor = {dstx, dsty, dstx + width, dsty + height};
-      if (!render_condition_enabled && render_condition_active) {
-         zink_stop_conditional_render(ctx);
-         ctx->render_condition_active = false;
-      }
-      unsigned orig_width = ctx->fb_state.width, orig_height = ctx->fb_state.height;
-      bool fb_changed = !zink_blit_region_fills(rect, ctx->fb_state.width, ctx->fb_state.height);
-      if (fb_changed) {
-         ctx->fb_state.width = dstx + width;
-         ctx->fb_state.height = dsty + height;
-         ctx->fb_changed = true;
-         zink_batch_no_rp(ctx);
-      }
-      zink_clear(pctx, clear_flags, &scissor, NULL, depth, stencil);
-      zink_batch_rp(ctx);
-      if (fb_changed) {
-         ctx->fb_state.width = orig_width;
-         ctx->fb_state.height = orig_height;
-         ctx->fb_changed = true;
-         zink_batch_no_rp(ctx);
-      }
-   } else {
-      if (needs_rp) {
-         zink_blit_begin(ctx, ZINK_BLIT_SAVE_FB | ZINK_BLIT_SAVE_FS | (render_condition_enabled ? 0 : ZINK_BLIT_NO_COND_RENDER));
-         util_blitter_clear_depth_stencil(ctx->blitter, dst, clear_flags, depth, stencil, dstx, dsty, width, height);
-      } else {
-         VkImageAspectFlags aspects = 0;
-         if (clear_flags & PIPE_CLEAR_DEPTH)
-            aspects |= VK_IMAGE_ASPECT_DEPTH_BIT;
-         if (clear_flags & PIPE_CLEAR_STENCIL)
-            aspects |= VK_IMAGE_ASPECT_STENCIL_BIT;
-         for (unsigned i = 0; i < res->base.b.last_level; i++)
-            clear_zs_no_rp(ctx, res, aspects, depth, stencil, i, 0, res->base.b.array_size);
-      }
+   if (!render_condition_enabled && render_condition_active) {
+      zink_stop_conditional_render(ctx);
+      ctx->render_condition_active = false;
+   }
+   bool cur_attachment = zink_csurface(ctx->fb_state.zsbuf) == zink_csurface(dst);
+   if (!cur_attachment) {
+      util_blitter_save_framebuffer(ctx->blitter, &ctx->fb_state);
+      set_clear_fb(pctx, NULL, dst);
    }
+   struct pipe_scissor_state scissor = {dstx, dsty, dstx + width, dsty + height};
+   pctx->clear(pctx, clear_flags, &scissor, NULL, depth, stencil);
+   if (!cur_attachment)
+      util_blitter_restore_fb_state(ctx->blitter);
    if (!render_condition_enabled && render_condition_active)
       zink_start_conditional_render(ctx);
    ctx->render_condition_active = render_condition_active;



More information about the mesa-commit mailing list