From d244986bf20aedf5ef6a156ec97d33f485993323 Mon Sep 17 00:00:00 2001 From: Timothy Arceri Date: Sun, 14 Feb 2016 16:18:36 +1100 Subject: [PATCH] glsl: don't apply uniform/buffer layouts to interface blocks MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit If the following patch we will stop setting these layouts by default on interface blocks, so we need to do this to avoid hitting the assert. Reviewed-by: Samuel Iglesias Gonsálvez --- src/compiler/glsl/ast_to_hir.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/compiler/glsl/ast_to_hir.cpp b/src/compiler/glsl/ast_to_hir.cpp index db5ec9a4ad9..7e928c48e0e 100644 --- a/src/compiler/glsl/ast_to_hir.cpp +++ b/src/compiler/glsl/ast_to_hir.cpp @@ -6465,8 +6465,10 @@ ast_process_struct_or_iface_block_members(exec_list *instructions, * the structure may contain a structure that contains ... a matrix * that need the proper layout. */ - if (field_type->without_array()->is_matrix() - || field_type->without_array()->is_record()) { + if (is_interface && + (layout->flags.q.uniform || layout->flags.q.buffer) && + (field_type->without_array()->is_matrix() + || field_type->without_array()->is_record())) { /* If no layout is specified for the field, inherit the layout * from the block. */ @@ -6477,11 +6479,10 @@ ast_process_struct_or_iface_block_members(exec_list *instructions, else if (qual->flags.q.column_major) fields[i].matrix_layout = GLSL_MATRIX_LAYOUT_COLUMN_MAJOR; - /* If we're processing an interface block, the matrix layout must - * be decided by this point. + /* If we're processing an uniform or buffer block, the matrix + * layout must be decided by this point. */ - assert(!is_interface - || fields[i].matrix_layout == GLSL_MATRIX_LAYOUT_ROW_MAJOR + assert(fields[i].matrix_layout == GLSL_MATRIX_LAYOUT_ROW_MAJOR || fields[i].matrix_layout == GLSL_MATRIX_LAYOUT_COLUMN_MAJOR); } -- 2.30.2