From af840bb2cfe1a416725e92b4e8214534a2c9d741 Mon Sep 17 00:00:00 2001 From: Sasha Szpakowski Date: Mon, 1 Jan 2024 16:12:24 -0400 Subject: [PATCH] metal: texel buffers align their size according to device requirements --- src/modules/graphics/metal/Buffer.mm | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/modules/graphics/metal/Buffer.mm b/src/modules/graphics/metal/Buffer.mm index 20394d0aa..c3b964ff2 100644 --- a/src/modules/graphics/metal/Buffer.mm +++ b/src/modules/graphics/metal/Buffer.mm @@ -21,6 +21,8 @@ #include "Buffer.h" #include "Graphics.h" +#include "common/memory.h" + namespace love { namespace graphics @@ -65,6 +67,19 @@ Buffer::Buffer(love::graphics::Graphics *gfx, id device, const Settin size = getSize(); arraylength = getArrayLength(); + if (usageFlags & BUFFERUSAGEFLAG_TEXEL) + { + if (@available(iOS 12, macOS 10.14, *)) + { + MTLPixelFormat pixformat = getMTLPixelFormat(getDataMember(0).decl.format); + NSUInteger alignment = 1; + if (pixformat != MTLPixelFormatInvalid) + alignment = [device minimumTextureBufferAlignmentForPixelFormat:pixformat]; + + size = alignUp(size, (size_t) alignment); + } + } + MTLResourceOptions opts = 0; if (settings.dataUsage == BUFFERDATAUSAGE_READBACK) opts |= MTLResourceStorageModeShared; @@ -83,8 +98,6 @@ Buffer::Buffer(love::graphics::Graphics *gfx, id device, const Settin { if (@available(iOS 12, macOS 10.14, *)) { - // TODO: minimumTextureBufferAlignmentForPixelFormat - MTLPixelFormat pixformat = getMTLPixelFormat(getDataMember(0).decl.format); if (pixformat == MTLPixelFormatInvalid) throw love::Exception("Could not create Metal texel buffer: invalid format.");