Construct an ir_constant from a scalar component of another ir_constant

This commit is contained in:
Ian Romanick 2010-06-04 16:13:35 -07:00
parent 565185cd8f
commit 989cfc432e
2 changed files with 25 additions and 0 deletions

13
ir.cpp
View File

@ -227,6 +227,19 @@ ir_constant::ir_constant(bool b)
this->value.b[0] = b;
}
ir_constant::ir_constant(const ir_constant *c, unsigned i)
{
this->type = c->type->get_base_type();
switch (this->type->base_type) {
case GLSL_TYPE_UINT: this->value.u[0] = c->value.u[i]; break;
case GLSL_TYPE_INT: this->value.i[0] = c->value.i[i]; break;
case GLSL_TYPE_FLOAT: this->value.f[0] = c->value.f[i]; break;
case GLSL_TYPE_BOOL: this->value.b[0] = c->value.b[i]; break;
default: assert(!"Should not get here."); break;
}
}
ir_dereference_variable::ir_dereference_variable(ir_variable *var)
{

12
ir.h
View File

@ -1026,6 +1026,18 @@ public:
ir_constant(int i);
ir_constant(float f);
/**
* Construct an ir_constant from a scalar component of another ir_constant
*
* The new \c ir_constant inherits the type of the component from the
* source constant.
*
* \note
* In the case of a matrix constant, the new constant is a scalar, \b not
* a vector.
*/
ir_constant(const ir_constant *c, unsigned i);
virtual ir_constant *as_constant()
{
return this;