diff options
Diffstat (limited to 'Ryujinx.Graphics.OpenGL/Image/TextureView.cs')
-rw-r--r-- | Ryujinx.Graphics.OpenGL/Image/TextureView.cs | 23 |
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) |