Browse Source

metal: integer texture format support.

Alex Szpakowski 3 years ago
parent
commit
7eb8366b2d
2 changed files with 77 additions and 0 deletions
  1. 22 0
      src/modules/graphics/metal/Graphics.mm
  2. 55 0
      src/modules/graphics/metal/Metal.mm

+ 22 - 0
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:

+ 55 - 0
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