From fcd6b2a47a9bff248a35edbeef5ae27a3ca643e0 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 12 Apr 2022 09:47:03 -0400 Subject: [PATCH] zink: avoid creating ssbo variable types with multiple runtime arrays this is illegal affects: KHR-GL46.shader_storage_buffer_object.advanced-unsizedArrayLength-cs-packed-matC cc: mesa-stable Reviewed-by: Dave Airlie Part-of: --- src/gallium/drivers/zink/zink_compiler.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/zink/zink_compiler.c b/src/gallium/drivers/zink/zink_compiler.c index 62e2636eddb..08a86d629c2 100644 --- a/src/gallium/drivers/zink/zink_compiler.c +++ b/src/gallium/drivers/zink/zink_compiler.c @@ -1540,12 +1540,13 @@ unbreak_bos(nir_shader *shader) u_foreach_bit(slot, ssbo_used) { char buf[64]; snprintf(buf, sizeof(buf), "ssbo_slot_%u", slot); - if (ssbo_sizes[slot]) + bool use_runtime = ssbo_sizes[slot] && max_ssbo_size; + if (use_runtime) fields[1].type = unsized; else fields[1].type = NULL; nir_variable *var = nir_variable_create(shader, nir_var_mem_ssbo, - glsl_struct_type(fields, 1 + !!ssbo_sizes[slot], "struct", false), buf); + glsl_struct_type(fields, 1 + use_runtime, "struct", false), buf); var->interface_type = var->type; var->data.driver_location = slot; }