From: Eric Anholt Date: Tue, 13 Jul 2010 02:50:01 +0000 (-0700) Subject: glsl2: Flatten expression that appear as the parameters of ir_call as well. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=562c3d0cb1aedbf3c9f13f206678fa3f0fa26a9f;p=mesa.git glsl2: Flatten expression that appear as the parameters of ir_call as well. --- diff --git a/src/glsl/ir_expression_flattening.cpp b/src/glsl/ir_expression_flattening.cpp index 66268a679d9..f18659342f5 100644 --- a/src/glsl/ir_expression_flattening.cpp +++ b/src/glsl/ir_expression_flattening.cpp @@ -165,11 +165,18 @@ ir_expression_flattening_visitor::visit_leave(ir_swizzle *ir) ir_visitor_status ir_expression_flattening_visitor::visit_enter(ir_call *ir) { - /* FINISHME: Why not process the call parameters? (Same behavior as original - * FINISHME: code.) - */ - (void) ir; - return visit_continue_with_parent; + /* Reminder: iterating ir_call iterates its parameters. */ + foreach_iter(exec_list_iterator, iter, *ir) { + ir_rvalue *ir = (ir_rvalue *)iter.get(); + ir_rvalue *new_ir = operand_to_temp(ir); + + if (new_ir != ir) { + ir->insert_before(new_ir); + ir->remove(); + } + } + + return visit_continue; }