GPU: Fix shader cache assuming past shader data was mapped (#4885)
This fixes a potential issue where a shader lookup could match the address of a previous _different_ shader, but that shader is now partially unmapped. This would just crash with an invalid region exception. To compare a shader in the address cache with one in memory, we get the memory at the location with the previous shader's size. However, it's possible it has been unmapped and then remapped with a smaller size. In this case, we should just get back the mapped portion of the shader, which will then fail the comparison immediately and get to compile/lookup for the new one. This might fix a random crash in TOTK that was reported by Piplup. I don't know if it does, because I don't have the game yet.
This commit is contained in:
parent
3d42995822
commit
95bad6995c
1 changed files with 1 additions and 1 deletions
|
@ -591,7 +591,7 @@ namespace Ryujinx.Graphics.Gpu.Shader
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
ReadOnlySpan<byte> memoryCode = memoryManager.GetSpan(gpuVa, shader.Code.Length);
|
ReadOnlySpan<byte> memoryCode = memoryManager.GetSpanMapped(gpuVa, shader.Code.Length);
|
||||||
|
|
||||||
return memoryCode.SequenceEqual(shader.Code);
|
return memoryCode.SequenceEqual(shader.Code);
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue