glsl: move stream layout max validation

This validation is moved later so we can validate the
max value when compile time constant support is added in a
later patch.

Reviewed-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
This commit is contained in:
Timothy Arceri 2015-11-14 14:32:38 +11:00 committed by Timothy Arceri
parent 17e224e8ec
commit db3c36aedf
2 changed files with 19 additions and 16 deletions

View File

@ -2521,6 +2521,21 @@ process_qualifier_constant(struct _mesa_glsl_parse_state *state,
return true;
}
static bool
validate_stream_qualifier(YYLTYPE *loc, struct _mesa_glsl_parse_state *state,
unsigned stream)
{
if (stream >= state->ctx->Const.MaxVertexStreams) {
_mesa_glsl_error(loc, state,
"invalid stream specified %d is larger than "
"MAX_VERTEX_STREAMS - 1 (%d).",
stream, state->ctx->Const.MaxVertexStreams - 1);
return false;
}
return true;
}
static bool
validate_binding_qualifier(struct _mesa_glsl_parse_state *state,
YYLTYPE *loc,
@ -3036,7 +3051,8 @@ apply_layout_qualifier_to_variable(const struct ast_type_qualifier *qual,
qual->flags.q.out && qual->flags.q.stream) {
unsigned qual_stream;
if (process_qualifier_constant(state, loc, "stream", qual->stream,
&qual_stream)) {
&qual_stream) &&
validate_stream_qualifier(loc, state, qual_stream)) {
var->data.stream = qual_stream;
}
}
@ -6517,7 +6533,8 @@ ast_interface_block::hir(exec_list *instructions,
unsigned qual_stream;
if (!process_qualifier_constant(state, &loc, "stream", this->layout.stream,
&qual_stream)) {
&qual_stream) ||
!validate_stream_qualifier(&loc, state, qual_stream)) {
/* If the stream qualifier is invalid it doesn't make sense to continue
* on and try to compare stream layouts on member variables against it
* so just return early.

View File

@ -190,20 +190,6 @@ ast_type_qualifier::merge_qualifier(YYLTYPE *loc,
if (state->stage == MESA_SHADER_GEOMETRY &&
state->has_explicit_attrib_stream()) {
if (q.flags.q.stream && q.stream >= state->ctx->Const.MaxVertexStreams) {
_mesa_glsl_error(loc, state,
"`stream' value is larger than MAX_VERTEX_STREAMS - 1 "
"(%d > %d)",
q.stream, state->ctx->Const.MaxVertexStreams - 1);
}
if (this->flags.q.explicit_stream &&
this->stream >= state->ctx->Const.MaxVertexStreams) {
_mesa_glsl_error(loc, state,
"`stream' value is larger than MAX_VERTEX_STREAMS - 1 "
"(%d > %d)",
this->stream, state->ctx->Const.MaxVertexStreams - 1);
}
if (!this->flags.q.explicit_stream) {
if (q.flags.q.stream) {
this->flags.q.stream = 1;