mirror of
https://git.743378673.xyz/MeloNX/MeloNX.git
synced 2025-07-17 12:46:29 +02:00
Port of texture memory pool PR
This commit is contained in:
parent
e9abc7e59e
commit
092af4585c
20 changed files with 228 additions and 138 deletions
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue