diff options
author | Ian Romanick <[email protected]> | 2016-12-13 20:29:23 -0800 |
---|---|---|
committer | Ian Romanick <[email protected]> | 2016-12-19 15:55:43 -0800 |
commit | b7053b80f27091acc8ccc954db99197e3073bff4 (patch) | |
tree | 61b6634203e84c4a2738d24ae5eb290d7973e5a2 /src/compiler/glsl/ir_array_refcount.h | |
parent | 5085b640313f806150729a197c438a0cfea35f49 (diff) |
glsl: Add tracking for elements of an array-of-arrays that have been accessed
If there's a better way to provide access to ir_array_refcount_entry
private members to the test functions, I am very interested to know
about it.
Signed-off-by: Ian Romanick <[email protected]>
Cc: Francisco Jerez <[email protected]>
Cc: [email protected]
Reviewed-by: Kenneth Graunke <[email protected]>
Diffstat (limited to 'src/compiler/glsl/ir_array_refcount.h')
-rw-r--r-- | src/compiler/glsl/ir_array_refcount.h | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/compiler/glsl/ir_array_refcount.h b/src/compiler/glsl/ir_array_refcount.h index 9ec46d2f385..4296e4b9eeb 100644 --- a/src/compiler/glsl/ir_array_refcount.h +++ b/src/compiler/glsl/ir_array_refcount.h @@ -30,16 +30,40 @@ #include "ir.h" #include "ir_visitor.h" #include "compiler/glsl_types.h" +#include "util/bitset.h" class ir_array_refcount_entry { public: ir_array_refcount_entry(ir_variable *var); + ~ir_array_refcount_entry(); ir_variable *var; /* The key: the variable's pointer. */ /** Has the variable been referenced? */ bool is_referenced; + + /** Has a linearized array index been referenced? */ + bool is_linearized_index_referenced(unsigned linearized_index) const + { + assert(bits != 0); + assert(linearized_index <= num_bits); + + return BITSET_TEST(bits, linearized_index); + } + +private: + /** Set of bit-flags to note which array elements have been accessed. */ + BITSET_WORD *bits; + + /** + * Total number of bits referenced by \c bits. + * + * Also the total number of array(s-of-arrays) elements of \c var. + */ + unsigned num_bits; + + friend class array_refcount_test; }; class ir_array_refcount_visitor : public ir_hierarchical_visitor { |