

So there are different types of support at play when you are using Metal in your application and it's easy to confuse them, but it's important to know each one.The NVIDIA ® GeForce RTX™ 4090 is the ultimate GeForce GPU. For example, tile shaders are limited to a version of a compiler, but also they are limited to Apple Silicon GPUs. Here, the availability of the features is a mix of limitations of a compiler version (not everyone is going to use latest and greatest spec, I think most production game engines are using something like Metal 2.1, at least the games that aren't using latest and greatest game engine versions do) and the device limitations.

It's tied to the OS version, and it refers to those notes in the Metal Shading Language specification you mentioned in your question. Last kind of "support" to limit some features is the Metal Shading Language version. Here, the API availability isn't so much affected by the GPU itself, but rather by having newer OS and drivers to go with it. To query support for these ones, you need to use either macroses or if #available syntax in Objective-C or similar syntax in Swift. Those are marked with API_AVAILABLE macroses in the headers and may only be used on the OSes that are the same version or higher. Newer versions of OS might ship new APIs or an extensions to existing APIs. Third kind of support is based on an OS version. These are also based on the GPU itself, but are separate probably because they don't fall neatly into any of the "families". Like, for example, supportsRaytracing query. There are other supports* queries on an MTLDevice though, that don't depend on the family of the device, but rather on a device itself. And the chips are grouped into families based on those. The support for the families may vary depending on the chip itself, how much memory or some other units is available to it. Some documentation articles mention what kind of family the device needs to support to use this or that feature, but generally, you can find that info in the Metal Feature Set Tables. There are several factors of this support.įirst, each MTLDevice has a set of MTLGPUFamily it supports that you can query with supportsFamily method. Newer devices generally support more features, older devices might not support newer features. Not all features are supported by all devices.
