mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-28 10:20:09 +01:00
glsl: update types for unsized arrays of members
Assigns a new array type based on the max access of unsized array members. This is to support arrays of arrays. Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
This commit is contained in:
parent
7ecb11c81c
commit
939dc28506
1 changed files with 16 additions and 2 deletions
|
|
@ -1250,8 +1250,7 @@ public:
|
|||
resize_interface_members(var->type->fields.array,
|
||||
var->get_max_ifc_array_access());
|
||||
var->change_interface_type(new_type);
|
||||
var->type =
|
||||
glsl_type::get_array_instance(new_type, var->type->length);
|
||||
var->type = update_interface_members_array(var->type, new_type);
|
||||
}
|
||||
} else if (const glsl_type *ifc_type = var->get_interface_type()) {
|
||||
/* Store a pointer to the variable in the unnamed_interfaces
|
||||
|
|
@ -1299,6 +1298,21 @@ private:
|
|||
}
|
||||
}
|
||||
|
||||
static const glsl_type *
|
||||
update_interface_members_array(const glsl_type *type,
|
||||
const glsl_type *new_interface_type)
|
||||
{
|
||||
const glsl_type *element_type = type->fields.array;
|
||||
if (element_type->is_array()) {
|
||||
const glsl_type *new_array_type =
|
||||
update_interface_members_array(element_type, new_interface_type);
|
||||
return glsl_type::get_array_instance(new_array_type, type->length);
|
||||
} else {
|
||||
return glsl_type::get_array_instance(new_interface_type,
|
||||
type->length);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the given interface type contains unsized arrays (if
|
||||
* it doesn't, array_sizing_visitor doesn't need to process it).
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue