diff options
author | Ian Romanick <ian.d.romanick@intel.com> | 2010-10-08 14:29:11 -0700 |
---|---|---|
committer | Ian Romanick <ian.d.romanick@intel.com> | 2010-10-08 14:29:11 -0700 |
commit | 0ea8b993324365769ed0aa2f7bab2dd9281b4924 (patch) | |
tree | bf2b44180e2e2d0a79dc0e86f14ad3a1d5b9b1cc /src/glsl | |
parent | dc459f87566576d06310f6ff6b0bcb2080653f3e (diff) |
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.
Diffstat (limited to 'src/glsl')
-rw-r--r-- | src/glsl/ir_function_inlining.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/glsl/ir_function_inlining.cpp b/src/glsl/ir_function_inlining.cpp index 874602c84f..147c1824c1 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]); } |