diff --git a/Directory.Packages.props b/Directory.Packages.props
index 6919a2485e..e6e2f14b80 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -13,7 +13,7 @@
-
+
diff --git a/src/Ryujinx.Audio/Renderer/Server/Performance/PerformanceManager.cs b/src/Ryujinx.Audio/Renderer/Server/Performance/PerformanceManager.cs
index 0a035916cb..da5a0ad455 100644
--- a/src/Ryujinx.Audio/Renderer/Server/Performance/PerformanceManager.cs
+++ b/src/Ryujinx.Audio/Renderer/Server/Performance/PerformanceManager.cs
@@ -18,16 +18,12 @@ namespace Ryujinx.Audio.Renderer.Server.Performance
if (version == 2)
{
- return (ulong)PerformanceManagerGeneric.GetRequiredBufferSizeForPerformanceMetricsPerFrame(ref parameter);
+ return (ulong)PerformanceManagerGeneric.GetRequiredBufferSizeForPerformanceMetricsPerFrame(ref parameter);
}
if (version == 1)
{
- return (ulong)PerformanceManagerGeneric.GetRequiredBufferSizeForPerformanceMetricsPerFrame(ref parameter);
+ return (ulong)PerformanceManagerGeneric.GetRequiredBufferSizeForPerformanceMetricsPerFrame(ref parameter);
}
throw new NotImplementedException($"Unknown Performance metrics data format version {version}");
diff --git a/src/Ryujinx.Audio/Renderer/Server/Performance/PerformanceManagerGeneric.cs b/src/Ryujinx.Audio/Renderer/Server/Performance/PerformanceManagerGeneric.cs
index 5a70a1bcff..2e5d25b9cc 100644
--- a/src/Ryujinx.Audio/Renderer/Server/Performance/PerformanceManagerGeneric.cs
+++ b/src/Ryujinx.Audio/Renderer/Server/Performance/PerformanceManagerGeneric.cs
@@ -234,7 +234,7 @@ namespace Ryujinx.Audio.Renderer.Server.Performance
{
performanceEntry = null;
- if (_entryDetailIndex > MaxFrameDetailCount)
+ if (_entryDetailIndex >= MaxFrameDetailCount)
{
return false;
}
@@ -245,7 +245,7 @@ namespace Ryujinx.Audio.Renderer.Server.Performance
EntryCountOffset = (uint)CurrentHeader.GetEntryCountOffset(),
};
- uint baseEntryOffset = (uint)(Unsafe.SizeOf() + GetEntriesSize() + Unsafe.SizeOf() * _entryDetailIndex);
+ uint baseEntryOffset = (uint)(Unsafe.SizeOf() + GetEntriesSize() + Unsafe.SizeOf() * _entryDetailIndex);
ref TEntryDetail entryDetail = ref EntriesDetail[_entryDetailIndex];
diff --git a/src/Ryujinx.Graphics.Device/DeviceMemoryManager.cs b/src/Ryujinx.Graphics.Device/DeviceMemoryManager.cs
index fc075a2643..cb1a7c3ab6 100644
--- a/src/Ryujinx.Graphics.Device/DeviceMemoryManager.cs
+++ b/src/Ryujinx.Graphics.Device/DeviceMemoryManager.cs
@@ -1,7 +1,6 @@
using Ryujinx.Common.Memory;
using Ryujinx.Memory;
using System;
-using System.Buffers;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
@@ -145,9 +144,9 @@ namespace Ryujinx.Graphics.Device
}
else
{
- IMemoryOwner memoryOwner = ByteMemoryPool.Rent(size);
+ MemoryOwner memoryOwner = MemoryOwner.Rent(size);
- GetSpan(va, size).CopyTo(memoryOwner.Memory.Span);
+ ReadImpl(va, memoryOwner.Span);
return new WritableRegion(this, va, memoryOwner, tracked: true);
}
diff --git a/src/Ryujinx.Graphics.Gpu/Engine/InlineToMemory/InlineToMemoryClass.cs b/src/Ryujinx.Graphics.Gpu/Engine/InlineToMemory/InlineToMemoryClass.cs
index 93e43ce3c5..78099f74a0 100644
--- a/src/Ryujinx.Graphics.Gpu/Engine/InlineToMemory/InlineToMemoryClass.cs
+++ b/src/Ryujinx.Graphics.Gpu/Engine/InlineToMemory/InlineToMemoryClass.cs
@@ -199,7 +199,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.InlineToMemory
if (target != null)
{
target.SynchronizeMemory();
- var dataCopy = ByteMemoryPool.RentCopy(data);
+ var dataCopy = MemoryOwner.RentCopy(data);
target.SetData(dataCopy, 0, 0, new GAL.Rectangle(_dstX, _dstY, _lineLengthIn / target.Info.FormatInfo.BytesPerPixel, _lineCount));
target.SignalModified();
diff --git a/src/Ryujinx.Graphics.Gpu/Image/Texture.cs b/src/Ryujinx.Graphics.Gpu/Image/Texture.cs
index dde28dbd77..3b6c407cc2 100644
--- a/src/Ryujinx.Graphics.Gpu/Image/Texture.cs
+++ b/src/Ryujinx.Graphics.Gpu/Image/Texture.cs
@@ -1,4 +1,5 @@
using Ryujinx.Common.Logging;
+using Ryujinx.Common.Memory;
using Ryujinx.Graphics.GAL;
using Ryujinx.Graphics.Gpu.Memory;
using Ryujinx.Graphics.Texture;
@@ -805,7 +806,7 @@ namespace Ryujinx.Graphics.Gpu.Image
sliceDepth,
levels,
layers,
- out IMemoryOwner decoded))
+ out MemoryOwner decoded))
{
string texInfo = $"{Info.Target} {Info.FormatInfo.Format} {Info.Width}x{Info.Height}x{Info.DepthOrLayers} levels {Info.Levels}";
diff --git a/src/Ryujinx.Graphics.Gpu/Memory/MemoryManager.cs b/src/Ryujinx.Graphics.Gpu/Memory/MemoryManager.cs
index 0b6c78fac3..59a940a4f9 100644
--- a/src/Ryujinx.Graphics.Gpu/Memory/MemoryManager.cs
+++ b/src/Ryujinx.Graphics.Gpu/Memory/MemoryManager.cs
@@ -2,7 +2,6 @@ using Ryujinx.Common.Memory;
using Ryujinx.Memory;
using Ryujinx.Memory.Range;
using System;
-using System.Buffers;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
@@ -242,9 +241,9 @@ namespace Ryujinx.Graphics.Gpu.Memory
}
else
{
- IMemoryOwner memoryOwner = ByteMemoryPool.Rent(size);
+ MemoryOwner memoryOwner = MemoryOwner.Rent(size);
- GetSpan(va, size).CopyTo(memoryOwner.Memory.Span);
+ ReadImpl(va, memoryOwner.Span, tracked);
return new WritableRegion(this, va, memoryOwner, tracked);
}
diff --git a/src/Ryujinx.Graphics.Gpu/Memory/PhysicalMemory.cs b/src/Ryujinx.Graphics.Gpu/Memory/PhysicalMemory.cs
index 4d09c3aabd..b22cc01b87 100644
--- a/src/Ryujinx.Graphics.Gpu/Memory/PhysicalMemory.cs
+++ b/src/Ryujinx.Graphics.Gpu/Memory/PhysicalMemory.cs
@@ -192,9 +192,9 @@ namespace Ryujinx.Graphics.Gpu.Memory
}
else
{
- IMemoryOwner memoryOwner = ByteMemoryPool.Rent(range.GetSize());
+ MemoryOwner memoryOwner = MemoryOwner.Rent(checked((int)range.GetSize()));
- Memory memory = memoryOwner.Memory;
+ Span memorySpan = memoryOwner.Span;
int offset = 0;
for (int i = 0; i < range.Count; i++)
@@ -203,7 +203,7 @@ namespace Ryujinx.Graphics.Gpu.Memory
int size = (int)currentRange.Size;
if (currentRange.Address != MemoryManager.PteUnmapped)
{
- GetSpan(currentRange.Address, size).CopyTo(memory.Span.Slice(offset, size));
+ GetSpan(currentRange.Address, size).CopyTo(memorySpan.Slice(offset, size));
}
offset += size;
}
diff --git a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheHostStorage.cs b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheHostStorage.cs
index c4b5a13801..c1f5920116 100644
--- a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheHostStorage.cs
+++ b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheHostStorage.cs
@@ -22,7 +22,7 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache
private const ushort FileFormatVersionMajor = 1;
private const ushort FileFormatVersionMinor = 2;
private const uint FileFormatVersionPacked = ((uint)FileFormatVersionMajor << 16) | FileFormatVersionMinor;
- private const uint CodeGenVersion = 6921;
+ private const uint CodeGenVersion = 7131;
private const string SharedTocFileName = "shared.toc";
private const string SharedDataFileName = "shared.data";
diff --git a/src/Ryujinx.Graphics.OpenGL/Image/FormatConverter.cs b/src/Ryujinx.Graphics.OpenGL/Image/FormatConverter.cs
index 434f25900c..490c0c585c 100644
--- a/src/Ryujinx.Graphics.OpenGL/Image/FormatConverter.cs
+++ b/src/Ryujinx.Graphics.OpenGL/Image/FormatConverter.cs
@@ -1,6 +1,5 @@
using Ryujinx.Common.Memory;
using System;
-using System.Buffers;
using System.Numerics;
using System.Runtime.InteropServices;
using System.Runtime.Intrinsics;
@@ -10,11 +9,11 @@ namespace Ryujinx.Graphics.OpenGL.Image
{
static class FormatConverter
{
- public unsafe static IMemoryOwner ConvertS8D24ToD24S8(ReadOnlySpan data)
+ public unsafe static MemoryOwner ConvertS8D24ToD24S8(ReadOnlySpan data)
{
- IMemoryOwner outputMemory = ByteMemoryPool.Rent(data.Length);
+ MemoryOwner outputMemory = MemoryOwner.Rent(data.Length);
- Span output = outputMemory.Memory.Span;
+ Span output = outputMemory.Span;
int start = 0;
diff --git a/src/Ryujinx.Graphics.Shader/Translation/RegisterUsage.cs b/src/Ryujinx.Graphics.Shader/Translation/RegisterUsage.cs
index e27e47070a..1c724223c4 100644
--- a/src/Ryujinx.Graphics.Shader/Translation/RegisterUsage.cs
+++ b/src/Ryujinx.Graphics.Shader/Translation/RegisterUsage.cs
@@ -155,9 +155,14 @@ namespace Ryujinx.Graphics.Shader.Translation
localInputs[block.Index] |= GetMask(register) & ~localOutputs[block.Index];
}
- if (operation.Dest != null && operation.Dest.Type == OperandType.Register)
+ for (int dstIndex = 0; dstIndex < operation.DestsCount; dstIndex++)
{
- localOutputs[block.Index] |= GetMask(operation.Dest.GetRegister());
+ Operand dest = operation.GetDest(dstIndex);
+
+ if (dest != null && dest.Type == OperandType.Register)
+ {
+ localOutputs[block.Index] |= GetMask(dest.GetRegister());
+ }
}
}
}
diff --git a/src/Ryujinx.Graphics.Texture/Astc/AstcDecoder.cs b/src/Ryujinx.Graphics.Texture/Astc/AstcDecoder.cs
index 3f65e1225b..92e39d2e06 100644
--- a/src/Ryujinx.Graphics.Texture/Astc/AstcDecoder.cs
+++ b/src/Ryujinx.Graphics.Texture/Astc/AstcDecoder.cs
@@ -1,7 +1,6 @@
using Ryujinx.Common.Memory;
using Ryujinx.Common.Utilities;
using System;
-using System.Buffers;
using System.Diagnostics;
using System.Linq;
using System.Runtime.CompilerServices;
@@ -293,9 +292,9 @@ namespace Ryujinx.Graphics.Texture.Astc
int depth,
int levels,
int layers,
- out IMemoryOwner decoded)
+ out MemoryOwner decoded)
{
- decoded = ByteMemoryPool.Rent(QueryDecompressedSize(width, height, depth, levels, layers));
+ decoded = MemoryOwner.Rent(QueryDecompressedSize(width, height, depth, levels, layers));
AstcDecoder decoder = new(data, decoded.Memory, blockWidth, blockHeight, width, height, depth, levels, layers);
diff --git a/src/Ryujinx.Graphics.Texture/BCnDecoder.cs b/src/Ryujinx.Graphics.Texture/BCnDecoder.cs
index eb85334a21..d7b1f0fa9d 100644
--- a/src/Ryujinx.Graphics.Texture/BCnDecoder.cs
+++ b/src/Ryujinx.Graphics.Texture/BCnDecoder.cs
@@ -1,7 +1,6 @@
using Ryujinx.Common;
using Ryujinx.Common.Memory;
using System;
-using System.Buffers;
using System.Buffers.Binary;
using System.Runtime.InteropServices;
using System.Runtime.Intrinsics;
@@ -14,7 +13,7 @@ namespace Ryujinx.Graphics.Texture
private const int BlockWidth = 4;
private const int BlockHeight = 4;
- public static IMemoryOwner DecodeBC1(ReadOnlySpan data, int width, int height, int depth, int levels, int layers)
+ public static MemoryOwner DecodeBC1(ReadOnlySpan data, int width, int height, int depth, int levels, int layers)
{
int size = 0;
@@ -23,12 +22,12 @@ namespace Ryujinx.Graphics.Texture
size += Math.Max(1, width >> l) * Math.Max(1, height >> l) * Math.Max(1, depth >> l) * layers * 4;
}
- IMemoryOwner output = ByteMemoryPool.Rent(size);
+ MemoryOwner output = MemoryOwner.Rent(size);
Span tile = stackalloc byte[BlockWidth * BlockHeight * 4];
Span tileAsUint = MemoryMarshal.Cast(tile);
- Span outputAsUint = MemoryMarshal.Cast(output.Memory.Span);
+ Span outputAsUint = MemoryMarshal.Cast(output.Span);
Span> tileAsVector128 = MemoryMarshal.Cast>(tile);
@@ -102,7 +101,7 @@ namespace Ryujinx.Graphics.Texture
return output;
}
- public static IMemoryOwner DecodeBC2(ReadOnlySpan data, int width, int height, int depth, int levels, int layers)
+ public static MemoryOwner DecodeBC2(ReadOnlySpan data, int width, int height, int depth, int levels, int layers)
{
int size = 0;
@@ -111,12 +110,12 @@ namespace Ryujinx.Graphics.Texture
size += Math.Max(1, width >> l) * Math.Max(1, height >> l) * Math.Max(1, depth >> l) * layers * 4;
}
- IMemoryOwner output = ByteMemoryPool.Rent(size);
+ MemoryOwner output = MemoryOwner.Rent(size);
Span tile = stackalloc byte[BlockWidth * BlockHeight * 4];
Span tileAsUint = MemoryMarshal.Cast(tile);
- Span outputAsUint = MemoryMarshal.Cast(output.Memory.Span);
+ Span outputAsUint = MemoryMarshal.Cast(output.Span);
Span> tileAsVector128 = MemoryMarshal.Cast>(tile);
@@ -197,7 +196,7 @@ namespace Ryujinx.Graphics.Texture
return output;
}
- public static IMemoryOwner DecodeBC3(ReadOnlySpan data, int width, int height, int depth, int levels, int layers)
+ public static MemoryOwner DecodeBC3(ReadOnlySpan data, int width, int height, int depth, int levels, int layers)
{
int size = 0;
@@ -206,13 +205,13 @@ namespace Ryujinx.Graphics.Texture
size += Math.Max(1, width >> l) * Math.Max(1, height >> l) * Math.Max(1, depth >> l) * layers * 4;
}
- IMemoryOwner output = ByteMemoryPool.Rent(size);
+ MemoryOwner output = MemoryOwner.Rent(size);
Span tile = stackalloc byte[BlockWidth * BlockHeight * 4];
Span rPal = stackalloc byte[8];
Span tileAsUint = MemoryMarshal.Cast(tile);
- Span outputAsUint = MemoryMarshal.Cast(output.Memory.Span);
+ Span outputAsUint = MemoryMarshal.Cast(output.Span);
Span> tileAsVector128 = MemoryMarshal.Cast>(tile);
@@ -294,7 +293,7 @@ namespace Ryujinx.Graphics.Texture
return output;
}
- public static IMemoryOwner DecodeBC4(ReadOnlySpan data, int width, int height, int depth, int levels, int layers, bool signed)
+ public static MemoryOwner DecodeBC4(ReadOnlySpan data, int width, int height, int depth, int levels, int layers, bool signed)
{
int size = 0;
@@ -306,8 +305,8 @@ namespace Ryujinx.Graphics.Texture
// Backends currently expect a stride alignment of 4 bytes, so output width must be aligned.
int alignedWidth = BitUtils.AlignUp(width, 4);
- IMemoryOwner output = ByteMemoryPool.Rent(size);
- Span outputSpan = output.Memory.Span;
+ MemoryOwner output = MemoryOwner.Rent(size);
+ Span outputSpan = output.Span;
ReadOnlySpan data64 = MemoryMarshal.Cast(data);
@@ -402,7 +401,7 @@ namespace Ryujinx.Graphics.Texture
return output;
}
- public static IMemoryOwner DecodeBC5(ReadOnlySpan data, int width, int height, int depth, int levels, int layers, bool signed)
+ public static MemoryOwner DecodeBC5(ReadOnlySpan data, int width, int height, int depth, int levels, int layers, bool signed)
{
int size = 0;
@@ -414,7 +413,7 @@ namespace Ryujinx.Graphics.Texture
// Backends currently expect a stride alignment of 4 bytes, so output width must be aligned.
int alignedWidth = BitUtils.AlignUp(width, 2);
- IMemoryOwner output = ByteMemoryPool.Rent(size);
+ MemoryOwner output = MemoryOwner.Rent(size);
ReadOnlySpan data64 = MemoryMarshal.Cast(data);
@@ -423,7 +422,7 @@ namespace Ryujinx.Graphics.Texture
Span rPal = stackalloc byte[8];
Span gPal = stackalloc byte[8];
- Span outputAsUshort = MemoryMarshal.Cast(output.Memory.Span);
+ Span outputAsUshort = MemoryMarshal.Cast(output.Span);
Span rTileAsUint = MemoryMarshal.Cast(rTile);
Span gTileAsUint = MemoryMarshal.Cast(gTile);
@@ -527,7 +526,7 @@ namespace Ryujinx.Graphics.Texture
return output;
}
- public static IMemoryOwner DecodeBC6(ReadOnlySpan data, int width, int height, int depth, int levels, int layers, bool signed)
+ public static MemoryOwner DecodeBC6(ReadOnlySpan data, int width, int height, int depth, int levels, int layers, bool signed)
{
int size = 0;
@@ -536,8 +535,8 @@ namespace Ryujinx.Graphics.Texture
size += Math.Max(1, width >> l) * Math.Max(1, height >> l) * Math.Max(1, depth >> l) * layers * 8;
}
- IMemoryOwner output = ByteMemoryPool.Rent(size);
- Span outputSpan = output.Memory.Span;
+ MemoryOwner output = MemoryOwner.Rent(size);
+ Span outputSpan = output.Span;
int inputOffset = 0;
int outputOffset = 0;
@@ -566,7 +565,7 @@ namespace Ryujinx.Graphics.Texture
return output;
}
- public static IMemoryOwner DecodeBC7(ReadOnlySpan data, int width, int height, int depth, int levels, int layers)
+ public static MemoryOwner DecodeBC7(ReadOnlySpan data, int width, int height, int depth, int levels, int layers)
{
int size = 0;
@@ -575,8 +574,8 @@ namespace Ryujinx.Graphics.Texture
size += Math.Max(1, width >> l) * Math.Max(1, height >> l) * Math.Max(1, depth >> l) * layers * 4;
}
- IMemoryOwner output = ByteMemoryPool.Rent(size);
- Span outputSpan = output.Memory.Span;
+ MemoryOwner output = MemoryOwner.Rent(size);
+ Span outputSpan = output.Span;
int inputOffset = 0;
int outputOffset = 0;
diff --git a/src/Ryujinx.Graphics.Texture/BCnEncoder.cs b/src/Ryujinx.Graphics.Texture/BCnEncoder.cs
index 253ba305cd..4db8a182b0 100644
--- a/src/Ryujinx.Graphics.Texture/BCnEncoder.cs
+++ b/src/Ryujinx.Graphics.Texture/BCnEncoder.cs
@@ -2,7 +2,6 @@ using Ryujinx.Common;
using Ryujinx.Common.Memory;
using Ryujinx.Graphics.Texture.Encoders;
using System;
-using System.Buffers;
namespace Ryujinx.Graphics.Texture
{
@@ -11,7 +10,7 @@ namespace Ryujinx.Graphics.Texture
private const int BlockWidth = 4;
private const int BlockHeight = 4;
- public static IMemoryOwner EncodeBC7(Memory data, int width, int height, int depth, int levels, int layers)
+ public static MemoryOwner EncodeBC7(Memory data, int width, int height, int depth, int levels, int layers)
{
int size = 0;
@@ -23,7 +22,7 @@ namespace Ryujinx.Graphics.Texture
size += w * h * 16 * Math.Max(1, depth >> l) * layers;
}
- IMemoryOwner output = ByteMemoryPool.Rent(size);
+ MemoryOwner output = MemoryOwner.Rent(size);
Memory outputMemory = output.Memory;
int imageBaseIOffs = 0;
diff --git a/src/Ryujinx.Graphics.Texture/ETC2Decoder.cs b/src/Ryujinx.Graphics.Texture/ETC2Decoder.cs
index 52801ff47d..49e7154c81 100644
--- a/src/Ryujinx.Graphics.Texture/ETC2Decoder.cs
+++ b/src/Ryujinx.Graphics.Texture/ETC2Decoder.cs
@@ -1,7 +1,6 @@
using Ryujinx.Common;
using Ryujinx.Common.Memory;
using System;
-using System.Buffers;
using System.Buffers.Binary;
using System.Runtime.InteropServices;
@@ -51,15 +50,15 @@ namespace Ryujinx.Graphics.Texture
new int[] { -3, -5, -7, -9, 2, 4, 6, 8 },
};
- public static IMemoryOwner DecodeRgb(ReadOnlySpan data, int width, int height, int depth, int levels, int layers)
+ public static MemoryOwner DecodeRgb(ReadOnlySpan data, int width, int height, int depth, int levels, int layers)
{
ReadOnlySpan dataUlong = MemoryMarshal.Cast(data);
int inputOffset = 0;
- IMemoryOwner output = ByteMemoryPool.Rent(CalculateOutputSize(width, height, depth, levels, layers));
+ MemoryOwner output = MemoryOwner.Rent(CalculateOutputSize(width, height, depth, levels, layers));
- Span outputUint = MemoryMarshal.Cast(output.Memory.Span);
+ Span outputUint = MemoryMarshal.Cast(output.Span);
Span tile = stackalloc uint[BlockWidth * BlockHeight];
int imageBaseOOffs = 0;
@@ -113,15 +112,15 @@ namespace Ryujinx.Graphics.Texture
return output;
}
- public static IMemoryOwner DecodePta(ReadOnlySpan data, int width, int height, int depth, int levels, int layers)
+ public static MemoryOwner DecodePta(ReadOnlySpan data, int width, int height, int depth, int levels, int layers)
{
ReadOnlySpan dataUlong = MemoryMarshal.Cast(data);
int inputOffset = 0;
- IMemoryOwner output = ByteMemoryPool.Rent(CalculateOutputSize(width, height, depth, levels, layers));
+ MemoryOwner output = MemoryOwner.Rent(CalculateOutputSize(width, height, depth, levels, layers));
- Span outputUint = MemoryMarshal.Cast(output.Memory.Span);
+ Span outputUint = MemoryMarshal.Cast(output.Span);
Span tile = stackalloc uint[BlockWidth * BlockHeight];
int imageBaseOOffs = 0;
@@ -170,15 +169,15 @@ namespace Ryujinx.Graphics.Texture
return output;
}
- public static IMemoryOwner DecodeRgba(ReadOnlySpan data, int width, int height, int depth, int levels, int layers)
+ public static MemoryOwner DecodeRgba(ReadOnlySpan data, int width, int height, int depth, int levels, int layers)
{
ReadOnlySpan dataUlong = MemoryMarshal.Cast(data);
int inputOffset = 0;
- IMemoryOwner output = ByteMemoryPool.Rent(CalculateOutputSize(width, height, depth, levels, layers));
+ MemoryOwner output = MemoryOwner.Rent(CalculateOutputSize(width, height, depth, levels, layers));
- Span outputUint = MemoryMarshal.Cast(output.Memory.Span);
+ Span outputUint = MemoryMarshal.Cast(output.Span);
Span tile = stackalloc uint[BlockWidth * BlockHeight];
int imageBaseOOffs = 0;
diff --git a/src/Ryujinx.Graphics.Texture/LayoutConverter.cs b/src/Ryujinx.Graphics.Texture/LayoutConverter.cs
index d6732674b5..5426af2055 100644
--- a/src/Ryujinx.Graphics.Texture/LayoutConverter.cs
+++ b/src/Ryujinx.Graphics.Texture/LayoutConverter.cs
@@ -1,7 +1,6 @@
using Ryujinx.Common;
using Ryujinx.Common.Memory;
using System;
-using System.Buffers;
using System.Runtime.Intrinsics;
using static Ryujinx.Graphics.Texture.BlockLinearConstants;
@@ -95,7 +94,7 @@ namespace Ryujinx.Graphics.Texture
};
}
- public static IMemoryOwner ConvertBlockLinearToLinear(
+ public static MemoryOwner ConvertBlockLinearToLinear(
int width,
int height,
int depth,
@@ -121,8 +120,8 @@ namespace Ryujinx.Graphics.Texture
blockHeight,
bytesPerPixel);
- IMemoryOwner outputOwner = ByteMemoryPool.Rent(outSize);
- Span output = outputOwner.Memory.Span;
+ MemoryOwner outputOwner = MemoryOwner.Rent(outSize);
+ Span output = outputOwner.Span;
int outOffs = 0;
@@ -249,7 +248,7 @@ namespace Ryujinx.Graphics.Texture
return outputOwner;
}
- public static IMemoryOwner ConvertLinearStridedToLinear(
+ public static MemoryOwner ConvertLinearStridedToLinear(
int width,
int height,
int blockWidth,
@@ -265,8 +264,8 @@ namespace Ryujinx.Graphics.Texture
int outStride = BitUtils.AlignUp(w * bytesPerPixel, HostStrideAlignment);
lineSize = Math.Min(lineSize, outStride);
- IMemoryOwner output = ByteMemoryPool.Rent(h * outStride);
- Span outSpan = output.Memory.Span;
+ MemoryOwner output = MemoryOwner.Rent(h * outStride);
+ Span outSpan = output.Span;
int outOffs = 0;
int inOffs = 0;
diff --git a/src/Ryujinx.Graphics.Texture/PixelConverter.cs b/src/Ryujinx.Graphics.Texture/PixelConverter.cs
index 4475cc98aa..3676d9199e 100644
--- a/src/Ryujinx.Graphics.Texture/PixelConverter.cs
+++ b/src/Ryujinx.Graphics.Texture/PixelConverter.cs
@@ -1,7 +1,6 @@
using Ryujinx.Common;
using Ryujinx.Common.Memory;
using System;
-using System.Buffers;
using System.Runtime.InteropServices;
using System.Runtime.Intrinsics;
using System.Runtime.Intrinsics.X86;
@@ -21,13 +20,14 @@ namespace Ryujinx.Graphics.Texture
return (remainder, outRemainder, length / stride);
}
- public unsafe static IMemoryOwner ConvertR4G4ToR4G4B4A4(ReadOnlySpan data, int width)
+ public unsafe static MemoryOwner ConvertR4G4ToR4G4B4A4(ReadOnlySpan data, int width)
{
- IMemoryOwner output = ByteMemoryPool.Rent(data.Length * 2);
+ MemoryOwner output = MemoryOwner.Rent(data.Length * 2);
+ Span outputSpan = output.Span;
(int remainder, int outRemainder, int height) = GetLineRemainders(data.Length, width, 1, 2);
- Span outputSpan = MemoryMarshal.Cast(output.Memory.Span);
+ Span outputSpanUInt16 = MemoryMarshal.Cast(outputSpan);
if (remainder == 0)
{
@@ -38,7 +38,7 @@ namespace Ryujinx.Graphics.Texture
int sizeTrunc = data.Length & ~7;
start = sizeTrunc;
- fixed (byte* inputPtr = data, outputPtr = output.Memory.Span)
+ fixed (byte* inputPtr = data, outputPtr = outputSpan)
{
for (ulong offset = 0; offset < (ulong)sizeTrunc; offset += 8)
{
@@ -49,7 +49,7 @@ namespace Ryujinx.Graphics.Texture
for (int i = start; i < data.Length; i++)
{
- outputSpan[i] = data[i];
+ outputSpanUInt16[i] = data[i];
}
}
else
@@ -61,7 +61,7 @@ namespace Ryujinx.Graphics.Texture
{
for (int x = 0; x < width; x++)
{
- outputSpan[outOffset++] = data[offset++];
+ outputSpanUInt16[outOffset++] = data[offset++];
}
offset += remainder;
@@ -72,16 +72,16 @@ namespace Ryujinx.Graphics.Texture
return output;
}
- public static IMemoryOwner ConvertR5G6B5ToR8G8B8A8(ReadOnlySpan data, int width)
+ public static MemoryOwner ConvertR5G6B5ToR8G8B8A8(ReadOnlySpan data, int width)
{
- IMemoryOwner output = ByteMemoryPool.Rent(data.Length * 2);
+ MemoryOwner output = MemoryOwner.Rent(data.Length * 2);
int offset = 0;
int outOffset = 0;
(int remainder, int outRemainder, int height) = GetLineRemainders(data.Length, width, 2, 4);
ReadOnlySpan inputSpan = MemoryMarshal.Cast(data);
- Span outputSpan = MemoryMarshal.Cast(output.Memory.Span);
+ Span outputSpan = MemoryMarshal.Cast(output.Span);
for (int y = 0; y < height; y++)
{
@@ -109,16 +109,16 @@ namespace Ryujinx.Graphics.Texture
return output;
}
- public static IMemoryOwner ConvertR5G5B5ToR8G8B8A8(ReadOnlySpan data, int width, bool forceAlpha)
+ public static MemoryOwner ConvertR5G5B5ToR8G8B8A8(ReadOnlySpan data, int width, bool forceAlpha)
{
- IMemoryOwner output = ByteMemoryPool.Rent(data.Length * 2);
+ MemoryOwner output = MemoryOwner.Rent(data.Length * 2);
int offset = 0;
int outOffset = 0;
(int remainder, int outRemainder, int height) = GetLineRemainders(data.Length, width, 2, 4);
ReadOnlySpan inputSpan = MemoryMarshal.Cast(data);
- Span outputSpan = MemoryMarshal.Cast(output.Memory.Span);
+ Span outputSpan = MemoryMarshal.Cast(output.Span);
for (int y = 0; y < height; y++)
{
@@ -146,16 +146,16 @@ namespace Ryujinx.Graphics.Texture
return output;
}
- public static IMemoryOwner ConvertA1B5G5R5ToR8G8B8A8(ReadOnlySpan data, int width)
+ public static MemoryOwner ConvertA1B5G5R5ToR8G8B8A8(ReadOnlySpan data, int width)
{
- IMemoryOwner output = ByteMemoryPool.Rent(data.Length * 2);
+ MemoryOwner output = MemoryOwner.Rent(data.Length * 2);
int offset = 0;
int outOffset = 0;
(int remainder, int outRemainder, int height) = GetLineRemainders(data.Length, width, 2, 4);
ReadOnlySpan inputSpan = MemoryMarshal.Cast(data);
- Span outputSpan = MemoryMarshal.Cast(output.Memory.Span);
+ Span outputSpan = MemoryMarshal.Cast(output.Span);
for (int y = 0; y < height; y++)
{
@@ -183,16 +183,16 @@ namespace Ryujinx.Graphics.Texture
return output;
}
- public static IMemoryOwner ConvertR4G4B4A4ToR8G8B8A8(ReadOnlySpan data, int width)
+ public static MemoryOwner ConvertR4G4B4A4ToR8G8B8A8(ReadOnlySpan data, int width)
{
- IMemoryOwner output = ByteMemoryPool.Rent(data.Length * 2);
+ MemoryOwner output = MemoryOwner.Rent(data.Length * 2);
int offset = 0;
int outOffset = 0;
(int remainder, int outRemainder, int height) = GetLineRemainders(data.Length, width, 2, 4);
ReadOnlySpan