[Mesa-dev] [PATCH 1/3] glsl: don't apply uniform/buffer layouts to interface blocks
Samuel Iglesias Gonsálvez
siglesias at igalia.com
Mon Feb 22 13:24:08 UTC 2016
Reviewed-by: Samuel Iglesias Gonsálvez <siglesias at igalia.com>
On Sun, 2016-02-14 at 20:28 +1100, Timothy Arceri wrote:
> 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.
> ---
> 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 988b1e2..cf42abb 100644
> --- a/src/compiler/glsl/ast_to_hir.cpp
> +++ b/src/compiler/glsl/ast_to_hir.cpp
> @@ -6490,8 +6490,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.
> */
> @@ -6502,11 +6504,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);
> }
>
More information about the mesa-dev
mailing list