From 1876b346fea647e8284a66bb6d62c38801035cff Mon Sep 17 00:00:00 2001 From: gdk Date: Sun, 13 Oct 2019 03:02:07 -0300 Subject: Initial work --- Ryujinx.Graphics/Memory/NvGpuVmmCache.cs | 79 -------------------------------- 1 file changed, 79 deletions(-) delete mode 100644 Ryujinx.Graphics/Memory/NvGpuVmmCache.cs (limited to 'Ryujinx.Graphics/Memory/NvGpuVmmCache.cs') diff --git a/Ryujinx.Graphics/Memory/NvGpuVmmCache.cs b/Ryujinx.Graphics/Memory/NvGpuVmmCache.cs deleted file mode 100644 index 2a505443..00000000 --- a/Ryujinx.Graphics/Memory/NvGpuVmmCache.cs +++ /dev/null @@ -1,79 +0,0 @@ -using ARMeilleure.Memory; -using System.Collections.Concurrent; - -namespace Ryujinx.Graphics.Memory -{ - class NvGpuVmmCache - { - private const int PageBits = MemoryManager.PageBits; - - private const long PageSize = MemoryManager.PageSize; - private const long PageMask = MemoryManager.PageMask; - - private ConcurrentDictionary[] _cachedPages; - - private MemoryManager _memory; - - public NvGpuVmmCache(MemoryManager memory) - { - _memory = memory; - - _cachedPages = new ConcurrentDictionary[1 << 20]; - } - - public bool IsRegionModified(long position, long size, NvGpuBufferType bufferType) - { - long va = position; - - long pa = _memory.GetPhysicalAddress(va); - - long endAddr = (va + size + PageMask) & ~PageMask; - - long addrTruncated = va & ~PageMask; - - bool modified = _memory.IsRegionModified(addrTruncated, endAddr - addrTruncated); - - int newBuffMask = 1 << (int)bufferType; - - long cachedPagesCount = 0; - - while (va < endAddr) - { - long page = _memory.GetPhysicalAddress(va) >> PageBits; - - ConcurrentDictionary dictionary = _cachedPages[page]; - - if (dictionary == null) - { - dictionary = new ConcurrentDictionary(); - - _cachedPages[page] = dictionary; - } - else if (modified) - { - _cachedPages[page].Clear(); - } - - if (dictionary.TryGetValue(pa, out int currBuffMask)) - { - if ((currBuffMask & newBuffMask) != 0) - { - cachedPagesCount++; - } - else - { - dictionary[pa] |= newBuffMask; - } - } - else - { - dictionary[pa] = newBuffMask; - } - - va += PageSize; - } - - return cachedPagesCount != (endAddr - addrTruncated) >> PageBits; - } - } -} \ No newline at end of file -- cgit v1.2.3