Port of texture memory pool PR

This commit is contained in:
riperiperi 2024-01-12 17:56:48 +00:00
parent e9abc7e59e
commit 092af4585c
20 changed files with 228 additions and 138 deletions

View file

@ -2,6 +2,7 @@ using OpenTK.Graphics.OpenGL;
using Ryujinx.Common.Memory;
using Ryujinx.Graphics.GAL;
using System;
using System.Buffers;
namespace Ryujinx.Graphics.OpenGL.Image
{
@ -54,20 +55,24 @@ namespace Ryujinx.Graphics.OpenGL.Image
throw new NotImplementedException();
}
public void SetData(SpanOrArray<byte> data)
public void SetData(IMemoryOwner<byte> data)
{
var dataSpan = data.AsSpan();
var dataSpan = data.Memory.Span;
Buffer.SetData(_buffer, _bufferOffset, dataSpan[..Math.Min(dataSpan.Length, _bufferSize)]);
data.Dispose();
}
public void SetData(SpanOrArray<byte> data, int layer, int level)
public void SetData(IMemoryOwner<byte> data, int layer, int level)
{
data.Dispose();
throw new NotSupportedException();
}
public void SetData(SpanOrArray<byte> data, int layer, int level, Rectangle<int> region)
public void SetData(IMemoryOwner<byte> data, int layer, int level, Rectangle<int> region)
{
data.Dispose();
throw new NotSupportedException();
}

View file

@ -15,7 +15,7 @@ namespace Ryujinx.Graphics.OpenGL.Image
private int _viewsCount;
internal ITexture DefaultView { get; private set; }
internal TextureView DefaultView { get; private set; }
public TextureStorage(OpenGLRenderer renderer, TextureCreateInfo info)
{
@ -144,14 +144,14 @@ namespace Ryujinx.Graphics.OpenGL.Image
}
}
public ITexture CreateDefaultView()
public TextureView CreateDefaultView()
{
DefaultView = CreateView(Info, 0, 0);
return DefaultView;
}
public ITexture CreateView(TextureCreateInfo info, int firstLayer, int firstLevel)
public TextureView CreateView(TextureCreateInfo info, int firstLayer, int firstLevel)
{
IncrementViewsCount();

View file

@ -3,6 +3,7 @@ using Ryujinx.Common;
using Ryujinx.Common.Memory;
using Ryujinx.Graphics.GAL;
using System;
using System.Buffers;
using System.Diagnostics;
namespace Ryujinx.Graphics.OpenGL.Image
@ -448,10 +449,8 @@ namespace Ryujinx.Graphics.OpenGL.Image
}
}
public void SetData(SpanOrArray<byte> data)
public void SetData(ReadOnlySpan<byte> dataSpan)
{
var dataSpan = data.AsSpan();
if (Format == Format.S8UintD24Unorm)
{
dataSpan = FormatConverter.ConvertS8D24ToD24S8(dataSpan);
@ -466,9 +465,16 @@ namespace Ryujinx.Graphics.OpenGL.Image
}
}
public void SetData(SpanOrArray<byte> data, int layer, int level)
public void SetData(IMemoryOwner<byte> data)
{
var dataSpan = data.AsSpan();
SetData(data.Memory.Span);
data.Dispose();
}
public void SetData(IMemoryOwner<byte> data, int layer, int level)
{
var dataSpan = data.Memory.Span;
if (Format == Format.S8UintD24Unorm)
{
@ -485,11 +491,13 @@ namespace Ryujinx.Graphics.OpenGL.Image
ReadFrom2D((IntPtr)ptr, layer, level, 0, 0, width, height);
}
}
data.Dispose();
}
public void SetData(SpanOrArray<byte> data, int layer, int level, Rectangle<int> region)
public void SetData(IMemoryOwner<byte> data, int layer, int level, Rectangle<int> region)
{
var dataSpan = data.AsSpan();
var dataSpan = data.Memory.Span;
if (Format == Format.S8UintD24Unorm)
{
@ -514,6 +522,8 @@ namespace Ryujinx.Graphics.OpenGL.Image
BitUtils.AlignUp(wInBlocks * Info.BytesPerPixel, 4) * hInBlocks);
}
}
data.Dispose();
}
public void ReadFromPbo(int offset, int size)