GPU Partitioning on Windows 10 Pro (AMD Radeon 6900 XT)

Author: Jonathan Vasquez <jon@xyinn.org>
Last Updated: 2023-08-20-2300

fn main()

Hello everyone,

I've been loving my experience using my Windows 10 Dark Island strategy for gaming. However, I've been interested in seeing if I could share my AMD Radeon 6900 XT GPU with another identical Windows 10 Pro VM in Hyper-V, and if it went well, I could stream my Diablo II (1.05b and 1.09b) play sessions in the VM. Since I'm using my Dark Island approach, I can't stream from the main gaming OS since it's completely disconnected from the internet (hence the Dark Island). Unfortunately even though I got the GPU Partitioning strategy to work, this technology is highly experimental and there is a lot to be desired. So I won't be using it, and will continue to game offline on bare metal, so no streaming, I'll record any relevant game sessions (or relevant parts, mainly for Diablo II) and upload them to my channel later. Any future improvements to the technology wouldn't matter since Windows 10 is still the last Microsoft based OS that I'll be using personally due to the reasons I've mentioned in my Dark Island post. Regardless of this, I've collected a bunch of information and documented the steps to do it. A lot of this is really me just learning from what everyone else has already been saying regarding GPU Partitioning, so I'll be putting the source links for those locations. Please check out their videos and posts at the bottom of this post. I'm posting this in the hopes that there may be some pieces of knowledge that may help you along your own GPU Partitioning journey. You may end up having a better experience than me depending on your hardware and needs. Also, there are scripts out there that can automate most of this, but I wanted to see how to do it from scratch to see what's actually happening and to find out how easy this can be manually done. Before starting, I wanted to mention the games I tested to see if this worked on the AMD Radeon 6900 XT (the games basically seem to work if I passthrough the integrated card by leaving it enabled and letting Windows auto-select it. The performance is basically fine for basic games, but if it's something like Baldur's Gate 3, forget about it lol):

Caveats

Requirements

You'll need to make sure that your BIOS has any appropriate VM related settings enabled. These may not all be necessary since I haven't spent time trying to reduce the setting set, but I've seen these mentioned by various folks throughout my research. I'll list them below. Don't forget that these instructions are tailored for AMD CPUs/GPUs. You'll need to find the equivalents on the Intel/NVIDIA side.

Check if you have any GPUs to Partition

Before we continue any further, let's check to see if you have any GPUs to partition.

  1. Open PowerShell.
  2. Run Get-VMPartitionableGpu.

If you don't get any results, then you can't do this approach.

If you get 1 result then you can continue with the guide.

If you get more than 1 result, you should figure out how to turn off the extra GPU as mentioned earlier. You can see an example of this below since you can see I got both the integrated graphics, and the dedicated card both showing up. So which one is which?

Name                    : \\?\PCI#VEN_1002&DEV_164E&SUBSYS_88771043&REV_C1#4&1ebe6a9c&0&0041#{064092b3-625e-43bf-9eb5-d
                          c845897dd59}\GPUPARAV
ValidPartitionCounts    : {32}
PartitionCount          : 32
TotalVRAM               : 1000000000
AvailableVRAM           : 1000000000
MinPartitionVRAM        : 0
MaxPartitionVRAM        : 1000000000
OptimalPartitionVRAM    : 1000000000
TotalEncode             : 18446744073709551615
AvailableEncode         : 18446744073709551615
MinPartitionEncode      : 0
MaxPartitionEncode      : 18446744073709551615
OptimalPartitionEncode  : 18446744073709551615
TotalDecode             : 1000000000
AvailableDecode         : 1000000000
MinPartitionDecode      : 0
MaxPartitionDecode      : 1000000000
OptimalPartitionDecode  : 1000000000
TotalCompute            : 1000000000
AvailableCompute        : 1000000000
MinPartitionCompute     : 0
MaxPartitionCompute     : 1000000000
OptimalPartitionCompute : 1000000000
CimSession              : CimSession: .
ComputerName            : DESKTOP-JIH348J
IsDeleted               : False

