| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
| <html lang="en"> |
| <head> |
| <meta http-equiv="content-type" content="text/html; charset=utf-8"> |
| <title>VMware guest GL driver</title> |
| <link rel="stylesheet" type="text/css" href="mesa.css"> |
| </head> |
| <body> |
| |
| <div class="header"> |
| <h1>The Mesa 3D Graphics Library</h1> |
| </div> |
| |
| <iframe src="contents.html"></iframe> |
| <div class="content"> |
| |
| <h1>VMware guest GL driver</h1> |
| |
| <p> |
| This page describes how to build, install and use the |
| <a href="https://www.vmware.com/">VMware</a> guest GL driver |
| (aka the SVGA or SVGA3D driver) for Linux using the latest source code. |
| This driver gives a Linux virtual machine access to the host's GPU for |
| hardware-accelerated 3D. |
| VMware Workstation running on Linux or Windows and VMware Fusion running on |
| MacOS are all supported. |
| </p> |
| |
| <p> |
| With the August 2015 Workstation 12 / Fusion 8 releases, OpenGL 3.3 |
| is supported in the guest. |
| This requires: |
| <ul> |
| <li>The VM is configured for virtual hardware version 12. |
| <li>The host OS, GPU and graphics driver supports DX11 (Windows) or |
| OpenGL 4.0 (Linux, Mac) |
| <li>On Linux, the vmwgfx kernel module must be version 2.9.0 or later. |
| <li>A recent version of Mesa with the updated svga gallium driver. |
| </ul> |
| </p> |
| |
| <p> |
| Otherwise, OpenGL 2.1 is supported. |
| </p> |
| |
| <p> |
| OpenGL 3.3 support can be disabled by setting the environment variable |
| SVGA_VGPU10=0. |
| You will then have OpenGL 2.1 support. |
| This may be useful to work around application bugs (such as incorrect use |
| of the OpenGL 3.x core profile). |
| </p> |
| |
| <p> |
| Most modern Linux distros include the SVGA3D driver so end users shouldn't |
| be concerned with this information. |
| But if your distro lacks the driver or you want to update to the latest code |
| these instructions explain what to do. |
| </p> |
| |
| <p> |
| For more information about the X components see these wiki pages at x.org: |
| </p> |
| <ul> |
| <li><a href="https://wiki.x.org/wiki/vmware"> |
| Driver Overview</a> |
| <li><a href="https://wiki.x.org/wiki/vmware/vmware3D"> |
| xf86-video-vmware Details</a> |
| </ul> |
| |
| |
| <h2>Components</h2> |
| |
| The components involved in this include: |
| <ul> |
| <li>Linux kernel module: vmwgfx |
| <li>X server 2D driver: xf86-video-vmware |
| <li>User-space libdrm library |
| <li>Mesa/gallium OpenGL driver: "svga" |
| </ul> |
| |
| <p> |
| All of these components reside in the guest Linux virtual machine. |
| On the host, all you're doing is running VMware |
| <a href="https://www.vmware.com/products/workstation/">Workstation</a> or |
| <a href="https://www.vmware.com/products/fusion/">Fusion</a>. |
| </p> |
| |
| |
| <h2>Prerequisites</h2> |
| |
| <ul> |
| <li>Kernel version at least 2.6.25 |
| <li>Xserver version at least 1.7 |
| <li>Ubuntu: For ubuntu you need to install a number of build dependencies. |
| <pre> |
| sudo apt-get install git-core |
| sudo apt-get install automake libtool libpthread-stubs0-dev |
| sudo apt-get install xserver-xorg-dev x11proto-xinerama-dev libx11-xcb-dev |
| sudo apt-get install libxcb-glx0-dev libxrender-dev |
| sudo apt-get build-dep libgl1-mesa-dri libxcb-glx0-dev |
| </pre> |
| <li>Fedora: For Fedora you also need to install a number of build dependencies. |
| <pre> |
| sudo yum install mesa-libGL-devel xorg-x11-server-devel xorg-x11-util-macros |
| sudo yum install libXrender-devel.i686 |
| sudo yum install automake gcc libtool expat-devel kernel-devel git-core |
| sudo yum install makedepend flex bison |
| </pre> |
| </ul> |
| |
| <p> |
| Depending on your Linux distro, other packages may be needed. |
| The configure scripts should tell you what's missing. |
| </p> |
| |
| |
| |
| <h2>Getting the Latest Source Code</h2> |
| |
| Begin by saving your current directory location: |
| <pre> |
| export TOP=$PWD |
| </pre> |
| |
| <ul> |
| <li>Mesa/Gallium master branch. This code is used to build libGL, and the direct rendering svga driver for libGL, vmwgfx_dri.so, and the X acceleration library libxatracker.so.x.x.x. |
| <pre> |
| git clone git://anongit.freedesktop.org/git/mesa/mesa |
| </pre> |
| <li>VMware Linux guest kernel module. Note that this repo contains the complete DRM and TTM code. The vmware-specific driver is really only the files prefixed with vmwgfx. |
| <pre> |
| git clone git://anongit.freedesktop.org/git/mesa/vmwgfx |
| </pre> |
| <li>libdrm, a user-space library that interfaces with drm. |
| Most distros ship with this but it's safest to install a newer version. |
| To get the latest code from git: |
| <pre> |
| git clone git://anongit.freedesktop.org/git/mesa/drm |
| </pre> |
| <li>xf86-video-vmware. The chainloading driver, vmware_drv.so, the legacy driver vmwlegacy_drv.so, and the vmwgfx driver vmwgfx_drv.so. |
| <pre> |
| git clone git://anongit.freedesktop.org/git/xorg/driver/xf86-video-vmware |
| </pre> |
| </ul> |
| |
| |
| <h2>Building the Code</h2> |
| |
| <ul> |
| <li> |
| Determine where the GL-related libraries reside on your system and set |
| the LIBDIR environment variable accordingly. |
| <br><br> |
| For 32-bit Ubuntu systems: |
| <pre> |
| export LIBDIR=/usr/lib/i386-linux-gnu |
| </pre> |
| For 64-bit Ubuntu systems: |
| <pre> |
| export LIBDIR=/usr/lib/x86_64-linux-gnu |
| </pre> |
| For 32-bit Fedora systems: |
| <pre> |
| export LIBDIR=/usr/lib |
| </pre> |
| For 64-bit Fedora systems: |
| <pre> |
| export LIBDIR=/usr/lib64 |
| </pre> |
| |
| </li> |
| |
| <li>Build libdrm: |
| <pre> |
| cd $TOP/drm |
| ./autogen.sh --prefix=/usr --libdir=${LIBDIR} |
| make |
| sudo make install |
| </pre> |
| <li>Build Mesa and the vmwgfx_dri.so driver, the vmwgfx_drv.so xorg driver, the X acceleration library libxatracker. |
| The vmwgfx_dri.so is used by the OpenGL libraries during direct rendering, |
| and by the Xorg server during accelerated indirect GL rendering. |
| The libxatracker library is used exclusively by the X server to do render, |
| copy and video acceleration: |
| <br> |
| The following configure options doesn't build the EGL system. |
| <pre> |
| cd $TOP/mesa |
| ./autogen.sh --prefix=/usr --libdir=${LIBDIR} --with-gallium-drivers=svga --with-dri-drivers=swrast --enable-xa --disable-dri3 --enable-glx-tls |
| make |
| sudo make install |
| </pre> |
| |
| Note that you may have to install other packages that Mesa depends upon |
| if they're not installed in your system. You should be told what's missing. |
| <br> |
| <br> |
| |
| <li>xf86-video-vmware: Now, once libxatracker is installed, we proceed with |
| building and replacing the current Xorg driver. |
| First check if your system is 32- or 64-bit. |
| <pre> |
| cd $TOP/xf86-video-vmware |
| ./autogen.sh --prefix=/usr --libdir=${LIBDIR} |
| make |
| sudo make install |
| </pre> |
| |
| <li>vmwgfx kernel module. First make sure that any old version of this kernel module is removed from the system by issuing |
| <pre> |
| sudo rm /lib/modules/`uname -r`/kernel/drivers/gpu/drm/vmwgfx.ko* |
| </pre> |
| Build and install: |
| <pre> |
| cd $TOP/vmwgfx |
| make |
| sudo make install |
| sudo depmod -a |
| </pre> |
| If you're using a Ubuntu OS: |
| <pre> |
| sudo update-initramfs -u |
| </pre> |
| If you're using a Fedora OS: |
| <pre> |
| sudo dracut --force |
| </pre> |
| Add 'vmwgfx' to the /etc/modules file: |
| <pre> |
| echo vmwgfx | sudo tee -a /etc/modules |
| </pre> |
| |
| Note: some distros put DRM kernel drivers in different directories. |
| For example, sometimes vmwgfx.ko might be found in |
| <code>/lib/modules/{version}/extra/vmwgfx.ko</code> or in |
| <code>/lib/modules/{version}/kernel/drivers/gpu/drm/vmwgfx/vmwgfx.ko</code>. |
| <p> |
| After installing vmwgfx.ko you might want to run the following command to |
| check that the new kernel module is in the expected place: |
| <pre> |
| find /lib/modules -name vmwgfx.ko -exec ls -l '{}' \; |
| </pre> |
| If you see the kernel module listed in more than one place, you may need to |
| move things around. |
| <p> |
| Finally, if you update your kernel you'll probably have to rebuild and |
| reinstall the vmwgfx.ko module again. |
| </ul> |
| |
| |
| Now try to load the kernel module by issuing |
| <pre> |
| sudo modprobe vmwgfx</pre> |
| Then type |
| <pre> |
| dmesg</pre> |
| to watch the debug output. It should contain a number of lines prefixed with "[vmwgfx]". |
| |
| <p> |
| Then restart the Xserver (or reboot). |
| The lines starting with "vmwlegacy" or "VMWARE" in the file /var/log/Xorg.0.log |
| should now have been replaced with lines starting with "vmwgfx", indicating that |
| the new Xorg driver is in use. |
| </p> |
| |
| |
| <h2>Running OpenGL Programs</h2> |
| |
| <p> |
| In a shell, run 'glxinfo' and look for the following to verify that the |
| driver is working: |
| </p> |
| |
| <pre> |
| OpenGL vendor string: VMware, Inc. |
| OpenGL renderer string: Gallium 0.4 on SVGA3D; build: RELEASE; |
| OpenGL version string: 2.1 Mesa 8.0 |
| </pre> |
| |
| <p> |
| If you don't see this, try setting this environment variable: |
| <pre> |
| export LIBGL_DEBUG=verbose</pre> |
| <p> |
| then rerun glxinfo and examine the output for error messages. |
| </p> |
| |
| <p> |
| If OpenGL 3.3 is not working (you only get OpenGL 2.1): |
| </p> |
| <ul> |
| <li>Make sure the VM uses hardware version 12. |
| <li>Make sure the vmwgfx kernel module is version 2.9.0 or later. |
| <li>Check the vmware.log file for errors. |
| <li>Run 'dmesg | grep vmwgfx' and look for "DX: yes". |
| |
| |
| </div> |
| </body> |
| </html> |