zink: add unsized array type to get_glsl_type_element() handling
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Wed, 2 Dec 2020 19:37:31 +0000 (14:37 -0500)
committerMarge Bot <eric+marge@anholt.net>
Wed, 17 Mar 2021 01:27:00 +0000 (01:27 +0000)
Reviewed-by: Adam Jackson <ajax@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9624>

src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c

index 32cc3d7..5183fae 100644 (file)
@@ -336,9 +336,14 @@ get_glsl_type(struct ntv_context *ctx, const struct glsl_type *type)
          glsl_get_vector_elements(type));
 
    if (glsl_type_is_array(type)) {
-      SpvId ret = spirv_builder_type_array(&ctx->builder,
-                                           get_glsl_type(ctx, glsl_get_array_element(type)),
-                                           emit_uint_const(ctx, 32, glsl_get_length(type)));
+      SpvId ret;
+      SpvId element_type = get_glsl_type(ctx, glsl_get_array_element(type));
+      if (glsl_type_is_unsized_array(type))
+         ret = spirv_builder_type_runtime_array(&ctx->builder, element_type);
+      else
+         ret = spirv_builder_type_array(&ctx->builder,
+                                        element_type,
+                                        emit_uint_const(ctx, 32, glsl_get_length(type)));
       uint32_t stride = glsl_get_explicit_stride(type);
       if (!stride && glsl_type_is_scalar(glsl_get_array_element(type))) {
          stride = MAX2(glsl_get_bit_size(glsl_get_array_element(type)) / 8, 1);