Parcourir la source

GPU: Explicitly check Metal hardware support on device creation

Caleb Cornett il y a 3 mois
Parent
commit
a27c139b12
1 fichiers modifiés avec 19 ajouts et 1 suppressions
  1. 19 1
      src/gpu/metal/SDL_gpu_metal.m

+ 19 - 1
src/gpu/metal/SDL_gpu_metal.m

@@ -4180,7 +4180,7 @@ static bool METAL_SupportsTextureFormat(
 
 static bool METAL_PrepareDriver(SDL_VideoDevice *this)
 {
-    if (@available(macOS 10.13, iOS 13.0, tvOS 13.0, *)) {
+    if (@available(macOS 10.14, iOS 13.0, tvOS 13.0, *)) {
         return (this->Metal_CreateView != NULL);
     }
     return false;
@@ -4342,6 +4342,7 @@ static SDL_GPUDevice *METAL_CreateDevice(bool debugMode, bool preferLowPower, SD
     @autoreleasepool {
         MetalRenderer *renderer;
         id<MTLDevice> device = NULL;
+        bool hasHardwareSupport = false;
 
         if (debugMode) {
             /* Due to a Metal driver quirk, once a MTLDevice has been created
@@ -4372,6 +4373,23 @@ static SDL_GPUDevice *METAL_CreateDevice(bool debugMode, bool preferLowPower, SD
             }
         }
 
+#ifdef SDL_PLATFORM_MACOS
+        if (@available(macOS 10.15, *)) {
+            hasHardwareSupport = [device supportsFamily:MTLGPUFamilyMac2];
+        } else if (@available(macOS 10.14, *)) {
+            hasHardwareSupport = [device supportsFeatureSet:MTLFeatureSet_macOS_GPUFamily2_v1];
+        }
+#else
+        if (@available(iOS 13.0, tvOS 13.0, *)) {
+            hasHardwareSupport = [device supportsFamily:MTLGPUFamilyApple3];
+        }
+#endif
+
+        if (!hasHardwareSupport) {
+            SDL_SetError("Device does not meet the hardware requirements for SDL_GPU Metal");
+            return NULL;
+        }
+
         // Allocate and zero out the renderer
         renderer = (MetalRenderer *)SDL_calloc(1, sizeof(MetalRenderer));