From: Timothy Arceri Date: Tue, 10 Mar 2020 01:55:53 +0000 (+1100) Subject: glsl: fix block index in NIR uniform linker X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=5d992b539e977ac688e950866a1d872de5acec18;p=mesa.git glsl: fix block index in NIR uniform linker We only want to set the index for the first block of an array. Also add a comment about why we do not break here. Reviewed-by: Alejandro PiƱeiro Part-of: --- diff --git a/src/compiler/glsl/gl_nir_link_uniforms.c b/src/compiler/glsl/gl_nir_link_uniforms.c index de168eb1a3a..aa390ddf1cb 100644 --- a/src/compiler/glsl/gl_nir_link_uniforms.c +++ b/src/compiler/glsl/gl_nir_link_uniforms.c @@ -1269,10 +1269,16 @@ gl_nir_link_uniforms(struct gl_context *ctx, if (is_interface_array) { unsigned l = strlen(ifc_name); + + /* Even when a match is found, do not "break" here. As this is + * an array of instances, all elements of the array need to be + * marked as referenced. + */ for (unsigned i = 0; i < num_blocks; i++) { if (strncmp(ifc_name, blocks[i].Name, l) == 0 && blocks[i].Name[l] == '[') { - buffer_block_index = i; + if (buffer_block_index == -1) + buffer_block_index = i; blocks[i].stageref |= 1U << shader_type; }