[Mesa-dev] [PATCH V2 2/4] glsl: Compile error if fs uses gl_FragCoord before first redeclaration

Ian Romanick idr at freedesktop.org
Tue Feb 25 07:47:13 PST 2014


On 02/24/2014 05:34 PM, Anuj Phogat wrote:
> Section 4.3.8.1, page 39 of GLSL 1.50 spec says:
>    "Within any shader, the first redeclarations of gl_FragCoord
>     must appear before any use of gl_FragCoord."
>
> GLSL compiler should generate an error in following case:
>
> vec4 p = gl_FragCoord;
> layout(origin_upper_left) in vec4 gl_FragCoord;
>
> void main()
> {
> }
>
> Signed-off-by: Anuj Phogat <anuj.phogat at gmail.com>
> Cc: <mesa-stable at lists.freedesktop.org>
> ---
>   src/glsl/ast_to_hir.cpp | 16 ++++++++++++++++
>   1 file changed, 16 insertions(+)
>
> diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
> index 9fe3095..f5dacfd 100644
> --- a/src/glsl/ast_to_hir.cpp
> +++ b/src/glsl/ast_to_hir.cpp
> @@ -2490,6 +2490,22 @@ apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual,
>      }
>
>      if (strcmp(var->name, "gl_FragCoord") == 0) {
> +      /* Section 4.3.8.1, page 39 of GLSL 1.50 spec says:
> +       *
> +       *    "Within any shader, the first redeclarations of gl_FragCoord
> +       *     must appear before any use of gl_FragCoord."
> +       *
> +       * Generate a compiler error if above condition is not met by the
> +       * fragment shader.
> +       */
> +      ir_variable *earlier = state->symbols->get_variable("gl_FragCoord");
> +      if (earlier != NULL &&
> +          earlier->data.used &&
> +          !state->fs_redeclares_gl_fragcoord) {

I don't think '!state->fs_redeclares_gl_fragcoord' should be there. 
What about a shader like:

     layout(origin_upper_left) in vec4 gl_FragCoord;
     vec4 p = gl_FragCoord;
     layout(origin_upper_left) in vec4 gl_FragCoord;

     void main()
     {
     }

> +         _mesa_glsl_error(loc, state,
> +                          "gl_FragCoord used before its first redeclaration "
> +                          "in fragment shader");
> +      }
>
>         /* Make sure all gl_FragCoord redeclarations specify the same layout
>          * qualifiers.
>



More information about the mesa-dev mailing list