summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2010-08-21 15:30:34 -0700
committerKenneth Graunke <[email protected]>2010-08-21 15:42:27 -0700
commite511a35fc53fb75a2401d8a94c0c35634175c575 (patch)
tree80bd600e86c05c12a26123d907647a8739bf49e3
parent4edeeaf71564582d5afebc9cb59f4b3f7fb40a7e (diff)
glsl: Handle array declarations in function parameters.
The 'vec4[12] foo' style already worked, but the 'vec4 foo[12]' style did not. Also, 'vec4[] foo' was wrongly accepted. Fixes piglit test cases array-19.vert and array-21.vert. May fix fd.o bug #29684 (or at least part of it).
-rw-r--r--src/glsl/ast_to_hir.cpp17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index 4188348626c..397c84e3438 100644
--- a/src/glsl/ast_to_hir.cpp
+++ b/src/glsl/ast_to_hir.cpp
@@ -2040,13 +2040,22 @@ ast_parameter_declarator::hir(exec_list *instructions,
return NULL;
}
+ /* This only handles "vec4 foo[..]". The earlier specifier->glsl_type(...)
+ * call already handled the "vec4[..] foo" case.
+ */
+ if (this->is_array) {
+ type = process_array_type(type, this->array_size, state);
+ }
+
+ if (type->array_size() == 0) {
+ _mesa_glsl_error(&loc, state, "arrays passed as parameters must have "
+ "a declared size.");
+ type = glsl_type::error_type;
+ }
+
is_void = false;
ir_variable *var = new(ctx) ir_variable(type, this->identifier, ir_var_in);
- /* FINISHME: Handle array declarations. Note that this requires
- * FINISHME: complete handling of constant expressions.
- */
-
/* Apply any specified qualifiers to the parameter declaration. Note that
* for function parameters the default mode is 'in'.
*/