Mesa (staging/21.3): zink: be more consistent about applying module hash for gfx pipeline

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Nov 10 11:16:40 UTC 2021


Module: Mesa
Branch: staging/21.3
Commit: e0ace9df66ab66abb7fa2951532c650a96db18e2
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=e0ace9df66ab66abb7fa2951532c650a96db18e2

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Tue Nov  9 19:42:16 2021 -0500

zink: be more consistent about applying module hash for gfx pipeline

this was a little spaghetti-ish: the module hash was sometimes being applied
during module update, sometimes in draw during program create, and then also
it was removed when a shader unbind would cause the program to no longer be reachable

now things are more consistent:
* keep removing module hash when program becomes unreachable
* only apply module hash in draw during updates there

cc: mesa-stable

Reviewed-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13727>
(cherry picked from commit bfa81c1e8c8f1885ab63c4c09e57e4c0bbb37bb2)

---

 .pick_status.json                       | 2 +-
 src/gallium/drivers/zink/zink_draw.cpp  | 4 ++++
 src/gallium/drivers/zink/zink_program.c | 4 ----
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index 21c681f5ad4..0dd99439dbc 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -31,7 +31,7 @@
         "description": "zink: be more consistent about applying module hash for gfx pipeline",
         "nominated": true,
         "nomination_type": 0,
-        "resolution": 0,
+        "resolution": 1,
         "main_sha": null,
         "because_sha": null
     },
diff --git a/src/gallium/drivers/zink/zink_draw.cpp b/src/gallium/drivers/zink/zink_draw.cpp
index c1bbe5d49ee..b724f962bcc 100644
--- a/src/gallium/drivers/zink/zink_draw.cpp
+++ b/src/gallium/drivers/zink/zink_draw.cpp
@@ -207,7 +207,11 @@ update_gfx_program(struct zink_context *ctx)
       ctx->gfx_pipeline_state.final_hash ^= ctx->curr_program->last_variant_hash;
       ctx->gfx_dirty = false;
    } else if (ctx->dirty_shader_stages & bits) {
+      /* remove old hash */
+      ctx->gfx_pipeline_state.final_hash ^= ctx->curr_program->last_variant_hash;
       zink_update_gfx_program(ctx, ctx->curr_program);
+      /* apply new hash */
+      ctx->gfx_pipeline_state.final_hash ^= ctx->curr_program->last_variant_hash;
    }
    ctx->dirty_shader_stages &= ~bits;
 }
diff --git a/src/gallium/drivers/zink/zink_program.c b/src/gallium/drivers/zink/zink_program.c
index 8c23d57851e..bfa06611d02 100644
--- a/src/gallium/drivers/zink/zink_program.c
+++ b/src/gallium/drivers/zink/zink_program.c
@@ -179,9 +179,6 @@ update_shader_modules(struct zink_context *ctx,
    }
 
    if (hash_changed && state) {
-      if (!first && likely(state->pipeline)) //avoid on first hash
-         state->final_hash ^= prog->last_variant_hash;
-
       if (default_variants && !first)
          prog->last_variant_hash = prog->default_variant_hash;
       else {
@@ -192,7 +189,6 @@ update_shader_modules(struct zink_context *ctx,
          }
       }
 
-      state->final_hash ^= prog->last_variant_hash;
       state->modules_changed = true;
    }
 }



More information about the mesa-commit mailing list