Name                    : \\?\PCI#VEN_1002&DEV_73AF&SUBSYS_04FE1043&REV_C0#6&3963d419&0&00000009#{064092b3-625e-43bf-9e
                          b5-dc845897dd59}\GPUPARAV
ValidPartitionCounts    : {32}
PartitionCount          : 32
TotalVRAM               : 1000000000
AvailableVRAM           : 1000000000
MinPartitionVRAM        : 0
MaxPartitionVRAM        : 1000000000
OptimalPartitionVRAM    : 1000000000
TotalEncode             : 18446744073709551615
AvailableEncode         : 18446744073709551615
MinPartitionEncode      : 0
MaxPartitionEncode      : 18446744073709551615
OptimalPartitionEncode  : 18446744073709551615
TotalDecode             : 1000000000
AvailableDecode         : 1000000000
MinPartitionDecode      : 0
MaxPartitionDecode      : 1000000000
OptimalPartitionDecode  : 1000000000
TotalCompute            : 1000000000
AvailableCompute        : 1000000000
MinPartitionCompute     : 0
MaxPartitionCompute     : 1000000000
OptimalPartitionCompute : 1000000000
CimSession              : CimSession: .
ComputerName            : DESKTOP-JIH348J
IsDeleted               : False
  1. Open "Device Manager" by going to Start -> Run -> devmgmt.msc
  2. Expand "Display adapters"
  3. Right click your GPU and click "Properties".
  4. Click "Details" and select "Device instance path" from the dropdown.

Compare that value with the name listed above until you find your card.

Since my monitor is connected directly to the dedicated card, I can disable it as follows (I already disabled it in my BIOS though so I'll only get one).

  1. Click start -> run -> devmgmt.msc.
  2. "Display adapters" -> Right click your integrated card (in my case it was the AMD Radeon(TM) Graphics) and "Disable device". Confirm any messages.

Re-running the command above now shows the following:

Name                    : \\?\PCI#VEN_1002&DEV_73AF&SUBSYS_04FE1043&REV_C0#6&3963d419&0&00000009#{064092b3-625e-43bf-9e
                          b5-dc845897dd59}\GPUPARAV
ValidPartitionCounts    : {32}
PartitionCount          : 32
TotalVRAM               : 1000000000
AvailableVRAM           : 1000000000
MinPartitionVRAM        : 0
MaxPartitionVRAM        : 1000000000
OptimalPartitionVRAM    : 1000000000
TotalEncode             : 18446744073709551615
AvailableEncode         : 18446744073709551615
MinPartitionEncode      : 0
MaxPartitionEncode      : 18446744073709551615
OptimalPartitionEncode  : 18446744073709551615
TotalDecode             : 1000000000
AvailableDecode         : 1000000000
MinPartitionDecode      : 0
MaxPartitionDecode      : 1000000000
OptimalPartitionDecode  : 1000000000
TotalCompute            : 1000000000
AvailableCompute        : 1000000000
MinPartitionCompute     : 0
MaxPartitionCompute     : 1000000000
OptimalPartitionCompute : 1000000000
CimSession              : CimSession: .
ComputerName            : DESKTOP-JIH348J
IsDeleted               : False

Perfect :).

Installing / Enabling Hyper-V

We first need to install Hyper-V. I've confirmed that Hyper-V can be installed/enabled in Windows 10 Pro without an internet connection. So you can try to do this right after you finish my Dark Island strategy if you are following that approach.

  1. Search for "Turn Windows features on and off" in the search and open it.
  2. Check "Hyper-V". Click Ok, and reboot your computer.

Hyper-V should now be installed.

Creating the Hyper-V VM

