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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev