summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ir.cpp10
-rw-r--r--ir.h4
2 files changed, 13 insertions, 1 deletions
diff --git a/ir.cpp b/ir.cpp
index ad75cdad73..1b5947a470 100644
--- a/ir.cpp
+++ b/ir.cpp
@@ -87,6 +87,16 @@ ir_dereference::ir_dereference(ir_instruction *var)
}
+ir_dereference::ir_dereference(ir_instruction *var,
+ ir_instruction *array_index)
+ : ir_instruction(ir_op_dereference), mode(ir_reference_array),
+ var(var)
+{
+ this->type = (var != NULL) ? var->type : glsl_error_type;
+ this->selector.array_index = array_index;
+}
+
+
void
ir_dereference::set_swizzle(unsigned x, unsigned y, unsigned z, unsigned w,
unsigned count)
diff --git a/ir.h b/ir.h
index 530c7326a3..22b46c971e 100644
--- a/ir.h
+++ b/ir.h
@@ -393,6 +393,8 @@ class ir_dereference : public ir_instruction {
public:
ir_dereference(struct ir_instruction *);
+ ir_dereference(ir_instruction *variable, ir_instruction *array_index);
+
virtual void accept(ir_visitor *v)
{
v->visit(this);
@@ -419,7 +421,7 @@ public:
ir_instruction *var;
union {
- ir_expression *array_index;
+ ir_instruction *array_index;
const char *field;
struct ir_swizzle_mask swizzle;
} selector;