Hey there! I’m writing this build guide for anybody who has, like me, encountered significant issues attempting to make OpenGL work on a MacBook Pro equipped with a dGPU. Also, I’m publishing it because I spent the better part of 2 days troubleshooting this issue, and it feels good to have a reliably working setup! Hope this helps.
I won’t be including any pictures because I dont think they’d be super relevant to the steps I took, and my home setup is pretty stock.
Hardware + Setup
- Aorus Gaming Box 1070 - NVIDIA GTX 1070 8GB
- (NB: No physical changes made to Aorus Box - I did update the box firmware to the latest version to ensure that I was getting the best bandwidth possible. )
- Dell U2410 Display
- MacBook Pro 2018 15” - 6C 8th Gen Intel CPU 2.6-4.1ghz, 16GB Ram, 1TB SSD
- MacOS 11.3.1 installed + Windows 10 20H2
Originally I had simply setup my eGPU within the previous bootcamp installation I had, which was at Win10 build 20H2. I had to try a few different combinations of drivers, but managed to get the eGPU to drive my internal display for gaming, as well as an external display alongside my dGPU (then powering internal monitor). However, I could not for the life of me figure out why I could not make OpenGL based applications utilise my eGPU - even when checking the OpenGL version of that card within windows, it would consistently report as OpenGL 1.1, and applications launched would defer to the dGPU for OpenGL rendering. If the dGPU was then disabled or it’s PCI bus removed, applications would crash on launch or fail to launch due to reported 3D acceleration issues. Very perplexing.
So, I followed a pretty meandering path to land in a place where now, after a few reinstalls and some tweaking, everything is working well.
Initially I installed Win10 1909 via Microsoft ISO, as I had heard that it was basically a more stable version of 1903, but after some trial and error, I found that I was consistently experiencing yellow-banged issues with my EGPU connected, no matter which way I went about driver setup. I then started to get issues with my external TB3 SSD enclosure as well, not being recognised by Windows (which ended up being a partition issue, I presume potentially caused by all of the unexpected connect/disconnect activity caused by my eGPU freaking out in windows whilst attempts were made to get it to stay connected).
I also then attempted to install Win10 1903 V2, and between those two builds, I had little success in getting things to talk well, even after incorporating EFI loaders and a variety of different device manager setups from disabling PCI adapters and GPUs, to hot swapping ports etc.
Finally, I installed a fresh build of Win10 20H2 via Windows ISO, and the following steps made everything work:
- Install Windows via Bootcamp utility
- Install Apple Support Drivers / Software
- Install ALL Windows updates aside from Feature update
- Boot into safe mode
- Run DDU twice, uninstall AMD drivers, disable windows updates
- Boot into windows, install (at time of writing this driver version worked best) May 2021 Bootcampdrivers.com RED Edition driver. I simply used the install suite, so I am also running the radeon software.
- Restart, connect eGPU after Windows boots completely to lower left port, when Microsoft Basic Display Adapter visible with yellow-bang in device manager (eGPU card detected), install NVIDIA driver. (At time of writing, best driver version was 466.47 - May 18 2021).
- Restart, disconnect eGPU when laptop powers off, reconnect to same port, wait until system recognises egpu hardware connection and check device manager, you should be able to see the card as visible, even if it has a yellow-bang (would sometimes be the case). If not, try hot swapping to right side ports and then back.
- Restart again, but cold-boot with egpu connected to same port. Both cards should be recognised by Windows and work in tandem. You should be able to see the GeForce Control Panel and the eGPU interface visible within the taskbar.
At this point, I still encountered a persistent issue trying to get programs to utilise the eGPU for OpenGL rendering, even with an external display connected. Basically, I found the solution by dumb luck. I disabled the dGPU (RP 560X) with the eGPU connected and outputting to external monitor, and Windows then made the external monitor the default monitor. I attempted to run an OpenGL enabled app, and it worked immediately. So, I figured that potentially I might need to keep the dGPU disabled for these apps, but that would potentially affect performance because either my eGPU or some generic driver in the computer would need to run the internal display (or I’d have to find a way to disable it). So, I re-enabled the dGPU, and instead, manually selected the external display as the primary display in Windows, and OpenGL would again default to my eGPU - Viola!
As of now, this setup works consistently. Cold booting is fine, no EFI loader necessary. I’d recommend not connecting anything to the other left side port, and using the right side ports only for peripherals. I’ve also disabled my iSight camera in windows, and the bluetooth adapter - this is in the almost placebo like hope that it’ll help with power distribution and because I don’t need these adapters.
So, for OpenGL, simply select external monitor as primary display within Windows settings. OpenGL applications cannot be run on internal display, for future reference. For additional performance gains, and to manage thermals, I’d strongly recommend using Intel XTU, and setting the max boost to 25w or lower - I’m consistently monitoring performance though on an app-by-app basis, and making fine adjustments.
Haven’t completed any official benchmarks, but graphics acceleration working well across numerous apps, in Vulkan, DX11/12 and OpenGL. Improvements in FPS in gaming dependent on how well optimised games are to make use of multi-core CPU, but have definitely been able to reduce overall temps during gaming through use of eGPU. Hoping to find a way of underclocking/volting dGPU… no luck so far.
The reason I was so determined to get this setup working was because I run Yuzu and Cemu emulators to play newer Nintendo titles, and performance in both of these emulators is significantly improved though use of OpenGL rendering. I was able to get these emulators working well after figuring all of this out, and saw improvements of more than 10fps on average in Zelda BOTW on Cemu, and in Super Mario Odyssey in Yuzu.