glsl: Make #pragma STDGL invariant(all) only modify outputs.
authorKenneth Graunke <kenneth@whitecape.org>
Tue, 7 Nov 2017 08:57:52 +0000 (00:57 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 9 Nov 2017 07:11:48 +0000 (23:11 -0800)
commit688d6958682f96aaeb88aa8cc23cc5c9886a6be4
tree43f3d58b5ebc8de45c99234450a4e096a239dbe2
parentc591b1e59454db2e8854e36852e0d413ce38b2f2
glsl: Make #pragma STDGL invariant(all) only modify outputs.

According to the GLSL ES 3.20, GLSL 4.50, and GLSL 1.20 specs:

   "To force all output variables to be invariant, use the pragma

       #pragma STDGL invariant(all)

    before all declarations in a shader."

Notably, this is only supposed to affect output variables.  Furthermore,

   "Only variables output from a shader can be candidates for invariance."

It looks like this has been wrong since we first supported the pragma in
2011 (commit 86b4398cd158024f6be9fa830554a11c2a7ebe0c).

Fixes dEQP-GLES2.functional.shaders.preprocessor.pragmas.pragma_fragment.

v2: Now that all cases are identical (other than compute shaders, which
    have no output variables anyway), we can drop the switch statement
    entirely.  We also don't need the current_function == NULL check;
    this was a hold over from when we had a single var_mode_out for both
    function parameters and shader varyings, in the bad old days.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
src/compiler/glsl/ast_to_hir.cpp