diff --git a/filament/backend/src/metal/MetalDriver.mm b/filament/backend/src/metal/MetalDriver.mm index 84d326750e..217222d532 100644 --- a/filament/backend/src/metal/MetalDriver.mm +++ b/filament/backend/src/metal/MetalDriver.mm @@ -55,7 +55,29 @@ MetalDriver::MetalDriver(backend::MetalPlatform* platform) noexcept mPlatform(*platform), mContext(new MetalContext) { mContext->driver = this; - mContext->device = MTLCreateSystemDefaultDevice(); + +#if !defined(IOS) + const bool forceIntegrated = + NSProcessInfo.processInfo.environment[@"FILAMENT_FORCE_INTEGRATED_GPU"] != nil; + if (forceIntegrated) { + // Find the first low power device, which is likely the integrated GPU. + NSArray>* const devices = MTLCopyAllDevices(); + for (id device in devices) { + if (device.isLowPower) { + mContext->device = device; + break; + } + } + } else +#endif + { + mContext->device = MTLCreateSystemDefaultDevice(); + } + + utils::slog.i << "Selected physical device '" + << [mContext->device.name cStringUsingEncoding:NSUTF8StringEncoding] << "'" + << utils::io::endl; + mContext->commandQueue = [mContext->device newCommandQueue]; mContext->commandQueue.label = @"Filament"; mContext->pipelineStateCache.setDevice(mContext->device);