Fix 3D -> 3D Texture Copies

This commit is contained in:
Isaac Marovitz 2024-05-30 13:20:37 +01:00
parent fe7b8c4514
commit 0c351a6caa
No known key found for this signature in database
GPG Key ID: 97250B2B09A132E1
1 changed files with 50 additions and 18 deletions

View File

@ -98,15 +98,31 @@ namespace Ryujinx.Graphics.Metal
if (destination is Texture destinationTexture) if (destination is Texture destinationTexture)
{ {
blitCommandEncoder.CopyFromTexture( if (destinationTexture.Info.Target == Target.Texture3D)
_mtlTexture, {
(ulong)firstLayer, blitCommandEncoder.CopyFromTexture(
(ulong)firstLevel, _mtlTexture,
destinationTexture._mtlTexture, 0,
(ulong)firstLayer, (ulong)firstLevel,
(ulong)firstLevel, new MTLOrigin { x = 0, y = 0, z = (ulong)firstLayer },
_mtlTexture.ArrayLength, new MTLSize { width = (ulong)Math.Min(Info.Width, destinationTexture.Info.Width), height = (ulong)Math.Min(Info.Height, destinationTexture.Info.Height), depth = 1},
_mtlTexture.MipmapLevelCount); destinationTexture._mtlTexture,
0,
(ulong)firstLevel,
new MTLOrigin { x = 0, y = 0, z = (ulong)firstLayer });
}
else
{
blitCommandEncoder.CopyFromTexture(
_mtlTexture,
(ulong)firstLayer,
(ulong)firstLevel,
destinationTexture._mtlTexture,
(ulong)firstLayer,
(ulong)firstLevel,
_mtlTexture.ArrayLength,
_mtlTexture.MipmapLevelCount);
}
} }
} }
@ -116,15 +132,31 @@ namespace Ryujinx.Graphics.Metal
if (destination is Texture destinationTexture) if (destination is Texture destinationTexture)
{ {
blitCommandEncoder.CopyFromTexture( if (destinationTexture.Info.Target == Target.Texture3D)
_mtlTexture, {
(ulong)srcLayer, blitCommandEncoder.CopyFromTexture(
(ulong)srcLevel, _mtlTexture,
destinationTexture._mtlTexture, 0,
(ulong)dstLayer, (ulong)srcLevel,
(ulong)dstLevel, new MTLOrigin { x = 0, y = 0, z = (ulong)srcLayer },
_mtlTexture.ArrayLength, new MTLSize { width = (ulong)Math.Min(Info.Width, destinationTexture.Info.Width), height = (ulong)Math.Min(Info.Height, destinationTexture.Info.Height), depth = 1},
_mtlTexture.MipmapLevelCount); destinationTexture._mtlTexture,
0,
(ulong)dstLevel,
new MTLOrigin { x = 0, y = 0, z = (ulong)dstLayer });
}
else
{
blitCommandEncoder.CopyFromTexture(
_mtlTexture,
(ulong)srcLayer,
(ulong)srcLevel,
destinationTexture._mtlTexture,
(ulong)dstLayer,
(ulong)dstLevel,
_mtlTexture.ArrayLength,
_mtlTexture.MipmapLevelCount);
}
} }
} }