Now that external graphics support is official in macOS 10.13, I want to dedicate more time testing a reliable procedure to setup and use eGPU in Windows 10 via Bootcamp. Error 12 is a big deterrent for many Mac users when they consider running Windows. Nando's DSDT Override is a very good solution to take care of this issue. However, it requires Windows to run in Test Mode. This has an adverse effect on some games.
In the past week, I've tried different solutions by reading through the implementation guides here. What I've found most reliable for my late 2016 15" MacBook Pro is a combination of using apple_set_os.efi, rEFInd, integrated.bat, and right-side Thunderbolt 3 ports. My goals were to have iGPU active only for internal display mode and a reliable Windows boot-up without error 12.
The game plan started with spoofing Apple firmware into activating the iGPU when booting into Windows 10. Goalque's guide on apple_set_os.efi is the resource for accomplishing this task. rEFInd is a clean substitution for the need to use an external USB drive and Option boot. Once I had iGPU in Windows, I wanted to power the internal display with the iGPU so that I could disable dGPU for good. This is where 0xbb’s integrated.bat comes in.
Like many people I wanted to get to the end results and often time forgot to take a moment and learn what's going on as I worked through these implementation guides. After a few failures, I got a good grasp on the arrangement of PCIe controllers and lanes on this late-2016 15" MacBook Pro. x16 PCIe connects to the Radeon Pro 450 dGPU. x8 PCIe connects to the left-side USB-C/Thunderbolt 3 ports. x4 PCIe connects to the right-side USB-C/Thunderbolt 3 ports. It makes total sense to disable the entire line of communication to the dGPU so that you can free up resources for the USB-C/Thunderbolt 3 ports.
I'm using a GTX 980 Ti with the Mantiz Venus enclosure so that I can connect the Oculus Rift headset and two sensors. There are 3x USB connectors to plug in: one for the headset, and one each for the sensors. Oculus setup guide recommends connecting no more than 2x USB 3.0 through one hub. Therefore, I had the two sensor USBs through the Mantiz Venus (right-side port) and the headset USB directly to the MacBook Pro (left-side port). Sorry for the badly arranged photo, I will have better photos in a Dirt Rally VR with eGPU article soon.
Here are some quick benchmarks in internal display mode.
I'm running the same setup with a RP455 Pro and 1080Ti, its always a struggle for me to Boot in with no error 12.
The process that seems to work for me to get my internal display working > is connect external display to eGU> restart >rEFIND usb boot> plug in TB3> if external diplay works >device manager > disable integrated AMD > unplug external display from eGPU>done.
if my external doesn't display anything I know it didn't boot correctly and I'lll get error 12, then I star over until it works.
I'm looking forward to any developments on this. Keep up the great work!
Your experience is similar to my previous attempts at eliminating error 12. With the combination of workarounds I did yesterday, I can now boot into Windows 10 reliably without error 12. It requires no external display, USB drive, or boot delay. I simply hit the Power button, rEFInd presents the boot options at which point I hit Enter on apple_set_os.efi then Left Arrow and Enter to boot Windows. It's not necessary to run integrated.bat everytime at Shutdown or Restart.
apple_set_os.efi requires that gmux is in integrated mode. Not necessary to run integrated.bat everytime, not even after being on the macOS side?
I ran SteamVR Performance Test this evening. We know eGPU performance loss is more significant at higher FPS. Smooth VR experience requires 90 FPS or higher. Here's the result from my late 2016 15" MacBook Pro + GTX 980 Ti eGPU.
I also swapped the GTX 980 Ti for a GTX 1070 to test how the computer would handle that and whether error 12 re-surface. One restart is all it took to get things back to fully functional. I will update the original post with step-by-step setup procedure in the next couple of days.
I did more tests with different enclosures and GPUs. I've tried AKiTiO Node as well as Sonnet Breakaway Box. I also used AMD GPUs to make sure the setup and boot up procedure work with both AMD and Nvidia cards. The AMD cards require the left port PCIe controller to be disabled in order to eliminate error 12. It seems the left port PCIe controller can be enabled once eGPU is functional without error 12.
Are you sure your Mantiz Venus has a public Intel certified firmware on there?
While a great guide for 2016+ 15" MBP owners in getting Windows 10 working, I'm hesitant to add this implementation to the implementation table until bandwidth is reflective of what the public would see if they duplicate it.
Would you like to remove the CUDA-Z result for now?
Hi @nando4, my Mantiz Venus has the same firmware as the production units. 25.1 is the version number the last time I checked. I have seen H2D issue using this Mantiz enclosure (same firmware version) with other TB3 hosts. I don't have full comprehension of why this is happening.
@itsage, your hwinfo64 screen shows a DSL5110 bridge with no USB controller hosting the GTX980Ti. So no additional ports are showing. This is quite odd. Is it from the Mantiz Venus? The public customer's Mantiz Venus has a DSL6540 including a USB controller.
|Yours (pre-release unit?), DSL5110 no USB controller or ports||Public unit from here, DSL6540, USB controller & ports|