From 86fd0643c26433362a25acceb4fa1fcee07dd0b2 Mon Sep 17 00:00:00 2001 From: gdkchan Date: Tue, 17 Jan 2023 01:13:24 -0300 Subject: Implement support for page sizes > 4KB (#4252) * Implement support for page sizes > 4KB * Check and work around more alignment issues * Was not meant to change this * Use MemoryBlock.GetPageSize() value for signal handler code * Do not take the path for private allocations if host supports 4KB pages * Add Flags attribute on MemoryMapFlags * Fix dirty region size with 16kb pages Would accidentally report a size that was too high (generally 16k instead of 4k, uploading 4x as much data) Co-authored-by: riperiperi --- Ryujinx.Graphics.Gpu/Memory/Buffer.cs | 15 ++++++--------- Ryujinx.Graphics.Gpu/Memory/PhysicalMemory.cs | 5 +++++ 2 files changed, 11 insertions(+), 9 deletions(-) (limited to 'Ryujinx.Graphics.Gpu/Memory') diff --git a/Ryujinx.Graphics.Gpu/Memory/Buffer.cs b/Ryujinx.Graphics.Gpu/Memory/Buffer.cs index 842249f3..a624386e 100644 --- a/Ryujinx.Graphics.Gpu/Memory/Buffer.cs +++ b/Ryujinx.Graphics.Gpu/Memory/Buffer.cs @@ -470,19 +470,16 @@ namespace Ryujinx.Graphics.Gpu.Memory return false; } - if (address < Address) - { - address = Address; - } + ulong maxAddress = Math.Max(address, Address); + ulong minEndAddress = Math.Min(address + size, Address + Size); - ulong maxSize = Address + Size - address; - - if (size > maxSize) + if (maxAddress >= minEndAddress) { - size = maxSize; + // Access doesn't overlap. + return false; } - ForceDirty(address, size); + ForceDirty(maxAddress, minEndAddress - maxAddress); return true; } diff --git a/Ryujinx.Graphics.Gpu/Memory/PhysicalMemory.cs b/Ryujinx.Graphics.Gpu/Memory/PhysicalMemory.cs index 051838f1..c1fc0c5c 100644 --- a/Ryujinx.Graphics.Gpu/Memory/PhysicalMemory.cs +++ b/Ryujinx.Graphics.Gpu/Memory/PhysicalMemory.cs @@ -21,6 +21,11 @@ namespace Ryujinx.Graphics.Gpu.Memory private IVirtualMemoryManagerTracked _cpuMemory; private int _referenceCount; + /// + /// Indicates whenever the memory manager supports 4KB pages. + /// + public bool Supports4KBPages => _cpuMemory.Supports4KBPages; + /// /// In-memory shader cache. /// -- cgit v1.2.3