Long ago, my house had a spare bedroom. It was tiny by bedroom standards - one of those closet-sized spaces which realtors class as a bedroom to enable houses to meet the magical three-bedroom descriptor which so many buyers crave. I’d built my little computer empire there. I remember when I ditched my CRT monitor in favor of a flat-screen LCD snatched from an open-box sale at Best Buy. The other big purchase I recall was a graphics card. At the time I’d been playing World of Warcraft, and after booting up the game post-card installation, I wondered what have I been playing all this time? It was a similar experience to switching from an SD TV to an HD.
Fast-forward a decade later and my computer room has dissolved and relocated to a desk on the first floor. Another few years and it’s a laptop in the living room. Modern laptops are quite powerful, with their lightning-fast SSD drives and, depending on the model, discrete GPUs. But, what they grant in portability they trade-off in upgradability. You simply cannot plug a new graphics card into your laptop.
With Apple’s recent OS update to Mojave, however, you can connect an external GPU enclosure via the laptop’s Thunderbolt port. If you’ve ever upgraded a graphics card in a desktop PC, you know it involves sliding the card into a slot and potentially upgrading the laptop’s power source. An eGPU enclosure is similar. It has its own power source as well as a slot for your card. It just exists outside of the laptop. It’s not that eGPUs couldn’t be used prior to Movaje with Apple computers; it’s just that Mojave provides official software support.
For those who followed my Pixel Plane project, you know I’m an X-Plane enthusiast. X-Plane is a bit demanding on system resources, and I have a desire to play it at more than 20 fps. So, this past week I purchased the Gigabyte eGPU with an RX580 graphics card.
Unlike most enclosures, the Gigabyte Game Box is slightly smaller than a lunch box. The box has four USB ports, one Thunderbolt port, three display ports, and one HDMI port. It’s capable of charging your laptop while connected via the Thunderbolt port. From an Apple Mojave OS perspective, it’s plug-and-play. No drivers to install. It just turns itself on when you open your laptop. A little icon in the system tray allows you to eject it, similar to a USB drive.
One of the things I waffled about prior to purchase was that eGPUs are designed to be an intermediate between the laptop and an external monitor. Meaning, the eGPU intercepts and accelerates the graphics on their way to the external monitor, but does nothing for the graphics on your laptop display. Since I don’t intend to use an external monitor, this was a bit of a deal-breaker.
Prior to Mojave, there were some work-arounds for this, including a shell script which redrew the eGPU’s output back to the internal display. With Mojave, it’s now a checkbox on the application. When you View Properties for any app, a checkbox titled “Prefer eGPU” is available if you have an eGPU present. This will, in theory, force your eGPU to accelerate the graphics and display them on the laptop’s internal display.
When the eGPU arrived on Friday, I remember unboxing it and saying to my wife, “I know how this is going to go. It’s supposed to be plug-and-play, but I’m going to end up spending all weekend troubleshooting it.”
The unit itself was plug-and-play in terms of Mojave recognizing it immediately. There’s a row of color-changing LEDS visible through the eGPU grill which illuminate when it’s connected. The fan, which is about as noisy as my laptop’s internal fan, runs whenever the lights are on.
Whether the eGPU accelerated graphics and which display it was capable of accelerating was entirely dependent on the specific application.
Eve Online: all I needed to do was check ‘Prefer eGPU’ and it was accelerated right on my native laptop display.
Divinity Original Sin: could only be accelerated on an external monitor. The laptop display always reverted back to the integrated display chip.
X-Plane: could not be accelerated at all, either via internal or external displays. I also tried running X Plane in Windows via Bootcamp (which was its own technical saga to get the eGPU working in Bootcamp), with similar results. The weird thing about X-Plane is that it engages the eGPU, switching off the internal chip (you can verify this via Activity Monitor), but it doesn’t seem to actually use the graphics acceleration of the eGPU, giving you much, much worse performance (single digit FPS) than using the laptop’s integrated chip. I suppose this performance hit makes sense because it’s neither using the external nor the internal GPU for acceleration. If you visit the X-Plane forums, you’ll see a statement from the software developer that eGPUs are not supported at this time.
So, there you have it. It’s application dependent. For X-Plane, I’ll need to wait until Laminar adds eGPU support, or someone clever develops a work-around. For other games, I’ve ordered a headless ghost emulator ($10), which plugs into the back of the eGPU, tricking it into thinking it’s using an external display. I suspect this will get Divinity to render on the internal display. I’ll keep you posted.
Edit: I ordered the headless ghost emulator, and indeed it did allow Divinity to be accelerated directly onto my laptop’s internal display.
For X Plane, the answer is still “X Plane mostly doesn’t work with eGPUs on Mac and works poorly on Windows”. Consider the following FPS using identical setups running high world detail, high textures, HDR, and shadows:
Mac X-Plane no eGPU: 16-24 FPS
Mac X-Plane eGPU with headless ghost adapter on internal display 10-12 FPS
Mac X-Plane eGPU with external monitor, mirrored 11-12 FPS
Mac X-Plane eGPU with external monitor as second display, 11-12 FPS
Windows X-Plane via Bootcamp fared a little better, at 8 FPS on the internal display and 28 FPS on the external. 28 FPS isn’t bad, but I can get that with no eGPU on the internal display on Mac just by turning off shadows. It’s not worth the real estate of maintaining a dual OS partition just to have shadows. Also, I should be able to manage more than 28 FPS with an RX680.