zink: force unsized array in bo creation using the last block member type
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Fri, 24 Jun 2022 15:20:33 +0000 (11:20 -0400)
committerMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Tue, 5 Jul 2022 20:01:01 +0000 (16:01 -0400)
if the last member of a block is an unsized array then the bo needs to have
an unsized array

cc: mesa-stable

Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17239>

src/gallium/drivers/zink/zink_compiler.c

index 280e2d7..1a52016 100644 (file)
@@ -2088,6 +2088,10 @@ unbreak_bos(nir_shader *shader, struct zink_shader *zs, bool needs_size)
             max_uniform_size = MAX2(max_uniform_size, size);
       } else {
          max_ssbo_size = MAX2(max_ssbo_size, size);
+         if (interface_type) {
+            if (glsl_type_is_unsized_array(glsl_get_struct_field(interface_type, glsl_get_length(interface_type) - 1)))
+               needs_size = true;
+         }
       }
       var->data.mode = nir_var_shader_temp;
    }