aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.OpenGL/Image/TextureView.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Graphics.OpenGL/Image/TextureView.cs')
-rw-r--r--Ryujinx.Graphics.OpenGL/Image/TextureView.cs23
1 files changed, 21 insertions, 2 deletions
diff --git a/Ryujinx.Graphics.OpenGL/Image/TextureView.cs b/Ryujinx.Graphics.OpenGL/Image/TextureView.cs
index f03653c4..909a0620 100644
--- a/Ryujinx.Graphics.OpenGL/Image/TextureView.cs
+++ b/Ryujinx.Graphics.OpenGL/Image/TextureView.cs
@@ -140,9 +140,11 @@ namespace Ryujinx.Graphics.OpenGL.Image
size += Info.GetMipSize(level);
}
+ ReadOnlySpan<byte> data;
+
if (HwCapabilities.UsePersistentBufferForFlush)
{
- return _renderer.PersistentBuffers.Default.GetTextureData(this, size);
+ data = _renderer.PersistentBuffers.Default.GetTextureData(this, size);
}
else
{
@@ -150,8 +152,15 @@ namespace Ryujinx.Graphics.OpenGL.Image
WriteTo(target);
- return new ReadOnlySpan<byte>(target.ToPointer(), size);
+ data = new ReadOnlySpan<byte>(target.ToPointer(), size);
+ }
+
+ if (Format == Format.S8UintD24Unorm)
+ {
+ data = FormatConverter.ConvertD24S8ToS8D24(data);
}
+
+ return data;
}
public unsafe ReadOnlySpan<byte> GetData(int layer, int level)
@@ -285,6 +294,11 @@ namespace Ryujinx.Graphics.OpenGL.Image
public void SetData(ReadOnlySpan<byte> data)
{
+ if (Format == Format.S8UintD24Unorm)
+ {
+ data = FormatConverter.ConvertS8D24ToD24S8(data);
+ }
+
unsafe
{
fixed (byte* ptr = data)
@@ -296,6 +310,11 @@ namespace Ryujinx.Graphics.OpenGL.Image
public void SetData(ReadOnlySpan<byte> data, int layer, int level)
{
+ if (Format == Format.S8UintD24Unorm)
+ {
+ data = FormatConverter.ConvertS8D24ToD24S8(data);
+ }
+
unsafe
{
fixed (byte* ptr = data)