mirror of
https://git.ryujinx.app/ryubing/ryujinx.git
synced 2025-06-29 23:56:25 +02:00
Texture loading: reduce memory allocations (#6623)
* rebase * add methods Ryyjinx.Common EmbeddedResources and SteamUtils * GAL changes - change SetData() methods and ThreadedTexture commands to use IMemoryOwner<byte> instead of SpanOrArray<byte> * Ryujinx.Graphics.Texture: change texture conversion methods to return IMemoryOwner<byte> and allocate from ByteMemoryPool * Ryujinx.Graphics.OpenGL: update ITexture and Texture-like types with SetData() methods to take IMemoryOwner<byte> instead of SpanOrArray<byte> * Ryujinx.Graphics.Vulkan: update ITexture and Texture-like types with SetData() methods to take IMemoryOwner<byte> instead of SpanOrArray<byte> * Ryujinx.Graphics.Gpu: update ITexture and Texture-like types with SetData() methods to take IMemoryOwner<byte> instead of SpanOrArray<byte> * Remove now-unused SpanOrArray<T> * post-rebase cleanup * PixelConverter: remove unsafe modifier on safe methods, and remove one unnecessary cast * use ByteMemoryPool.Rent() in GetWritableRegion() impls * fix formatting, rename `ReadRentedMemory()` to `ReadFileToRentedMemory()`` * Texture.ConvertToHostCompatibleFormat(): dispose of `result` in Astc decode branch
This commit is contained in:
parent
e916662b0f
commit
268c9aecf8
29 changed files with 435 additions and 322 deletions
|
@ -1,6 +1,8 @@
|
|||
using Ryujinx.Common;
|
||||
using Ryujinx.Common.Memory;
|
||||
using Ryujinx.Graphics.Texture.Encoders;
|
||||
using System;
|
||||
using System.Buffers;
|
||||
|
||||
namespace Ryujinx.Graphics.Texture
|
||||
{
|
||||
|
@ -9,7 +11,7 @@ namespace Ryujinx.Graphics.Texture
|
|||
private const int BlockWidth = 4;
|
||||
private const int BlockHeight = 4;
|
||||
|
||||
public static byte[] EncodeBC7(byte[] data, int width, int height, int depth, int levels, int layers)
|
||||
public static IMemoryOwner<byte> EncodeBC7(Memory<byte> data, int width, int height, int depth, int levels, int layers)
|
||||
{
|
||||
int size = 0;
|
||||
|
||||
|
@ -21,7 +23,8 @@ namespace Ryujinx.Graphics.Texture
|
|||
size += w * h * 16 * Math.Max(1, depth >> l) * layers;
|
||||
}
|
||||
|
||||
byte[] output = new byte[size];
|
||||
IMemoryOwner<byte> output = ByteMemoryPool.Rent(size);
|
||||
Memory<byte> outputMemory = output.Memory;
|
||||
|
||||
int imageBaseIOffs = 0;
|
||||
int imageBaseOOffs = 0;
|
||||
|
@ -36,8 +39,8 @@ namespace Ryujinx.Graphics.Texture
|
|||
for (int z = 0; z < depth; z++)
|
||||
{
|
||||
BC7Encoder.Encode(
|
||||
output.AsMemory()[imageBaseOOffs..],
|
||||
data.AsMemory()[imageBaseIOffs..],
|
||||
outputMemory[imageBaseOOffs..],
|
||||
data[imageBaseIOffs..],
|
||||
width,
|
||||
height,
|
||||
EncodeMode.Fast | EncodeMode.Multithreaded);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue