summaryrefslogtreecommitdiffstats
path: root/src/compiler/glsl/ast_to_hir.cpp
diff options
context:
space:
mode:
authorTimothy Arceri <timothy.arceri@collabora.com>2016-06-01 09:21:01 +1000
committerTimothy Arceri <timothy.arceri@collabora.com>2016-06-01 10:33:57 +1000
commit98d40b4d1195ebfaa2fd9ed43755ca6896422c1a (patch)
treefdf3c4112de18b0a0f2bd98552fcf47a1c5cf535 /src/compiler/glsl/ast_to_hir.cpp
parentc1107cec44ab030c7fcc97c67baa12df1cc9d7b5 (diff)
downloadexternal_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.cpp23
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,