Mesa (main): zink: track whether there's any transient attachments bound
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri May 20 16:58:32 UTC 2022
Module: Mesa
Branch: main
Commit: ec3a7323daf4aee536b552c16e4138bb1ac2d2a5
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ec3a7323daf4aee536b552c16e4138bb1ac2d2a5
Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date: Tue May 10 12:25:43 2022 -0400
zink: track whether there's any transient attachments bound
Reviewed-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16476>
---
src/gallium/drivers/zink/zink_context.c | 6 ++++++
src/gallium/drivers/zink/zink_context.h | 1 +
2 files changed, 7 insertions(+)
diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c
index d49461e587b..541e7bc91c1 100644
--- a/src/gallium/drivers/zink/zink_context.c
+++ b/src/gallium/drivers/zink/zink_context.c
@@ -2384,10 +2384,14 @@ zink_set_framebuffer_state(struct pipe_context *pctx,
zink_update_fbfetch(ctx);
unsigned prev_void_alpha_attachments = ctx->gfx_pipeline_state.void_alpha_attachments;
ctx->gfx_pipeline_state.void_alpha_attachments = 0;
+ ctx->transient_attachments = 0;
+
for (int i = 0; i < ctx->fb_state.nr_cbufs; i++) {
struct pipe_surface *psurf = ctx->fb_state.cbufs[i];
if (psurf) {
struct zink_surface *transient = zink_transient_surface(psurf);
+ if (transient)
+ ctx->transient_attachments |= BITFIELD_BIT(i);
if (!samples)
samples = MAX3(transient ? transient->base.nr_samples : 1, psurf->texture->nr_samples, 1);
struct zink_resource *res = zink_resource(psurf->texture);
@@ -2410,6 +2414,8 @@ zink_set_framebuffer_state(struct pipe_context *pctx,
if (ctx->fb_state.zsbuf) {
struct pipe_surface *psurf = ctx->fb_state.zsbuf;
struct zink_surface *transient = zink_transient_surface(psurf);
+ if (transient)
+ ctx->transient_attachments |= BITFIELD_BIT(PIPE_MAX_COLOR_BUFS);
if (!samples)
samples = MAX3(transient ? transient->base.nr_samples : 1, psurf->texture->nr_samples, 1);
zink_resource(psurf->texture)->fb_binds++;
diff --git a/src/gallium/drivers/zink/zink_context.h b/src/gallium/drivers/zink/zink_context.h
index fcf3d036933..895687098df 100644
--- a/src/gallium/drivers/zink/zink_context.h
+++ b/src/gallium/drivers/zink/zink_context.h
@@ -214,6 +214,7 @@ struct zink_context {
uint32_t writable_ssbos[PIPE_SHADER_TYPES];
struct zink_image_view image_views[PIPE_SHADER_TYPES][ZINK_MAX_SHADER_IMAGES];
+ uint32_t transient_attachments;
struct pipe_framebuffer_state fb_state;
struct hash_table framebuffer_cache;
More information about the mesa-commit
mailing list