diff options
author | Ian Romanick <ian.d.romanick@intel.com> | 2010-06-11 16:57:47 -0700 |
---|---|---|
committer | Ian Romanick <ian.d.romanick@intel.com> | 2010-06-11 17:12:40 -0700 |
commit | 824b659d917a5f14a1f66b891d25036ef9f9adc6 (patch) | |
tree | acf17b61781f61275a546e8cd37de76617f231af | |
parent | b74b43e4ba27a9b2e9da0f3499af261a4b997b00 (diff) |
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.
-rw-r--r-- | ir.cpp | 19 | ||||
-rw-r--r-- | ir.h | 2 |
2 files changed, 6 insertions, 15 deletions
@@ -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) @@ -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); |