metal: integer texture format support.

This commit is contained in:
Alex Szpakowski
2021-12-24 17:50:17 -04:00
parent 304b569a39
commit 7eb8366b2d
2 changed files with 77 additions and 0 deletions
+22
View File
@@ -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:
+55
View File
@@ -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