glsl: Use ir_var_temporary when generating inline functions.
authorKenneth Graunke <kenneth@whitecape.org>
Mon, 19 Dec 2016 22:32:57 +0000 (14:32 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Tue, 20 Dec 2016 19:41:29 +0000 (11:41 -0800)
commit62b8bcda1cb7ad18acee7042d40c01b56385e124
tree7a329ef06f171a44013e1a37e5d4b661dac94028
parent8fc5443a2b39aaa8292984f7225a2c7968d568ae
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 <niels_ole@salscheider-online.de>
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
src/compiler/glsl/opt_function_inlining.cpp