Mesa (master): zink: break out sized uint array construction into util function

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Mar 17 01:33:53 UTC 2021


Module: Mesa
Branch: master
Commit: eeb23b15eb04c2179fccebb1b912ba5f92a9a1f4
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=eeb23b15eb04c2179fccebb1b912ba5f92a9a1f4

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Fri Dec  4 12:17:13 2020 -0500

zink: break out sized uint array construction into util function

Reviewed-by: Adam Jackson <ajax at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9624>

---

 .../drivers/zink/nir_to_spirv/nir_to_spirv.c       | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c
index 16200a12cfc..3552bda2b6f 100644
--- a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c
+++ b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c
@@ -868,20 +868,28 @@ emit_image(struct ntv_context *ctx, struct nir_variable *var)
    spirv_builder_emit_binding(&ctx->builder, var_id, binding);
 }
 
+static SpvId
+get_sized_uint_array_type(struct ntv_context *ctx, unsigned array_size)
+{
+   SpvId array_length = emit_uint_const(ctx, 32, array_size);
+   SpvId array_type = spirv_builder_type_array(&ctx->builder, get_uvec_type(ctx, 32, 1),
+                                            array_length);
+   spirv_builder_emit_array_stride(&ctx->builder, array_type, 4);
+   return array_type;
+}
+
 static SpvId
 get_bo_array_type(struct ntv_context *ctx, struct nir_variable *var)
 {
    SpvId array_type;
    SpvId uint_type = spirv_builder_type_uint(&ctx->builder, 32);
-   uint32_t array_size = glsl_count_attribute_slots(var->interface_type, false);
-   if (glsl_type_is_unsized_array(var->type))
+   if (glsl_type_is_unsized_array(var->type)) {
       array_type = spirv_builder_type_runtime_array(&ctx->builder, uint_type);
-   else {
-      SpvId array_length = emit_uint_const(ctx, 32, array_size * 4);
-      array_type = spirv_builder_type_array(&ctx->builder, uint_type,
-                                               array_length);
+      spirv_builder_emit_array_stride(&ctx->builder, array_type, 4);
+   } else {
+      uint32_t array_size = glsl_count_attribute_slots(var->interface_type, false);
+      array_type = get_sized_uint_array_type(ctx, array_size * 4);
    }
-   spirv_builder_emit_array_stride(&ctx->builder, array_type, 4);
    return array_type;
 }
 



More information about the mesa-commit mailing list