From 67b4e63cff0d6ce9629c3032f2b0d6414cee1220 Mon Sep 17 00:00:00 2001 From: gdkchan Date: Sun, 19 Mar 2023 13:31:35 -0300 Subject: [PATCH] Remove MultiRange Min/MaxAddress and rename GetSlice to Slice (#4566) * Delete MinAddress and MaxAddress from MultiRange * Rename MultiRange.GetSlice to MultiRange.Slice --- Ryujinx.Graphics.Gpu/Image/Texture.cs | 4 +-- Ryujinx.Graphics.Gpu/Image/TextureGroup.cs | 10 +++--- Ryujinx.Memory/Range/MultiRange.cs | 38 +--------------------- 3 files changed, 8 insertions(+), 44 deletions(-) diff --git a/Ryujinx.Graphics.Gpu/Image/Texture.cs b/Ryujinx.Graphics.Gpu/Image/Texture.cs index b784a545..f80f20ed 100644 --- a/Ryujinx.Graphics.Gpu/Image/Texture.cs +++ b/Ryujinx.Graphics.Gpu/Image/Texture.cs @@ -1475,8 +1475,8 @@ namespace Ryujinx.Graphics.Gpu.Image MultiRange otherRange = texture.Range; - IEnumerable regions = _sizeInfo.AllRegions().Select((region) => Range.GetSlice((ulong)region.Offset, (ulong)region.Size)); - IEnumerable otherRegions = texture._sizeInfo.AllRegions().Select((region) => otherRange.GetSlice((ulong)region.Offset, (ulong)region.Size)); + IEnumerable regions = _sizeInfo.AllRegions().Select((region) => Range.Slice((ulong)region.Offset, (ulong)region.Size)); + IEnumerable otherRegions = texture._sizeInfo.AllRegions().Select((region) => otherRange.Slice((ulong)region.Offset, (ulong)region.Size)); foreach (MultiRange region in regions) { diff --git a/Ryujinx.Graphics.Gpu/Image/TextureGroup.cs b/Ryujinx.Graphics.Gpu/Image/TextureGroup.cs index b59a9d08..234e7e8c 100644 --- a/Ryujinx.Graphics.Gpu/Image/TextureGroup.cs +++ b/Ryujinx.Graphics.Gpu/Image/TextureGroup.cs @@ -397,7 +397,7 @@ namespace Ryujinx.Graphics.Gpu.Image int endOffset = Math.Min(spanLast + _sliceSizes[endInfo.BaseLevel + endInfo.Levels - 1], (int)Storage.Size); int size = endOffset - spanBase; - dataSpan = _physicalMemory.GetSpan(Storage.Range.GetSlice((ulong)spanBase, (ulong)size)); + dataSpan = _physicalMemory.GetSpan(Storage.Range.Slice((ulong)spanBase, (ulong)size)); } // Only one of these will be greater than 1, as partial sync is only called when there are sub-image views. @@ -473,7 +473,7 @@ namespace Ryujinx.Graphics.Gpu.Image int endOffset = Math.Min(offset + _sliceSizes[level], (int)Storage.Size); int size = endOffset - offset; - using WritableRegion region = _physicalMemory.GetWritableRegion(Storage.Range.GetSlice((ulong)offset, (ulong)size), tracked); + using WritableRegion region = _physicalMemory.GetWritableRegion(Storage.Range.Slice((ulong)offset, (ulong)size), tracked); Storage.GetTextureDataSliceFromGpu(region.Memory.Span, layer, level, tracked, texture); } @@ -1419,13 +1419,13 @@ namespace Ryujinx.Graphics.Gpu.Image for (int i = 0; i < _allOffsets.Length; i++) { (int layer, int level) = GetLayerLevelForView(i); - MultiRange handleRange = Storage.Range.GetSlice((ulong)_allOffsets[i], 1); + MultiRange handleRange = Storage.Range.Slice((ulong)_allOffsets[i], 1); ulong handleBase = handleRange.GetSubRange(0).Address; for (int j = 0; j < other._handles.Length; j++) { (int otherLayer, int otherLevel) = other.GetLayerLevelForView(j); - MultiRange otherHandleRange = other.Storage.Range.GetSlice((ulong)other._allOffsets[j], 1); + MultiRange otherHandleRange = other.Storage.Range.Slice((ulong)other._allOffsets[j], 1); ulong otherHandleBase = otherHandleRange.GetSubRange(0).Address; if (handleBase == otherHandleBase) @@ -1502,7 +1502,7 @@ namespace Ryujinx.Graphics.Gpu.Image // Handles list is not modified by another thread, only replaced, so this is thread safe. // Remove modified flags from all overlapping handles, so that the textures don't flush to unmapped/remapped GPU memory. - MultiRange subRange = Storage.Range.GetSlice((ulong)handle.Offset, (ulong)handle.Size); + MultiRange subRange = Storage.Range.Slice((ulong)handle.Offset, (ulong)handle.Size); if (range.OverlapsWith(subRange)) { diff --git a/Ryujinx.Memory/Range/MultiRange.cs b/Ryujinx.Memory/Range/MultiRange.cs index dc2aefe4..9dbd76ec 100644 --- a/Ryujinx.Memory/Range/MultiRange.cs +++ b/Ryujinx.Memory/Range/MultiRange.cs @@ -20,16 +20,6 @@ namespace Ryujinx.Memory.Range /// public int Count => HasSingleRange ? 1 : _ranges.Length; - /// - /// Minimum start address of all sub-ranges. - /// - public ulong MinAddress { get; } - - /// - /// Maximum end address of all sub-ranges. - /// - public ulong MaxAddress { get; } - /// /// Creates a new multi-range with a single physical region. /// @@ -39,8 +29,6 @@ namespace Ryujinx.Memory.Range { _singleRange = new MemoryRange(address, size); _ranges = null; - MinAddress = address; - MaxAddress = address + size; } /// @@ -52,30 +40,6 @@ namespace Ryujinx.Memory.Range { _singleRange = MemoryRange.Empty; _ranges = ranges ?? throw new ArgumentNullException(nameof(ranges)); - - if (ranges.Length != 0) - { - MinAddress = ulong.MaxValue; - MaxAddress = 0UL; - - foreach (MemoryRange range in ranges) - { - if (MinAddress > range.Address) - { - MinAddress = range.Address; - } - - if (MaxAddress < range.EndAddress) - { - MaxAddress = range.EndAddress; - } - } - } - else - { - MinAddress = 0UL; - MaxAddress = 0UL; - } } /// @@ -84,7 +48,7 @@ namespace Ryujinx.Memory.Range /// Offset of the slice into the multi-range in bytes /// Size of the slice in bytes /// A new multi-range representing the given slice of this one - public MultiRange GetSlice(ulong offset, ulong size) + public MultiRange Slice(ulong offset, ulong size) { if (HasSingleRange) {