aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Memory/Tracking/MultiRegionHandle.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Memory/Tracking/MultiRegionHandle.cs')
-rw-r--r--Ryujinx.Memory/Tracking/MultiRegionHandle.cs16
1 files changed, 15 insertions, 1 deletions
diff --git a/Ryujinx.Memory/Tracking/MultiRegionHandle.cs b/Ryujinx.Memory/Tracking/MultiRegionHandle.cs
index df154bc2..1f09807a 100644
--- a/Ryujinx.Memory/Tracking/MultiRegionHandle.cs
+++ b/Ryujinx.Memory/Tracking/MultiRegionHandle.cs
@@ -34,6 +34,20 @@ namespace Ryujinx.Memory.Tracking
Size = size;
}
+ public void ForceDirty(ulong address, ulong size)
+ {
+ Dirty = true;
+
+ int startHandle = (int)((address - Address) / Granularity);
+ int lastHandle = (int)((address + (size - 1) - Address) / Granularity);
+
+ for (int i = startHandle; i <= lastHandle; i++)
+ {
+ _handles[i].SequenceNumber--;
+ _handles[i].ForceDirty();
+ }
+ }
+
public void SignalWrite()
{
Dirty = true;
@@ -98,7 +112,7 @@ namespace Ryujinx.Memory.Tracking
{
RegionHandle handle = _handles[i];
- if (handle.Dirty && sequenceNumber != handle.SequenceNumber)
+ if (sequenceNumber != handle.SequenceNumber && handle.DirtyOrVolatile())
{
rgSize += handle.Size;
handle.Reprotect();