Bootcamp eGPU Setup Guide for Thunderbolt 3 MacBook Pro

Now that macOS High Sierra 10.13 officially supports eGPUs, we’ve developed a reliable procedure to set up and maintain a functional eGPU in Windows 10 via Bootcamp.

bootcamp egpu with 2016 15" MacBook Pro bootcamp egpu with 2017 13" MacBook Pro

 

In the past month, we’ve tried many different solutions by reading through eGPU implementation guides. What we’ve found to work most reliably with a Late 2016 15″ MacBook Pro is a combination of apple_set_os.efi, rEFInd, integrated.bat, and the right-side Thunderbolt 3 ports. The 13″ MacBook Pro is less involved to implement due to its lack of a discrete graphics card. Our goals were to have an integrated GPU active for eGPU internal display mode and a reliable Windows bootup without error 12.

 

Why so serious?

Let’s discuss graphics switching in Windows briefly. Forum member Sky11 explained the three modes in Windows 10 (Microsoft Hybrid graphics, AMD XConnect, and Nvidia Optimus) in this post. The crucial prerequisite is the Intel integrated graphics card for internal display acceleration with an eGPU. Without a functional iGPU, eGPU would only work with an external display. This explains the ease of eGPU implementation on iGPU-only hosts while dGPU + iGPU hosts such as the Thunderbolt 3 15″ MacBook Pro is harder to accomplish. The worst-case scenario is when there’s no iGPU present either due to the host firmware or its CPU configuration.

Prior to setting up an eGPU, it’s a good idea to identify the routing of the PCIe connection over Thunderbolt 3 for each host. We used HWiNFO64 to check the arrangement of PCIe controllers and lanes on this Late 2016 15″ MacBook Pro (same as Mid 2017 model). The x16 PCI Express Controller connects to the Radeon Pro dGPU. The x8 PCI Express Controller connects to the left-side USB-C/Thunderbolt 3 ports. The x4 PCI Express Controller 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 we can free up resources for the USB-C/Thunderbolt 3 ports.

The 13″ MacBook Pros have no direct Thunderbolt 3 to CPU connection. All PCIe lanes are routed through the platform controller hub (PCH). Apple’s Thunderbolt 3 support article states that the right-side Thunderbolt 3 ports on the Late 2016 13″ Touch Bar MacBook Pro have lower bandwidth than the left-side ports. This is due to the x2 PCI Express Root Port #9 – 9D18 to which these ports attach. The left Thunderbolt 3 ports attach to x4 PCI Express Root Port #5 – 9D14. We captured the PCIe arrangement of the Thunderbolt 3 15″ MacBook Pro (shown on the left) and Thunderbolt 3 Touch Bar 13″ MacBook Pro (shown on the right) in HWiNFO64 and labeled them for reference.

Overview of PCIe Lane Arrangement in Thunderbolt 3 MacBook Pro

 

The name of the game is to allocate enough resources for the external graphics card to function in Windows 10 while not severely crippling other functionalities of the laptop. Through trial and error, we found the right-side Thunderbolt 3 ports under PCI Express x4 Controller – 1909 is the best way to connect an eGPU to the 15″ Thunderbolt 3 MacBook Pro. This is especially relevant when using an AMD Radeon eGPU in which both PCI Express Controller 1901 and 1905 need to be disabled to resolve error 12.

The 13″ non-Touch Bar MacBook Pro would likely be able to negotiate enough resources for eGPU automagically. If error 12 arises, simply disabling the connection to the iSight camera would resolve it. The 13″ Touch Bar iteration is slightly harder for eGPU implementation due to an extra Thunderbolt 3 controller and two more Thunderbolt 3 ports. It’s best to use one of the left Thunderbolt 3 ports for eGPU connection on this model and to disable the PCI Express Root Port #9 – 9D18 that connects to the right Thunderbolt 3 ports to resolve error 12.

Here are the recommended steps to set up an eGPU with Thunderbolt 3 MacBook Pros and the reasons behind them. If you’re familiar with using eGPU in Windows 10 via Bootcamp, proceed to the summarized setup procedure. 

 

Step 1: Install Windows, DDU & Restore Point

There are setup guides to install Windows on an external hard drive so that the internal PCIe flash storage can be preserved solely for macOS partition. We don’t recommend having the Windows volume on an external drive because it would complicate the eGPU setup process and may cause unforeseeable maintenance issues. If your MacBook Pro has a limited amount of storage, partition the Bootcamp volume with 50GB for Windows installation and save 200GB for the macOS partition. You can then install software and games on an external hard drive.

