Separate guest/host tracking + unaligned protection (#6486)
* WIP: Separate guest/host tracking + unaligned protection Allow memory manager to define support for single byte guest tracking * Formatting * Improve docs * Properly handle cases where the address space bits are too low * Address feedback
This commit is contained in:
parent
ce607db944
commit
fdd3263e31
18 changed files with 774 additions and 763 deletions
|
@ -128,13 +128,13 @@ namespace Ryujinx.Graphics.Gpu.Memory
|
|||
|
||||
if (_useGranular)
|
||||
{
|
||||
_memoryTrackingGranular = physicalMemory.BeginGranularTracking(address, size, ResourceKind.Buffer, baseHandles);
|
||||
_memoryTrackingGranular = physicalMemory.BeginGranularTracking(address, size, ResourceKind.Buffer, RegionFlags.UnalignedAccess, baseHandles);
|
||||
|
||||
_memoryTrackingGranular.RegisterPreciseAction(address, size, PreciseAction);
|
||||
}
|
||||
else
|
||||
{
|
||||
_memoryTracking = physicalMemory.BeginTracking(address, size, ResourceKind.Buffer);
|
||||
_memoryTracking = physicalMemory.BeginTracking(address, size, ResourceKind.Buffer, RegionFlags.UnalignedAccess);
|
||||
|
||||
if (baseHandles != null)
|
||||
{
|
||||
|
|
|
@ -368,10 +368,11 @@ namespace Ryujinx.Graphics.Gpu.Memory
|
|||
/// <param name="address">CPU virtual address of the region</param>
|
||||
/// <param name="size">Size of the region</param>
|
||||
/// <param name="kind">Kind of the resource being tracked</param>
|
||||
/// <param name="flags">Region flags</param>
|
||||
/// <returns>The memory tracking handle</returns>
|
||||
public RegionHandle BeginTracking(ulong address, ulong size, ResourceKind kind)
|
||||
public RegionHandle BeginTracking(ulong address, ulong size, ResourceKind kind, RegionFlags flags = RegionFlags.None)
|
||||
{
|
||||
return _cpuMemory.BeginTracking(address, size, (int)kind);
|
||||
return _cpuMemory.BeginTracking(address, size, (int)kind, flags);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -408,12 +409,19 @@ namespace Ryujinx.Graphics.Gpu.Memory
|
|||
/// <param name="address">CPU virtual address of the region</param>
|
||||
/// <param name="size">Size of the region</param>
|
||||
/// <param name="kind">Kind of the resource being tracked</param>
|
||||
/// <param name="flags">Region flags</param>
|
||||
/// <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 MultiRegionHandle BeginGranularTracking(ulong address, ulong size, ResourceKind kind, IEnumerable<IRegionHandle> handles = null, ulong granularity = 4096)
|
||||
public MultiRegionHandle BeginGranularTracking(
|
||||
ulong address,
|
||||
ulong size,
|
||||
ResourceKind kind,
|
||||
RegionFlags flags = RegionFlags.None,
|
||||
IEnumerable<IRegionHandle> handles = null,
|
||||
ulong granularity = 4096)
|
||||
{
|
||||
return _cpuMemory.BeginGranularTracking(address, size, handles, granularity, (int)kind);
|
||||
return _cpuMemory.BeginGranularTracking(address, size, handles, granularity, (int)kind, flags);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue