diff options
| author | jhorv <38920027+jhorv@users.noreply.github.com> | 2024-08-03 14:50:53 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-08-03 19:50:53 +0100 |
| commit | 59ddb26628fc2ab94f1c274a254c76b3e368f8b6 (patch) | |
| tree | 57a91040e67a4afb1aec5350704990592efe1acc /src/Ryujinx.Graphics.Texture/PixelConverter.cs | |
| parent | 83fda10f6ef68950de395b5f9f6ab0bf58adced4 (diff) | |
replace ByteMemoryPool usage in Ryujinx.Graphics (#7129)
* chore: replace `ByteMemoryPool` usage with `MemoryOwner<byte>`
* refactor: `PixelConverter.ConvertR4G4ToR4G4B4A4()` - rename old `outputSpan` to `outputSpanUInt16`, reuse same output `Span<byte>` as newly-freed name `outputSpan`
* eliminate temporary buffer allocations
* chore, perf: use MemoryOwner<byte> instead of IMemoryOwner<byte>
Diffstat (limited to 'src/Ryujinx.Graphics.Texture/PixelConverter.cs')
| -rw-r--r-- | src/Ryujinx.Graphics.Texture/PixelConverter.cs | 38 |
1 files changed, 19 insertions, 19 deletions
diff --git a/src/Ryujinx.Graphics.Texture/PixelConverter.cs b/src/Ryujinx.Graphics.Texture/PixelConverter.cs index 4475cc98..3676d919 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<byte> ConvertR4G4ToR4G4B4A4(ReadOnlySpan<byte> data, int width) + public unsafe static MemoryOwner<byte> ConvertR4G4ToR4G4B4A4(ReadOnlySpan<byte> data, int width) { - IMemoryOwner<byte> output = ByteMemoryPool.Rent(data.Length * 2); + MemoryOwner<byte> output = MemoryOwner<byte>.Rent(data.Length * 2); + Span<byte> outputSpan = output.Span; (int remainder, int outRemainder, int height) = GetLineRemainders(data.Length, width, 1, 2); - Span<ushort> outputSpan = MemoryMarshal.Cast<byte, ushort>(output.Memory.Span); + Span<ushort> outputSpanUInt16 = MemoryMarshal.Cast<byte, ushort>(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<byte> ConvertR5G6B5ToR8G8B8A8(ReadOnlySpan<byte> data, int width) + public static MemoryOwner<byte> ConvertR5G6B5ToR8G8B8A8(ReadOnlySpan<byte> data, int width) { - IMemoryOwner<byte> output = ByteMemoryPool.Rent(data.Length * 2); + MemoryOwner<byte> output = MemoryOwner<byte>.Rent(data.Length * 2); int offset = 0; int outOffset = 0; (int remainder, int outRemainder, int height) = GetLineRemainders(data.Length, width, 2, 4); ReadOnlySpan<ushort> inputSpan = MemoryMarshal.Cast<byte, ushort>(data); - Span<uint> outputSpan = MemoryMarshal.Cast<byte, uint>(output.Memory.Span); + Span<uint> outputSpan = MemoryMarshal.Cast<byte, uint>(output.Span); for (int y = 0; y < height; y++) { @@ -109,16 +109,16 @@ namespace Ryujinx.Graphics.Texture return output; } - public static IMemoryOwner<byte> ConvertR5G5B5ToR8G8B8A8(ReadOnlySpan<byte> data, int width, bool forceAlpha) + public static MemoryOwner<byte> ConvertR5G5B5ToR8G8B8A8(ReadOnlySpan<byte> data, int width, bool forceAlpha) { - IMemoryOwner<byte> output = ByteMemoryPool.Rent(data.Length * 2); + MemoryOwner<byte> output = MemoryOwner<byte>.Rent(data.Length * 2); int offset = 0; int outOffset = 0; (int remainder, int outRemainder, int height) = GetLineRemainders(data.Length, width, 2, 4); ReadOnlySpan<ushort> inputSpan = MemoryMarshal.Cast<byte, ushort>(data); - Span<uint> outputSpan = MemoryMarshal.Cast<byte, uint>(output.Memory.Span); + Span<uint> outputSpan = MemoryMarshal.Cast<byte, uint>(output.Span); for (int y = 0; y < height; y++) { @@ -146,16 +146,16 @@ namespace Ryujinx.Graphics.Texture return output; } - public static IMemoryOwner<byte> ConvertA1B5G5R5ToR8G8B8A8(ReadOnlySpan<byte> data, int width) + public static MemoryOwner<byte> ConvertA1B5G5R5ToR8G8B8A8(ReadOnlySpan<byte> data, int width) { - IMemoryOwner<byte> output = ByteMemoryPool.Rent(data.Length * 2); + MemoryOwner<byte> output = MemoryOwner<byte>.Rent(data.Length * 2); int offset = 0; int outOffset = 0; (int remainder, int outRemainder, int height) = GetLineRemainders(data.Length, width, 2, 4); ReadOnlySpan<ushort> inputSpan = MemoryMarshal.Cast<byte, ushort>(data); - Span<uint> outputSpan = MemoryMarshal.Cast<byte, uint>(output.Memory.Span); + Span<uint> outputSpan = MemoryMarshal.Cast<byte, uint>(output.Span); for (int y = 0; y < height; y++) { @@ -183,16 +183,16 @@ namespace Ryujinx.Graphics.Texture return output; } - public static IMemoryOwner<byte> ConvertR4G4B4A4ToR8G8B8A8(ReadOnlySpan<byte> data, int width) + public static MemoryOwner<byte> ConvertR4G4B4A4ToR8G8B8A8(ReadOnlySpan<byte> data, int width) { - IMemoryOwner<byte> output = ByteMemoryPool.Rent(data.Length * 2); + MemoryOwner<byte> output = MemoryOwner<byte>.Rent(data.Length * 2); int offset = 0; int outOffset = 0; (int remainder, int outRemainder, int height) = GetLineRemainders(data.Length, width, 2, 4); ReadOnlySpan<ushort> inputSpan = MemoryMarshal.Cast<byte, ushort>(data); - Span<uint> outputSpan = MemoryMarshal.Cast<byte, uint>(output.Memory.Span); + Span<uint> outputSpan = MemoryMarshal.Cast<byte, uint>(output.Span); for (int y = 0; y < height; y++) { |
