freedreno/rnn: Make rnn_decode_enum() respect variants
authorConnor Abbott <cwabbott0@gmail.com>
Fri, 31 Jul 2020 09:41:24 +0000 (11:41 +0200)
committerMarge Bot <eric+marge@anholt.net>
Sat, 1 Aug 2020 17:51:01 +0000 (17:51 +0000)
We'll need this for afuc, and we're currently also open-coding the same
thing in rnnutils. It seems this function was added to decode pm4 packet
names, but it currently has no users, so make it useful for what it
was intended to do.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6140>

src/freedreno/rnn/rnndec.c
src/freedreno/rnn/rnndec.h

index db92de332f6a6b365ceb534e3ac842c9d1c075b5..553c422d05453391baf52558fbe51c8083b965c7 100644 (file)
@@ -137,14 +137,11 @@ static const char *rnndec_decode_enum_val(struct rnndeccontext *ctx,
        return NULL;
 }
 
-char *rnndec_decode_enum(struct rnndeccontext *ctx, const char *enumname, uint64_t enumval)
+const char *rnndec_decode_enum(struct rnndeccontext *ctx, const char *enumname, uint64_t enumval)
 {
        struct rnnenum *en = rnn_findenum (ctx->db, enumname);
        if (en) {
-               int i;
-               for (i = 0; i < en->valsnum; i++)
-                       if (en->vals[i]->valvalid && en->vals[i]->value == enumval)
-                               return en->vals[i]->name;
+               return rnndec_decode_enum_val(ctx, en->vals, en->valsnum, enumval);
        }
        return NULL;
 }
index 1e21d02ba7f467b13bdfe85ac8e95c1bb82dfa3a..6e90eb9e97dfe6e642a6dde7f210ef363bc59953 100644 (file)
@@ -50,7 +50,7 @@ struct rnndecaddrinfo {
 struct rnndeccontext *rnndec_newcontext(struct rnndb *db);
 int rnndec_varadd(struct rnndeccontext *ctx, char *varset, const char *variant);
 int rnndec_varmatch(struct rnndeccontext *ctx, struct rnnvarinfo *vi);
-char *rnndec_decode_enum(struct rnndeccontext *ctx, const char *enumname, uint64_t enumval);
+const char *rnndec_decode_enum(struct rnndeccontext *ctx, const char *enumname, uint64_t enumval);
 char *rnndec_decodeval(struct rnndeccontext *ctx, struct rnntypeinfo *ti, uint64_t value);
 int rnndec_checkaddr(struct rnndeccontext *ctx, struct rnndomain *domain, uint64_t addr, int write);
 struct rnndecaddrinfo *rnndec_decodeaddr(struct rnndeccontext *ctx, struct rnndomain *domain, uint64_t addr, int write);