SDL3 GPU Backend (Metal): Use MSL on macOS and MetalLib on iOS to Fix Shader Compatibility #9076
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR updates the SDL3 GPU backend to use raw MSL shaders on macOS and MetalLib shaders on iOS. Some macOS systems supported by SDL_GPU cannot load the provided MetalLib because their GPU does not support the required Metal language version (3.1). Using MSL source resolves the issue.
Note that while SDL3 GPU supports macOS 10.14+, Metal library version 3.1 is only available on macOS 14 Sonoma or later. This causes MetalLib pipeline creation to fail on older but still SDL_GPU-supported macOS systems.
iOS continues to use MetalLib because all devices supported by SDL3 GPU (A9 and newer) fully support it, and Apple does not allow runtime shader compilation on iOS.
Brief Technical Notes
TARGET_OS_OSX/TARGET_OS_IPHONEbranching.SDL_GPU_SHADERFORMAT_MSLusing the newmsl_vertex/msl_fragmentarrays.SDL_GPU_SHADERFORMAT_METALLIBunchanged, using existing MetalLib arrays.backends/sdlgpu3/build_instructions.txt./examples/.Testing