[Mesa-dev] [PATCH 2/3] nir: fix nir_opt_copy_prop_vars() for arrays of arrays

Timothy Arceri tarceri at itsqueeze.com
Fri Jun 30 02:45:46 UTC 2017


Previous we only incremented the guide for a single
dimension/wildcard.
---
 src/compiler/nir/nir_opt_copy_prop_vars.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/src/compiler/nir/nir_opt_copy_prop_vars.c b/src/compiler/nir/nir_opt_copy_prop_vars.c
index 7f17469..06ce257 100644
--- a/src/compiler/nir/nir_opt_copy_prop_vars.c
+++ b/src/compiler/nir/nir_opt_copy_prop_vars.c
@@ -469,8 +469,8 @@ specialize_wildcards(nir_deref_var *deref,
    nir_deref_var *ret = nir_deref_var_create(mem_ctx, deref->var);
 
    nir_deref *deref_tail = deref->deref.child;
-   nir_deref *guide_tail = guide->deref.child;
-   nir_deref *spec_tail = specific->deref.child;
+   nir_deref *guide_tail = &guide->deref;
+   nir_deref *spec_tail = &specific->deref;
    nir_deref *ret_tail = &ret->deref;
    while (deref_tail) {
       switch (deref_tail->deref_type) {
@@ -495,9 +495,9 @@ specialize_wildcards(nir_deref_var *deref,
              * the entry deref to find its corresponding wildcard and fill
              * this slot in with the value from the src.
              */
-            while (guide_tail) {
-               if (guide_tail->deref_type == nir_deref_type_array &&
-                   nir_deref_as_array(guide_tail)->deref_array_type ==
+            while (guide_tail->child) {
+               if (guide_tail->child->deref_type == nir_deref_type_array &&
+                   nir_deref_as_array(guide_tail->child)->deref_array_type ==
                    nir_deref_array_type_wildcard)
                   break;
 
@@ -505,6 +505,11 @@ specialize_wildcards(nir_deref_var *deref,
                spec_tail = spec_tail->child;
             }
 
+            if (guide_tail->child) {
+                guide_tail = guide_tail->child;
+                spec_tail = spec_tail->child;
+            }
+
             nir_deref_array *spec_arr = nir_deref_as_array(spec_tail);
             ret_arr->deref_array_type = spec_arr->deref_array_type;
             ret_arr->base_offset = spec_arr->base_offset;
-- 
2.9.4



More information about the mesa-dev mailing list