ir_constant: Add storage for multiple constants for arrays and records

This commit is contained in:
Ian Romanick
2010-06-09 17:11:50 -07:00
parent 93073551f9
commit 7f1ab834d7
2 changed files with 20 additions and 2 deletions

20
ir.cpp
View File

@@ -244,8 +244,24 @@ ir_constant::ir_constant(const struct glsl_type *type, exec_list *value_list)
{ {
this->type = type; this->type = type;
/* FINISHME: Support structure and array types. */ /* FINISHME: Support array types. */
assert(type->is_scalar() || type->is_vector() || type->is_matrix()); assert(type->is_scalar() || type->is_vector() || type->is_matrix()
|| type->is_record());
/* If the constant is a record, the types of each of the entries in
* value_list must be a 1-for-1 match with the structure components. Each
* entry must also be a constant. Just move the nodes from the value_list
* to the list in the ir_constant.
*/
/* FINISHME: Should there be some type checking and / or assertions here? */
/* FINISHME: Should the new constant take ownership of the nodes from
* FINISHME: value_list, or should it make copies?
*/
if (type->is_record()) {
value_list->move_nodes_to(& this->components);
return;
}
ir_constant *value = (ir_constant *) (value_list->head); ir_constant *value = (ir_constant *) (value_list->head);

2
ir.h
View File

@@ -1087,6 +1087,8 @@ public:
float f[16]; float f[16];
bool b[16]; bool b[16];
} value; } value;
exec_list components;
}; };
void void