aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Cpu
diff options
context:
space:
mode:
authorriperiperi <rhy3756547@hotmail.com>2023-05-05 22:40:46 +0100
committerGitHub <noreply@github.com>2023-05-05 23:40:46 +0200
commit7df4fcada702dbc01d09b8f6fa027f5d409e33e3 (patch)
treed006bc4b9b78d81475a288b6c5ee9dfd7c3f3d33 /src/Ryujinx.Cpu
parentd6698680bef4ac37b63d67c5415edf5717a84b3a (diff)
GPU: Remove CPU region handle containers (#4817)
* GPU: Remove CPU region handle containers. Another one for the "I don't know why I didn't do this earlier" pile. This removes the "Cpu" prefixed region handle classes, which each mirror a region handle type from Ryujinx.Memory. Originally, not all projects had a reference to Ryujinx.Memory, so these classes were introduced to bridge the gap. Someone else crossed that bridge since, so these classes don't have much of a purpose anymore. This PR replaces all uses of CpuRegionHandle etc to their direct Ryujinx.Memory versions. RegionHandle methods (specifically QueryModified) are about the hottest path there is in the entire emulator, so there is a nice boost from doing this. * Add docs
Diffstat (limited to 'src/Ryujinx.Cpu')
-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
7 files changed, 22 insertions, 117 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();
- }
-}