From e1493996b5eb88d0407b7c5f79e26c48b0084529 Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Mon, 18 Aug 2025 08:23:10 -0700 Subject: [PATCH] freedreno/decode: Add missing varset check Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/13688 Signed-off-by: Rob Clark Part-of: --- src/freedreno/decode/rnnutil.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) 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