Skip to content

Commit

Permalink
glsl: Disallow uniform block layout qualifiers on non-uniform block v…
Browse files Browse the repository at this point in the history
…ars.

Cc: 9.2 <mesa-stable@lists.freedesktop.org>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=68460
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
  • Loading branch information
mattst88 committed Aug 27, 2013
1 parent cec7b5c commit d8ac987
Showing 1 changed file with 13 additions and 4 deletions.
17 changes: 13 additions & 4 deletions src/glsl/ast_to_hir.cpp
Expand Up @@ -1849,9 +1849,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
Expand Down Expand Up @@ -2302,7 +2311,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);
}
}

Expand Down Expand Up @@ -4476,7 +4485,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()) {
Expand Down

0 comments on commit d8ac987

Please sign in to comment.