Mesa (master): glsl: Don' t tree-graft in an expression in place of a function outval.

Eric Anholt anholt at kemper.freedesktop.org
Mon Aug 23 01:35:18 UTC 2010


Module: Mesa
Branch: master
Commit: 137b8397fa5cc5d70e86a4b14d6be9326340f584
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=137b8397fa5cc5d70e86a4b14d6be9326340f584

Author: Eric Anholt <eric at anholt.net>
Date:   Sun Aug 22 18:25:55 2010 -0700

glsl: Don't tree-graft in an expression in place of a function outval.

Fixes: glsl-constant-folding-call-1 (bug #29737)

---

 src/glsl/ir_tree_grafting.cpp |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/src/glsl/ir_tree_grafting.cpp b/src/glsl/ir_tree_grafting.cpp
index 6acc5b8..748dcec 100644
--- a/src/glsl/ir_tree_grafting.cpp
+++ b/src/glsl/ir_tree_grafting.cpp
@@ -188,11 +188,16 @@ ir_tree_grafting_visitor::visit_enter(ir_function_signature *ir)
 ir_visitor_status
 ir_tree_grafting_visitor::visit_enter(ir_call *ir)
 {
+   exec_list_iterator sig_iter = ir->get_callee()->parameters.iterator();
    /* Reminder: iterating ir_call iterates its parameters. */
    foreach_iter(exec_list_iterator, iter, *ir) {
+      ir_variable *sig_param = (ir_variable *)sig_iter.get();
       ir_rvalue *ir = (ir_rvalue *)iter.get();
       ir_rvalue *new_ir = ir;
 
+      if (sig_param->mode != ir_var_in)
+	 continue;
+
       if (do_graft(&new_ir)) {
 	 ir->replace_with(new_ir);
 	 return visit_stop;




More information about the mesa-commit mailing list