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 |
---|