aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Ryujinx.Cpu/AppleHv/HvMemoryManager.cs13
-rw-r--r--src/Ryujinx.Cpu/IVirtualMemoryManagerTracked.cs9
-rw-r--r--src/Ryujinx.Cpu/Jit/MemoryManager.cs13
-rw-r--r--src/Ryujinx.Cpu/Jit/MemoryManagerHostMapped.cs13
-rw-r--r--src/Ryujinx.Cpu/Tracking/CpuMultiRegionHandle.cs28
-rw-r--r--src/Ryujinx.Cpu/Tracking/CpuRegionHandle.cs37
-rw-r--r--src/Ryujinx.Cpu/Tracking/CpuSmartMultiRegionHandle.cs26
-rw-r--r--src/Ryujinx.Graphics.Gpu/Image/Pool.cs4
-rw-r--r--src/Ryujinx.Graphics.Gpu/Image/TextureGroup.cs22
-rw-r--r--src/Ryujinx.Graphics.Gpu/Image/TextureGroupHandle.cs10
-rw-r--r--src/Ryujinx.Graphics.Gpu/Memory/Buffer.cs7
-rw-r--r--src/Ryujinx.Graphics.Gpu/Memory/GpuRegionHandle.cs7
-rw-r--r--src/Ryujinx.Graphics.Gpu/Memory/PhysicalMemory.cs9
-rw-r--r--src/Ryujinx.Memory/Tracking/RegionHandle.cs11
14 files changed, 61 insertions, 148 deletions
diff --git a/src/Ryujinx.Cpu/AppleHv/HvMemoryManager.cs b/src/Ryujinx.Cpu/AppleHv/HvMemoryManager.cs
index 437e02ae..56a329e0 100644
--- a/src/Ryujinx.Cpu/AppleHv/HvMemoryManager.cs
+++ b/src/Ryujinx.Cpu/AppleHv/HvMemoryManager.cs
@@ -1,5 +1,4 @@
using ARMeilleure.Memory;
-using Ryujinx.Cpu.Tracking;
using Ryujinx.Memory;
using Ryujinx.Memory.Range;
using Ryujinx.Memory.Tracking;
@@ -822,21 +821,21 @@ namespace Ryujinx.Cpu.AppleHv
}
/// <inheritdoc/>
- public CpuRegionHandle BeginTracking(ulong address, ulong size, int id)
+ public RegionHandle BeginTracking(ulong address, ulong size, int id)
{
- return new CpuRegionHandle(Tracking.BeginTracking(address, size, id));
+ return Tracking.BeginTracking(address, size, id);
}
/// <inheritdoc/>
- public CpuMultiRegionHandle BeginGranularTracking(ulong address, ulong size, IEnumerable<IRegionHandle> handles, ulong granularity, int id)
+ public MultiRegionHandle BeginGranularTracking(ulong address, ulong size, IEnumerable<IRegionHandle> handles, ulong granularity, int id)
{
- return new CpuMultiRegionHandle(Tracking.BeginGranularTracking(address, size, handles, granularity, id));
+ return Tracking.BeginGranularTracking(address, size, handles, granularity, id);
}
/// <inheritdoc/>
- public CpuSmartMultiRegionHandle BeginSmartGranularTracking(ulong address, ulong size, ulong granularity, int id)
+ public SmartMultiRegionHandle BeginSmartGranularTracking(ulong address, ulong size, ulong granularity, int id)
{
- return new CpuSmartMultiRegionHandle(Tracking.BeginSmartGranularTracking(address, size, granularity, id));
+ return Tracking.BeginSmartGranularTracking(address, size, granularity, id);
}
/// <summary>
diff --git a/src/Ryujinx.Cpu/IVirtualMemoryManagerTracked.cs b/src/Ryujinx.Cpu/IVirtualMemoryManagerTracked.cs
index 92d3c76c..5fa88d62 100644
--- a/src/Ryujinx.Cpu/IVirtualMemoryManagerTracked.cs
+++ b/src/Ryujinx.Cpu/IVirtualMemoryManagerTracked.cs
@@ -1,5 +1,4 @@
-using Ryujinx.Cpu.Tracking;
-using Ryujinx.Memory;
+using Ryujinx.Memory;
using Ryujinx.Memory.Tracking;
using System;
using System.Collections.Generic;
@@ -30,7 +29,7 @@ namespace Ryujinx.Cpu
/// <param name="size">Size of the region</param>
/// <param name="id">Handle ID</param>
/// <returns>The memory tracking handle</returns>
- CpuRegionHandle BeginTracking(ulong address, ulong size, int id);
+ RegionHandle BeginTracking(ulong address, ulong size, int id);
/// <summary>
/// Obtains a memory tracking handle for the given virtual region, with a specified granularity. This should be disposed when finished with.
@@ -41,7 +40,7 @@ namespace Ryujinx.Cpu
/// <param name="granularity">Desired granularity of write tracking</param>
/// <param name="id">Handle ID</param>
/// <returns>The memory tracking handle</returns>
- CpuMultiRegionHandle BeginGranularTracking(ulong address, ulong size, IEnumerable<IRegionHandle> handles, ulong granularity, int id);
+ MultiRegionHandle BeginGranularTracking(ulong address, ulong size, IEnumerable<IRegionHandle> handles, ulong granularity, int id);
/// <summary>
/// Obtains a smart memory tracking handle for the given virtual region, with a specified granularity. This should be disposed when finished with.
@@ -51,6 +50,6 @@ namespace Ryujinx.Cpu
/// <param name="granularity">Desired granularity of write tracking</param>
/// <param name="id">Handle ID</param>
/// <returns>The memory tracking handle</returns>
- CpuSmartMultiRegionHandle BeginSmartGranularTracking(ulong address, ulong size, ulong granularity, int id);
+ SmartMultiRegionHandle BeginSmartGranularTracking(ulong address, ulong size, ulong granularity, int id);
}
}
diff --git a/src/Ryujinx.Cpu/Jit/MemoryManager.cs b/src/Ryujinx.Cpu/Jit/MemoryManager.cs
index 8542d53e..6da11fb8 100644
--- a/src/Ryujinx.Cpu/Jit/MemoryManager.cs
+++ b/src/Ryujinx.Cpu/Jit/MemoryManager.cs
@@ -1,5 +1,4 @@
using ARMeilleure.Memory;
-using Ryujinx.Cpu.Tracking;
using Ryujinx.Memory;
using Ryujinx.Memory.Range;
using Ryujinx.Memory.Tracking;
@@ -629,21 +628,21 @@ namespace Ryujinx.Cpu.Jit
}
/// <inheritdoc/>
- public CpuRegionHandle BeginTracking(ulong address, ulong size, int id)
+ public RegionHandle BeginTracking(ulong address, ulong size, int id)
{
- return new CpuRegionHandle(Tracking.BeginTracking(address, size, id));
+ return Tracking.BeginTracking(address, size, id);
}
/// <inheritdoc/>
- public CpuMultiRegionHandle BeginGranularTracking(ulong address, ulong size, IEnumerable<IRegionHandle> handles, ulong granularity, int id)
+ public MultiRegionHandle BeginGranularTracking(ulong address, ulong size, IEnumerable<IRegionHandle> handles, ulong granularity, int id)
{
- return new CpuMultiRegionHandle(Tracking.BeginGranularTracking(address, size, handles, granularity, id));
+ return Tracking.BeginGranularTracking(address, size, handles, granularity, id);
}
/// <inheritdoc/>
- public CpuSmartMultiRegionHandle BeginSmartGranularTracking(ulong address, ulong size, ulong granularity, int id)
+ public SmartMultiRegionHandle BeginSmartGranularTracking(ulong address, ulong size, ulong granularity, int id)
{
- return new CpuSmartMultiRegionHandle(Tracking.BeginSmartGranularTracking(address, size, granularity, id));
+ return Tracking.BeginSmartGranularTracking(address, size, granularity, id);
}
/// <inheritdoc/>
diff --git a/src/Ryujinx.Cpu/Jit/MemoryManagerHostMapped.cs b/src/Ryujinx.Cpu/Jit/MemoryManagerHostMapped.cs
index 090740ab..363f9000 100644
--- a/src/Ryujinx.Cpu/Jit/MemoryManagerHostMapped.cs
+++ b/src/Ryujinx.Cpu/Jit/MemoryManagerHostMapped.cs
@@ -1,5 +1,4 @@
using ARMeilleure.Memory;
-using Ryujinx.Cpu.Tracking;
using Ryujinx.Memory;
using Ryujinx.Memory.Range;
using Ryujinx.Memory.Tracking;
@@ -706,21 +705,21 @@ namespace Ryujinx.Cpu.Jit
}
/// <inheritdoc/>
- public CpuRegionHandle BeginTracking(ulong address, ulong size, int id)
+ public RegionHandle BeginTracking(ulong address, ulong size, int id)
{
- return new CpuRegionHandle(Tracking.BeginTracking(address, size, id));
+ return Tracking.BeginTracking(address, size, id);
}
/// <inheritdoc/>
- public CpuMultiRegionHandle BeginGranularTracking(ulong address, ulong size, IEnumerable<IRegionHandle> handles, ulong granularity, int id)
+ public MultiRegionHandle BeginGranularTracking(ulong address, ulong size, IEnumerable<IRegionHandle> handles, ulong granularity, int id)
{
- return new CpuMultiRegionHandle(Tracking.BeginGranularTracking(address, size, handles, granularity, id));
+ return Tracking.BeginGranularTracking(address, size, handles, granularity, id);
}
/// <inheritdoc/>
- public CpuSmartMultiRegionHandle BeginSmartGranularTracking(ulong address, ulong size, ulong granularity, int id)
+ public SmartMultiRegionHandle BeginSmartGranularTracking(ulong address, ulong size, ulong granularity, int id)
{
- return new CpuSmartMultiRegionHandle(Tracking.BeginSmartGranularTracking(address, size, granularity, id));
+ return Tracking.BeginSmartGranularTracking(address, size, granularity, id);
}
/// <summary>
diff --git a/src/Ryujinx.Cpu/Tracking/CpuMultiRegionHandle.cs b/src/Ryujinx.Cpu/Tracking/CpuMultiRegionHandle.cs
deleted file mode 100644
index 0ed8bfc5..00000000
--- a/src/Ryujinx.Cpu/Tracking/CpuMultiRegionHandle.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-using Ryujinx.Memory.Tracking;
-using System;
-using System.Collections.Generic;
-
-namespace Ryujinx.Cpu.Tracking
-{
- public class CpuMultiRegionHandle : IMultiRegionHandle
- {
- private readonly MultiRegionHandle _impl;
-
- public bool Dirty => _impl.Dirty;
-
- internal CpuMultiRegionHandle(MultiRegionHandle impl)
- {
- _impl = impl;
- }
-
- public void Dispose() => _impl.Dispose();
- public void ForceDirty(ulong address, ulong size) => _impl.ForceDirty(address, size);
- public IEnumerable<IRegionHandle> GetHandles() => _impl.GetHandles();
- public void QueryModified(Action<ulong, ulong> modifiedAction) => _impl.QueryModified(modifiedAction);
- public void QueryModified(ulong address, ulong size, Action<ulong, ulong> modifiedAction) => _impl.QueryModified(address, size, modifiedAction);
- public void QueryModified(ulong address, ulong size, Action<ulong, ulong> modifiedAction, int sequenceNumber) => _impl.QueryModified(address, size, modifiedAction, sequenceNumber);
- public void RegisterAction(ulong address, ulong size, RegionSignal action) => _impl.RegisterAction(address, size, action);
- public void RegisterPreciseAction(ulong address, ulong size, PreciseRegionSignal action) => _impl.RegisterPreciseAction(address, size, action);
- public void SignalWrite() => _impl.SignalWrite();
- }
-}
diff --git a/src/Ryujinx.Cpu/Tracking/CpuRegionHandle.cs b/src/Ryujinx.Cpu/Tracking/CpuRegionHandle.cs
deleted file mode 100644
index e766460f..00000000
--- a/src/Ryujinx.Cpu/Tracking/CpuRegionHandle.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-using Ryujinx.Memory.Tracking;
-using System;
-
-namespace Ryujinx.Cpu.Tracking
-{
- public class CpuRegionHandle : IRegionHandle
- {
- private readonly RegionHandle _impl;
-
- public bool Dirty => _impl.Dirty;
- public bool Unmapped => _impl.Unmapped;
- public ulong Address => _impl.Address;
- public ulong Size => _impl.Size;
- public ulong EndAddress => _impl.EndAddress;
-
- internal CpuRegionHandle(RegionHandle impl)
- {
- _impl = impl;
- }
-
- public void Dispose() => _impl.Dispose();
- public bool DirtyOrVolatile() => _impl.DirtyOrVolatile();
- public void ForceDirty() => _impl.ForceDirty();
- public IRegionHandle GetHandle() => _impl;
- public void RegisterAction(RegionSignal action) => _impl.RegisterAction(action);
- public void RegisterPreciseAction(PreciseRegionSignal action) => _impl.RegisterPreciseAction(action);
- public void RegisterDirtyEvent(Action action) => _impl.RegisterDirtyEvent(action);
- public void Reprotect(bool asDirty = false) => _impl.Reprotect(asDirty);
-
- public bool OverlapsWith(ulong address, ulong size) => _impl.OverlapsWith(address, size);
-
- public bool RangeEquals(CpuRegionHandle other)
- {
- return _impl.RealAddress == other._impl.RealAddress && _impl.RealSize == other._impl.RealSize;
- }
- }
-}
diff --git a/src/Ryujinx.Cpu/Tracking/CpuSmartMultiRegionHandle.cs b/src/Ryujinx.Cpu/Tracking/CpuSmartMultiRegionHandle.cs
deleted file mode 100644
index 665271c6..00000000
--- a/src/Ryujinx.Cpu/Tracking/CpuSmartMultiRegionHandle.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-using Ryujinx.Memory.Tracking;
-using System;
-
-namespace Ryujinx.Cpu.Tracking
-{
- public class CpuSmartMultiRegionHandle : IMultiRegionHandle
- {
- private readonly SmartMultiRegionHandle _impl;
-
- public bool Dirty => _impl.Dirty;
-
- internal CpuSmartMultiRegionHandle(SmartMultiRegionHandle impl)
- {
- _impl = impl;
- }
-
- public void Dispose() => _impl.Dispose();
- public void ForceDirty(ulong address, ulong size) => _impl.ForceDirty(address, size);
- public void RegisterAction(RegionSignal action) => _impl.RegisterAction(action);
- public void RegisterPreciseAction(PreciseRegionSignal action) => _impl.RegisterPreciseAction(action);
- public void QueryModified(Action<ulong, ulong> modifiedAction) => _impl.QueryModified(modifiedAction);
- public void QueryModified(ulong address, ulong size, Action<ulong, ulong> modifiedAction) => _impl.QueryModified(address, size, modifiedAction);
- public void QueryModified(ulong address, ulong size, Action<ulong, ulong> modifiedAction, int sequenceNumber) => _impl.QueryModified(address, size, modifiedAction, sequenceNumber);
- public void SignalWrite() => _impl.SignalWrite();
- }
-}
diff --git a/src/Ryujinx.Graphics.Gpu/Image/Pool.cs b/src/Ryujinx.Graphics.Gpu/Image/Pool.cs
index 3e557c0b..63be151f 100644
--- a/src/Ryujinx.Graphics.Gpu/Image/Pool.cs
+++ b/src/Ryujinx.Graphics.Gpu/Image/Pool.cs
@@ -1,5 +1,5 @@
-using Ryujinx.Cpu.Tracking;
using Ryujinx.Graphics.Gpu.Memory;
+using Ryujinx.Memory.Tracking;
using System;
using System.Runtime.InteropServices;
@@ -40,7 +40,7 @@ namespace Ryujinx.Graphics.Gpu.Image
/// </summary>
public ulong Size { get; }
- private readonly CpuMultiRegionHandle _memoryTracking;
+ private readonly MultiRegionHandle _memoryTracking;
private readonly Action<ulong, ulong> _modifiedDelegate;
private int _modifiedSequenceOffset;
diff --git a/src/Ryujinx.Graphics.Gpu/Image/TextureGroup.cs b/src/Ryujinx.Graphics.Gpu/Image/TextureGroup.cs
index 14ab5d1e..b36b16e9 100644
--- a/src/Ryujinx.Graphics.Gpu/Image/TextureGroup.cs
+++ b/src/Ryujinx.Graphics.Gpu/Image/TextureGroup.cs
@@ -1,10 +1,10 @@
using Ryujinx.Common.Memory;
-using Ryujinx.Cpu.Tracking;
using Ryujinx.Graphics.GAL;
using Ryujinx.Graphics.Gpu.Memory;
using Ryujinx.Graphics.Texture;
using Ryujinx.Memory;
using Ryujinx.Memory.Range;
+using Ryujinx.Memory.Tracking;
using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
@@ -255,7 +255,7 @@ namespace Ryujinx.Graphics.Gpu.Image
{
TextureGroupHandle group = _handles[baseHandle + i];
- foreach (CpuRegionHandle handle in group.Handles)
+ foreach (RegionHandle handle in group.Handles)
{
if (handle.Dirty)
{
@@ -296,7 +296,7 @@ namespace Ryujinx.Graphics.Gpu.Image
bool handleDirty = false;
bool handleUnmapped = false;
- foreach (CpuRegionHandle handle in group.Handles)
+ foreach (RegionHandle handle in group.Handles)
{
if (handle.Dirty)
{
@@ -703,7 +703,7 @@ namespace Ryujinx.Graphics.Gpu.Image
/// <param name="group">The group to register an action for</param>
public void RegisterAction(TextureGroupHandle group)
{
- foreach (CpuRegionHandle handle in group.Handles)
+ foreach (RegionHandle handle in group.Handles)
{
handle.RegisterAction((address, size) => FlushAction(group, address, size));
}
@@ -985,7 +985,7 @@ namespace Ryujinx.Graphics.Gpu.Image
/// <param name="address">The start address of the tracked region</param>
/// <param name="size">The size of the tracked region</param>
/// <returns>A CpuRegionHandle covering the given range</returns>
- private CpuRegionHandle GenerateHandle(ulong address, ulong size)
+ private RegionHandle GenerateHandle(ulong address, ulong size)
{
return _physicalMemory.BeginTracking(address, size, ResourceKind.Texture);
}
@@ -1005,7 +1005,7 @@ namespace Ryujinx.Graphics.Gpu.Image
int endOffset = _allOffsets[viewEnd] + _sliceSizes[lastLevel];
int size = endOffset - offset;
- var result = new List<CpuRegionHandle>();
+ var result = new List<RegionHandle>();
for (int i = 0; i < TextureRange.Count; i++)
{
@@ -1050,7 +1050,7 @@ namespace Ryujinx.Graphics.Gpu.Image
views,
result.ToArray());
- foreach (CpuRegionHandle handle in result)
+ foreach (RegionHandle handle in result)
{
handle.RegisterDirtyEvent(() => DirtyAction(groupHandle));
}
@@ -1248,7 +1248,7 @@ namespace Ryujinx.Graphics.Gpu.Image
continue;
}
- foreach (CpuRegionHandle handle in groupHandle.Handles)
+ foreach (RegionHandle handle in groupHandle.Handles)
{
bool hasMatch = false;
@@ -1270,7 +1270,7 @@ namespace Ryujinx.Graphics.Gpu.Image
}
else
{
- foreach (CpuRegionHandle handle in groupHandle.Handles)
+ foreach (RegionHandle handle in groupHandle.Handles)
{
handle.Reprotect();
}
@@ -1303,7 +1303,7 @@ namespace Ryujinx.Graphics.Gpu.Image
if (!(_hasMipViews || _hasLayerViews))
{
// Single dirty region.
- var cpuRegionHandles = new CpuRegionHandle[TextureRange.Count];
+ var cpuRegionHandles = new RegionHandle[TextureRange.Count];
int count = 0;
for (int i = 0; i < TextureRange.Count; i++)
@@ -1322,7 +1322,7 @@ namespace Ryujinx.Graphics.Gpu.Image
var groupHandle = new TextureGroupHandle(this, 0, Storage.Size, _views, 0, 0, 0, _allOffsets.Length, cpuRegionHandles);
- foreach (CpuRegionHandle handle in cpuRegionHandles)
+ foreach (RegionHandle handle in cpuRegionHandles)
{
handle.RegisterDirtyEvent(() => DirtyAction(groupHandle));
}
diff --git a/src/Ryujinx.Graphics.Gpu/Image/TextureGroupHandle.cs b/src/Ryujinx.Graphics.Gpu/Image/TextureGroupHandle.cs
index 9f66744b..fd66269d 100644
--- a/src/Ryujinx.Graphics.Gpu/Image/TextureGroupHandle.cs
+++ b/src/Ryujinx.Graphics.Gpu/Image/TextureGroupHandle.cs
@@ -1,5 +1,5 @@
-using Ryujinx.Cpu.Tracking;
-using Ryujinx.Graphics.Gpu.Synchronization;
+using Ryujinx.Graphics.Gpu.Synchronization;
+using Ryujinx.Memory.Tracking;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -85,7 +85,7 @@ namespace Ryujinx.Graphics.Gpu.Image
/// <summary>
/// The CPU memory tracking handles that cover this handle.
/// </summary>
- public CpuRegionHandle[] Handles { get; }
+ public RegionHandle[] Handles { get; }
/// <summary>
/// True if a texture overlapping this handle has been modified. Is set false when the flush action is called.
@@ -127,7 +127,7 @@ namespace Ryujinx.Graphics.Gpu.Image
int firstLevel,
int baseSlice,
int sliceCount,
- CpuRegionHandle[] handles)
+ RegionHandle[] handles)
{
_group = group;
_firstLayer = firstLayer;
@@ -642,7 +642,7 @@ namespace Ryujinx.Graphics.Gpu.Image
/// </summary>
public void Dispose()
{
- foreach (CpuRegionHandle handle in Handles)
+ foreach (RegionHandle handle in Handles)
{
handle.Dispose();
}
diff --git a/src/Ryujinx.Graphics.Gpu/Memory/Buffer.cs b/src/Ryujinx.Graphics.Gpu/Memory/Buffer.cs
index 8e16b3ae..dc5037c5 100644
--- a/src/Ryujinx.Graphics.Gpu/Memory/Buffer.cs
+++ b/src/Ryujinx.Graphics.Gpu/Memory/Buffer.cs
@@ -1,4 +1,3 @@
-using Ryujinx.Cpu.Tracking;
using Ryujinx.Graphics.GAL;
using Ryujinx.Graphics.Gpu.Synchronization;
using Ryujinx.Memory.Range;
@@ -54,8 +53,8 @@ namespace Ryujinx.Graphics.Gpu.Memory
/// </remarks>
private BufferModifiedRangeList _modifiedRanges = null;
- private readonly CpuMultiRegionHandle _memoryTrackingGranular;
- private readonly CpuRegionHandle _memoryTracking;
+ private readonly MultiRegionHandle _memoryTrackingGranular;
+ private readonly RegionHandle _memoryTracking;
private readonly RegionSignal _externalFlushDelegate;
private readonly Action<ulong, ulong> _loadDelegate;
@@ -102,7 +101,7 @@ namespace Ryujinx.Graphics.Gpu.Memory
}
else
{
- return Enumerable.Repeat(buffer._memoryTracking.GetHandle(), 1);
+ return Enumerable.Repeat(buffer._memoryTracking, 1);
}
});
}
diff --git a/src/Ryujinx.Graphics.Gpu/Memory/GpuRegionHandle.cs b/src/Ryujinx.Graphics.Gpu/Memory/GpuRegionHandle.cs
index bc07bfad..9f73de4e 100644
--- a/src/Ryujinx.Graphics.Gpu/Memory/GpuRegionHandle.cs
+++ b/src/Ryujinx.Graphics.Gpu/Memory/GpuRegionHandle.cs
@@ -1,5 +1,4 @@
-using Ryujinx.Cpu.Tracking;
-using Ryujinx.Memory.Tracking;
+using Ryujinx.Memory.Tracking;
using System;
namespace Ryujinx.Graphics.Gpu.Memory
@@ -9,7 +8,7 @@ namespace Ryujinx.Graphics.Gpu.Memory
/// </summary>
class GpuRegionHandle : IRegionHandle
{
- private readonly CpuRegionHandle[] _cpuRegionHandles;
+ private readonly RegionHandle[] _cpuRegionHandles;
public bool Dirty
{
@@ -35,7 +34,7 @@ namespace Ryujinx.Graphics.Gpu.Memory
/// Create a new GpuRegionHandle, made up of mulitple CpuRegionHandles.
/// </summary>
/// <param name="cpuRegionHandles">The CpuRegionHandles that make up this handle</param>
- public GpuRegionHandle(CpuRegionHandle[] cpuRegionHandles)
+ public GpuRegionHandle(RegionHandle[] cpuRegionHandles)
{
_cpuRegionHandles = cpuRegionHandles;
}
diff --git a/src/Ryujinx.Graphics.Gpu/Memory/PhysicalMemory.cs b/src/Ryujinx.Graphics.Gpu/Memory/PhysicalMemory.cs
index b976667c..364488aa 100644
--- a/src/Ryujinx.Graphics.Gpu/Memory/PhysicalMemory.cs
+++ b/src/Ryujinx.Graphics.Gpu/Memory/PhysicalMemory.cs
@@ -1,5 +1,4 @@
using Ryujinx.Cpu;
-using Ryujinx.Cpu.Tracking;
using Ryujinx.Graphics.Gpu.Image;
using Ryujinx.Graphics.Gpu.Shader;
using Ryujinx.Memory;
@@ -348,7 +347,7 @@ namespace Ryujinx.Graphics.Gpu.Memory
/// <param name="size">Size of the region</param>
/// <param name="kind">Kind of the resource being tracked</param>
/// <returns>The memory tracking handle</returns>
- public CpuRegionHandle BeginTracking(ulong address, ulong size, ResourceKind kind)
+ public RegionHandle BeginTracking(ulong address, ulong size, ResourceKind kind)
{
return _cpuMemory.BeginTracking(address, size, (int)kind);
}
@@ -361,7 +360,7 @@ namespace Ryujinx.Graphics.Gpu.Memory
/// <returns>The memory tracking handle</returns>
public GpuRegionHandle BeginTracking(MultiRange range, ResourceKind kind)
{
- var cpuRegionHandles = new CpuRegionHandle[range.Count];
+ var cpuRegionHandles = new RegionHandle[range.Count];
int count = 0;
for (int i = 0; i < range.Count; i++)
@@ -390,7 +389,7 @@ namespace Ryujinx.Graphics.Gpu.Memory
/// <param name="handles">Handles to inherit state from or reuse</param>
/// <param name="granularity">Desired granularity of write tracking</param>
/// <returns>The memory tracking handle</returns>
- public CpuMultiRegionHandle BeginGranularTracking(ulong address, ulong size, ResourceKind kind, IEnumerable<IRegionHandle> handles = null, ulong granularity = 4096)
+ public MultiRegionHandle BeginGranularTracking(ulong address, ulong size, ResourceKind kind, IEnumerable<IRegionHandle> handles = null, ulong granularity = 4096)
{
return _cpuMemory.BeginGranularTracking(address, size, handles, granularity, (int)kind);
}
@@ -403,7 +402,7 @@ namespace Ryujinx.Graphics.Gpu.Memory
/// <param name="kind">Kind of the resource being tracked</param>
/// <param name="granularity">Desired granularity of write tracking</param>
/// <returns>The memory tracking handle</returns>
- public CpuSmartMultiRegionHandle BeginSmartGranularTracking(ulong address, ulong size, ResourceKind kind, ulong granularity = 4096)
+ public SmartMultiRegionHandle BeginSmartGranularTracking(ulong address, ulong size, ResourceKind kind, ulong granularity = 4096)
{
return _cpuMemory.BeginSmartGranularTracking(address, size, granularity, (int)kind);
}
diff --git a/src/Ryujinx.Memory/Tracking/RegionHandle.cs b/src/Ryujinx.Memory/Tracking/RegionHandle.cs
index 7a59f9f2..63a16884 100644
--- a/src/Ryujinx.Memory/Tracking/RegionHandle.cs
+++ b/src/Ryujinx.Memory/Tracking/RegionHandle.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Reflection.Metadata;
using System.Threading;
namespace Ryujinx.Memory.Tracking
@@ -444,6 +445,16 @@ namespace Ryujinx.Memory.Tracking
}
/// <summary>
+ /// Determines if this handle's memory range matches another exactly.
+ /// </summary>
+ /// <param name="other">The other handle</param>
+ /// <returns>True on a match, false otherwise</returns>
+ public bool RangeEquals(RegionHandle other)
+ {
+ return RealAddress == other.RealAddress && RealSize == other.RealSize;
+ }
+
+ /// <summary>
/// Dispose the handle. Within the tracking lock, this removes references from virtual regions.
/// </summary>
public void Dispose()