David Airlie publicly announced plans today for his new Virgil project, a virtual GPU capable of 3D acceleration for QEMU. Guest OpenGL (and potentially Direct3D) commands from the virtualized KVM/QEMU guest are passed onto the host for hardware acceleration.
VMware and Oracle VM VirtualBox for years have offered 3D guest acceleration support whereby guest VMs can install a virtual graphics driver that can pass the 3D drawing commands onto the host system for processing by its graphics driver and hardware. KVM/QEMU meanwhile has sorely missed such support. In the age where most Linux desktop environments now expect OpenGL acceleration to be present, Red Hat is stepping in and working out a solution.
Last month I wrote that Red Hat was working on QEMU 3D support
and now it's been officially announced by Airlie though it's still considered an experimental project and far from being ready for end-users or even enthusiasts.
Red Hat has been working on "Virgil" for a few months. The project comes down to a 3D-capable virtual CPU for QEMU that can be used by Linux and eventually Windows with OpenGL/Direct3D support. Virgil uses an interface based on Gallium3D and its TGSI representation while using VirtIO to communicate between the guest and host.
This driver model is implemented directly on OpenGL so as long as the host has an OpenGL driver and GPU, it should work, and doesn't require a Gallium3D driver to the host. The driver stack consists of the QEMU DRM driver, an X.Org DDX driver, and Mesa Gallium3D driver.
The research project can currently run some 3D applications (including the OpenArena game) as well as the GNOME Shell, but David says by no means is this ready for end-user testing -- even by enthusiasts or for benchmarking. He's only announcing the project now in hopes of recruiting more interested developers. Right now there is no Windows guest support or Direct3D handling, but that is expected to change in the future. There's also not yet any remote rendering support.
For more details on the Virgil project, see David's blog post
and the GitHub project area