mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-21 13:40:16 +01:00
linker: Ensure that unsized arrays have a size after linking
Fixes piglit test case glsl-vec-array (bugzilla #31908). NOTE: This bug does not affect 7.9, but I think this patch is a candiate for the 7.9 branch anyway.
This commit is contained in:
parent
b2167a6c01
commit
6f53921c4b
1 changed files with 27 additions and 1 deletions
|
|
@ -360,8 +360,12 @@ cross_validate_globals(struct gl_shader_program *prog,
|
||||||
&& (var->type->fields.array == existing->type->fields.array)
|
&& (var->type->fields.array == existing->type->fields.array)
|
||||||
&& ((var->type->length == 0)
|
&& ((var->type->length == 0)
|
||||||
|| (existing->type->length == 0))) {
|
|| (existing->type->length == 0))) {
|
||||||
if (existing->type->length == 0)
|
if (existing->type->length == 0) {
|
||||||
existing->type = var->type;
|
existing->type = var->type;
|
||||||
|
existing->max_array_access =
|
||||||
|
MAX2(existing->max_array_access,
|
||||||
|
var->max_array_access);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
linker_error_printf(prog, "%s `%s' declared as type "
|
linker_error_printf(prog, "%s `%s' declared as type "
|
||||||
"`%s' and type `%s'\n",
|
"`%s' and type `%s'\n",
|
||||||
|
|
@ -863,6 +867,28 @@ link_intrastage_shaders(void *mem_ctx,
|
||||||
|
|
||||||
free(linking_shaders);
|
free(linking_shaders);
|
||||||
|
|
||||||
|
/* Make a pass over all global variables to ensure that arrays with
|
||||||
|
* unspecified sizes have a size specified. The size is inferred from the
|
||||||
|
* max_array_access field.
|
||||||
|
*/
|
||||||
|
foreach_list(node, linked->ir) {
|
||||||
|
ir_variable *const var = ((ir_instruction *) node)->as_variable();
|
||||||
|
|
||||||
|
if (var == NULL)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!var->type->is_array() || (var->type->length != 0))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
const glsl_type *type =
|
||||||
|
glsl_type::get_array_instance(var->type->fields.array,
|
||||||
|
var->max_array_access);
|
||||||
|
|
||||||
|
assert(type != NULL);
|
||||||
|
var->type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return linked;
|
return linked;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue