diff options
author | Kenneth Graunke <[email protected]> | 2010-07-20 01:06:33 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2010-07-21 16:38:33 -0700 |
commit | 74e1802f5dd8921750851abc6128e4073602d405 (patch) | |
tree | 40e3e5f055b164a0af9993de18b7bc432775bbc1 /src/glsl/ir_clone.cpp | |
parent | 13a19745d46d383fa7fc148ce129150ebde151b7 (diff) |
glsl2: Extend ir_constant to store constant arrays, and generate them.
Since GLSL permits arrays of structures, we need to store each element
as an ir_constant*, not just ir_constant_data.
Fixes parser tests const-array-01.frag, const-array-03.frag,
const-array-04.frag, const-array-05.frag, though 03 and 04 generate the
wrong code.
Diffstat (limited to 'src/glsl/ir_clone.cpp')
-rw-r--r-- | src/glsl/ir_clone.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/glsl/ir_clone.cpp b/src/glsl/ir_clone.cpp index f7e8794728c..a3e4a3ae311 100644 --- a/src/glsl/ir_clone.cpp +++ b/src/glsl/ir_clone.cpp @@ -337,6 +337,17 @@ ir_constant::clone(struct hash_table *ht) const return c; } + case GLSL_TYPE_ARRAY: { + ir_constant *c = new(ctx) ir_constant; + + c->type = this->type; + c->array_elements = talloc_array(c, ir_constant *, this->type->length); + for (unsigned i = 0; i < this->type->length; i++) { + c->array_elements[i] = this->array_elements[i]->clone(NULL); + } + return c; + } + default: assert(!"Should not get here."); break; return NULL; |