Graphics pipeline from Windows VM(guest) to physical GPU on the host
- Render Graphics on Guest Windows VM from physical GPU on host.
|
UMD(User Mode Driver) Developer writes the Application using openGL APIs(old styled) or using modern apps(using Direct 3D/12) APIs Zink(from Mesa) for openGL & DX12 Translator for Direct3D/12 are used for translation of commands to Vulkan Vulkan ICD converts vulkan commands to serilization stream Venus Client serialized the commands to venus protocol stream KMD(Kernel Mode Driver) WDDM Miniport: Venus stream reaches kernel mode in Guest VM. Venus stream reaches VirtIO GPU via scheduler & resource manager Hypervisor: QEMU recieves the venus stream. Provides shared memory rings(virtqueues) for rendering Host OS: Virglrenderer: This is loaded by QEMU. Provides 2 main rendering backends(1. Virgl(for OpenGL virtulization), 2. Venus (for Vulkan virtualization)) Vulkan: This is graphics most recent rendering library provided by Khronos Group |
This flow can be refined
| From Guest VM to Host | Host to Guest VM |
|---|---|
|
|
Pipeline Stages
Terms: VirtIO, openGL, Vulkan
| Stage | Process | Runs inside |
|---|---|---|
| 1. Convert Windows Direct3D/OpenGL commands into Vulkan commands |
|
guest Windows VM (user space) |
| 2. Vulkan commands stream to binary stream for the hypervisor |
|
guest Windows VM (user space) |
| 3. Deliver stream to host |
|
Host OS |