summaryrefslogtreecommitdiffstats
path: root/src/compiler/glsl/opt_function_inlining.cpp
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2016-12-19 14:32:57 -0800
committerKenneth Graunke <[email protected]>2016-12-20 11:41:29 -0800
commit62b8bcda1cb7ad18acee7042d40c01b56385e124 (patch)
tree7a329ef06f171a44013e1a37e5d4b661dac94028 /src/compiler/glsl/opt_function_inlining.cpp
parent8fc5443a2b39aaa8292984f7225a2c7968d568ae (diff)
glsl: Use ir_var_temporary when generating inline functions.
We were using ir_var_auto for the inlined function parameter variables, which is wrong, as it suggests that those are real variables declared by the program. Normally this doesn't matter. However, if you called built-ins at global scope, it would pollute the global variable namespace with these new parameter temporaries. If the shader already had variables with those names, the linker might see contradictory global variable declarations and raise an error. Making them temporaries indicates that these are just things generated by the compiler internally. This avoids confusing the linker. Fixes a new Piglit test: glsl-fs-multiple-builtins. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99154 Reported-by: Niels Ole Salscheider <[email protected]> Signed-off-by: Kenneth Graunke <[email protected]> Reviewed-by: Ilia Mirkin <[email protected]> Reviewed-by: Iago Toral Quiroga <[email protected]>
Diffstat (limited to 'src/compiler/glsl/opt_function_inlining.cpp')
-rw-r--r--src/compiler/glsl/opt_function_inlining.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/compiler/glsl/opt_function_inlining.cpp b/src/compiler/glsl/opt_function_inlining.cpp
index 62c1f4b6fc2..78a726b2cc9 100644
--- a/src/compiler/glsl/opt_function_inlining.cpp
+++ b/src/compiler/glsl/opt_function_inlining.cpp
@@ -164,7 +164,7 @@ ir_call::generate_inline(ir_instruction *next_ir)
parameters[i] = NULL;
} else {
parameters[i] = sig_param->clone(ctx, ht);
- parameters[i]->data.mode = ir_var_auto;
+ parameters[i]->data.mode = ir_var_temporary;
/* Remove the read-only decoration because we're going to write
* directly to this variable. If the cloned variable is left