summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2010-07-07 16:10:04 -0700
committerEric Anholt <eric@anholt.net>2010-07-07 16:37:48 -0700
commit7d8091f7cca0314dd66599bdce5bfcf09fe8b578 (patch)
tree5f467ec3bb7d74bda068a43a306c270a472a3349
parent9b68b88e43c424439d425534ef280ee7a9406a1b (diff)
ir_to_mesa: Add support for assignment of aggregates.
-rw-r--r--src/mesa/shader/ir_to_mesa.cpp15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/mesa/shader/ir_to_mesa.cpp b/src/mesa/shader/ir_to_mesa.cpp
index 00fa2cccfef..9497b17a2a9 100644
--- a/src/mesa/shader/ir_to_mesa.cpp
+++ b/src/mesa/shader/ir_to_mesa.cpp
@@ -1268,6 +1268,7 @@ ir_to_mesa_visitor::visit(ir_assignment *ir)
{
struct ir_to_mesa_dst_reg l;
struct ir_to_mesa_src_reg r;
+ int i;
assert(!ir->lhs->type->is_matrix());
assert(!ir->lhs->type->is_array());
@@ -1295,10 +1296,18 @@ ir_to_mesa_visitor::visit(ir_assignment *ir)
* an extra computing the condition.
*/
condition.negate = ~condition.negate;
- ir_to_mesa_emit_op3(ir, OPCODE_CMP, l,
- condition, r, ir_to_mesa_src_reg_from_dst(l));
+ for (i = 0; i < type_size(ir->lhs->type); i++) {
+ ir_to_mesa_emit_op3(ir, OPCODE_CMP, l,
+ condition, r, ir_to_mesa_src_reg_from_dst(l));
+ l.index++;
+ r.index++;
+ }
} else {
- ir_to_mesa_emit_op1(ir, OPCODE_MOV, l, r);
+ for (i = 0; i < type_size(ir->lhs->type); i++) {
+ ir_to_mesa_emit_op1(ir, OPCODE_MOV, l, r);
+ l.index++;
+ r.index++;
+ }
}
}