mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-23 17:40:11 +01:00
freedreno/ir3: Use immediate for flat.b's src1
According to Jonathan Marek: Only one immediate can be decoded in a cat2 instruction (if both srcs are immediates, they will use the value of the either the first or second one, I don't remember which) - using 2 immediates in a cat2 instruction is only "correct" if they are both equal. The (i,j) in the second src of flat.b is not unused, but behaves as 0 for any (small) integer because it is a float src. The hack I suggested is to set the second src equal to (immediate) first src, which seems to work. This allows us to remove a couple of mov instructions or a bit of extra constfile usage. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13558>
This commit is contained in:
parent
2ab0cf2b54
commit
cc29b94041
2 changed files with 6 additions and 8 deletions
|
|
@ -859,6 +859,11 @@ ir3_valid_flags(struct ir3_instruction *instr, unsigned n, unsigned flags)
|
|||
if (flags & ~valid_flags)
|
||||
return false;
|
||||
|
||||
/* Allow an immediate src1 for flat.b, since it's ignored */
|
||||
if (instr->opc == OPC_FLAT_B &&
|
||||
n == 1 && flags == IR3_REG_IMMED)
|
||||
return true;
|
||||
|
||||
if (flags & (IR3_REG_CONST | IR3_REG_IMMED | IR3_REG_SHARED)) {
|
||||
unsigned m = n ^ 1;
|
||||
/* cannot deal w/ const or shared in both srcs:
|
||||
|
|
|
|||
|
|
@ -87,14 +87,7 @@ create_frag_input(struct ir3_context *ctx, struct ir3_instruction *coord,
|
|||
instr = ir3_BARY_F(block, inloc, 0, coord, 0);
|
||||
} else if (ctx->compiler->flat_bypass) {
|
||||
if (ctx->compiler->gen >= 6) {
|
||||
struct ir3_instruction *ij[2];
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
ij[i] = create_immed(block, fui(0.0));
|
||||
}
|
||||
|
||||
instr = ir3_FLAT_B(block, inloc, 0, ir3_create_collect(block, ij, 2), 0);
|
||||
instr->srcs[1]->wrmask = 0x3;
|
||||
instr = ir3_FLAT_B(block, inloc, 0, inloc, 0);
|
||||
} else {
|
||||
instr = ir3_LDLV(block, inloc, 0, create_immed(block, 1), 0);
|
||||
instr->cat6.type = TYPE_U32;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue