diff options
author | Ian Romanick <[email protected]> | 2010-08-30 15:37:44 -0700 |
---|---|---|
committer | Ian Romanick <[email protected]> | 2010-08-30 16:02:51 -0700 |
commit | df869d916308759fbacb227f60b1b6eda73131e2 (patch) | |
tree | cca706d785bc2e51bc54631853ea194431c614c7 /src/glsl | |
parent | a3c2bd416aa871166baacff50c89842e3b533d9b (diff) |
linker: Handle varying arrays, matrices, and arrays of matrices
Fixes piglit test case glsl-array-varying-01.
Diffstat (limited to 'src/glsl')
-rw-r--r-- | src/glsl/linker.cpp | 21 |
1 files 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); |