diff options
author | Timothy Arceri <timothy.arceri@collabora.com> | 2016-06-01 09:21:01 +1000 |
---|---|---|
committer | Timothy Arceri <timothy.arceri@collabora.com> | 2016-06-01 10:33:57 +1000 |
commit | 98d40b4d1195ebfaa2fd9ed43755ca6896422c1a (patch) | |
tree | fdf3c4112de18b0a0f2bd98552fcf47a1c5cf535 /src/compiler/glsl/ast_to_hir.cpp | |
parent | c1107cec44ab030c7fcc97c67baa12df1cc9d7b5 (diff) | |
download | external_mesa3d-98d40b4d1195ebfaa2fd9ed43755ca6896422c1a.zip external_mesa3d-98d40b4d1195ebfaa2fd9ed43755ca6896422c1a.tar.gz external_mesa3d-98d40b4d1195ebfaa2fd9ed43755ca6896422c1a.tar.bz2 |
Revert "glsl: fix xfb_offset unsized array validation"
This reverts commit aac90ba2920cf5ceb4df6dba776dd3952780e456.
The commit caused a regression in:
piglit.spec.glsl-1_50.compiler.gs-input-nonarray-named-block.geom
Also the CTS test it was meant to fix seems like it may be bogus.
Cc: "12.0" <mesa-stable@lists.freedesktop.org>
Diffstat (limited to 'src/compiler/glsl/ast_to_hir.cpp')
-rw-r--r-- | src/compiler/glsl/ast_to_hir.cpp | 23 |
1 files changed, 8 insertions, 15 deletions
diff --git a/src/compiler/glsl/ast_to_hir.cpp b/src/compiler/glsl/ast_to_hir.cpp index c0cb3d6..400d3c4 100644 --- a/src/compiler/glsl/ast_to_hir.cpp +++ b/src/compiler/glsl/ast_to_hir.cpp @@ -3442,11 +3442,11 @@ apply_layout_qualifier_to_variable(const struct ast_type_qualifier *qual, if (qual->flags.q.explicit_xfb_offset) { unsigned qual_xfb_offset; unsigned component_size = var->type->contains_double() ? 8 : 4; - const glsl_type *t = get_varying_type(var, state->stage); + if (process_qualifier_constant(state, loc, "xfb_offset", qual->offset, &qual_xfb_offset) && validate_xfb_offset_qualifier(loc, state, (int) qual_xfb_offset, - t, component_size)) { + var->type, component_size)) { var->data.offset = qual_xfb_offset; var->data.explicit_xfb_offset = true; } @@ -7336,6 +7336,12 @@ ast_interface_block::hir(exec_list *instructions, packing, this->block_name); + unsigned component_size = block_type->contains_double() ? 8 : 4; + int xfb_offset = + layout.flags.q.explicit_xfb_offset ? (int) qual_xfb_offset : -1; + validate_xfb_offset_qualifier(&loc, state, xfb_offset, block_type, + component_size); + if (!state->symbols->add_interface(block_type->name, block_type, var_mode)) { YYLTYPE loc = this->get_location(); _mesa_glsl_error(&loc, state, "interface block `%s' with type `%s' " @@ -7474,13 +7480,6 @@ ast_interface_block::hir(exec_list *instructions, var_mode); } - unsigned component_size = block_type->contains_double() ? 8 : 4; - int xfb_offset = - layout.flags.q.explicit_xfb_offset ? (int) qual_xfb_offset : -1; - const glsl_type *t = get_varying_type(var, state->stage); - validate_xfb_offset_qualifier(&loc, state, xfb_offset, t, - component_size); - var->data.matrix_layout = matrix_layout == GLSL_MATRIX_LAYOUT_INHERITED ? GLSL_MATRIX_LAYOUT_COLUMN_MAJOR : matrix_layout; @@ -7531,12 +7530,6 @@ ast_interface_block::hir(exec_list *instructions, */ assert(this->array_specifier == NULL); - unsigned component_size = block_type->contains_double() ? 8 : 4; - int xfb_offset = - layout.flags.q.explicit_xfb_offset ? (int) qual_xfb_offset : -1; - validate_xfb_offset_qualifier(&loc, state, xfb_offset, block_type, - component_size); - for (unsigned i = 0; i < num_variables; i++) { ir_variable *var = new(state) ir_variable(fields[i].type, |