Mesa (staging/21.2): zink: use array size in spirv bo length calculations

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Jul 27 18:59:26 UTC 2021


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

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Mon Jul 26 13:11:18 2021 -0400

zink: use array size in spirv bo length calculations

I don't know why I was dropping this, but doing so breaks drivers that have
optimization passes based on the lengths of these variables

Fixes: c1cdf30a119 ("zink: apply Delete All The Code methodology to the ubo/ssbo variables")

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

---

 .pick_status.json                        | 2 +-
 src/gallium/drivers/zink/zink_compiler.c | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index 70eab4fbc76..6fb4f49d2d2 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -436,7 +436,7 @@
         "description": "zink: use array size in spirv bo length calculations",
         "nominated": true,
         "nomination_type": 1,
-        "resolution": 0,
+        "resolution": 1,
         "main_sha": null,
         "because_sha": "c1cdf30a119cc523616b3825daf144c1620c17b7"
     },
diff --git a/src/gallium/drivers/zink/zink_compiler.c b/src/gallium/drivers/zink/zink_compiler.c
index 43770bba54b..c32c6fe3651 100644
--- a/src/gallium/drivers/zink/zink_compiler.c
+++ b/src/gallium/drivers/zink/zink_compiler.c
@@ -844,7 +844,7 @@ unbreak_bos(nir_shader *shader)
       const struct glsl_type *type = glsl_without_array(var->type);
       if (type_is_counter(type))
          continue;
-      unsigned size = glsl_count_attribute_slots(type, false);
+      unsigned size = glsl_count_attribute_slots(glsl_type_is_array(var->type) ? var->type : type, false);
       if (var->data.mode == nir_var_mem_ubo)
          max_ubo_size = MAX2(max_ubo_size, size);
       else



More information about the mesa-commit mailing list