Mesa (master): glsl: Use ir_var_temporary when generating inline functions.

Kenneth Graunke kwg at kemper.freedesktop.org
Tue Dec 20 19:51:09 UTC 2016


Module: Mesa
Branch: master
Commit: 62b8bcda1cb7ad18acee7042d40c01b56385e124
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=62b8bcda1cb7ad18acee7042d40c01b56385e124

Author: Kenneth Graunke <kenneth at whitecape.org>
Date:   Mon Dec 19 14:32:57 2016 -0800

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 at salscheider-online.de>
Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>
Reviewed-by: Iago Toral Quiroga <itoral at igalia.com>

---

 src/compiler/glsl/opt_function_inlining.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/compiler/glsl/opt_function_inlining.cpp b/src/compiler/glsl/opt_function_inlining.cpp
index 62c1f4b..78a726b 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




More information about the mesa-commit mailing list