From 5d992b539e977ac688e950866a1d872de5acec18 Mon Sep 17 00:00:00 2001 From: Timothy Arceri Date: Tue, 10 Mar 2020 12:55:53 +1100 Subject: [PATCH] glsl: fix block index in NIR uniform linker MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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: --- src/compiler/glsl/gl_nir_link_uniforms.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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; }