From: Timothy Arceri Date: Sat, 14 Nov 2015 03:32:38 +0000 (+1100) Subject: glsl: move stream layout max validation X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=db3c36aedfa2e92c2cf1c17a096c1b5e7cd51c42;p=mesa.git 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 Reviewed-by: Emil Velikov --- diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp index 7104aa0a633..bb0db7992e5 100644 --- a/src/glsl/ast_to_hir.cpp +++ b/src/glsl/ast_to_hir.cpp @@ -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. diff --git a/src/glsl/ast_type.cpp b/src/glsl/ast_type.cpp index 79134c19893..b107051e32c 100644 --- a/src/glsl/ast_type.cpp +++ b/src/glsl/ast_type.cpp @@ -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;