diff --git a/src/freedreno/decode/rnnutil.c b/src/freedreno/decode/rnnutil.c index b27ec652094..05fc61f70d4 100644 --- a/src/freedreno/decode/rnnutil.c +++ b/src/freedreno/decode/rnnutil.c @@ -157,11 +157,13 @@ rnn_enumval(struct rnn *rnn, const char *enumname, const char *enumval) } static struct rnndelem * -regelem(struct rnndomain *domain, const char *name) +regelem(struct rnndeccontext *ctx, struct rnndomain *domain, const char *name) { int i; for (i = 0; i < domain->subelemsnum; i++) { struct rnndelem *elem = domain->subelems[i]; + if (!rnndec_varmatch(ctx, &elem->varinfo)) + continue; if (!strcmp(elem->name, name)) return elem; } @@ -172,18 +174,20 @@ regelem(struct rnndomain *domain, const char *name) struct rnndelem * rnn_regelem(struct rnn *rnn, const char *name) { - struct rnndelem *elem = regelem(rnn->dom[0], name); + struct rnndelem *elem = regelem(rnn->vc, rnn->dom[0], name); if (elem) return elem; - return regelem(rnn->dom[1], name); + return regelem(rnn->vc, rnn->dom[1], name); } static struct rnndelem * -regoff(struct rnndomain *domain, uint32_t offset) +regoff(struct rnndeccontext *ctx, struct rnndomain *domain, uint32_t offset) { int i; for (i = 0; i < domain->subelemsnum; i++) { struct rnndelem *elem = domain->subelems[i]; + if (!rnndec_varmatch(ctx, &elem->varinfo)) + continue; if (elem->offset == offset) return elem; } @@ -194,10 +198,10 @@ regoff(struct rnndomain *domain, uint32_t offset) struct rnndelem * rnn_regoff(struct rnn *rnn, uint32_t offset) { - struct rnndelem *elem = regoff(rnn->dom[0], offset); + struct rnndelem *elem = regoff(rnn->vc, rnn->dom[0], offset); if (elem) return elem; - return regoff(rnn->dom[1], offset); + return regoff(rnn->vc, rnn->dom[1], offset); } enum rnnttype