diff options
author | Kenneth Graunke <[email protected]> | 2013-07-15 22:20:03 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2013-07-18 16:57:23 -0700 |
commit | 0418846a07b02d39e129987580e7ea50fb422ee0 (patch) | |
tree | d55b179c77f58bfd17addbbaf3015d4d78213329 /src | |
parent | 7f6a2d6937e837e06d9e22d173d996397ff4cacf (diff) |
glsl: Parse the "binding" keyword and store it in ast_type_qualifier.
Nothing actually uses this yet.
v2: Remove >= 0 checks. They'll be handled in later validation.
Signed-off-by: Kenneth Graunke <[email protected]>
Reviewed-by: Paul Berry <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/glsl/ast.h | 14 | ||||
-rw-r--r-- | src/glsl/ast_type.cpp | 6 | ||||
-rw-r--r-- | src/glsl/glsl_parser.yy | 6 |
3 files changed, 25 insertions, 1 deletions
diff --git a/src/glsl/ast.h b/src/glsl/ast.h index 6aede009c8c..d98f1a39b47 100644 --- a/src/glsl/ast.h +++ b/src/glsl/ast.h @@ -413,6 +413,12 @@ struct ast_type_qualifier { */ unsigned explicit_index:1; + /** + * Flag set if GL_ARB_shading_language_420pack "binding" layout + * qualifier is used. + */ + unsigned explicit_binding:1; + /** \name Layout qualifiers for GL_AMD_conservative_depth */ /** \{ */ unsigned depth_any:1; @@ -456,6 +462,14 @@ struct ast_type_qualifier { int index; /** + * Binding specified via GL_ARB_shading_language_420pack's "binding" keyword. + * + * \note + * This field is only valid if \c explicit_binding is set. + */ + int binding; + + /** * Return true if and only if an interpolation qualifier is present. */ bool has_interpolation() const; diff --git a/src/glsl/ast_type.cpp b/src/glsl/ast_type.cpp index 4cbb835ee1e..275b2a1d0ac 100644 --- a/src/glsl/ast_type.cpp +++ b/src/glsl/ast_type.cpp @@ -71,7 +71,8 @@ ast_type_qualifier::has_layout() const || this->flags.q.row_major || this->flags.q.packed || this->flags.q.explicit_location - || this->flags.q.explicit_index; + || this->flags.q.explicit_index + || this->flags.q.explicit_binding; } bool @@ -145,6 +146,9 @@ ast_type_qualifier::merge_qualifier(YYLTYPE *loc, if (q.flags.q.explicit_index) this->index = q.index; + if (q.flags.q.explicit_binding) + this->binding = q.binding; + return true; } diff --git a/src/glsl/glsl_parser.yy b/src/glsl/glsl_parser.yy index b73ec6b3e19..cbd94b41f82 100644 --- a/src/glsl/glsl_parser.yy +++ b/src/glsl/glsl_parser.yy @@ -1254,6 +1254,12 @@ layout_qualifier_id: } } + if (state->ARB_shading_language_420pack_enable && + strcmp("binding", $1) == 0) { + $$.flags.q.explicit_binding = 1; + $$.binding = $3; + } + /* If the identifier didn't match any known layout identifiers, * emit an error. */ |