summaryrefslogtreecommitdiffstats
path: root/src/glsl/ir.h
diff options
context:
space:
mode:
authorPaul Berry <[email protected]>2013-09-18 14:15:36 -0700
committerPaul Berry <[email protected]>2013-10-09 16:49:31 -0700
commit3f4292a6e361c03abe922e025d24cba17e0ab305 (patch)
treece1da045ef60477bc730dc361874e44396fb2026 /src/glsl/ir.h
parent22d3ef2df1f4fd6c4a0aaf17996fdcd9b70547cb (diff)
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 <[email protected]>
Diffstat (limited to 'src/glsl/ir.h')
-rw-r--r--src/glsl/ir.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/glsl/ir.h b/src/glsl/ir.h
index a2778570826..eb24d4e441d 100644
--- a/src/glsl/ir.h
+++ b/src/glsl/ir.h
@@ -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
@@ -423,6 +427,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?
*
* This is set for variables declared as \c const, shader inputs,