mirror of
https://github.com/Ryujinx/Ryujinx.git
synced 2024-11-07 22:28:33 +00:00
Fix buffer to 3D texture copy (#1354)
This commit is contained in:
parent
bf87f02c0c
commit
76e5af967a
|
@ -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<T>(Span<byte> dstSpan, ReadOnlySpan<byte> srcSpan) where T : unmanaged
|
||||
{
|
||||
|
|
|
@ -41,7 +41,6 @@ namespace Ryujinx.Graphics.Texture
|
|||
public BlockLinearLayout(
|
||||
int width,
|
||||
int height,
|
||||
int depth,
|
||||
int gobBlocksInY,
|
||||
int gobBlocksInZ,
|
||||
int bpp)
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue