ir_constant: Eliminate 'void *' constructor

All of the places that had been using the (glsl_type *, void *)
constructor were actually passing an ir_constant_data for the
'void *'.  The code can be greatly simplified by replacing this
constructor with a (glsl_type *, ir_constant_data *) constructor.
This should also help prevent one class of invalid uses of the old
constructor.
This commit is contained in:
Ian Romanick 2010-06-11 16:57:47 -07:00
parent b74b43e4ba
commit 824b659d91
2 changed files with 6 additions and 15 deletions

19
ir.cpp
View file

@ -189,23 +189,14 @@ ir_constant::ir_constant()
/* empty */
}
ir_constant::ir_constant(const struct glsl_type *type, const void *data)
ir_constant::ir_constant(const struct glsl_type *type,
const ir_constant_data *data)
{
unsigned size = 0;
assert((type->base_type >= GLSL_TYPE_UINT)
&& (type->base_type <= GLSL_TYPE_BOOL));
this->type = type;
switch (type->base_type) {
case GLSL_TYPE_UINT: size = sizeof(this->value.u[0]); break;
case GLSL_TYPE_INT: size = sizeof(this->value.i[0]); break;
case GLSL_TYPE_FLOAT: size = sizeof(this->value.f[0]); break;
case GLSL_TYPE_BOOL: size = sizeof(this->value.b[0]); break;
default:
/* FINISHME: What to do? Exceptions are not the answer.
*/
break;
}
memcpy(& this->value, data, size * type->components());
memcpy(& this->value, data, sizeof(this->value));
}
ir_constant::ir_constant(float f)

2
ir.h
View file

@ -1031,7 +1031,7 @@ union ir_constant_data {
class ir_constant : public ir_rvalue {
public:
ir_constant(const struct glsl_type *type, const void *data);
ir_constant(const struct glsl_type *type, const ir_constant_data *data);
ir_constant(bool b);
ir_constant(unsigned int u);
ir_constant(int i);