| Devices | - iPhone 5S
- iPad Air 1
- iPad Mini 2
- iPad Mini 3
| - iPhone 6
- iPhone 6+
- iPod Touch 6
- iPad Mini 4
- iPad Air 2
| - iPhone 6S
- iPhone 6S+
- iPhone SE
- iPad 9.7" 5th Gen (2017)
- iPad Pro 1st Gen
- iPhone 7
- iPhone 7+
- iPad 9.7 6th Gen (2018)
- iPad Pro 10.5" (2017)
- iPad Pro 12.9" 2 (2017)
- Apple TV 4K
| - iPhone X
- iPhone 8
- iPhone 8+
| - iPhone XS
- iPhone XS Max
- iPhone XR
- iPad Pro (2018)
|
|---|
| GPUs | | | | | |
|---|
| Latest Version | 5 | 5 | 4 | 2 | 1 |
|---|
| MetalKit | ✓ | ✓ | ✓ | ✓ | ✓ |
|---|
| Metal Performance Shaders | | ✓ | ✓ | ✓ | ✓ |
|---|
| Programmable blending | ✓ | ✓ | ✓ | ✓ | ✓ |
|---|
| PVRTC pixel formats | ✓ | ✓ | ✓ | ✓ | ✓ |
|---|
| EAC/ETC pixel formats | ✓ | ✓ | ✓ | ✓ | ✓ |
|---|
| ASTC pixel formats | ✓ | ✓ | ✓ | ✓ | ✓ |
|---|
| Linear textures | ✓ | ✓ | ✓ | ✓ | ✓ |
|---|
| BC pixel formats | ✓ | ✓ | ✓ | ✓ | ✓ |
|---|
| MSAA depth resolve | | | ✓ | ✓ | ✓ |
|---|
| Counting occlusion query | | | ✓ | ✓ | ✓ |
|---|
| Base vertex/instance drawing | | | ✓ | ✓ | ✓ |
|---|
| Texture barriers | | | | | |
|---|
| Memory barriers | | | | | |
|---|
| Layered rendering | | | | | ✓ |
|---|
| Tessellation | | | ✓ | ✓ | ✓ |
|---|
| Resource heaps | ✓ | ✓ | ✓ | ✓ | ✓ |
|---|
| Memoryless render targets | ✓ | ✓ | ✓ | ✓ | ✓ |
|---|
| Function specialization | ✓ | ✓ | ✓ | ✓ | ✓ |
|---|
| Function buffer read-writes | | | ✓ | ✓ | ✓ |
|---|
| Function texture read-writes | | | | ✓ | ✓ |
|---|
| Array of textures | | | ✓ | ✓ | ✓ |
|---|
| Array of samplers | | | ✓ | ✓ | ✓ |
|---|
| Cube map texture arrays | | | | ✓ | ✓ |
|---|
| Stencil texture views | ✓ | ✓ | ✓ | ✓ | ✓ |
|---|
| Depth-16 pixel format | | | | | |
|---|
| Extended range pixel formats | | | ✓ | ✓ | ✓ |
|---|
| Wide color pixel format | ✓ | ✓ | ✓ | ✓ | ✓ |
|---|
| Combined MSAA store and resolve action | | | ✓ | ✓ | ✓ |
|---|
| Deferred store action | ✓ | ✓ | ✓ | ✓ | ✓ |
|---|
| MSAA blits | ✓ | ✓ | ✓ | ✓ | ✓ |
|---|
| sRGB writes | | ✓ | ✓ | ✓ | ✓ |
|---|
| 16-bit unsigned integer coordinates | ✓ | ✓ | ✓ | ✓ | ✓ |
|---|
| Extract, insert, and reverse bits | ✓ | ✓ | ✓ | ✓ | ✓ |
|---|
| SIMD barrier | ✓ | ✓ | ✓ | ✓ | ✓ |
|---|
| Sampler max anisotropy | ✓ | ✓ | ✓ | ✓ | ✓ |
|---|
| Sampler LOD clamp | ✓ | ✓ | ✓ | ✓ | ✓ |
|---|
| Border color | | | | | |
|---|
| Dual-source blending | ✓ | ✓ | ✓ | ✓ | ✓ |
|---|
| Indirect draw & dispatch arguments | | | ✓ | ✓ | ✓ |
|---|
| Argument buffers[1] | ✓ | ✓ | ✓ | ✓ | ✓ |
|---|
| Indirect command buffers | ✓ | | ✓ | ✓ | ✓ |
|---|
| Programmable sample positions | ✓ | ✓ | ✓ | ✓ | ✓ |
|---|
| Uniform type | ✓ | ✓ | ✓ | ✓ | ✓ |
|---|
| Imageblocks | | | | ✓ | ✓ |
|---|
| Tile shaders | | | | ✓ | ✓ |
|---|
| Imageblock sample coverage control | | | | ✓ | ✓ |
|---|
| Post-depth coverage | | | | ✓ | ✓ |
|---|
| Quad-scoped permute operations | | | | ✓ | ✓ |
|---|
| Raster order groups | | | | ✓ | ✓ |
|---|
| Non-uniform threadgroup size | | | | ✓ | ✓ |
|---|
| Multiple viewports | | | | | ✓ |
|---|
| Device notifications | | | | | |
|---|
| Stencil feedback | | | | | ✓ |
|---|
| Stencil resolve | | | | | ✓ |
|---|
| Function arguments |
|---|
| Maximum number of vertex attributes, per vertex
descriptor | 31 | 31 | 31 | 31 | 31 |
|---|
| Maximum number of entries in the buffer argument table,
per graphics or compute function | 31 | 31 | 31 | 31 | 31 |
|---|
| Maximum number of entries in the texture argument table,
per graphics or compute function | 31 | 31 | 31 | 31 | 31 |
|---|
| Maximum number of entries in the sampler state argument
table, per graphics or compute function[2] | 16 | 16 | 16 | 16 | 16 |
|---|
| Maximum number of entries in the threadgroup memory
argument table, per compute function | 31 | 31 | 31 | 31 | 31 |
|---|
| Maximum number of inlined constant data buffers, per
graphics or compute function | 31 | 31 | 31 | 31 | 31 |
|---|
| Maximum length of an inlined constant data buffer, per
graphics or compute function | 4 KB | 4 KB | 4 KB | 4 KB | 4 KB |
|---|
| Maximum threads per threadgroup | 512 | 512 | 512 | 1024 | 1024 |
|---|
| Maximum total threadgroup memory allocation[3] | 16352 B | 16352 B | 16 KB | 64 KB | 64 KB |
|---|
| Maximum total tile memory allocation[4] | Not accessible | Not accessible | Not accessible | 32 KB | 32 KB |
|---|
| Threadgroup memory length alignment | 16 B | 16 B | 16 B | 16 B | 16 B |
|---|
| Maximum function memory allocation for a buffer in the
constant address space | No limit | No limit | No limit | No limit | No limit |
|---|
| Maximum number of inputs (scalars or vectors) to a
fragment function, declared with the stage_in qualifier[5] | 60 | 60 | 60 | 60 | 60 |
|---|
| Maximum number of input components to a fragment
function, declared with the stage_in qualifier[5] | 60 | 60 | 60 | 60 | 60 |
|---|
| Maximum number of function constants | 65536 | 65536 | 65536 | 65536 | 65536 |
|---|
| Maximum tessellation factor | Not available | Not available | 16 | 16 | 64 |
|---|
| Maximum number of viewports and scissor rectangles, per
vertex function | 1 | 1 | 1 | 1 | 16 |
|---|
| Maximum number of raster order groups, per fragment
function | Not available | Not available | Not available | 8 | 8 |
|---|
| Resources |
|---|
| Maximum buffer length | ≥ 256 MB[10] | ≥ 256 MB[10] | ≥ 256 MB[10] | ≥ 256 MB[10] | ≥ 256 MB[10] |
|---|
| Minimum buffer offset alignment | 4 B | 4 B | 4 B | 4 B | 4 B |
|---|
| Maximum 1D texture width | 8192 px | 8192 px | 16384 px | 16384 px | 16384 px |
|---|
| Maximum 2D texture width and height | 8192 px | 8192 px | 16384 px | 16384 px | 16384 px |
|---|
| Maximum cube map texture width and height | 8192 px | 8192 px | 16384 px | 16384 px | 16384 px |
|---|
| Maximum 3D texture width, height, and depth | 2048 px | 2048 px | 2048 px | 2048 px | 2048 px |
|---|
| Maximum number of layers per 1D texture array, 2D texture
array, or 3D texture | 2048 | 2048 | 2048 | 2048 | 2048 |
|---|
| Buffer alignment for copying an existing texture to a buffer | 64 B | 64 B | 16 B | 16 B | 16 B |
|---|
| Buffer alignment for creating a new texture from a buffer
(i.e. linear texture)6 | By API query | By API query | By API query | By API query | By API query |
|---|
| Render Targets |
|---|
| Maximum number of color render targets per render pass
descriptor | 4 | 8 | 8 | 8 | 8 |
|---|
| Maximum size of a point primitive | 511 | 511 | 511 | 511 | 511 |
|---|
| Maximum total render target size, per pixel, when using
multiple color render targets | 128 bits | 256 bits | 256 bits | 512 bits | 512 bits |
|---|
| Ordinary 8-bit pixel formats |
|---|
| A8Unorm | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| R8Unorm | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| R8Unorm_sRGB | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| R8Snorm | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| R8Uint
R8Sint | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| Ordinary 16-bit pixel formats |
|---|
| R16Unorm
R16Snorm | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| R16Uint
R16Sint | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| R16Float | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| RG8Unorm | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| RG8Unorm_sRGB | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| RG8Snorm | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| RG8Uint
RG8Sint | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| Packed 16-bit pixel formats |
|---|
| B5G6R5Unorm
A1BGR5Unorm
ABGR4Unorm
BGR5A1Unorm | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| Ordinary 32-bit pixel formats |
|---|
| R32Uint
R32Sint | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| R32Float | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| RG16Unorm
RG16Snorm | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| RG16Uint
RG16Sint | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| RG16Float | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| RGBA8Unorm | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| RGBA8Unorm_sRGB | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| RGBA8Snorm | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| RGBA8Uint
RGBA8Sint | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| BGRX8Unorm |
|---|
| BGRA8Unorm | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| BGRA8Unorm_sRGB | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| Packed 32-bit pixel formats |
|---|
| RGB[10]A2Unorm | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| RGB[10]A2Uint | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| RG11B10Float | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| RGB9E5Float | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| Ordinary 64-bit pixel formats |
|---|
| RG32Uint
RG32Sint | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| RG32Float | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| RGBA16Unorm
RGBA16Snorm | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| RGBA16Uint
RGBA16Sint | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| RGBA16Float | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| Ordinary 128-bit pixel formats |
|---|
| RGBA32Uint
RGBA32Sint | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| RGBA32Float | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| Compressed pixel formats |
|---|
| PVRTC pixel formats[8] | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| EAC/ETC pixel formats | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| ASTC pixel formats | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| BC pixel formats | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| YUV pixel formats |
|---|
| GBGR422
BGRG422 | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| Depth and stencil pixel formats |
|---|
| Depth16Unorm | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| Depth32Float | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| Stencil8 | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| Depth24Unorm_Stencil89 | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| Depth32Float_Stencil8 | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| X24_Stencil8 | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| X32_Stencil8 | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| Extended range and wide color pixel formats |
|---|
| BGRA10_XR
BGRA10_XR_sRGB
BGR10_XR
BGR10_XR_sRGB | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|
| BGR10A2Unorm | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend | FilterWriteColorMSAAResolveBlend |
|---|