From: Eric Anholt Date: Mon, 23 Aug 2010 01:25:55 +0000 (-0700) Subject: glsl: Don't tree-graft in an expression in place of a function outval. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=137b8397fa5cc5d70e86a4b14d6be9326340f584;p=mesa.git glsl: Don't tree-graft in an expression in place of a function outval. Fixes: glsl-constant-folding-call-1 (bug #29737) --- diff --git a/src/glsl/ir_tree_grafting.cpp b/src/glsl/ir_tree_grafting.cpp index 6acc5b86c51..748dcecefc6 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;