Windows 10 can detect new graphics cards and install the drivers automatically. However the drivers are not up-to-date and sometimes interfere with setting up an eGPU. We recommend using DDU to uninstall the Radeon Pro drivers that came with Apple Boot Camp drivers 6.1 (part of Bootcamp Assistant in macOS). DDU can also disable Windows automated graphics drivers installation.

Keep in mind Apple itself has not provided support for eGPU in Bootcamp. Therefore the following steps to set up an eGPU with your MacBook Pro can possibly cause bootup issues. We highly suggest the use of the Windows System Protection feature. You can create manual Restore Points that capture snapshots of Windows in order to revert changes should you encounter issues.

 

Step 2: Use apple_set_os.efi

When booting into an operating system that is not Mac OS, the Mac laptop’s firmware tends to deactivate the integrated GPU if there’s another GPU present. For example, the 15″ MacBook Pro boots into Bootcamp with only the Radeon Pro discrete GPU activated. By only having an integrated graphics card, the 13″ MacBook Pro sometimes hangs at the Windows bootup process if an eGPU is connected. To remedy this first hurdle we rely on apple_set_os.efi to trick the Mac laptop into believing it’s booting into Mac OS. This boot loader file can be stored on either a USB drive or in the ESP partition of the Mac’s internal drive through the use of rEFInd boot manager.

Goalque’s guide on apple_set_os.efi is the resource for accomplishing this task. He provided instructions on creating a USB thumb drive with apple_set_os.efi. rEFInd is an alternative for the need to use an external USB drive and Option boot. Once the iGPU is active in Windows, we want to make sure it has the latest Intel graphics drivers. If the iGPU shows up in Device Manager as “Microsoft Basic Display Adapter,” you may need to install the Intel graphics drivers manually. In the 15″ Thunderbolt 3 MacBook Pro, we want to attach the iGPU to the internal display so that we can use eGPU internal display acceleration and disable the dGPU if needed. This is where 0xbb’s integrated.bat comes in.

 

Step 3: Run integrated.bat

This step is relevant to the Thunderbolt 3 15″ MBP only. Skip to step 4 if you have a Thunderbolt 3 13″ MBP. The purpose of 0xbb’s GPU-switch script is to assign a particular GPU to the internal display at the next boot. We want to run integrated.bat in Command with Administrative privilege to execute iGPU attachment to the internal display. Upon the next and subsequent restarts, Windows will use the iGPU to power the Mac internal display. Microsoft Visual C++ 2013 may be required to run this script successfully.

Warning: One important thing to keep in mind is that you have to re-enable PCIe Controller x16 – 1901 in Device Manager (if it’s disabled) then re-attach the dGPU to the internal display by running dedicated.bat prior to booting back into macOS. Otherwise the next Windows boot will hang due to macOS force-attaching the dGPU onto the internal display. This is another reason why we recommend creating manual restore points in Windows. In the event Windows fails to boot, you can go back to a safe point without redoing the entire setup process.

 

Step 4: Solve error 12

The last and most challenging step is to overcome error 12 (not enough resources for eGPU). This almost always happens on a Mac with both iGPU and dGPU. There are several methods to resolve error 12. This is also called “yellow-banged,” as visually identifiable in Device Manager by the yellow triangle and black exclamation. Nando’s DSDT Override works very well, but it requires Windows to run in Test Mode. Some games and software don’t work when Windows is in Test Mode.

A reasonable workaround is to disable PCIe controllers/bridges to free up enough resources so that Windows can handle hosting an eGPU. The PCIe arrangement is different for each Mac but the approach is similar. We start with the PCIe component with the least usage.

In the 13″ non-Touch Bar MacBook Pro, disabling the iSight camera PCIe bridge does the trick. The 13″ Touch Bar is slightly different in that it has one more Thunderbolt 3 controller to handle the two additional Thunderbolt 3 ports on the right side. Some have tried disabling the right Thunderbolt 3 port root and WiFi PCIe bridge with success on Touch Bar model.

The 15″ MacBook Pro is rather challenging to allocate resources for the eGPU. By disabling the x16 PCIe controller – 1901 to the discrete Radeon Pro GPU, we found Windows likely has enough resources for an eGPU. This method works with GTX 980 Ti and GTX 1070 eGPU. From eGPU.io members’ experience, Windows has a harder time with AMD cards. When we tried the RX 580 and RX Vega 56 eGPU, we needed to also disable the PCI Express x8 Controller – 1905 that connects to the left Thunderbolt 3 ports. eGPU works reliably using the right-side ports that connect to the PCI Express x4 Controller – 1909.

 

