From: Ian Romanick Date: Mon, 30 Aug 2010 22:37:44 +0000 (-0700) Subject: linker: Handle varying arrays, matrices, and arrays of matrices X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=df869d916308759fbacb227f60b1b6eda73131e2;p=mesa.git linker: Handle varying arrays, matrices, and arrays of matrices Fixes piglit test case glsl-array-varying-01. --- 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);