From 0ea8b993324365769ed0aa2f7bab2dd9281b4924 Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Fri, 8 Oct 2010 14:29:11 -0700 Subject: [PATCH] glsl: Remove const decoration from inlined function parameters The constness of the function parameter gets inlined with the rest of the function. However, there is also an assignment to the parameter. If this occurs inside a loop the loop analysis code will get confused by the assignment to a read-only variable. Fixes bugzilla #30552. NOTE: this is a candidate for the 7.9 branch. --- src/glsl/ir_function_inlining.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/glsl/ir_function_inlining.cpp b/src/glsl/ir_function_inlining.cpp index 874602c84f2..147c1824c1a 100644 --- a/src/glsl/ir_function_inlining.cpp +++ b/src/glsl/ir_function_inlining.cpp @@ -153,6 +153,13 @@ ir_call::generate_inline(ir_instruction *next_ir) } else { parameters[i] = sig_param->clone(ctx, ht); parameters[i]->mode = ir_var_auto; + + /* Remove the read-only decoration becuase we're going to write + * directly to this variable. If the cloned variable is left + * read-only and the inlined function is inside a loop, the loop + * analysis code will get confused. + */ + parameters[i]->read_only = false; next_ir->insert_before(parameters[i]); } -- 2.30.2