From ea2a03f0a5b8b58ea88ecb607664ea50c9d6e96e Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Wed, 7 Jul 2010 17:59:50 -0700 Subject: ir_to_mesa: Fix the assertion on LHS array derefs to DWIM. This allows array derefs of matrices now, which makes idr's GLSL demo happy. --- src/mesa/shader/ir_to_mesa.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/mesa/shader/ir_to_mesa.cpp b/src/mesa/shader/ir_to_mesa.cpp index 727a815753c..4496daf2a55 100644 --- a/src/mesa/shader/ir_to_mesa.cpp +++ b/src/mesa/shader/ir_to_mesa.cpp @@ -1247,21 +1247,24 @@ static struct ir_to_mesa_dst_reg get_assignment_lhs(ir_instruction *ir, ir_to_mesa_visitor *v) { struct ir_to_mesa_dst_reg dst_reg; - ir_dereference *deref; ir_swizzle *swiz; + ir_dereference_array *deref_array = ir->as_dereference_array(); + /* This should have been handled by ir_vec_index_to_cond_assign */ + if (deref_array) { + assert(!deref_array->array->type->is_vector()); + + /* We don't handle relative addressing on the LHS yet. */ + assert(deref_array->array_index->constant_expression_value() != NULL); + } + /* Use the rvalue deref handler for the most part. We'll ignore * swizzles in it and write swizzles using writemask, though. */ ir->accept(v); dst_reg = ir_to_mesa_dst_reg_from_src(v->result); - if ((deref = ir->as_dereference())) { - ir_dereference_array *deref_array = ir->as_dereference_array(); - assert(!deref_array || deref_array->array->type->is_array()); - - ir->accept(v); - } else if ((swiz = ir->as_swizzle())) { + if ((swiz = ir->as_swizzle())) { dst_reg.writemask = 0; if (swiz->mask.num_components >= 1) dst_reg.writemask |= (1 << swiz->mask.x); -- cgit v1.2.3