GPU paravirtualization for Windows guests on Windows hosts - bringing QEMU/KVM-style VM customization freedom to Windows while providing GPU acceleration for gaming.
On Linux, QEMU/KVM + VFIO gives you:
- โ Full VM identity customization (SMBIOS, CPUID, firmware)
- โ GPU passthrough for near-native gaming performance
On Windows, your options are limited:
- Hyper-V/NanaBox: GPU-PV works, but no identity customization
- QEMU with WHPX: Full customization, but no GPU acceleration for Windows guests
- VMware/Parallels: Proprietary, limited customization
PVGPU bridges this gap - run Windows VMs with QEMU's customization AND GPU acceleration, all on a Windows host.
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Windows Guest (10/11) โ
โ โโโ Game/App (DX11) โ WDDM Paravirt Driver (KMD + UMD) โ
โ โ โ
โ โผ Shared Memory (Command Rings + Fences) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ QEMU (WHPX acceleration) โ
โ โโโ qemu-pvgpu device (PCIe virtual, BAR0 config, BAR2 shmem) โ
โ โ โ
โ โผ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Host Backend Service (Rust) โ
โ โโโ D3D11 Renderer โ Real GPU (NVIDIA/AMD) โ
โ โโโ Presentation: Local window + Headless/Streaming โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
| Component | Language | Description |
|---|---|---|
protocol/ |
C | Shared protocol definitions |
qemu-device/ |
C | QEMU PCIe device emulation |
backend/ |
Rust | Host rendering service (D3D11) |
driver/kmd/ |
C | Windows kernel-mode WDDM driver |
driver/umd/ |
C++ | Windows user-mode D3D11 driver |
- Windows 11 with Hyper-V/WHPX enabled
- NVIDIA (10 series+) or AMD (RDNA+) GPU
- Rust (for backend)
- QEMU with WHPX support
- Windows Driver Kit (for driver development)
# Build the backend service
cd backend
cargo build --release
# For QEMU device - see qemu-device/README.md
# For drivers - see driver/README.md# Start the backend service
.\backend\target\release\pvgpu-backend.exe
# Start QEMU with pvgpu device
qemu-system-x86_64 -accel whpx -device pvgpu,shmem_size=256M ...- Gaming in VMs with GPU acceleration AND custom VM identity
- Anti-fingerprinting - appear as different hardware to guest OS
- Development/Testing - test on various "hardware" configurations
- Streaming - works with Parsec, Moonlight, Sunshine
- Target: 60-80% of native GPU performance
- Latency: <50ms additional input latency
- API: DirectX 11 (DX12 planned for future)
- Protocol definition (shared header, command types, feature flags)
- QEMU PCIe device (BAR0 config, BAR2 shared memory, MSI-X, named pipe IPC)
- Rust backend service (D3D11 renderer, command processor, presentation pipeline)
- Full D3D11 command implementation (50+ DDI functions, all draw/state/resource commands)
- WDDM kernel-mode driver (BAR mapping, ring buffer, heap allocator, VidPn, interrupt handler)
- WDDM user-mode driver (D3D11 DDI, staging buffer, fence sync, compute shader support)
- Display mode support (720p-4K, 60-144Hz, dynamic resolution change)
- Presentation pipeline (windowed, headless, dual mode, VSync, frame events)
- Format support data (78 DXGI formats with capability flags)
- Shared resource opening (cross-process resource sharing)
- Compute shader support (CS dispatch, UAV, SRV, sampler, constant buffer binding)
- Error handling and robustness (device lost, OOM, shader errors, backend crash)
- Driver packaging (INF, WDK build configs, CI pipeline)
- Integration testing (requires VM environment)
- Performance optimization (profiling, command batching, telemetry)
- DX12 support (future)
Contributions are welcome! This is an ambitious project that needs help with:
- D3D11/D3D12 expertise
- Windows driver development
- QEMU device development
- Testing on various hardware
See CONTRIBUTING.md for guidelines.
Dual-licensed under MIT and Apache 2.0. See LICENSE-MIT and LICENSE-APACHE.
QEMU device code is GPL-2.0-or-later to match QEMU's license.
Inspired by:
- dxgkrnl - GPU-PV for WSL2
- virtio-gpu - QEMU's GPU virtualization
- Looking Glass - Low-latency VM display
This project is for legitimate use cases like development, testing, and privacy. It is not intended for bypassing anti-cheat systems or any malicious purposes.