Mesa (master): glsl: add AoA support for linking interface blocks with unsized members

Timothy Arceri tarceri at kemper.freedesktop.org
Thu Oct 15 10:43:38 UTC 2015


Module: Mesa
Branch: master
Commit: d1d05c0f85daf3445d9b4c9cebb3940e6a251fa6
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=d1d05c0f85daf3445d9b4c9cebb3940e6a251fa6

Author: Timothy Arceri <t_arceri at yahoo.com.au>
Date:   Thu Mar 12 19:52:47 2015 +1100

glsl: add AoA support for linking interface blocks with unsized members

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

---

 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 4c22843..8933b23 100644
--- a/src/glsl/ir.cpp
+++ b/src/glsl/ir.cpp
@@ -1689,8 +1689,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 c15034b..25ca928 100644
--- a/src/glsl/linker.cpp
+++ b/src/glsl/linker.cpp
@@ -1387,8 +1387,10 @@ public:
 
    virtual ir_visitor_status visit(ir_variable *var)
    {
+      const glsl_type *type_without_array;
       fixup_type(&var->type, var->data.max_array_access,
                  var->data.from_ssbo_unsized_array);
+      type_without_array = var->type->without_array();
       if (var->type->is_interface()) {
          if (interface_contains_unsized_arrays(var->type)) {
             const glsl_type *new_type =
@@ -1398,11 +1400,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->is_in_shader_storage_block());
             var->change_interface_type(new_type);




More information about the mesa-commit mailing list