Metal Feature Sets

Lookup the feature availability, implementation limits, and pixel format capabilities of Metal feature sets.

Implementation Limits

The following table lists the implementation limits of Metal.

OSX_GPUFamily1_v2


OSX_GPUFamily1_v1



tvOS_GPUFamily1_v2




tvOS_GPUFamily1_v1





iOS_GPUFamily3_v2






iOS_GPUFamily2_v3







iOS_GPUFamily1_v3








iOS_GPUFamily3_v1









iOS_GPUFamily2_v2










iOS_GPUFamily1_v2











iOS_GPUFamily2_v1












iOS_GPUFamily1_v1













Function arguments

iOS 8

iOS 9

iOS 10

tvOS 9

tvOS 10

OS X 10.11

macOS 10.12

Maximum number of vertex attributes, per vertex descriptor

31

31

31

31

31

31

31

31

31

31

31

31

Maximum number of entries in the buffer argument table, per render or compute command encoder

31

31

31

31

31

31

31

31

31

31

31

31

Maximum number of entries in the texture argument table, per render or compute command encoder

31

31

31

31

31

31

31

31

31

31

128

128

Maximum number of entries in the sampler state argument table, per render or compute command encoder

16

16

16

16

16

16

16

16

16

16

16

16

Maximum number of entries in the threadgroup memory argument table, per compute command encoder

31

31

31

31

31

31

31

31

31

31

31

31

Maximum length of a data block for a function, per render or compute command encoder

4 KB

4 KB

4 KB

4 KB

4 KB

4 KB

4 KB

4 KB

4 KB

4 KB

4 KB

4 KB

Maximum threads per threadgroup

512

512

512

512

512

512

512

512

512

512

1024

1024

Maximum total threadgroup memory allocation*

16352 B

16352 B

16352 B

16352 B

16 KB

16352 B

16352 B

16 KB

16352 B

16352 B

32 KB

32 KB

Threadgroup memory length alignment

16 B

16 B

16 B

16 B

16 B

16 B

16 B

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

No limit

No limit

No limit

No limit

No limit

64 KB

64 KB

Maximum number of inputs (scalars or vectors) to a fragment function, declared with the stage_in qualifier**

60

60

60

60

60

60

60

60

60

60

32

32

Maximum number of input components to a fragment function, declared with the stage_in qualifier**

60

60

60

60

60

60

60

60

60

60

128

128

Maximum number of function constants






65536

65536

65536


65536


65536

Maximum tessellation factor








16




64

Resources

iOS 8

iOS 9

iOS 10

tvOS 9

tvOS 10

OS X 10.11

macOS 10.12

Maximum buffer length

256 MB

256 MB

256 MB

256 MB

256 MB

256 MB

256 MB

256 MB

256 MB

256 MB

256 MB

1 GB

Minimum buffer offset alignment

4 B

4 B

4 B

4 B

4 B

4 B

4 B

4 B

4 B

4 B

256 B

256 B

Maximum 1D texture width

4096 px

4096 px

8192 px

8192 px

16384 px

8192 px

8192 px

16384 px

8192 px

8192 px

16384 px

16384 px

Maximum 2D texture width and height

4096 px

4096 px

8192 px

8192 px

16384 px

8192 px

8192 px

16384 px

8192 px

8192 px

16384 px

16384 px

Maximum cube map texture width and height

4096 px

4096 px

8192 px

8192 px

16384 px

8192 px

8192 px

16384 px

8192 px

8192 px

16384 px

16384 px

Maximum 3D texture width, height, and depth

2048 px

2048 px

2048 px

2048 px

2048 px

2048 px

2048 px

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

2048

2048

2048

2048

2048

2048

2048

Buffer alignment for copying an existing texture to a buffer

64 B

64 B

64 B

64 B

16 B

64 B

64 B

16 B

64 B

64 B

256 B

256 B

Buffer alignment for creating a new texture from a buffer

64 B

64 B

64 B

64 B

16 B

64 B

64 B

16 B

64 B

64 B



Render targets

iOS 8

iOS 9

iOS 10

tvOS 9

tvOS 10

OS X 10.11

macOS 10.12

Maximum number of color render targets per render pass descriptor

4

8

4

8

8

4

8

8

8

8

8

8

Maximum size of a point primitive

511

511

511

511

511

511

511

511

511

511

511

511

Maximum total render target size, per pixel, when using multiple color render targets

128 bits

256 bits

128 bits

256 bits

256 bits

128 bits

256 bits

256 bits

256 bits

256 bits

No limit

No limit

Maximum visibility query offset

65528 B

65528 B

65528 B

65528 B

65528 B

65528 B

65528 B

65528 B

65528 B

65528 B

65528 B

65528 B



Notes

*In some iOS and tvOS feature sets, the driver may consume up to 32 B of a device's total threadgroup memory. Therefore, the maximum limit is actually 16 KB minus 32 B, which equals 16352 B.

**A vector counts as n scalars, where n is the number of components in the vector. In iOS and tvOS feature sets, you can only reach the maximum number of inputs if you do not exceed the maximum number of input components. For example, you can have 60 float inputs (60 input components) but you cannot have 60 float4 inputs (240 input components).


Related Guides and Reference