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 <kenneth@whitecape.org>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
This commit is contained in:
Kenneth Graunke 2013-07-15 22:20:03 -07:00
parent 7f6a2d6937
commit 0418846a07
3 changed files with 25 additions and 1 deletions

View File

@ -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;
@ -455,6 +461,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.
*/

View File

@ -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;
}

View File

@ -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.
*/