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.
-
Dynamic status icon:
- 🟢 Green: Active NVIDIA discrete GPU
- 🔴 Red: Active AMD discrete GPU
- 🔵 Blue: Active Intel discrete GPU
- ⚪ Grey: Other / Unknown adapter
- 🟡 Yellow: Reset in progress or dGPU acquisition warning
-
Left‑click: Displays active GPU model and health status balloon.
-
Hover: Shows current adapter name and status in the tooltip.
-
Right‑click for options:
- Start with Windows — toggle a
HKCU\...\Runregistry entry - Restart Display Adapters — safely cycles all physical display adapters and automatically re-launches GPU-Switcher → requires UAC
- Exit — cleanly releases the GPU context and removes the tray icon
- Start with Windows — toggle a
| Option | Description |
|---|---|
| (none) | Launches the tray utility. If an instance is already running, highlights the active instance in the tray. |
--exit / --quit |
Gracefully closes the running GPU-Switcher instance. |
--help / -h |
Shows usage instructions and available flags. |
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 reflects the acquired dGPU adapter and vendor The tray icon reflects whether a discrete GPU is successfully acquired and running (with vendor color coding) and warns if the device is lost or removed. Note that detecting internal MUX display panel routing via DXGI is not supported by Optimus architecture, so the icon reflects the acquired DirectX device state rather than display panel muxing.
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" automatically re-launches the app Re-triggering display switching and refreshing adapter state requires cycling the physical graphics devices and reloading. GPU-Switcher safely performs this cycle in an elevated helper, filters out virtual adapters, waits for driver initialization, and automatically re-launches the user tray instance when completed.
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.
Logging
A rolling log file (%LOCALAPPDATA%\GPU-Switcher\gpu_switcher.log, capped at 16 KB) records adapter detection, reset operations, and any errors.
MIT — do whatever you want, just link back to the original.