The following steps were required to get a Metal-based renderer on macos Mojave (10.4.6) to use the Intel (Integrated) GPU instead of the AMD discrete one (High Perf GPU).
-
Do not use
MTLCreateDefaultDevice
. Instead, useMTLCopyAllDevices
to get a list of all available GPUs and then keep the one satisfyingdevice.lowPower == true
-
Set "Supports Automatic Graphics Switching" (
NSSupportsAutomaticGraphicsSwitching
)key in the App'sInfo.plist
toYES
Launch Activity Monitor and verify the App is now listed with "Requires High-Perf GPU: NO".
Make sure there aren't any stray MTLCreateDefaultDevice()
calls in your code. A single MTLCreateDefaultDevice
call, even with its return value discarded, will cause the App to use the discrete GPU instead of the integrated one. This holds true even if you followed all of the steps above.
Good luck!