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 FileFormatVersionMinor = 2;
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 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
// 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.GetSource(1).Type == OperandType.Constant &&
shiftRightOp.GetSource(1).Value == 2)
@ -1158,9 +1158,11 @@ namespace Ryujinx.Graphics.Shader.Translation.Optimizations
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;
}