On Tue, Feb 25, 2014 at 7:47 AM, Ian Romanick <i...@freedesktop.org> wrote: > > 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.pho...@gmail.com> >> Cc: <mesa-sta...@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() > { > } > This shader compiles successfully as I expected. Only the first re-declaration must appear before gl_FragCoord usage. Do you interpret the spec differently? I've added new piglit tests which cover this case as well: http://patchwork.freedesktop.org/project/piglit/list/?submitter=Anuj+Phogat&q=glsl-1.50
>> + _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. >> > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev