[Mesa-dev] [RFC PATCH 09/12] glsl: add AoA support for linking interface blocks
Timothy Arceri
t_arceri at yahoo.com.au
Sat Mar 21 02:49:19 PDT 2015
Adds support for linking AoA interface blocks
which countain unsized arrays
---
src/glsl/ir.cpp | 4 ++--
src/glsl/linker.cpp | 9 +++++----
2 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/src/glsl/ir.cpp b/src/glsl/ir.cpp
index 54656f8..2e1442f 100644
--- a/src/glsl/ir.cpp
+++ b/src/glsl/ir.cpp
@@ -1663,8 +1663,8 @@ ir_variable::ir_variable(const struct glsl_type *type, const char *name,
if (type->is_interface())
this->init_interface_type(type);
- else if (type->is_array() && type->fields.array->is_interface())
- this->init_interface_type(type->fields.array);
+ else if (type->without_array()->is_interface())
+ this->init_interface_type(type->without_array());
}
}
diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
index 0c44677..eb25163 100644
--- a/src/glsl/linker.cpp
+++ b/src/glsl/linker.cpp
@@ -1201,7 +1201,9 @@ public:
virtual ir_visitor_status visit(ir_variable *var)
{
+ const glsl_type *type_without_array;
fixup_type(&var->type, var->data.max_array_access);
+ type_without_array = var->type->without_array();
if (var->type->is_interface()) {
if (interface_contains_unsized_arrays(var->type)) {
const glsl_type *new_type =
@@ -1210,11 +1212,10 @@ public:
var->type = new_type;
var->change_interface_type(new_type);
}
- } else if (var->type->is_array() &&
- var->type->fields.array->is_interface()) {
- if (interface_contains_unsized_arrays(var->type->fields.array)) {
+ } else if (type_without_array->is_interface()) {
+ if (interface_contains_unsized_arrays(type_without_array)) {
const glsl_type *new_type =
- resize_interface_members(var->type->fields.array,
+ resize_interface_members(type_without_array,
var->get_max_ifc_array_access());
var->change_interface_type(new_type);
var->type =
--
2.1.0
More information about the mesa-dev
mailing list