From 7eb8366b2d79b62a5921dd3ea907516674f66837 Mon Sep 17 00:00:00 2001 From: Alex Szpakowski Date: Fri, 24 Dec 2021 17:50:17 -0400 Subject: [PATCH] metal: integer texture format support. --- src/modules/graphics/metal/Graphics.mm | 22 +++++++++++ src/modules/graphics/metal/Metal.mm | 55 ++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) diff --git a/src/modules/graphics/metal/Graphics.mm b/src/modules/graphics/metal/Graphics.mm index b8e13a9d4..ba6191d2b 100644 --- a/src/modules/graphics/metal/Graphics.mm +++ b/src/modules/graphics/metal/Graphics.mm @@ -1653,6 +1653,28 @@ bool Graphics::isPixelFormatSupported(PixelFormat format, PixelFormatUsageFlags flags |= all; break; + case PIXELFORMAT_R8_INT: + case PIXELFORMAT_R8_UINT: + case PIXELFORMAT_RG8_INT: + case PIXELFORMAT_RG8_UINT: + case PIXELFORMAT_RGBA8_INT: + case PIXELFORMAT_RGBA8_UINT: + case PIXELFORMAT_R16_INT: + case PIXELFORMAT_R16_UINT: + case PIXELFORMAT_RG16_INT: + case PIXELFORMAT_RG16_UINT: + case PIXELFORMAT_RGBA16_INT: + case PIXELFORMAT_RGBA16_UINT: + case PIXELFORMAT_R32_INT: + case PIXELFORMAT_R32_UINT: + case PIXELFORMAT_RG32_INT: + case PIXELFORMAT_RG32_UINT: + case PIXELFORMAT_RGBA32_INT: + case PIXELFORMAT_RGBA32_UINT: + // If MSAA support for int formats is added this should be split up. + flags |= rt | computewrite; + break; + case PIXELFORMAT_RGBA4_UNORM: case PIXELFORMAT_RGB5A1_UNORM: case PIXELFORMAT_RGB565_UNORM: diff --git a/src/modules/graphics/metal/Metal.mm b/src/modules/graphics/metal/Metal.mm index 5e0eb6a0f..471ec0fb9 100644 --- a/src/modules/graphics/metal/Metal.mm +++ b/src/modules/graphics/metal/Metal.mm @@ -87,6 +87,61 @@ Metal::PixelFormatDesc Metal::convertPixelFormat(PixelFormat format, bool &isSRG mtlformat = MTLPixelFormatRGBA32Float; break; + case PIXELFORMAT_R8_INT: + mtlformat = MTLPixelFormatR8Sint; + break; + case PIXELFORMAT_R8_UINT: + mtlformat = MTLPixelFormatR8Uint; + break; + case PIXELFORMAT_RG8_INT: + mtlformat = MTLPixelFormatRG8Sint; + break; + case PIXELFORMAT_RG8_UINT: + mtlformat = MTLPixelFormatRG8Uint; + break; + case PIXELFORMAT_RGBA8_INT: + mtlformat = MTLPixelFormatRGBA8Sint; + break; + case PIXELFORMAT_RGBA8_UINT: + mtlformat = MTLPixelFormatRGBA8Uint; + break; + case PIXELFORMAT_R16_INT: + mtlformat = MTLPixelFormatR16Sint; + break; + case PIXELFORMAT_R16_UINT: + mtlformat = MTLPixelFormatR16Uint; + break; + case PIXELFORMAT_RG16_INT: + mtlformat = MTLPixelFormatRG16Sint; + break; + case PIXELFORMAT_RG16_UINT: + mtlformat = MTLPixelFormatRG16Uint; + break; + case PIXELFORMAT_RGBA16_INT: + mtlformat = MTLPixelFormatRGBA16Sint; + break; + case PIXELFORMAT_RGBA16_UINT: + mtlformat = MTLPixelFormatRGBA16Uint; + break; + case PIXELFORMAT_R32_INT: + mtlformat = MTLPixelFormatR32Sint; + break; + case PIXELFORMAT_R32_UINT: + mtlformat = MTLPixelFormatR32Uint; + break; + case PIXELFORMAT_RG32_INT: + mtlformat = MTLPixelFormatRG32Sint; + break; + case PIXELFORMAT_RG32_UINT: + mtlformat = MTLPixelFormatRG32Uint; + break; + case PIXELFORMAT_RGBA32_INT: + mtlformat = MTLPixelFormatRGBA32Sint; + break; + case PIXELFORMAT_RGBA32_UINT: + mtlformat = MTLPixelFormatRGBA32Uint; + break; + case PIXELFORMAT_LA8_UNORM: // TODO: fall back to RGBA8 when swizzle isn't available. Pixel format // size calculation will need to be adjusted as well