Fix shader GlobalToStorage pass when base address comes from local or shared memory (#5668)

* Fix shader GlobalToStorage pass when base address comes from local or shared memory

* Shader cache version bump
This commit is contained in:
gdkchan 2023-09-10 22:22:18 -03:00 committed by GitHub
parent 210f475484
commit e2cfe6fe44
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 6 additions and 4 deletions

View file

@ -22,7 +22,7 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache
private const ushort FileFormatVersionMajor = 1; private const ushort FileFormatVersionMajor = 1;
private const ushort FileFormatVersionMinor = 2; private const ushort FileFormatVersionMinor = 2;
private const uint FileFormatVersionPacked = ((uint)FileFormatVersionMajor << 16) | FileFormatVersionMinor; private const uint FileFormatVersionPacked = ((uint)FileFormatVersionMajor << 16) | FileFormatVersionMinor;
private const uint CodeGenVersion = 5551; private const uint CodeGenVersion = 5668;
private const string SharedTocFileName = "shared.toc"; private const string SharedTocFileName = "shared.toc";
private const string SharedDataFileName = "shared.data"; private const string SharedDataFileName = "shared.data";

View file

@ -1126,7 +1126,7 @@ namespace Ryujinx.Graphics.Shader.Translation.Optimizations
// so we want to get the byte offset back, since each one of those word // so we want to get the byte offset back, since each one of those word
// offsets are a new "local variable" which will not match. // offsets are a new "local variable" which will not match.
if (operation.GetSource(0).AsgOp is Operation shiftRightOp && if (operation.GetSource(1).AsgOp is Operation shiftRightOp &&
shiftRightOp.Inst == Instruction.ShiftRightU32 && shiftRightOp.Inst == Instruction.ShiftRightU32 &&
shiftRightOp.GetSource(1).Type == OperandType.Constant && shiftRightOp.GetSource(1).Type == OperandType.Constant &&
shiftRightOp.GetSource(1).Value == 2) shiftRightOp.GetSource(1).Value == 2)
@ -1158,9 +1158,11 @@ namespace Ryujinx.Graphics.Shader.Translation.Optimizations
private static bool TryGetLocalMemoryOffset(Operation operation, out int constOffset) private static bool TryGetLocalMemoryOffset(Operation operation, out int constOffset)
{ {
if (operation.GetSource(0).Type == OperandType.Constant) Operand offset = operation.GetSource(1);
if (offset.Type == OperandType.Constant)
{ {
constOffset = operation.GetSource(0).Value; constOffset = offset.Value;
return true; return true;
} }