Debugging this took forever as I only looked at constructors in ir.cpp to find who wasn't setting up ->type. I dislike hiding code (as opposed to prototypes and definitions) in C++ header files, but in this case I have only myself to blame.tags/mesa-7.9-rc1
@@ -307,6 +307,14 @@ ir_swizzle::ir_swizzle(ir_rvalue *val, unsigned x, unsigned y, unsigned z, | |||
type = glsl_type::get_instance(val->type->base_type, mask.num_components, 1); | |||
} | |||
ir_swizzle::ir_swizzle(ir_rvalue *val, ir_swizzle_mask mask) | |||
{ | |||
this->val = val; | |||
this->mask = mask; | |||
this->type = glsl_type::get_instance(val->type->base_type, | |||
mask.num_components, 1); | |||
} | |||
#define X 1 | |||
#define R 5 | |||
#define S 9 |
@@ -707,11 +707,7 @@ class ir_swizzle : public ir_rvalue { | |||
public: | |||
ir_swizzle(ir_rvalue *, unsigned x, unsigned y, unsigned z, unsigned w, | |||
unsigned count); | |||
ir_swizzle(ir_rvalue *val, ir_swizzle_mask mask) | |||
: val(val), mask(mask) | |||
{ | |||
/* empty */ | |||
} | |||
ir_swizzle(ir_rvalue *val, ir_swizzle_mask mask); | |||
virtual ir_swizzle *as_swizzle() | |||
{ |