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

Author: Timothy Arceri <[email protected]>
Date:   Sat Jul 18 10:51:51 2015 +1000

glsl: clean-up link uniform code

These changes are also needed to allow linking of
struct and interface arrays of arrays.

Reviewed-by: Thomas Helland <[email protected]>

---

 src/glsl/link_uniforms.cpp |   17 ++++++-----------
 1 file changed, 6 insertions(+), 11 deletions(-)

diff --git a/src/glsl/link_uniforms.cpp b/src/glsl/link_uniforms.cpp
index 1c901e2..94d7287 100644
--- a/src/glsl/link_uniforms.cpp
+++ b/src/glsl/link_uniforms.cpp
@@ -77,6 +77,7 @@ program_resource_visitor::process(ir_variable *var)
 {
    unsigned record_array_count = 1;
    const glsl_type *t = var->type;
+   const glsl_type *t_without_array = var->type->without_array();
    const bool row_major =
       var->data.matrix_layout == GLSL_MATRIX_LAYOUT_ROW_MAJOR;
 
@@ -153,13 +154,8 @@ program_resource_visitor::process(ir_variable *var)
       recursion(var->type, &name, strlen(name), row_major, NULL, packing,
                 false, record_array_count);
       ralloc_free(name);
-   } else if (t->is_interface()) {
-      char *name = ralloc_strdup(NULL, var->type->name);
-      recursion(var->type, &name, strlen(name), row_major, NULL, packing,
-                false, record_array_count);
-      ralloc_free(name);
-   } else if (t->is_array() && t->fields.array->is_interface()) {
-      char *name = ralloc_strdup(NULL, var->type->fields.array->name);
+   } else if (t_without_array->is_interface()) {
+      char *name = ralloc_strdup(NULL, t_without_array->name);
       recursion(var->type, &name, strlen(name), row_major, NULL, packing,
                 false, record_array_count);
       ralloc_free(name);
@@ -234,8 +230,8 @@ program_resource_visitor::recursion(const glsl_type *t, 
char **name,
          (*name)[name_length] = '\0';
          this->leave_record(t, *name, row_major, packing);
       }
-   } else if (t->is_array() && (t->fields.array->is_record()
-                                || t->fields.array->is_interface())) {
+   } else if (t->without_array()->is_record() ||
+              t->without_array()->is_interface()) {
       if (record_type == NULL && t->fields.array->is_record())
          record_type = t->fields.array;
 
@@ -974,8 +970,7 @@ link_update_uniform_buffer_variables(struct gl_shader 
*shader)
 
       if (var->type->is_record()) {
          sentinel = '.';
-      } else if (var->type->is_array()
-                 && var->type->fields.array->is_record()) {
+      } else if (var->type->without_array()->is_record()) {
          sentinel = '[';
       }
 

_______________________________________________
mesa-commit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to