aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Memory/IVirtualMemoryManager.cs
diff options
context:
space:
mode:
authorjhorv <38920027+jhorv@users.noreply.github.com>2024-04-04 21:23:03 -0400
committerGitHub <noreply@github.com>2024-04-04 22:23:03 -0300
commit5def0429f82c795d820b2307a0301b78dfb1e6b7 (patch)
tree8495abf3183132aa411d6b46eb7609d69cd7a335 /src/Ryujinx.Memory/IVirtualMemoryManager.cs
parent8e74fa34560c4a8c3de234eb3488e1d0fb6f8f6c (diff)
Add support to IVirtualMemoryManager for zero-copy reads (#6251)1.1.1251
* - WritableRegion: enable wrapping IMemoryOwner<byte> - IVirtualMemoryManager impls of GetWritableRegion() use pooled memory when region is non-contiguous. - IVirtualMemoryManager: add GetReadOnlySequence() and impls - ByteMemoryPool: add new method RentCopy() - ByteMemoryPool: make class static, remove ctor and singleton field from earlier impl * - BytesReadOnlySequenceSegment: move from Ryujinx.Common.Memory to Ryujinx.Memory - BytesReadOnlySequenceSegment: add IsContiguousWith() and Replace() methods - VirtualMemoryManagerBase: - remove generic type parameters, instead use ulong for virtual addresses and nuint for host/physical addresses - implement IWritableBlock - add virtual GetReadOnlySequence() with coalescing of contiguous segments - add virtual GetSpan() - add virtual GetWritableRegion() - add abstract IsMapped() - add virtual MapForeign(ulong, nuint, ulong) - add virtual Read<T>() - add virtual Read(ulong, Span<byte>) - add virtual ReadTracked<T>() - add virtual SignalMemoryTracking() - add virtual Write() - add virtual Write<T>() - add virtual WriteUntracked() - add virtual WriteWithRedundancyCheck() - VirtualMemoryManagerRefCountedBase: remove generic type parameters - AddressSpaceManager: remove redundant methods, add required overrides - HvMemoryManager: remove redundant methods, add required overrides, add overrides for _invalidAccessHandler handling - MemoryManager: remove redundant methods, add required overrides, add overrides for _invalidAccessHandler handling - MemoryManagerHostMapped: remove redundant methods, add required overrides, add overrides for _invalidAccessHandler handling - NativeMemoryManager: add get properties for Pointer and Length - throughout: removed invalid <inheritdoc/> comments * make HvMemoryManager class sealed * remove unused method * adjust MemoryManagerHostTracked * let MemoryManagerHostTracked override WriteImpl()
Diffstat (limited to 'src/Ryujinx.Memory/IVirtualMemoryManager.cs')
-rw-r--r--src/Ryujinx.Memory/IVirtualMemoryManager.cs10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/Ryujinx.Memory/IVirtualMemoryManager.cs b/src/Ryujinx.Memory/IVirtualMemoryManager.cs
index 557da2f2..96d3e857 100644
--- a/src/Ryujinx.Memory/IVirtualMemoryManager.cs
+++ b/src/Ryujinx.Memory/IVirtualMemoryManager.cs
@@ -125,6 +125,16 @@ namespace Ryujinx.Memory
}
/// <summary>
+ /// Gets a read-only sequence of read-only memory blocks from CPU mapped memory.
+ /// </summary>
+ /// <param name="va">Virtual address of the data</param>
+ /// <param name="size">Size of the data</param>
+ /// <param name="tracked">True if read tracking is triggered on the memory</param>
+ /// <returns>A read-only sequence of read-only memory of the data</returns>
+ /// <exception cref="InvalidMemoryRegionException">Throw for unhandled invalid or unmapped memory accesses</exception>
+ ReadOnlySequence<byte> GetReadOnlySequence(ulong va, int size, bool tracked = false);
+
+ /// <summary>
/// Gets a read-only span of data from CPU mapped memory.
/// </summary>
/// <param name="va">Virtual address of the data</param>