diff --git a/Ryujinx.Graphics.Gpu/Engine/MethodCopyBuffer.cs b/Ryujinx.Graphics.Gpu/Engine/MethodCopyBuffer.cs index 2e6fe0ab1..277054cea 100644 --- a/Ryujinx.Graphics.Gpu/Engine/MethodCopyBuffer.cs +++ b/Ryujinx.Graphics.Gpu/Engine/MethodCopyBuffer.cs @@ -44,6 +44,7 @@ namespace Ryujinx.Graphics.Gpu.Engine cbp.SrcStride, srcLinear, src.MemoryLayout.UnpackGobBlocksInY(), + src.MemoryLayout.UnpackGobBlocksInZ(), srcBpp); var dstCalculator = new OffsetCalculator( @@ -52,6 +53,7 @@ namespace Ryujinx.Graphics.Gpu.Engine cbp.DstStride, dstLinear, dst.MemoryLayout.UnpackGobBlocksInY(), + dst.MemoryLayout.UnpackGobBlocksInZ(), dstBpp); ulong srcBaseAddress = _context.MemoryManager.Translate(cbp.SrcAddress.Pack()); @@ -70,7 +72,7 @@ namespace Ryujinx.Graphics.Gpu.Engine { srcSpan.CopyTo(dstSpan); // No layout conversion has to be performed, just copy the data entirely. } - else + else { unsafe bool Convert(Span dstSpan, ReadOnlySpan srcSpan) where T : unmanaged { diff --git a/Ryujinx.Graphics.Texture/BlockLinearLayout.cs b/Ryujinx.Graphics.Texture/BlockLinearLayout.cs index 0b1122421..02b699872 100644 --- a/Ryujinx.Graphics.Texture/BlockLinearLayout.cs +++ b/Ryujinx.Graphics.Texture/BlockLinearLayout.cs @@ -41,7 +41,6 @@ namespace Ryujinx.Graphics.Texture public BlockLinearLayout( int width, int height, - int depth, int gobBlocksInY, int gobBlocksInZ, int bpp) diff --git a/Ryujinx.Graphics.Texture/LayoutConverter.cs b/Ryujinx.Graphics.Texture/LayoutConverter.cs index 525271c4c..2ad57d598 100644 --- a/Ryujinx.Graphics.Texture/LayoutConverter.cs +++ b/Ryujinx.Graphics.Texture/LayoutConverter.cs @@ -84,7 +84,6 @@ namespace Ryujinx.Graphics.Texture BlockLinearLayout layoutConverter = new BlockLinearLayout( wAligned, h, - d, mipGobBlocksInY, mipGobBlocksInZ, bytesPerPixel); @@ -256,7 +255,6 @@ namespace Ryujinx.Graphics.Texture BlockLinearLayout layoutConverter = new BlockLinearLayout( wAligned, h, - d, mipGobBlocksInY, mipGobBlocksInZ, bytesPerPixel); diff --git a/Ryujinx.Graphics.Texture/OffsetCalculator.cs b/Ryujinx.Graphics.Texture/OffsetCalculator.cs index 1f5d9614a..6d2839547 100644 --- a/Ryujinx.Graphics.Texture/OffsetCalculator.cs +++ b/Ryujinx.Graphics.Texture/OffsetCalculator.cs @@ -23,6 +23,7 @@ namespace Ryujinx.Graphics.Texture int stride, bool isLinear, int gobBlocksInY, + int gobBlocksInZ, int bytesPerPixel) { _width = width; @@ -40,13 +41,22 @@ namespace Ryujinx.Graphics.Texture _layoutConverter = new BlockLinearLayout( wAligned, height, - 1, gobBlocksInY, - 1, + gobBlocksInZ, bytesPerPixel); } } + public OffsetCalculator( + int width, + int height, + int stride, + bool isLinear, + int gobBlocksInY, + int bytesPerPixel) : this(width, height, stride, isLinear, gobBlocksInY, 1, bytesPerPixel) + { + } + public void SetY(int y) { if (_isLinear)