Now it's time to create the VM.

  1. Open Hyper-V Manager.
  2. Allow the VM to have internet:
    1. Right click the machine under "Hyper-V Manager", and click "Virtual Switch Manager"
    2. Click "New virtual network switch"
    3. External
    4. Click "Create Virtual Switch"
    5. Name the switch "External"
    6. Select the external adapter you'll be using if you have multiple. If you have one, the default should be fine.
    7. Make sure "Allow management operating system to share this network adapter" is "enabled".
    8. Click "Apply", "Yes", and then "Ok".
  3. Right click your machine again under "Hyper-V Manager", and click "Hyper-V Settings"
    1. Click "Enhanced Session Mode" on the left.
    2. Uncheck "Use enhanced session mode"
    3. Click "Apply" and "Ok".
  4. Now create your VM on the left by right clicking your machine and selecting "New" -> "Virtual Machine". Configure it as you wish and then click "Finish". When configuring pay attention to the following:
    1. Make sure that you select "Generation 2" when doing this or it won't work.
    2. Make sure to uncheck "Use Dynamic Memory for this virtual machine".
    3. Select your "External" switch when you get to your network configuration step.
    4. Select your Windows 10 ISO if you are installing from a bootable image file.
  5. Adjust the number of processors for your new VM.
    1. Right click your VM in the "Virtual Machines" section and click "Settings".
    2. Click "Processor" on the left and set the "Number of virtual processors" to what you want.
    3. Click "Checkpoints" on the left and uncheck "Enable checkpoints".
    4. Click "Apply" and then "Ok".
  6. Install Windows
    1. Double click the VM and click "Start".
    2. You'll need to press a key to boot from the image when it asks you to. It won't go into it automatically but rather it failed over to the "Start PXE over IPV4" mode and froze.

Partitioning the GPU

We first need to collect all the files that we want to use in the guest from the host. Make sure to update your graphic drivers to increase the probability of success (hopefully). Plus, it's annoying to update the files in the future so might as well do it once for now. To minimize the files we need to copy let's find out the files we need.

On the Host

Let's first create the following folders on your desktop with the following structure:

These folders will all be copied into the C:\Windows directory on the guest, later. The paths we care about will ultimately be:

