freedreno/ir3: Add cat5/cat6 nonuniform flag

Not yet used by the compiler, but needed so we don't loose information
between ir3 parser and instruction encoding.

Currently ignored for cat5, because the uniform vs non-uniform default
is swapped there.

Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8175>
This commit is contained in:
Rob Clark 2020-12-30 15:00:44 -08:00 committed by Marge Bot
parent 101bf686ee
commit d7f141bb35
2 changed files with 12 additions and 5 deletions

View File

@ -624,15 +624,20 @@ static int emit_cat6_a6xx(struct ir3_instruction *instr, void *ptr,
if (instr->flags & IR3_INSTR_B) {
if (ssbo->flags & IR3_REG_IMMED) {
cat6->desc_mode = CAT6_BINDLESS_IMM;
} else if (instr->flags & IR3_INSTR_NONUNIF) {
cat6->desc_mode = CAT6_BINDLESS_NONUNIFORM;
} else {
cat6->desc_mode = CAT6_BINDLESS_UNIFORM;
}
cat6->base = instr->cat6.base;
} else {
if (ssbo->flags & IR3_REG_IMMED)
if (ssbo->flags & IR3_REG_IMMED) {
cat6->desc_mode = CAT6_IMM;
else
} else if (instr->flags & IR3_INSTR_NONUNIF) {
cat6->desc_mode = CAT6_NONUNIFORM;
} else {
cat6->desc_mode = CAT6_UNIFORM;
}
}
}

View File

@ -230,13 +230,15 @@ struct ir3_instruction {
IR3_INSTR_SAT = 0x800,
/* (cat5/cat6) Bindless */
IR3_INSTR_B = 0x1000,
/* (cat5/cat6) nonuniform */
IR3_INSTR_NONUNIF = 0x02000,
/* (cat5-only) Get some parts of the encoding from a1.x */
IR3_INSTR_A1EN = 0x2000,
IR3_INSTR_A1EN = 0x04000,
/* meta-flags, for intermediate stages of IR, ie.
* before register assignment is done:
*/
IR3_INSTR_MARK = 0x4000,
IR3_INSTR_UNUSED= 0x8000,
IR3_INSTR_MARK = 0x08000,
IR3_INSTR_UNUSED = 0x10000,
} flags;
uint8_t repeat;
uint8_t nop;