Bootcamp eGPU Setup Procedure

If viewing this on the forum, please jump to the mirrored news post here to see steps 1-4 below correctly.

Here are all the steps from start to finish to get eGPU running on a Thunderbolt 3 15″ MacBook Pro. Do not connect the eGPU to the Mac laptop until instructed to do so. Download the linked resources at each step.

Step 1: Windows 10 ISO and DDU

Install Windows 10 ISO through Bootcamp Assistant - macOS

Download Windows 10 ISO then open Boot Camp Assistant to start installing Windows. If you intend to use an external SSD, partition the internal drive into 200GB for macOS and 50GB for Windows 10.

  Install Windows 10 ISO through Bootcamp Assistant - macOS

Install DDU to remove default graphics drivers and disable Windows automated GPU driver installation - Windows

Right click on Display Driver Uninstaller to run as Administrator. Then proceed to uninstall both Nvidia and AMD drivers. This process disables Windows 10 automated GPU drivers installation as well.

Install DDU to remove default graphics drivers and disable Windows automated GPU driver installation - Windows

Create a manual Restore point just in case there’s boot up issues – name it DDU Safe - Windows

Type “system protection” into the Windows search box. Select Create a restore point under Best match. Make sure Protection is on for the Bootcamp partition and then create a restore point.

Create a manual Restore point just in case there’s boot up issues – name it DDU Safe - Windows

 

Step 2: rEFInd, apple_set_os.efi, Intel graphics drivers

Install rEFInd boot manager and mount ESP volume – disable SIP if you haven’t done so already - macOS

Open Terminal then drag and drop refind-install to install rEFInd bootmager. Drag and drop mountesp to mount the ESP volume.

Download and copy apple_set_os.efi into the custom folder inside EFI volume - macOS

Create a new folder named custom inside EFI » EFI. Copy the apple_set_os.efi file into the folder. 

Activate iGPU with rEFInd & apple_set_os.eft - Boot Selector

Hit ENTER on apple_set_os.efi volume at rEFInd screen. ARROW to the Windows volume to boot.

Confirm iGPU in Device Manager & install Intel graphics drivers - Windows

If you see two Microsoft Basic Display Adapter devices under Display adapters in Device Manager, proceed to install Intel graphics drivers.

Create a manual Restore point just in case there’s boot up issues – name it iGPU Safe - Windows

Type “system protection” into the Windows search bar then select Create a restore point under Best match. Make sure Protection is on for the Bootcamp partition and then create another restore point.

Create a manual Restore point just in case there’s boot up issues – name it DDU Safe - Windows


Step 3:
0xbb’s gpu-swich and 2013 Visual C++

Disable PCIe Controller x8 – 1905 (left side USB-C/Thunderbolt 3 ports) - Windows

Select View » Devices by connection in Device Manager then expand the PCI Express Root Complex to locate and disable Intel(R) Xeon(R) E3 – 1200/1500 v5/6th Gen Intel(R) Core(TM) PCIe Controller (x8) – 1905.

Attach the iGPU to internal display with gpu-switch – may need to install 2013 Visual C++ x86 - Windows

Run gpu-switch integrated.bat as Administrator to attach the internal display to iGPU at next boot. If you encounter a System Error message due to missing MSVCR120.dll, install 2013 Visual C++ X86. Shut the computer down when Windows CMD screen disappears.


Step 4:
AMD Radeon drivers or Nvidia GeForce drivers

Connect the eGPU to a right TB3 port then boot into Windows - Boot Selector

Connect the eGPU to one of the Thunderbolt 3 ports on the right side of the 15″ MBP. ENTER on apple_set_os.efi at rEFInd boot screen. ARROW to select the Window volume to boot.

Install Radeon or GeForce graphics drivers for eGPU - Windows

Open Device Manager to confirm there’s a third graphics device. This new device is the eGPU. Proceed to install the drivers accordingly to your eGPU device.

Disable dGPU on PCIe Controller x16 - 1901 to use AMD eGPU - Windows

Nvidia eGPU can work without error 12 when the PCIe Controller x8 -1905 is disabled. AMD eGPU needs the PCIe Controller x16 – 1901 disabled as well to free up enough resources. Select View » Devices by connection in Device Manager and locate PCIe Controller x16 – 1901 to disable it.

 

