glsl: Add check for unsized arrays to glsl types

The main purpose of this patch is to increase readability of
the array code by introducing is_unsized_array() to glsl_types.
Some redundent is_array() checks are also removed, and small number
of other related clean ups.

The introduction of is_unsized_array() should also make the
ARB_arrays_of_arrays code simpler and more readable when it arrives.

V2: Also replace code that checks for unsized arrays directly with the
length variable

Signed-off-by: Timothy Arceri <t_arceri@yahoo.com.au>

v3 (Paul Berry <stereotype441@gmail.com>): clean up formatting.
Separate whitespace cleanups to their own patch.

Reviewed-by: Paul Berry <stereotype441@gmail.com>
This commit is contained in:
Timothy Arceri
2013-10-23 21:31:27 +11:00
committed by Paul Berry
parent 5cd7eb9f07
commit b59c5926cb
7 changed files with 30 additions and 26 deletions

View File

@@ -732,21 +732,21 @@ process_array_constructor(exec_list *instructions,
exec_list actual_parameters;
const unsigned parameter_count =
process_parameters(instructions, &actual_parameters, parameters, state);
bool is_unsized_array = constructor_type->is_unsized_array();
if ((parameter_count == 0)
|| ((constructor_type->length != 0)
&& (constructor_type->length != parameter_count))) {
const unsigned min_param = (constructor_type->length == 0)
? 1 : constructor_type->length;
if ((parameter_count == 0) ||
(!is_unsized_array && (constructor_type->length != parameter_count))) {
const unsigned min_param = is_unsized_array
? 1 : constructor_type->length;
_mesa_glsl_error(loc, state, "array constructor must have %s %u "
"parameter%s",
(constructor_type->length == 0) ? "at least" : "exactly",
is_unsized_array ? "at least" : "exactly",
min_param, (min_param <= 1) ? "" : "s");
return ir_rvalue::error_value(ctx);
}
if (constructor_type->length == 0) {
if (is_unsized_array) {
constructor_type =
glsl_type::get_array_instance(constructor_type->element_type(),
parameter_count);