Fix because of rebase

This commit is contained in:
Thog 2019-02-13 19:10:29 +01:00
commit d7da8758db
No known key found for this signature in database
GPG key ID: 0CD291558FAFDBC6

View file

@ -306,16 +306,14 @@ namespace Ryujinx.Graphics.Gal.Shader
CoordReg.Index += Index; CoordReg.Index += Index;
Coords[Index].Index += IndexExtraCoord; CoordReg.Index += IndexExtraCoord;
if (!CoordReg.IsValidRegister) if (!CoordReg.IsValidRegister)
{ {
CoordReg.Index = ShaderIrOperGpr.ZRIndex; CoordReg.Index = ShaderIrOperGpr.ZRIndex;
} }
Coords[Index] = ShaderIrOperGpr.MakeTemporary(Index); Coords[Index] = CoordReg;
Block.AddNode(new ShaderIrAsg(Coords[Index], CoordReg));
} }
int ChMask = OpCode.Read(31, 0xf); int ChMask = OpCode.Read(31, 0xf);
@ -361,6 +359,8 @@ namespace Ryujinx.Graphics.Gal.Shader
ShaderIrInst Inst = GprHandle ? ShaderIrInst.Texb : ShaderIrInst.Texs; ShaderIrInst Inst = GprHandle ? ShaderIrInst.Texb : ShaderIrInst.Texs;
Coords = CoordsRegistersToTempRegisters(Block, Coords);
int RegInc = 0; int RegInc = 0;
for (int Ch = 0; Ch < 4; Ch++) for (int Ch = 0; Ch < 4; Ch++)
@ -694,6 +694,7 @@ namespace Ryujinx.Graphics.Gal.Shader
} }
ShaderIrNode OperC = OpCode.Imm13_36(); ShaderIrNode OperC = OpCode.Imm13_36();
Coords = CoordsRegistersToTempRegisters(Block, Coords);
for (int Ch = 0; Ch < 4; Ch++) for (int Ch = 0; Ch < 4; Ch++)
{ {
@ -820,16 +821,25 @@ namespace Ryujinx.Graphics.Gal.Shader
OperBIndex++; OperBIndex++;
} }
Coords = CoordsRegistersToTempRegisters(Block, Coords);
int RegInc = 0;
for (int Ch = 0; Ch < 4; Ch++) for (int Ch = 0; Ch < 4; Ch++)
{ {
// Avoid usuless variable creation
if (!IsChannelUsed(ChMask, Ch)) if (!IsChannelUsed(ChMask, Ch))
{ {
continue; continue;
} }
ShaderIrOperGpr Dst = new ShaderIrOperGpr(TempRegStart + Ch); ShaderIrOperGpr Dst = OpCode.Gpr0();
Dst.Index += RegInc++;
if (!Dst.IsValidRegister || Dst.IsConst)
{
continue;
}
ShaderIrMetaTex Meta = new ShaderIrMetaTex(Ch, TextureType, TextureInstructionSuffix, Coords) ShaderIrMetaTex Meta = new ShaderIrMetaTex(Ch, TextureType, TextureInstructionSuffix, Coords)
{ {
@ -842,29 +852,6 @@ namespace Ryujinx.Graphics.Gal.Shader
Block.AddNode(OpCode.PredNode(new ShaderIrAsg(Dst, Op))); Block.AddNode(OpCode.PredNode(new ShaderIrAsg(Dst, Op)));
} }
int RegInc = 0;
for (int Ch = 0; Ch < 4; Ch++)
{
if (!IsChannelUsed(ChMask, Ch))
{
continue;
}
ShaderIrOperGpr Src = new ShaderIrOperGpr(TempRegStart + Ch);
ShaderIrOperGpr Dst = OpCode.Gpr0();
Dst.Index += RegInc++;
if (Dst.Index >= ShaderIrOperGpr.ZRIndex)
{
continue;
}
Block.AddNode(OpCode.PredNode(new ShaderIrAsg(Dst, Src)));
}
} }
private static bool IsChannelUsed(int ChMask, int Ch) private static bool IsChannelUsed(int ChMask, int Ch)