gpu: Add SDL_PROP_GPU_DEVICE_CREATE_METAL_ALLOW_MACFAMILY1 property

This commit is contained in:
Ethan Lee
2026-01-25 11:35:22 -05:00
committed by Sam Lantinga
parent 97b177c92f
commit 16f2037efd
2 changed files with 20 additions and 2 deletions

View File

@@ -2321,6 +2321,15 @@ extern SDL_DECLSPEC SDL_GPUDevice * SDLCALL SDL_CreateGPUDevice(
* increasing the API version and opting into extensions aside from the
* minimal set SDL requires.
*
* With the Metal backend:
* - `SDL_PROP_GPU_DEVICE_CREATE_METAL_ALLOW_MACFAMILY1`: By default, macOS
* support requires what Apple calls "MTLGPUFamilyMac2" hardware or newer.
* However, an application can set this property to true to enable support
* for "MTLGPUFamilyMac1" hardware, if (and only if) the application does
* not write to sRGB textures. (For history's sake: MacFamily1 also does not
* support indirect command buffers, MSAA depth resolve, and stencil
* resolve/feedback, but these are not exposed features in SDL_GPU.)
*
* \param props the properties to use.
* \returns a GPU context on success or NULL on failure; call SDL_GetError()
* for more information.
@@ -2353,6 +2362,7 @@ extern SDL_DECLSPEC SDL_GPUDevice * SDLCALL SDL_CreateGPUDeviceWithProperties(
#define SDL_PROP_GPU_DEVICE_CREATE_D3D12_SEMANTIC_NAME_STRING "SDL.gpu.device.create.d3d12.semantic"
#define SDL_PROP_GPU_DEVICE_CREATE_VULKAN_REQUIRE_HARDWARE_ACCELERATION_BOOLEAN "SDL.gpu.device.create.vulkan.requirehardwareacceleration"
#define SDL_PROP_GPU_DEVICE_CREATE_VULKAN_OPTIONS_POINTER "SDL.gpu.device.create.vulkan.options"
#define SDL_PROP_GPU_DEVICE_CREATE_METAL_ALLOW_MACFAMILY1 "SDL.gpu.device.create.metal.allowmacfamily1"
/**

View File

@@ -4527,10 +4527,18 @@ static SDL_GPUDevice *METAL_CreateDevice(bool debugMode, bool preferLowPower, SD
#ifdef SDL_PLATFORM_MACOS
hasHardwareSupport = true;
bool allowMacFamily1 = SDL_GetBooleanProperty(
props,
SDL_PROP_GPU_DEVICE_CREATE_METAL_ALLOW_MACFAMILY1,
false);
if (@available(macOS 10.15, *)) {
hasHardwareSupport = [device supportsFamily:MTLGPUFamilyMac2];
hasHardwareSupport = allowMacFamily1 ?
[device supportsFamily:MTLGPUFamilyMac1] :
[device supportsFamily:MTLGPUFamilyMac2];
} else if (@available(macOS 10.14, *)) {
hasHardwareSupport = [device supportsFeatureSet:MTLFeatureSet_macOS_GPUFamily2_v1];
hasHardwareSupport = allowMacFamily1 ?
[device supportsFeatureSet:MTLFeatureSet_macOS_GPUFamily1_v4] :
[device supportsFeatureSet:MTLFeatureSet_macOS_GPUFamily2_v1];
}
#elif defined(SDL_PLATFORM_VISIONOS)
hasHardwareSupport = true;