VMware SVGA Device Developer Kit
The VMware SVGA II device is the virtual graphics card implemented by all VMware virtualization products. If you're running a virtual machine using VMware Workstation, Fusion, Player, or ESX, this is the graphics card that your virtual machine sees.
This graphics card doesn't look quite like any physical graphics card that exists. In many ways it resembles a physical device, but in other ways its programming model has been idealized or otherwise modified to make it easier to emulate.
VMware's desktop virtualization products (Fusion, Workstation, Player) can use your machine's physical graphics hardware to implement acceleration for the VMware SVGA device. Currently it supports a small amount of 2D acceleration, cursor acceleration, video overlay support, and 3D graphics with Shader Model 2.0. All of this acceleration is provided via a virtualized graphics interface, so the same drivers in the VM work regardless of what physical graphics card, if any, is physically available.
This project is a package of developer-oriented documentation for the details of this virtualized graphics interface. It consists of some basic documentation, as well as a package of example programs which demonstrate how to draw 2D and 3D graphics inside a virtual machine. These examples run on the (virtual) bare metal, without any OS or any other graphics driver loaded.
This package is provided for educational purposes, and for people who are developing 3D drivers. It may be especially interesting to hobbyist OS authors, or developers who want to experiment with low-level 3D graphics without the complexity of a physical GPU's programming interface.
This code won't help you if you're writing normal user-level apps that you'd like to run inside a virtual machine. It's for driver authors, and it assumes a reasonable amount of prior knowledge about graphics hardware.
Binaries are included if you just want to try out the examples. To compile the code yourself, you'll need a few basic open source tools:
- A recent version of GCC and binutils.
I use GCC 4.2 (Older versions may require tweaking the Makefile.rules file slightly.)
- GNU Make
To run the examples, you'll need a recent version of VMware Workstation, Fusion, or the free VMware Player. Some of the examples will work on older versions, but Workstation 6.5.x or Fusion 2.0.x is strongly recommended.
- VMware SVGA Device Interface and Programming Model
- GPU Virtualization on VMware's Hosted I/O Architecture (PDF)
- Browse the whole repository
Development takes place in a Git repository hosted by Sourceforge:
git clone git://vmware-svga.git.sourceforge.net/gitroot/vmware-svga/vmware-svga
This project is provided as-is, with no official support from VMware. However, I will try to answer questions as time permits. If you have questions or you'd like to submit a patch, feel free to email me at: jfonseca at vmware.com