From d8f21091bd6ac0d979cf1aad89164887718231cd Mon Sep 17 00:00:00 2001 From: Max Van den Eynde Date: Fri, 2 Oct 2026 15:41:55 +0200 Subject: [PATCH] Reject incompatible Metal resolve and copy textures --- src/framebuffer.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/framebuffer.cpp b/src/framebuffer.cpp index beffe58..39150aa 100644 --- a/src/framebuffer.cpp +++ b/src/framebuffer.cpp @@ -574,6 +574,13 @@ void CommandBuffer::performResolve( if (srcState.texture == nullptr || dstState.texture == nullptr) { return; } + if (srcState.texture->width() != dstState.texture->width() || + srcState.texture->height() != dstState.texture->height() || + srcState.texture->depth() != dstState.texture->depth() || + srcState.texture->arrayLength() != + dstState.texture->arrayLength()) { + return; + } MTL::RenderPassDescriptor *descriptor = MTL::RenderPassDescriptor::renderPassDescriptor(); @@ -597,6 +604,17 @@ void CommandBuffer::performResolve( if (srcState.texture == nullptr || dstState.texture == nullptr) { return; } + if (srcState.texture->width() != dstState.texture->width() || + srcState.texture->height() != dstState.texture->height() || + srcState.texture->depth() != dstState.texture->depth() || + srcState.texture->arrayLength() != + dstState.texture->arrayLength() || + srcState.texture->mipmapLevelCount() != + dstState.texture->mipmapLevelCount() || + srcState.texture->pixelFormat() != + dstState.texture->pixelFormat()) { + return; + } MTL::BlitCommandEncoder *blit = metalCB->blitCommandEncoder(); blit->copyFromTexture(srcState.texture, dstState.texture); blit->endEncoding();