diff --git a/engine/src/flutter/shell/platform/darwin/macos/framework/Source/FlutterRenderer.mm b/engine/src/flutter/shell/platform/darwin/macos/framework/Source/FlutterRenderer.mm index 8e5adde74a..9a35c79d38 100644 --- a/engine/src/flutter/shell/platform/darwin/macos/framework/Source/FlutterRenderer.mm +++ b/engine/src/flutter/shell/platform/darwin/macos/framework/Source/FlutterRenderer.mm @@ -38,10 +38,26 @@ static bool OnAcquireExternalTexture(void* user_data, FlutterDarwinContextMetalSkia* _darwinMetalContext; } +namespace { + +// Attempts to find the integrated GPU backed metal device. +// +// See also: https://developer.apple.com/documentation/metal/multi-gpu-systems?language=objc +id SelectMetalDevice() { + NSArray>* devices = MTLCopyAllDevices(); + for (id device in devices) { + if (device.hasUnifiedMemory) { + return device; + } + } + return MTLCreateSystemDefaultDevice(); +} +} // namespace + - (instancetype)initWithFlutterEngine:(nonnull FlutterEngine*)flutterEngine { self = [super initWithDelegate:self engine:flutterEngine]; if (self) { - _device = MTLCreateSystemDefaultDevice(); + _device = SelectMetalDevice(); if (!_device) { NSLog(@"Could not acquire Metal device."); return nil;