forked from Mirror/Ryujinx
Update bindless to indexed conversion code pattern match (#938)
* Update bindless to indexed conversion code pattern match * Correct index shift
This commit is contained in:
parent
5a9dba0756
commit
9e4f668f6c
1 changed files with 9 additions and 4 deletions
|
@ -45,7 +45,12 @@ namespace Ryujinx.Graphics.Shader.Translation.Optimizations
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(ldcSrc1.AsgOp is Operation addOp))
|
if (!(ldcSrc1.AsgOp is Operation shrOp) || shrOp.Inst != Instruction.ShiftRightU32)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(shrOp.GetSource(0).AsgOp is Operation addOp) || addOp.Inst != Instruction.Add)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -57,15 +62,15 @@ namespace Ryujinx.Graphics.Shader.Translation.Optimizations
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
texOp.TurnIntoIndexed(addSrc1.Value);
|
texOp.TurnIntoIndexed(addSrc1.Value / 4);
|
||||||
|
|
||||||
Operand index = Local();
|
Operand index = Local();
|
||||||
|
|
||||||
Operand source = addOp.GetSource(0);
|
Operand source = addOp.GetSource(0);
|
||||||
|
|
||||||
Operation shrBy1 = new Operation(Instruction.ShiftRightU32, index, source, Const(1));
|
Operation shrBy3 = new Operation(Instruction.ShiftRightU32, index, source, Const(3));
|
||||||
|
|
||||||
block.Operations.AddBefore(node, shrBy1);
|
block.Operations.AddBefore(node, shrBy3);
|
||||||
|
|
||||||
texOp.SetSource(0, index);
|
texOp.SetSource(0, index);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue