Mesa (glsl2): glsl2: Flatten expression that appear as the parameters of ir_call as well.

Eric Anholt anholt at kemper.freedesktop.org
Tue Jul 13 02:55:42 UTC 2010


Module: Mesa
Branch: glsl2
Commit: 562c3d0cb1aedbf3c9f13f206678fa3f0fa26a9f
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=562c3d0cb1aedbf3c9f13f206678fa3f0fa26a9f

Author: Eric Anholt <eric at anholt.net>
Date:   Mon Jul 12 19:50:01 2010 -0700

glsl2: Flatten expression that appear as the parameters of ir_call as well.

---

 src/glsl/ir_expression_flattening.cpp |   17 ++++++++++++-----
 1 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/src/glsl/ir_expression_flattening.cpp b/src/glsl/ir_expression_flattening.cpp
index 66268a6..f186593 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;
 }
 
 




More information about the mesa-commit mailing list