Brian Paul | 2791570 | 2012-01-13 10:54:22 -0700 | [diff] [blame] | 1 | <html> |
| 2 | |
| 3 | <title>VMware guest GL driver</title> |
| 4 | |
| 5 | <link rel="stylesheet" type="text/css" href="mesa.css"></head> |
| 6 | |
| 7 | <body> |
| 8 | |
| 9 | |
| 10 | <h1>VMware guest GL driver</h1> |
| 11 | |
| 12 | <p> |
| 13 | This page describes how to build, install and use the VMware guest GL driver |
| 14 | (aka the SVGA or SVGA3D driver) for Linux using the latest source code. |
| 15 | This driver gives a Linux virtual machine access to the host's GPU for |
| 16 | hardware-accelerated 3D. |
| 17 | VMware Workstation running on Linux or Windows and VMware Fusion running on |
| 18 | MacOS are all supported. |
| 19 | </p> |
| 20 | |
| 21 | <p> |
| 22 | End users shouldn't have to go through all these steps once the driver is |
| 23 | included in newer Linux distributions. |
| 24 | </p> |
| 25 | |
Brian Paul | 548526f | 2012-01-13 13:45:58 -0700 | [diff] [blame] | 26 | <p> |
| 27 | For more information about the X components see these wiki pages at x.org: |
| 28 | </p> |
| 29 | <ul> |
| 30 | <li><a href="http://wiki.x.org/wiki/vmware" target="_parent"> |
| 31 | Driver Overview</a> |
| 32 | <li><a href="http://wiki.x.org/wiki/vmware/vmware3D" target="_parent"> |
| 33 | xf86-video-vmware Details</a> |
| 34 | </ul> |
Brian Paul | 2791570 | 2012-01-13 10:54:22 -0700 | [diff] [blame] | 35 | |
| 36 | |
| 37 | <h2>Components</h2> |
| 38 | |
| 39 | The components involved in this include: |
| 40 | <ul> |
| 41 | <li>Linux kernel module: vmwgfx |
| 42 | <li>X server 2D driver: xf86-video-vmware |
| 43 | <li>User-space libdrm library |
| 44 | <li>Mesa/gallium OpenGL driver: "svga" |
| 45 | </ul> |
| 46 | |
| 47 | |
| 48 | <h2>Prerequisites</h2> |
| 49 | |
| 50 | <ul> |
| 51 | <li>Kernel version at least 2.6.25 |
| 52 | <li>Xserver version at least 1.7 |
| 53 | <li>Ubuntu: For ubuntu you need to install a number of build dependencies. |
| 54 | <pre> |
| 55 | sudo apt-get install git-core |
| 56 | sudo apt-get install automake libtool libpthread-stubs0-dev |
Brian Paul | 481011f | 2012-01-16 09:59:20 -0700 | [diff] [blame^] | 57 | sudo apt-get install xserver-xorg-dev x11proto-xinerama-dev libx11-xcb-dev |
| 58 | sudo apt-get install libxcb-glx0-dev libxrender-dev |
Brian Paul | 2791570 | 2012-01-13 10:54:22 -0700 | [diff] [blame] | 59 | sudo apt-get build-dep libgl1-mesa-dri libxcb-glx0-dev |
| 60 | </pre> |
| 61 | <li>Fedora: For Fedora you also need to install a number of build dependencies. |
| 62 | <pre> |
| 63 | sudo yum install mesa-libGL-devel xorg-x11-server-devel xorg-x11-util-macros |
Brian Paul | 481011f | 2012-01-16 09:59:20 -0700 | [diff] [blame^] | 64 | sudo yum install libXrender-devel.i686 |
Brian Paul | 2791570 | 2012-01-13 10:54:22 -0700 | [diff] [blame] | 65 | sudo yum install automake gcc libtool expat-devel kernel-devel git-core |
Brian Paul | 481011f | 2012-01-16 09:59:20 -0700 | [diff] [blame^] | 66 | sudo yum install makedepend flex bison |
Brian Paul | 2791570 | 2012-01-13 10:54:22 -0700 | [diff] [blame] | 67 | </pre> |
| 68 | </ul> |
| 69 | |
| 70 | <p> |
| 71 | Depending on your Linux distro, other packages may be needed. |
| 72 | The configure scripts should tell you what's missing. |
| 73 | </p> |
| 74 | |
| 75 | |
| 76 | |
| 77 | <h2>Getting the Latest Source Code</h2> |
| 78 | |
| 79 | Begin by saving your current directory location: |
| 80 | <pre> |
| 81 | export TOP=$PWD |
| 82 | </pre> |
| 83 | |
| 84 | <ul> |
| 85 | <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. |
| 86 | <pre> |
| 87 | git clone git://anongit.freedesktop.org/git/mesa/mesa |
| 88 | </pre> |
| 89 | <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. |
| 90 | <pre> |
| 91 | git clone git://anongit.freedesktop.org/git/mesa/vmwgfx |
| 92 | </pre> |
| 93 | |
| 94 | <li>libdrm, A user-space library that interfaces with drm. Most distros ship with this driver. Safest bet is really to replace the system one. Optionally you can point LIBDRM_CFLAGS and LIBDRM_LIBS to the libdrm-2.4.22 package in toolchain. But here, we replace: |
| 95 | <pre> |
| 96 | git clone git://anongit.freedesktop.org/git/mesa/drm |
| 97 | </pre> |
| 98 | <li>xf86-video-vmware. The chainloading driver, vmware_drv.so, the legacy driver vmwlegacy_drv.so, and the vmwgfx driver vmwgfx_drv.so. |
| 99 | <pre> |
| 100 | git clone git://anongit.freedesktop.org/git/xorg/driver/xf86-video-vmware |
| 101 | </pre> |
| 102 | </ul> |
| 103 | |
| 104 | |
| 105 | <h2>Building the Code</h2> |
| 106 | |
| 107 | <ul> |
| 108 | <li>Build libdrm: If you're on a 32-bit system, you should skip the --libdir configure option. Note also the comment about toolchain libdrm above. |
| 109 | <pre> |
| 110 | cd $TOP/drm |
| 111 | ./autogen.sh --prefix=/usr --enable-vmwgfx-experimental-api --libdir=/usr/lib64 |
| 112 | make |
| 113 | sudo make install |
| 114 | </pre> |
| 115 | <li>Build Mesa and the vmwgfx_dri.so driver, the vmwgfx_drv.so xorg driver, the X acceleration library libxatracker. |
| 116 | The vmwgfx_dri.so is used by the OpenGL libraries during direct rendering, |
| 117 | and by the Xorg server during accelerated indirect GL rendering. |
| 118 | The libxatracker library is used exclusively by the X server to do render, |
| 119 | copy and video acceleration: |
| 120 | <br> |
| 121 | The following configure options doesn't build the EGL system. |
| 122 | <br> |
| 123 | As before, if you're on a 32-bit system, you should skip the --libdir |
| 124 | configure option. |
| 125 | <pre> |
| 126 | cd $TOP/mesa |
| 127 | ./autogen.sh --prefix=/usr --libdir=/usr/lib64 --with-gallium-drivers=svga --with-dri-drivers= --enable-xa |
| 128 | make |
| 129 | sudo make install |
| 130 | </pre> |
| 131 | |
| 132 | Note that you may have to install other packages that Mesa depends upon |
| 133 | if they're not installed in your system. You should be told what's missing. |
| 134 | <br> |
| 135 | <br> |
| 136 | |
| 137 | <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. If you're building for a 32-bit system, you will not be needing the --libdir=/usr/lib64 option to autogen. |
| 138 | <pre> |
| 139 | cd $TOP/xf86-video-vmware |
| 140 | ./autogen.sh --prefix=/usr --libdir=/usr/lib64 |
| 141 | make |
| 142 | sudo make install |
| 143 | </pre> |
| 144 | <li>vmwgfx kernel module. First make sure that any old version of this kernel module is removed from the system by issuing |
| 145 | <pre> |
| 146 | sudo rm /lib/modules/`uname -r`/kernel/drivers/gpu/drm/vmwgfx.ko* |
| 147 | </pre> |
| 148 | Then |
| 149 | <pre> |
| 150 | cd $TOP/vmwgfx |
| 151 | make |
| 152 | sudo make install |
| 153 | sudo cp 00-vmwgfx.rules /etc/udev/rules.d |
| 154 | sudo depmod -ae |
| 155 | </pre> |
| 156 | </ul> |
| 157 | |
| 158 | |
| 159 | Now try to load the kernel module by issuing |
| 160 | <pre> |
| 161 | sudo modprobe vmwgfx</pre> |
| 162 | Then type |
| 163 | <pre> |
| 164 | dmesg</pre> |
| 165 | to watch the debug output. It should contain a number of lines prefixed with "[vmwgfx]". |
| 166 | |
| 167 | <p> |
| 168 | Then restart the Xserver (or reboot). |
| 169 | The lines starting with "vmwlegacy" or "VMWARE" in the file /var/log/Xorg.0.log |
| 170 | should now have been replaced with lines starting with "vmwgfx", indicating that |
| 171 | the new Xorg driver is in use. |
| 172 | </p> |
| 173 | |
| 174 | |
| 175 | <h2>Running OpenGL Programs</h2> |
| 176 | |
| 177 | <p> |
| 178 | In a shell, run 'glxinfo' and look for the following to verify that the |
| 179 | driver is working: |
| 180 | </p> |
| 181 | |
| 182 | <pre> |
| 183 | OpenGL vendor string: VMware, Inc. |
| 184 | OpenGL renderer string: Gallium 0.4 on SVGA3D; build: RELEASE; |
| 185 | OpenGL version string: 2.1 Mesa 8.0 |
| 186 | </pre> |
| 187 | |
| 188 | If you don't see this, try setting this environment variable: |
| 189 | <pre> |
| 190 | export LIBGL_DEBUG=verbose</pre> |
| 191 | then rerun glxinfo and examine the output for error messages. |
| 192 | </p> |
| 193 | |
| 194 | |
| 195 | |
| 196 | </body> |
| 197 | </html> |