glsl: don't apply uniform/buffer layouts to interface blocks

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 <siglesias@igalia.com>
This commit is contained in:
Timothy Arceri
2016-02-14 16:18:36 +11:00
parent 4ba7ad6cc1
commit d244986bf2

View File

@@ -6465,8 +6465,10 @@ ast_process_struct_or_iface_block_members(exec_list *instructions,
* the structure may contain a structure that contains ... a matrix * the structure may contain a structure that contains ... a matrix
* that need the proper layout. * that need the proper layout.
*/ */
if (field_type->without_array()->is_matrix() if (is_interface &&
|| field_type->without_array()->is_record()) { (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 /* If no layout is specified for the field, inherit the layout
* from the block. * from the block.
*/ */
@@ -6477,11 +6479,10 @@ ast_process_struct_or_iface_block_members(exec_list *instructions,
else if (qual->flags.q.column_major) else if (qual->flags.q.column_major)
fields[i].matrix_layout = GLSL_MATRIX_LAYOUT_COLUMN_MAJOR; fields[i].matrix_layout = GLSL_MATRIX_LAYOUT_COLUMN_MAJOR;
/* If we're processing an interface block, the matrix layout must /* If we're processing an uniform or buffer block, the matrix
* be decided by this point. * layout must be decided by this point.
*/ */
assert(!is_interface assert(fields[i].matrix_layout == GLSL_MATRIX_LAYOUT_ROW_MAJOR
|| fields[i].matrix_layout == GLSL_MATRIX_LAYOUT_ROW_MAJOR
|| fields[i].matrix_layout == GLSL_MATRIX_LAYOUT_COLUMN_MAJOR); || fields[i].matrix_layout == GLSL_MATRIX_LAYOUT_COLUMN_MAJOR);
} }