Browse Source

Construct an ir_constant from a scalar component of another ir_constant

tags/mesa-7.9-rc1
Ian Romanick 15 years ago
parent
commit
989cfc432e
2 changed files with 25 additions and 0 deletions
  1. 13
    0
      ir.cpp
  2. 12
    0
      ir.h

+ 13
- 0
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
- 0
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;

Loading…
Cancel
Save