From df869d916308759fbacb227f60b1b6eda73131e2 Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Mon, 30 Aug 2010 15:37:44 -0700 Subject: [PATCH] linker: Handle varying arrays, matrices, and arrays of matrices Fixes piglit test case glsl-array-varying-01. --- src/glsl/linker.cpp | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp index 56e0bfd2386..e0823c3af42 100644 --- a/src/glsl/linker.cpp +++ b/src/glsl/linker.cpp @@ -1296,15 +1296,24 @@ assign_varying_locations(struct gl_shader_program *prog, assert(input_var->location == -1); - /* FINISHME: Location assignment will need some changes when arrays, - * FINISHME: matrices, and structures are allowed as shader inputs / - * FINISHME: outputs. - */ output_var->location = output_index; input_var->location = input_index; - output_index++; - input_index++; + /* FINISHME: Support for "varying" records in GLSL 1.50. */ + assert(!output_var->type->is_record()); + + if (output_var->type->is_array()) { + const unsigned slots = output_var->type->length + * output_var->type->fields.array->matrix_columns; + + output_index += slots; + input_index += slots; + } else { + const unsigned slots = output_var->type->matrix_columns; + + output_index += slots; + input_index += slots; + } } demote_unread_shader_outputs(producer); -- 2.30.2