Quick answer: macOS Metal mesh shader pipelines erroring on M1 / M2 Macs? Mesh shaders are a Metal 3 feature on the M3 GPU family — older Apple Silicon needs the traditional pipeline.
A renderer using mesh shaders for sub-mesh culling works on M3 MacBook Pros but crashes on M1 Air. M1 doesn’t support mesh shaders.
Detect via supportsFamily
if (device.supportsFamily(.metal3)) {
// mesh shader path
} else {
// vertex shader path
}Branch at pipeline creation. Store both pipelines, pick at draw time.
Mesh Shader Capability
Check device.supportsFamily(.apple9) for the M3 / A17 generation. Use it specifically for mesh shaders — subfeature variations exist.
Fallback Performance
The vertex shader fallback won’t match mesh shader culling efficiency. Tune the fallback so it’s acceptable on M1 (e.g. coarser LOD).
Validation Layer
Run with Metal validation in debug builds. Catches API misuse like creating mesh shader pipelines on unsupported devices.
Verifying
The renderer works on M1, M2, and M3 Macs. Mesh shader benefits show on M3; older hardware uses fallback gracefully.
“Mesh shaders are M3+. Detect supportsFamily and provide a vertex-shader fallback.”
Keep one or two old Macs in the test rotation — M3-only features are easy to forget when the dev pool is uniformly M3.