summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Romanick <ian.d.romanick@intel.com>2010-10-08 14:29:11 -0700
committerIan Romanick <ian.d.romanick@intel.com>2010-10-08 14:29:11 -0700
commit0ea8b993324365769ed0aa2f7bab2dd9281b4924 (patch)
treebf2b44180e2e2d0a79dc0e86f14ad3a1d5b9b1cc
parentdc459f87566576d06310f6ff6b0bcb2080653f3e (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.
-rw-r--r--src/glsl/ir_function_inlining.cpp7
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]);
}