diff options
Diffstat (limited to 'Ryujinx.Graphics.Texture/LayoutConverter.cs')
| -rw-r--r-- | Ryujinx.Graphics.Texture/LayoutConverter.cs | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/Ryujinx.Graphics.Texture/LayoutConverter.cs b/Ryujinx.Graphics.Texture/LayoutConverter.cs index 1039ea26..2b327375 100644 --- a/Ryujinx.Graphics.Texture/LayoutConverter.cs +++ b/Ryujinx.Graphics.Texture/LayoutConverter.cs @@ -97,6 +97,7 @@ namespace Ryujinx.Graphics.Texture int width, int height, int depth, + int sliceDepth, int levels, int layers, int blockWidth, @@ -172,6 +173,8 @@ namespace Ryujinx.Graphics.Texture mipGobBlocksInZ, bytesPerPixel); + int sd = Math.Max(1, sliceDepth >> level); + unsafe bool Convert<T>(Span<byte> output, ReadOnlySpan<byte> data) where T : unmanaged { fixed (byte* outputPtr = output, dataPtr = data) @@ -181,7 +184,7 @@ namespace Ryujinx.Graphics.Texture { byte* inBaseOffset = dataPtr + (layer * sizeInfo.LayerSize + sizeInfo.GetMipOffset(level)); - for (int z = 0; z < d; z++) + for (int z = 0; z < sd; z++) { layoutConverter.SetZ(z); for (int y = 0; y < h; y++) @@ -364,6 +367,7 @@ namespace Ryujinx.Graphics.Texture int width, int height, int depth, + int sliceDepth, int levels, int layers, int blockWidth, @@ -432,6 +436,8 @@ namespace Ryujinx.Graphics.Texture mipGobBlocksInZ, bytesPerPixel); + int sd = Math.Max(1, sliceDepth >> level); + unsafe bool Convert<T>(Span<byte> output, ReadOnlySpan<byte> data) where T : unmanaged { fixed (byte* outputPtr = output, dataPtr = data) @@ -441,7 +447,7 @@ namespace Ryujinx.Graphics.Texture { byte* outBaseOffset = outputPtr + (layer * sizeInfo.LayerSize + sizeInfo.GetMipOffset(level)); - for (int z = 0; z < d; z++) + for (int z = 0; z < sd; z++) { layoutConverter.SetZ(z); for (int y = 0; y < h; y++) |
