A lightweight GPU switching utility for Windows
A tiny Windows tray utility that activates the discrete GPU (dGPU), with zero CPU usage and no background threads.
Designed for hybrid GPU laptops with NVIDIA Advanced Optimus where you want the dGPU ready without running a heavy application and without configuring every app manually through the driver control panel.
Please let me know if this also works for non-Nvidia display adapters.
- Windows 10 or 11 (64‑bit)
- Designed and tested for NVIDIA Advanced Optimus capable laptops, but this should work for any hybrid system with a MUX switch supporting on-the-fly dGPU display switching
- D3D11‑capable discrete GPU
-
Run
GPU-Switcher.exe -
Open NVIDIA Control Panel
-
Go to Manage 3D settings → Program Settings
-
Add
GPU-Switcher.exe -
Set Preferred graphics processor → High‑performance NVIDIA processor
-
Enable Automatic display switching
-
Exit and relaunch
GPU-Switcher.exe
After this, GPU‑Switcher will consistently trigger a dGPU display switch on launch. Right-click on the tray icon to access extra options.
Left‑click to see current status.
Right‑click for options:
- Start with Windows — toggle a
HKCU\...\Runregistry entry - Restart Display Adapters — perform a ful reset of all display adapters and exit the program → requires UAC
- Exit — release the GPU and remove the tray icon
On startup, GPU‑Switcher:
- Exports GPU driver hints (
NvOptimusEnablement,AmdPowerXpressRequestHighPerformance) - Creates a persistent D3D11 device on the adapter with the most dedicated VRAM
- Sits in the system tray with zero CPU usage.
Exiting releases the D3D device and the driver returns to normal routing.
| System | Behaviour |
|---|---|
| NVIDIA Advanced Optimus | Everything should work |
| Standard Optimus (no MUX) | dGPU will activate but display switch is not available |
| AMD hybrid | Driver hint is sent; behaviour may vary by OEM |
Requires CMake 3.20+ and Visual Studio / MSVC with Windows SDK.
cmake -B build
cmake --build build --config Release
Display switching requires a one‑time NVCP profile GPU‑Switcher does not switch the display on its own. It registers with the NVIDIA driver, which then triggers switching based on your NVCP profile. Without the profile configured, the app has no effect on display routing.
The display switch happens at process load, not at runtime
The driver hints (NvOptimusEnablement) are read once when the process starts. There is no way to trigger or cancel the switch after launch without restarting the app.
Standard Optimus (no MUX switch) cannot switch the display On most non-Advanced-Optimus laptops, the iGPU is hardwired to the display panel. GPU‑Switcher will still register the dGPU with the driver and make it visible in NVCP, but no display switch will occur regardless of settings.
The tray icon does not reflect which GPU is currently driving the display Reliably detecting the active display GPU via DXGI is not possible on Optimus systems — the NVIDIA adapter is always reported regardless of actual display routing. The icon is static by design.
Rendering stutters after a display switch On some systems, switching display output between GPUs leaves the driver in a partially initialized state and causes rendering stutters. Use Restart Display Adapters from the tray menu to resolve this without rebooting.
"Restart Display Adapters" closes the app Re‑triggering automatic display switching requires a fresh process load, so the app exits. Relaunch manually, or enable "Start with Windows" and log out/in.
Sleep and wake The app handles sleep/wake cycles by releasing and re‑acquiring the D3D device on resume. This re‑registers the process with the driver. Whether the display switch re‑triggers on resume depends on your system's driver behaviour and is not guaranteed.
AMD hybrid systems
The AmdPowerXpressRequestHighPerformance hint is exported and will be read by AMD drivers, but display switching behaviour on AMD hybrid systems has not been tested and may vary by OEM and driver versions.
UAC prompt required The app runs almost entirely in user space. The only exception is the Restart Display Adapters feature, which performs a full graphics driver reload. Restarting display adapters requires elevated privileges, so Windows will show a UAC prompt when this option is selected.
Error logging
A log file (gpu_switcher.log, capped at 10 KB) is only created if something goes wrong. No file is written during normal operation.
MIT — do whatever you want, just link back to the original.