From a5351e5046c65980c22ba9e2678a3c237909a79e Mon Sep 17 00:00:00 2001 From: Alex Szpakowski Date: Sun, 23 Jan 2022 11:28:09 -0400 Subject: [PATCH] metal: improve detection of rgba32f format filter and MSAA support. --- src/modules/graphics/metal/Graphics.mm | 34 ++++++++++++++++++++------ src/modules/graphics/metal/Texture.mm | 1 - 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/modules/graphics/metal/Graphics.mm b/src/modules/graphics/metal/Graphics.mm index 259692eb4..36cb9b8f8 100644 --- a/src/modules/graphics/metal/Graphics.mm +++ b/src/modules/graphics/metal/Graphics.mm @@ -1785,6 +1785,7 @@ bool Graphics::isPixelFormatSupported(PixelFormat format, PixelFormatUsageFlags format = getSRGBPixelFormat(format); const uint32 sample = PIXELFORMATUSAGEFLAGS_SAMPLE; + const uint32 filter = PIXELFORMATUSAGEFLAGS_LINEAR; const uint32 rt = PIXELFORMATUSAGEFLAGS_RENDERTARGET; const uint32 blend = PIXELFORMATUSAGEFLAGS_BLEND; const uint32 msaa = PIXELFORMATUSAGEFLAGS_MSAA; @@ -1820,9 +1821,16 @@ bool Graphics::isPixelFormatSupported(PixelFormat format, PixelFormatUsageFlags break; case PIXELFORMAT_R32_FLOAT: if (families.apple[1]) - flags |= sample | rt | blend | msaa | computewrite; + flags |= sample | rt | blend | computewrite; if (families.mac[1] || families.macCatalyst[1]) - flags |= all; + flags |= (all & ~(msaa | filter)); + if (@available(macOS 11.0, iOS 14.0, *)) + { + if (device.supports32BitFloatFiltering) + flags |= filter; + if (device.supports32BitMSAA) + flags |= msaa; + } break; case PIXELFORMAT_RG8_UNORM: @@ -1848,10 +1856,15 @@ bool Graphics::isPixelFormatSupported(PixelFormat format, PixelFormatUsageFlags case PIXELFORMAT_RG32_FLOAT: if (families.apple[1]) flags |= sample | rt | blend | computewrite; - if (families.apple[7]) - flags |= sample | rt | msaa | blend | computewrite; if (families.mac[1] || families.macCatalyst[1]) - flags |= all; + flags |= (all & ~(msaa | filter)); + if (@available(macOS 11.0, iOS 14.0, *)) + { + if (device.supports32BitFloatFiltering) + flags |= filter; + if (device.supports32BitMSAA) + flags |= msaa; + } break; case PIXELFORMAT_RGBA8_UNORM: @@ -1878,10 +1891,15 @@ bool Graphics::isPixelFormatSupported(PixelFormat format, PixelFormatUsageFlags case PIXELFORMAT_RGBA32_FLOAT: if (families.apple[1]) flags |= sample | rt | computewrite; - if (families.apple[7]) - flags |= sample | rt | msaa | computewrite; if (families.mac[1] || families.macCatalyst[1]) - flags |= all; + flags |= (all & ~(msaa | filter)); + if (@available(macOS 11.0, iOS 14.0, *)) + { + if (device.supports32BitFloatFiltering) + flags |= filter; + if (device.supports32BitMSAA) + flags |= msaa; + } break; case PIXELFORMAT_R8_INT: diff --git a/src/modules/graphics/metal/Texture.mm b/src/modules/graphics/metal/Texture.mm index c4b8c8b82..6530cc284 100644 --- a/src/modules/graphics/metal/Texture.mm +++ b/src/modules/graphics/metal/Texture.mm @@ -94,7 +94,6 @@ Texture::Texture(love::graphics::Graphics *gfxbase, id device, const desc.textureType = getMTLTextureType(texType, actualMSAASamples); desc.usage &= ~MTLTextureUsageShaderRead; - // TODO: This needs to be cleared, etc. msaaTexture = [device newTextureWithDescriptor:desc]; if (msaaTexture == nil) {