From: Timothy Arceri <timothy.arc...@collabora.com> This validation is moved later so we can validate the max value when compile time constant support is added in a later patch. --- src/glsl/ast_to_hir.cpp | 22 ++++++++++++++++++++-- src/glsl/ast_type.cpp | 14 -------------- 2 files changed, 20 insertions(+), 16 deletions(-)
diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp index 53faacf..dedc39f 100644 --- a/src/glsl/ast_to_hir.cpp +++ b/src/glsl/ast_to_hir.cpp @@ -2522,8 +2522,24 @@ process_qualifier_constant(struct _mesa_glsl_parse_state *state, } 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 void validate_binding_qualifier(struct _mesa_glsl_parse_state *state, YYLTYPE *loc, + ir_variable *var, const glsl_type *type, const ast_type_qualifier *qual) { @@ -3036,7 +3052,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 +6534,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 agaist it so * just return early. diff --git a/src/glsl/ast_type.cpp b/src/glsl/ast_type.cpp index 79134c1..b107051 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; -- 2.4.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev