Skip to the content.

GPU acceleration on Android — the venus deep dive

Haven runs guest Linux GL/Vulkan apps on the phone’s real Mali GPU from inside a proot cage, with no /dev/dri and no kernel virtio-gpu device. This is the detailed engineering record, extracted from VISION.md to keep the vision readable: the one-paragraph summary lives there, the full trail lives here.

The arc. Guest Mesa in a proot cage can’t reach Mali (the render node is denied to the app uid), so the only GPU path is Android’s own EGL/Vulkan loader. Haven host-brokers a renderer — virgl_test_server, and for modern GL a venus + Mesa-zink stack — holding a real GPU context in Haven’s Android process, with the guest’s Mesa pointed at it over a socket. What ships today: GL 2.1 over virgl, native-Vulkan windowed present, and (opt-in behind gpu_use_venus) windowed GL 3.2 via zink-on-venus, static and geometry-animating, flicker-free over the wl_shm cage. Below is every wall hit and cleared on the way — R1 through R8 — each device-verified on a Pixel 8 Pro (Mali-G715).

The record