glsl: Remove const decoration from inlined function parameters
authorIan Romanick <ian.d.romanick@intel.com>
Fri, 8 Oct 2010 21:29:11 +0000 (14:29 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Fri, 8 Oct 2010 21:29:11 +0000 (14:29 -0700)
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

index 874602c84f291f095828c615c0d45baf5dc0dfb9..147c1824c1a06f5a450e92949336b35193e9e9c5 100644 (file)
@@ -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]);
       }