diff --git a/src/asahi/compiler/agx_compiler.h b/src/asahi/compiler/agx_compiler.h index 03f9e9b7d55..9625244fc1b 100644 --- a/src/asahi/compiler/agx_compiler.h +++ b/src/asahi/compiler/agx_compiler.h @@ -265,6 +265,9 @@ typedef struct { enum agx_lod_mode lod_mode; }; + /* Invert icond/fcond */ + bool invert_cond : 1; + /* TODO: Handle tex ops more efficient */ enum agx_dim dim : 3; diff --git a/src/asahi/compiler/agx_opcodes.py b/src/asahi/compiler/agx_opcodes.py index 1f054901879..ac4941aeb96 100644 --- a/src/asahi/compiler/agx_opcodes.py +++ b/src/asahi/compiler/agx_opcodes.py @@ -87,6 +87,7 @@ SCOREBOARD = immediate("scoreboard") ICOND = immediate("icond") FCOND = immediate("fcond") NEST = immediate("nest") +INVERT_COND = immediate("invert_cond") FUNOP = lambda x: (x << 28) FUNOP_MASK = FUNOP((1 << 14) - 1) diff --git a/src/asahi/compiler/agx_print.c b/src/asahi/compiler/agx_print.c index b471f3aa5a0..6856b87239e 100644 --- a/src/asahi/compiler/agx_print.c +++ b/src/asahi/compiler/agx_print.c @@ -176,6 +176,15 @@ agx_print_instr(agx_instr *I, FILE *fp) fprintf(fp, "n=%u", I->nest); } + if ((info.immediates & AGX_IMMEDIATE_INVERT_COND) && I->invert_cond) { + if (print_comma) + fprintf(fp, ", "); + else + print_comma = true; + + fprintf(fp, "inv"); + } + fprintf(fp, "\n"); }