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.
This commit is contained in:
Kenneth Graunke
2010-07-20 01:06:33 -07:00
parent 13a19745d4
commit 74e1802f5d
4 changed files with 40 additions and 5 deletions

View File

@@ -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;