mirror of
https://github.com/GreemDev/Ryujinx.git
synced 2025-01-24 05:54:56 +03:00
Handle Array Format SetData
This commit is contained in:
parent
fe4fa6f4db
commit
746c897206
@ -201,7 +201,6 @@ namespace Ryujinx.Graphics.Metal
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Handle array formats
|
||||
public unsafe void SetData(IMemoryOwner<byte> data)
|
||||
{
|
||||
var blitCommandEncoder = _pipeline.GetOrCreateBlitEncoder();
|
||||
@ -215,14 +214,14 @@ namespace Ryujinx.Graphics.Metal
|
||||
int height = Info.Height;
|
||||
int depth = Info.Depth;
|
||||
int levels = Info.GetLevelsClamped();
|
||||
int layers = Info.GetLayers();
|
||||
bool is3D = Info.Target == Target.Texture3D;
|
||||
|
||||
int offset = 0;
|
||||
|
||||
for (int level = 0; level < levels; level++)
|
||||
{
|
||||
int mipSize = Info.GetMipSize(level);
|
||||
|
||||
int mipSize = Info.GetMipSize2D(level);
|
||||
int endOffset = offset + mipSize;
|
||||
|
||||
if ((uint)endOffset > (uint)dataSpan.Length)
|
||||
@ -230,6 +229,8 @@ namespace Ryujinx.Graphics.Metal
|
||||
return;
|
||||
}
|
||||
|
||||
for (int layer = 0; layer < layers; layer++)
|
||||
{
|
||||
blitCommandEncoder.CopyFromBuffer(
|
||||
mtlBuffer,
|
||||
(ulong)offset,
|
||||
@ -237,12 +238,13 @@ namespace Ryujinx.Graphics.Metal
|
||||
(ulong)mipSize,
|
||||
new MTLSize { width = (ulong)width, height = (ulong)height, depth = is3D ? (ulong)depth : 1 },
|
||||
_mtlTexture,
|
||||
0,
|
||||
(ulong)layer,
|
||||
(ulong)level,
|
||||
new MTLOrigin()
|
||||
);
|
||||
|
||||
offset += mipSize;
|
||||
}
|
||||
|
||||
width = Math.Max(1, width >> 1);
|
||||
height = Math.Max(1, height >> 1);
|
||||
|
Loading…
Reference in New Issue
Block a user