mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 11:48:06 +02:00
glsl: Add an ir_variable::max_ifc_array_access field.
For interface blocks that contain arrays, this field will contain the maximum element of each contained array that is accessed by the shader. This is a first step toward supporting unsized arrays in interface blocks. Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
This commit is contained in:
parent
22d3ef2df1
commit
3f4292a6e3
3 changed files with 25 additions and 1 deletions
|
|
@ -1584,7 +1584,8 @@ ir_swizzle::variable_referenced() const
|
|||
|
||||
ir_variable::ir_variable(const struct glsl_type *type, const char *name,
|
||||
ir_variable_mode mode)
|
||||
: max_array_access(0), read_only(false), centroid(false), invariant(false),
|
||||
: max_array_access(0), max_ifc_array_access(NULL),
|
||||
read_only(false), centroid(false), invariant(false),
|
||||
mode(mode), interpolation(INTERP_QUALIFIER_NONE)
|
||||
{
|
||||
this->ir_type = ir_type_variable;
|
||||
|
|
|
|||
|
|
@ -398,6 +398,10 @@ public:
|
|||
{
|
||||
assert(this->interface_type == NULL);
|
||||
this->interface_type = type;
|
||||
if (this->is_interface_instance()) {
|
||||
this->max_ifc_array_access =
|
||||
rzalloc_array(this, unsigned, type->length);
|
||||
}
|
||||
}
|
||||
|
||||
const glsl_type *get_interface_type() const
|
||||
|
|
@ -422,6 +426,19 @@ public:
|
|||
*/
|
||||
unsigned max_array_access;
|
||||
|
||||
/**
|
||||
* For variables which satisfy the is_interface_instance() predicate, this
|
||||
* points to an array of integers such that if the ith member of the
|
||||
* interface block is an array, max_ifc_array_access[i] is the maximum
|
||||
* array element of that member that has been accessed. If the ith member
|
||||
* of the interface block is not an array, max_ifc_array_access[i] is
|
||||
* unused.
|
||||
*
|
||||
* For variables whose type is not an interface block, this pointer is
|
||||
* NULL.
|
||||
*/
|
||||
unsigned *max_ifc_array_access;
|
||||
|
||||
/**
|
||||
* Is the variable read-only?
|
||||
*
|
||||
|
|
|
|||
|
|
@ -44,6 +44,12 @@ ir_variable::clone(void *mem_ctx, struct hash_table *ht) const
|
|||
(ir_variable_mode) this->mode);
|
||||
|
||||
var->max_array_access = this->max_array_access;
|
||||
if (this->is_interface_instance()) {
|
||||
var->max_ifc_array_access =
|
||||
rzalloc_array(var, unsigned, this->interface_type->length);
|
||||
memcpy(var->max_ifc_array_access, this->max_ifc_array_access,
|
||||
this->interface_type->length * sizeof(unsigned));
|
||||
}
|
||||
var->read_only = this->read_only;
|
||||
var->centroid = this->centroid;
|
||||
var->invariant = this->invariant;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue