Mesa (main): zink: add changed flag for blend states

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Jul 20 13:23:23 UTC 2021


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

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Tue May 11 19:57:31 2021 -0400

zink: add changed flag for blend states

Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
Reviewed-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11968>

---

 src/gallium/drivers/zink/zink_context.h | 1 +
 src/gallium/drivers/zink/zink_draw.cpp  | 5 ++++-
 src/gallium/drivers/zink/zink_state.c   | 1 +
 3 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/gallium/drivers/zink/zink_context.h b/src/gallium/drivers/zink/zink_context.h
index 21f528e794a..db1f944a5c7 100644
--- a/src/gallium/drivers/zink/zink_context.h
+++ b/src/gallium/drivers/zink/zink_context.h
@@ -299,6 +299,7 @@ struct zink_context {
    bool have_timelines;
 
    bool is_device_lost;
+   bool blend_state_changed : 1;
    bool rast_state_changed : 1;
    bool dsa_state_changed : 1;
    bool stencil_ref_changed : 1;
diff --git a/src/gallium/drivers/zink/zink_draw.cpp b/src/gallium/drivers/zink/zink_draw.cpp
index 32c2e8eab35..1557f267bfb 100644
--- a/src/gallium/drivers/zink/zink_draw.cpp
+++ b/src/gallium/drivers/zink/zink_draw.cpp
@@ -642,8 +642,11 @@ zink_draw_vbo(struct pipe_context *pctx,
       ctx->sample_locations_changed = false;
    }
 
-   if (ctx->gfx_pipeline_state.blend_state->need_blend_constants)
+   if ((BATCH_CHANGED || ctx->blend_state_changed) &&
+       ctx->gfx_pipeline_state.blend_state->need_blend_constants) {
       vkCmdSetBlendConstants(batch->state->cmdbuf, ctx->blend_constants);
+   }
+   ctx->blend_state_changed = false;
 
    if (BATCH_CHANGED || ctx->vertex_buffers_dirty)
       zink_bind_vertex_buffers<HAS_DYNAMIC_STATE>(batch, ctx);
diff --git a/src/gallium/drivers/zink/zink_state.c b/src/gallium/drivers/zink/zink_state.c
index 3fc7fde9b71..95453cb3c8a 100644
--- a/src/gallium/drivers/zink/zink_state.c
+++ b/src/gallium/drivers/zink/zink_state.c
@@ -293,6 +293,7 @@ zink_bind_blend_state(struct pipe_context *pctx, void *cso)
    if (state->blend_state != cso) {
       state->blend_state = cso;
       state->dirty = true;
+      zink_context(pctx)->blend_state_changed = true;
    }
 }
 



More information about the mesa-commit mailing list