ast_to_hir: Mark arrays as lvalues in GLSL ES, but prohibit assignment.

This allows them to be passed as out/inout parameters, but still
prevents them from being used as the target of an assignment.  This is
per section 5.8 of the GLSL ES 1.00 specification.
This commit is contained in:
Kenneth Graunke 2010-09-07 02:59:38 -07:00
parent a98d5a5ac8
commit 10eaa8bcbc
1 changed files with 7 additions and 1 deletions

View File

@ -516,6 +516,12 @@ do_assignment(exec_list *instructions, struct _mesa_glsl_parse_state *state,
_mesa_glsl_error(& lhs_loc, state, "non-lvalue in assignment");
error_emitted = true;
}
if (state->es_shader && lhs->type->is_array()) {
_mesa_glsl_error(&lhs_loc, state, "whole array assignment is not "
"allowed in GLSL ES 1.00.");
error_emitted = true;
}
}
ir_rvalue *new_rhs = validate_assignment(state, lhs->type, rhs);
@ -1624,7 +1630,7 @@ apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual,
qual_string);
}
if (var->type->is_array() && (state->language_version >= 120)) {
if (var->type->is_array() && state->language_version != 110) {
var->array_lvalue = true;
}
}