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).
This commit is contained in:
Kenneth Graunke 2010-08-21 15:30:34 -07:00
parent 4edeeaf715
commit e511a35fc5

View file

@ -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'.
*/