Windows Booting Procedure

We’ve tested different combinations of the R9 Fury, RX 480, RX 580, GTX 980 Ti, and GTX 1070 with the AKiTiO Node, Gigabyte AORUS Gaming Box, Mantiz Venus, Razer Core, and Sonnet Breakaway Box on a Late 2016 15″ MacBook Pro and a Mid 2017 13″ non-Touch Bar MacBook Pro. eGPU works well and reliably once these steps are completed successfully. A normal boot procedure is as follows:

  • Connect eGPU to Thunderbolt 3 port and power MacBook Pro on
  • Cold boot shows rEFInd boot menu (hold OPTION at boot if apple_set_os.efi is on USB drive)
  • Press ENTER on apple_set_os.efi boot item – MacBook Pro’s display flashes briefly to confirm selection
  • Press ARROW key to Windows 10 volume then press ENTER to boot
  • Windows loads to Desktop and AMD XConnect/Nvidia Optimus icon shows up to confirm eGPU activation

 

There are reports of hot-plug possibilities. However, we’ve found it’s not reliable and can crash Windows. Furthermore it may cause corruption in the bootup process. We’ve made a habit of always creating a manual restore point following a change. You never know when Windows will decide it can’t boot into the Desktop anymore. Having these restore points labeled for each step allows you to go back to a particular stage should something happen.

 

Closing Thoughts

Apple can facilitate eGPU in Bootcamp by optimizing its firmware. We’re uncertain how many engineers are working on external graphics support for High Sierra. Bootcamp eGPU support is likely low on the list of priorities, if on the list at all. We’ve opened a thread to petition for support of eGPU in Bootcamp. Please voice your opinions so that Apple will hopefully focus more attention on Bootcamp Mac users.

We’re all learners as we venture into the territory of Mac’s eGPU Bootcamp environment. If you know of a better procedure to setup and use eGPU in Bootcamp with a Mac, please share your experience with the community.

 

Update

Apple has made some firmware improvements in the mid-2017 MacBook Pro. Windows 10 now shows “Large Memory” under Device Manager » View » Resources by connection. This means some Mid 2017 MacBook Pros may be able to use eGPU without encountering error 12, no workaround needed.

Leave a Reply

7 Comments on "Bootcamp eGPU Setup Guide for Thunderbolt 3 MacBook Pro"

Notify of
avatar
Sort by:   newest | oldest | most voted
hypernurd
Member

Great write up as always @theITSage – a very useful summary!
I appear to be one of the fortunate few who’s MBP-2017 benefits from the later, enhanced F/Ware. I have had no issues with Code 12 and my Device Manager does indeed display the noted ‘Large Memory’ allocation to the PCI bus; which is a relief!
Hypernurd

Rycco
Member

Posted by: theitsage
Update
Apple has made some firmware improvements in the mid-2017 MacBook Pro. Windows 10 now shows “Large Memory” under Device Manager » View » Device by resource. This means some Mid 2017 MacBook Pros may be able to use eGPU without encountering error 12, no workaround needed.

Man I was so happy I could use my eGPU on mid-2017 MBP without many issues. Now I’m just waiting for the High Sierra Nvidia drivers and we have a perfect setup.

Eightarmedpet
Member

Impressive guide, just created a back up/restore point of my current set up so I can roll back if/when I mess it up trying my 570 out again…

Wunair
Member

Is there an alternate method to make Bootcamp work with an eGPU while using the LEFT TB3 ports?

nando4
Admin

@Wunair, yes there is an alternative method of fixing error 12 on 2016 & 2017 15″ MBPs by having the eGPU allocated into ‘large memory’ instead of disabling PCI bridge. Here are the guides to do that:

 

The 2017 15″ MBP has provision for ‘large memory’ in the firmware. The 2016 15″ MBP needs to have it added by way of a DSDT override.

dslater
Member
So I believe I am about there, but when i log into windows (without egpu connected) the desktop displays, then flashes black, and then back to the desktop again. It appears that it’s attempting to switch from the igpu to the dgpu. I installed rEFInd, copied apple_set_os.efi over to the boot partition. Select it, then go over to windows and tell it to boot. I disabled the x8 1905 pcie bit, installed the intel video drivers, and ran the integrated.bat file.   Ideally windows would be functional sans egpu if needed, and then with egpu for gaming if desired and… Read more »
wpDiscuz