Track whether whole-arrays are assignable
In GLSL 1.10 this was not allowed, but in GLSL 1.20 and later it is. This causes the following tests to pass: glslparsertest/glsl2/array-09.vert glslparsertest/glsl2/array-13.vert
This commit is contained in:
parent
2d946634eb
commit
9d975377ca
|
@ -1283,6 +1283,10 @@ apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual,
|
|||
var->interpolation = ir_var_noperspective;
|
||||
else
|
||||
var->interpolation = ir_var_smooth;
|
||||
|
||||
if (var->type->is_array() && (state->language_version >= 120)) {
|
||||
var->array_lvalue = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
10
ir.cpp
10
ir.cpp
|
@ -200,18 +200,14 @@ ir_dereference::is_lvalue()
|
|||
if (var == NULL)
|
||||
return false;
|
||||
|
||||
/* Arrays are not assignable in GLSL 1.10, but in GLSL 1.20 and later they
|
||||
* are.
|
||||
*/
|
||||
/* FINISHME: Handle GLSL 1.10 vs 1.20 differences. */
|
||||
if (this->type->base_type == GLSL_TYPE_ARRAY)
|
||||
return false;
|
||||
|
||||
if (mode == ir_reference_variable) {
|
||||
ir_variable *const as_var = var->as_variable();
|
||||
if (as_var == NULL)
|
||||
return false;
|
||||
|
||||
if (as_var->type->is_array() && !as_var->array_lvalue)
|
||||
return false;
|
||||
|
||||
return !as_var->read_only;
|
||||
} else if (mode == ir_reference_array) {
|
||||
/* FINISHME: Walk up the dereference chain and figure out if
|
||||
|
|
Loading…
Reference in New Issue