Finding the driver files we need

  1. Open Device Manager.
  2. Click "Display adapters", right click your card (for me it's called AMD Radeon RX 6900 XT), and click "Properties".
  3. Click the "Driver" tab and click "Driver Details".

These are all the files we need. We'll be placing them into specific folders in a little bit. Notice that all of the files are called something like C:\.... If you scroll all the way to the bottom, you'll see some files that don't have a path starting with C:\, these files will be located in the FileRepository folder that we'll go to in a bit. These are the only files you need to copy from that location. It's not necessary to copy all of them. However, I've copied them all before and it didn't seem to cause an issue. In my case I only had one folder called u0394441.inf_amd64_57e767cb37419fb0 which is located in the FileRepository folder. Any FileRepository folders should be copied into the FileRepository folder inside your HostDriverStore directory.

Copying the driver files

Now let's copy all the files we saw above into the appropriate folder that we created earlier. This is how my file and folder hierarchy looked like after I copied them:

.
├── System32
│   ├── AMD
│   │   ├── amdfendr
│   │   │   ├── amdfendr.cat
│   │   │   ├── amdfendr.inf
│   │   │   ├── amdfendrmgr.sys
│   │   │   ├── amdfendrsr.ex_
│   │   │   └── amdfendr.sys
│   │   ├── amdkmpfd
│   │   │   ├── amdkmpfd.ctz
│   │   │   ├── amdkmpfd.itz
│   │   │   └── amdkmpfd.stz
│   │   ├── ANR
│   │   │   ├── AMDNoiseSuppression.exe
│   │   │   ├── anronnxlib.dll
│   │   │   ├── anrsvc.dll
│   │   │   ├── Default.anrcfg
│   │   │   ├── DirectML.dll
│   │   │   ├── onnxruntime.dll
│   │   │   ├── PMLN_model.onnx
│   │   │   ├── STLN_model.onnx
│   │   │   └── STLN_modelv2.onnx
│   │   ├── EeuDumps
│   │   │   ├── R-gpu-0-g6-c200-2023-7-23-15-18-50-172.log
│   │   │   ├── R-gpu-0-g6-c200-2023-7-23-16-19-54-203.log
│   │   │   ├── R-gpu-0-g6-c200-2023-7-25-10-31-13-964.log
│   │   │   ├── R-gpu-0-g6-c200-2023-7-25-12-0-15-687.log
│   │   │   ├── R-gpu-0-g6-c200-2023-8-20-16-5-14-402.log
│   │   │   ├── R-gpu-0-g6-c200-2023-8-20-16-9-28-994.log
│   │   │   ├── R-gpu-1-g6-c200-2023-7-22-22-58-42-369.log
│   │   │   ├── R-gpu-1-g6-c200-2023-7-23-15-38-7-858.log
│   │   │   ├── R-gpu-1-g6-c200-2023-7-23-16-24-14-764.log
│   │   │   ├── R-gpu-1-g6-c200-2023-7-25-10-31-13-964.log
│   │   │   ├── R-gpu-1-g6-c200-2023-7-25-12-0-15-687.log
│   │   │   ├── R-gpu-1-g6-c200-2023-8-18-22-13-11-388.log
│   │   │   ├── R-gpu-1-g6-c200-2023-8-18-22-38-30-263.log
│   │   │   └── R-gpu-1-g6-c200-2023-8-19-0-12-54-9.log
│   │   ├── MmdDumps
│   │   │   └── R-gpu-0-g4-c199-2023-8-18-21-8-43-398.log
│   │   ├── Persistent
│   │   └── Real
│   ├── amdadlx64.dll
│   ├── amdave64.dll
│   ├── amd_comgr.dll
│   ├── amdfendr.ctz
│   ├── amdfendr.itz
│   ├── amdfendrmgr.stz
│   ├── amdfendrsr.etz
│   ├── amdfendrsr.exe
│   ├── amdfendr.stz
│   ├── amdgfxinfo64.dll
│   ├── amdhip64.dll
│   ├── amdihk64.dll
│   ├── AMDKernelEvents.man
│   ├── amdlogum.exe
│   ├── amdlvr64.dll
│   ├── amdmiracast.dll
│   ├── amdmmcl6.dll
│   ├── amdmmcl.dll
│   ├── amdpcom64.dll
│   ├── amdsacli64.dll
│   ├── amdsasrv64.dll
│   ├── amdsmi.exe
│   ├── amdxc64.dll
│   ├── amdxc64.so
│   ├── amf-mft-mjpeg-decoder64.dll
│   ├── amfrt64.dll
│   ├── ati2erec.dll
│   ├── atiadlxx.dll
│   ├── atiapfxx.blb
│   ├── aticfx64.dll
│   ├── atidemgy.dll
│   ├── atidxx64.dll
│   ├── atieah64.exe
│   ├── atieclxx.exe
│   ├── atig6txx.dll
│   ├── atimpc64.dll
│   ├── atimuixx.dll
│   ├── atisamu64.dll
│   ├── atiumd6a.cap
│   ├── ativvsva.dat
│   ├── ativvsvl.dat
│   ├── detoured.dll
│   ├── EEURestart.exe
│   ├── GameManager64.dll
│   ├── hiprt0200064.dll
│   ├── hiprt02000_amd.hipfb
│   ├── hiprt02000_nv.fatbin
│   ├── HostDriverStore
│   │   └── FileRepository
│   │       └── u0394441.inf_amd64_57e767cb37419fb0
│   │           ├── B394106
│   │           │   ├── amdadlx32.dll
│   │           │   ├── amdadlx64.dll
│   │           │   ├── AMDav1Enc32.dll
│   │           │   ├── AMDav1Enc64.dll
│   │           │   ├── amdave32.dll
│   │           │   ├── amdave64.dll
│   │           │   ├── amde31a.dat
│   │           │   ├── amde34a.dat
│   │           │   ├── amde34b.dat
│   │           │   ├── amde40a.dat
│   │           │   ├── amdefctb.dat
│   │           │   ├── amdenc32.dll
│   │           │   ├── amdenc64.dll
│   │           │   ├── amdept.dat
│   │           │   ├── amdgfxinfo32.dll
│   │           │   ├── amdgfxinfo64.dll
│   │           │   ├── AMDh264Enc32.dll
│   │           │   ├── AMDh264Enc64.dll
│   │           │   ├── AMDh265Enc32.dll
│   │           │   ├── AMDh265Enc64.dll
│   │           │   ├── amdhdl32.dll
│   │           │   ├── amdhdl64.dll
│   │           │   ├── AMDhwDecoder_32.dll
│   │           │   ├── AMDhwDecoder_64.dll
│   │           │   ├── amdicdxx.dat
│   │           │   ├── amdihk32.dll
│   │           │   ├── amdihk64.dll
│   │           │   ├── AMDKernelEvents.mc
│   │           │   ├── amdkmdag.sys
│   │           │   ├── amdkmpfd.ctz
│   │           │   ├── amdkmpfd.itz
│   │           │   ├── amdkmpfd.stz
│   │           │   ├── amdlvr32.dll
│   │           │   ├── amdlvr64.dll
│   │           │   ├── amdmantle32.dll
│   │           │   ├── amdmantle64.dll
│   │           │   ├── amdmiracast.dll
│   │           │   ├── amdpcom32.dll
│   │           │   ├── amdpcom64.dll
│   │           │   ├── amdsacli32.dll
│   │           │   ├── amdsacli64.dll
│   │           │   ├── amdsasrv64.dll
│   │           │   ├── amdsmi.exe
│   │           │   ├── amduve32.dll
│   │           │   ├── amduve64.dll
│   │           │   ├── amdvlk32.dll
│   │           │   ├── amdvlk64.dll
│   │           │   ├── amd-vulkan32.json
│   │           │   ├── amd-vulkan64.json
│   │           │   ├── amdxc32.dll
│   │           │   ├── amdxc64.dll
│   │           │   ├── amdxc64.so
│   │           │   ├── amdxcstub32.dll
│   │           │   ├── amdxcstub64.dll
│   │           │   ├── amdxn32.dll
│   │           │   ├── amdxn64.dll
│   │           │   ├── amdxx32.dll
│   │           │   ├── amdxx64.dll
│   │           │   ├── amf-mft-mjpeg-decoder32.dll
│   │           │   ├── amf-mft-mjpeg-decoder64.dll
│   │           │   ├── amf-pa-ml32.dll
│   │           │   ├── amf-pa-ml64.dll
│   │           │   ├── amfrt32.dll
│   │           │   ├── amfrt64.dll
│   │           │   ├── amfrtdrv32.dll
│   │           │   ├── amfrtdrv64.dll
│   │           │   ├── ati2erec.dll
│   │           │   ├── atiadlxx.dll
│   │           │   ├── atiadlxy.dll
│   │           │   ├── atiapfxx.blb
│   │           │   ├── aticfx32.dll
│   │           │   ├── aticfx64.dll
│   │           │   ├── aticfxstub32.dll
│   │           │   ├── aticfxstub64.dll
│   │           │   ├── atidemgy.dll
│   │           │   ├── atidmcub_0.dat
│   │           │   ├── atidmcub_2.dat
│   │           │   ├── atidxx32.dll
│   │           │   ├── atidxx64.dll
│   │           │   ├── atidxxstub32.dll
│   │           │   ├── atidxxstub64.dll
│   │           │   ├── atieah32.exe
│   │           │   ├── atieah64.exe
│   │           │   ├── atieclxx.exe
│   │           │   ├── atiesrxx.exe
│   │           │   ├── atig6pxx.dll
│   │           │   ├── atig6txx.dll
│   │           │   ├── atigktxx.dll
│   │           │   ├── atiglpxx.dll
│   │           │   ├── atiicdxx.dat
│   │           │   ├── atimpc32.dll
│   │           │   ├── atimpc64.dll
│   │           │   ├── atimuixx.dll
│   │           │   ├── atio6axx.dll
│   │           │   ├── atioglxx.dll
│   │           │   ├── atisamu32.dll
│   │           │   ├── atisamu64.dll
│   │           │   ├── atiu9p64.dll
│   │           │   ├── atiu9pag.dll
│   │           │   ├── atiumd64.dll
│   │           │   ├── atiumd6a.cap
│   │           │   ├── atiumd6a.dll
│   │           │   ├── atiumdag.dll
│   │           │   ├── atiumdva.cap
│   │           │   ├── atiumdva.dll
│   │           │   ├── atiuxp64.dll
│   │           │   ├── atiuxpag.dll
│   │           │   ├── ativce02.dat
│   │           │   ├── ativce03.dat
│   │           │   ├── ativvaxy_cik.dat
│   │           │   ├── ativvaxy_cik_nd.dat
│   │           │   ├── ativvaxy_cz_nd.dat
│   │           │   ├── ativvaxy_el_nd.dat
│   │           │   ├── ativvaxy_FJ.dat
│   │           │   ├── ativvaxy_FJ_nd.dat
│   │           │   ├── ativvaxy_gl_nd.dat
│   │           │   ├── ativvaxy_nv.dat
│   │           │   ├── ativvaxy_rv.dat
│   │           │   ├── ativvaxy_stn_nd.dat
│   │           │   ├── ativvaxy_vcn3_1.dat
│   │           │   ├── ativvaxy_vcn3.dat
│   │           │   ├── ativvaxy_vcn4.dat
│   │           │   ├── ativvaxy_vg20.dat
│   │           │   ├── ativvaxy_vg20_nd.dat
│   │           │   ├── ativvaxy_vi.dat
│   │           │   ├── ativvaxy_vi_nd.dat
│   │           │   ├── ativvsva.dat
│   │           │   ├── ativvsvl.dat
│   │           │   ├── detoured32.dll
│   │           │   ├── detoured64.dll
│   │           │   ├── EEURestart.exe
│   │           │   ├── featuresync.dll
│   │           │   ├── GameManager32.dll
│   │           │   ├── GameManager64.dll
│   │           │   ├── H9_EASU_sx1_10_sy1_10.bin
│   │           │   ├── H9_EASU_sx1_20_sy1_20.bin
│   │           │   ├── H9_EASU_sx1_30_sy1_30.bin
│   │           │   ├── H9_EASU_sx1_40_sy1_40.bin
│   │           │   ├── H9_EASU_sx1_50_sy1_50.bin
│   │           │   ├── H9_EASU_sx1_60_sy1_60.bin
│   │           │   ├── H9_EASU_sx1_70_sy1_70.bin
│   │           │   ├── H9_EASU_sx1_80_sy1_80.bin
│   │           │   ├── H9_EASU_sx1_90_sy1_90.bin
│   │           │   ├── H9_EASU_sx2_00_sy2_00.bin
│   │           │   ├── hiprt0200064.dll
│   │           │   ├── hiprt02000_amd.hipfb
│   │           │   ├── hiprt02000_nv.fatbin
│   │           │   ├── kapp_ci.sbin
│   │           │   ├── kapp_si.sbin
│   │           │   ├── libamdenc64.so
│   │           │   ├── libsmi_guest.dll
│   │           │   ├── libsmi_host.dll
│   │           │   ├── mantle32.dll
│   │           │   ├── mantle64.dll
│   │           │   ├── mantleaxl32.dll
│   │           │   ├── mantleaxl64.dll
│   │           │   ├── oro_compiled_kernels.fatbin
│   │           │   ├── oro_compiled_kernels.hipfb
│   │           │   ├── samu_krnl_ci.sbin
│   │           │   ├── samu_krnl_isv_ci.sbin
│   │           │   ├── vulkan32.dll
│   │           │   ├── vulkan64.dll
│   │           │   ├── vulkaninfo32.exe
│   │           │   └── vulkaninfo64.exe
│   │           ├── u0394441.cat
│   │           └── U0394441.INF
│   ├── kapp_ci.sbin
│   ├── kapp_si.sbin
│   ├── mantle64.dll
│   ├── mantleaxl64.dll
│   ├── oro_compiled_kernels.fatbin
│   ├── oro_compiled_kernels.hipfb
│   ├── samu_krnl_ci.sbin
│   ├── samu_krnl_isv_ci.sbin
│   ├── vulkan-1-999-0-0-0.dll
│   ├── vulkan-1.dll
│   ├── vulkaninfo-1-999-0-0-0.exe
│   └── vulkaninfo.exe
└── SysWOW64
    ├── amdadlx32.dll
    ├── amdave32.dll
    ├── amd_comgr32.dll
    ├── amdgfxinfo32.dll
    ├── amdihk32.dll
    ├── amdlvr32.dll
    ├── amdpcom32.dll
    ├── amdsacli32.dll
    ├── amdxc32.dll
    ├── amf-mft-mjpeg-decoder32.dll
    ├── amfrt32.dll
    ├── atiadlxx.dll
    ├── atiadlxy.dll
    ├── atiapfxx.blb
    ├── aticfx32.dll
    ├── atidxx32.dll
    ├── atieah32.exe
    ├── atigktxx.dll
    ├── atimpc32.dll
    ├── atisamu32.dll
    ├── atiumdva.cap
    ├── ativvsva.dat
    ├── ativvsvl.dat
    ├── detoured.dll
    ├── GameManager32.dll
    ├── mantle32.dll
    ├── mantleaxl32.dll
    ├── vulkan-1-999-0-0-0.dll
    ├── vulkan-1.dll
    ├── vulkaninfo-1-999-0-0-0.exe
    └── vulkaninfo.exe

14 directories, 288 files

After that we need to get those folders into the VM. I'll be using my LAN network to do it. Once you've copied those files over to your guest (I will assume you've placed the folders in your guest's Desktop), you can continue.

On the Guest

  1. Go to C:\Windows
  2. Copy all the files in your Desktop's System32 folder to C:\Windows\System32.
  3. Copy all the files in your Desktop's SysWOW64 folder to C:\Windows\SysWOW64.
  4. Copy the HostDriverStore folder on your Desktop to C:\Windows\System32.
  5. Shutdown the VM.

On the Host

  1. Open PowerShell ISE as Administrator.

  2. If you don't see the white script editor on the top, them you need to click the little circular down arrow at the top right of the center panel, you should see a Script label next to the circular arrow.

  3. Enable your system to run powershell scripts by typing the following in the command window (the dark blue window), not the script window (white window): Set-ExecutionPolicy Unrestricted, and click Yes to all.

  4. Paste the following into the script box.

    $vm = "gaming"
    
    Remove-VMGpuPartitionAdapter -VMName $vm
    Add-VMGpuPartitionAdapter -VMName $vm
    Set-VMGpuPartitionAdapter -VMName $vm -MinPartitionVRAM 80000000 -MaxPartitionVRAM 100000000 -OptimalPartitionVRAM 100000000 -MinPartitionEncode 80000000 -MaxPartitionEncode 100000000 -OptimalPartitionEncode 100000000 -MinPartitionDecode 80000000 -MaxPartitionDecode 100000000 -OptimalPartitionDecode 100000000 -MinPartitionCompute 80000000 -MaxPartitionCompute 100000000 -OptimalPartitionCompute 100000000
    
    Set-VM -GuestControlledCacheTypes $true -VMName $vm
    Set-VM -LowMemoryMappedIoSpace 1Gb -VMName $vm
    Set-VM –HighMemoryMappedIoSpace 32GB –VMName $vm
  5. Rename the "gaming" value to what you called your VM.

  6. Click the green play button at the top to run and you are done! Ignore any errors related to Unable to find a Gpu partition adapter matching the given criteria. This is expected if this is your first time running this script.

Now let's test:

  1. Boot up the VM.
  2. Open "Device Manager" (devmgmt.msc)
  3. Click "Display adapters"

You should see your video card now available with no errors. If you do see a warning sign, it is most likely Code43 which means there are some files missing. You'll need to find those and copy them into the VM like we did earlier.

References