glsl: fix subroutine mismatch between declarations/definitions
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Wed, 1 Mar 2017 21:09:28 +0000 (22:09 +0100)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Thu, 2 Mar 2017 23:57:57 +0000 (00:57 +0100)
commit9fc86d4f53a66a147f38f54b09629372bd085658
tree161bdce5cb4f2a0f7da987246db6f4a0638ffdfc
parent10f2c86aa3c318172a3e5cc308a1b83e0dd27e93
glsl: fix subroutine mismatch between declarations/definitions

Previously, when q.subroutine was set to 1, a new subroutine
declaration was added to the AST, while 0 meant a subroutine
definition has been detected by the parser.

Thus, setting the q.subroutine flag in both situations is
obviously wrong because a new type identifier is added instead
of trying to match the declaration. To fix it up, introduce
ast_type_qualifier::is_subroutine_decl() to differentiate
declarations and definitions easily.

This fixes a regression with:
arb_shader_subroutine/compiler/direct-call.vert

Cc: Mark Janes <mark.a.janes@intel.com>
Fixes: be8aa76afd ("glsl: remove unecessary flags.q.subroutine_def")
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100026
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
src/compiler/glsl/ast.h
src/compiler/glsl/ast_to_hir.cpp
src/compiler/glsl/ast_type.cpp
src/compiler/glsl/glsl_parser.yy
src/compiler/glsl/glsl_parser_extras.cpp