Module: Mesa Branch: 9.2 Commit: 6fb2032c351e101da2e4a80dcee7b2565d396671 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=6fb2032c351e101da2e4a80dcee7b2565d396671
Author: Matt Turner <matts...@gmail.com> Date: Mon Aug 26 14:14:03 2013 -0700 glsl: Disallow uniform block layout qualifiers on non-uniform block vars. Cc: 9.2 <mesa-sta...@lists.freedesktop.org> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=68460 Reviewed-by: Ian Romanick <ian.d.roman...@intel.com> --- src/glsl/ast_to_hir.cpp | 17 +++++++++++++---- 1 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp index d474683..6164f76 100644 --- a/src/glsl/ast_to_hir.cpp +++ b/src/glsl/ast_to_hir.cpp @@ -1847,9 +1847,18 @@ is_varying_var(ir_variable *var, _mesa_glsl_parser_targets target) static void validate_matrix_layout_for_type(struct _mesa_glsl_parse_state *state, YYLTYPE *loc, - const glsl_type *type) + const glsl_type *type, + ir_variable *var) { - if (!type->is_matrix()) { + if (var && !var->is_in_uniform_block()) { + /* Layout qualifiers may only apply to interface blocks and fields in + * them. + */ + _mesa_glsl_error(loc, state, + "uniform block layout qualifiers row_major and " + "column_major may not be applied to variables " + "outside of uniform blocks"); + } else if (!type->is_matrix()) { /* The OpenGL ES 3.0 conformance tests did not originally allow * matrix layout qualifiers on non-matrices. However, the OpenGL * 4.4 and OpenGL ES 3.0 (revision TBD) specifications were @@ -2287,7 +2296,7 @@ apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual, } if (qual->flags.q.row_major || qual->flags.q.column_major) { - validate_matrix_layout_for_type(state, loc, var->type); + validate_matrix_layout_for_type(state, loc, var->type, var); } } @@ -4350,7 +4359,7 @@ ast_process_structure_or_interface_block(exec_list *instructions, "row_major and column_major can only be " "applied to uniform interface blocks"); } else - validate_matrix_layout_for_type(state, &loc, field_type); + validate_matrix_layout_for_type(state, &loc, field_type, NULL); } if (qual->flags.q.uniform && qual->has_interpolation()) { _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit