[Mesa-dev] [PATCH] glsl: Make #pragma STDGL invariant(all) only modify outputs.
Ilia Mirkin
imirkin at alum.mit.edu
Tue Nov 7 14:30:48 UTC 2017
On Tue, Nov 7, 2017 at 4:52 AM, Kenneth Graunke <kenneth at whitecape.org> wrote:
> 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
> ---
> src/compiler/glsl/ast_to_hir.cpp | 5 ++---
> 1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/src/compiler/glsl/ast_to_hir.cpp b/src/compiler/glsl/ast_to_hir.cpp
> index 441404f86d3..98af6bb7239 100644
> --- a/src/compiler/glsl/ast_to_hir.cpp
> +++ b/src/compiler/glsl/ast_to_hir.cpp
> @@ -4086,12 +4086,11 @@ apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual,
> case MESA_SHADER_TESS_CTRL:
> case MESA_SHADER_TESS_EVAL:
> case MESA_SHADER_GEOMETRY:
> - if ((var->data.mode == ir_var_shader_in)
> - || (var->data.mode == ir_var_shader_out))
> + if (var->data.mode == ir_var_shader_out)
> var->data.invariant = true;
> break;
> case MESA_SHADER_FRAGMENT:
> - if (var->data.mode == ir_var_shader_in)
> + if (var->data.mode == ir_var_shader_out)
> var->data.invariant = true;
> break;
Perhaps combine the two cases now that they're identical? With that,
Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>
> case MESA_SHADER_COMPUTE:
> --
> 2.15.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list