Mesa (main): zink: break out color rt attrib analysis into util function

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri May 20 16:58:32 UTC 2022


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

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Tue May 10 12:24:15 2022 -0400

zink: break out color rt attrib analysis into util function

(should be) no functional changes

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

---

 src/gallium/drivers/zink/zink_render_pass.c | 35 ++++++++++++++++++++---------
 src/gallium/drivers/zink/zink_render_pass.h |  2 ++
 2 files changed, 26 insertions(+), 11 deletions(-)

diff --git a/src/gallium/drivers/zink/zink_render_pass.c b/src/gallium/drivers/zink/zink_render_pass.c
index befe57e6e45..ae9906a765e 100644
--- a/src/gallium/drivers/zink/zink_render_pass.c
+++ b/src/gallium/drivers/zink/zink_render_pass.c
@@ -304,6 +304,26 @@ equals_render_pass_state(const void *a, const void *b)
    return memcmp(a, b, offsetof(struct zink_render_pass_state, rts) + sizeof(s_a->rts[0]) * s_a->num_rts) == 0;
 }
 
+void
+zink_init_color_attachment(struct zink_context *ctx, unsigned i, struct zink_rt_attrib *rt)
+{
+   const struct pipe_framebuffer_state *fb = &ctx->fb_state;
+   struct pipe_surface *psurf = fb->cbufs[i];
+   if (psurf && !zink_use_dummy_attachments(ctx)) {
+      struct zink_surface *surf = zink_csurface(psurf);
+      struct zink_surface *transient = zink_transient_surface(psurf);
+      rt->format = surf->info.format[0];
+      rt->samples = MAX3(transient ? transient->base.nr_samples : 0, psurf->texture->nr_samples, 1);
+      rt->clear_color = zink_fb_clear_enabled(ctx, i) && !zink_fb_clear_first_needs_explicit(&ctx->fb_clears[i]);
+      rt->swapchain = ctx->new_swapchain && (psurf->texture->bind & PIPE_BIND_DISPLAY_TARGET);
+      rt->fbfetch = (ctx->fbfetch_outputs & BITFIELD_BIT(i)) > 0;
+   } else {
+      memset(rt, 0, sizeof(struct zink_rt_attrib));
+      rt->format = VK_FORMAT_R8G8B8A8_UNORM;
+      rt->samples = fb->samples;
+   }
+}
+
 static struct zink_render_pass *
 get_render_pass(struct zink_context *ctx)
 {
@@ -313,27 +333,20 @@ get_render_pass(struct zink_context *ctx)
    uint32_t clears = 0;
    state.samples = fb->samples > 0;
 
-   u_foreach_bit(i, ctx->fbfetch_outputs)
-      state.rts[i].fbfetch = true;
-
    for (int i = 0; i < fb->nr_cbufs; i++) {
+      zink_init_color_attachment(ctx, i, &state.rts[i]);
       struct pipe_surface *surf = fb->cbufs[i];
       if (surf && !zink_use_dummy_attachments(ctx)) {
-         struct zink_surface *transient = zink_transient_surface(surf);
-         state.rts[i].format = zink_get_format(screen, surf->format);
-         state.rts[i].samples = MAX3(transient ? transient->base.nr_samples : 0, surf->texture->nr_samples, 1);
-         state.rts[i].clear_color = zink_fb_clear_enabled(ctx, i) && !zink_fb_clear_first_needs_explicit(&ctx->fb_clears[i]);
          clears |= !!state.rts[i].clear_color ? PIPE_CLEAR_COLOR0 << i : 0;
-         state.rts[i].swapchain = ctx->new_swapchain && (surf->texture->bind & PIPE_BIND_DISPLAY_TARGET);
+         struct zink_surface *transient = zink_transient_surface(surf);
          if (transient) {
             state.num_cresolves++;
             state.rts[i].resolve = true;
             if (!state.rts[i].clear_color)
                state.msaa_expand_mask |= BITFIELD_BIT(i);
+         } else {
+            state.rts[i].resolve = false;
          }
-      } else {
-         state.rts[i].format = VK_FORMAT_R8G8B8A8_UNORM;
-         state.rts[i].samples = fb->samples;
       }
       state.num_rts++;
    }
diff --git a/src/gallium/drivers/zink/zink_render_pass.h b/src/gallium/drivers/zink/zink_render_pass.h
index aaf09fa04c6..65803a5ce48 100644
--- a/src/gallium/drivers/zink/zink_render_pass.h
+++ b/src/gallium/drivers/zink/zink_render_pass.h
@@ -101,4 +101,6 @@ bool
 zink_init_render_pass(struct zink_context *ctx);
 void
 zink_render_update_swapchain(struct zink_context *ctx);
+void
+zink_init_color_attachment(struct zink_context *ctx, unsigned i, struct zink_rt_attrib *rt);
 #endif



More information about the mesa-commit mailing list