Andreas Boll | ecd5c7c | 2012-06-12 09:05:03 +0200 | [diff] [blame] | 1 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
| 2 | <html lang="en"> |
| 3 | <head> |
| 4 | <meta http-equiv="content-type" content="text/html; charset=utf-8"> |
Erik Faye-Lund | 6e0e550 | 2019-05-06 13:13:11 +0200 | [diff] [blame^] | 5 | <title>VMware SVGA3D Guest Driver</title> |
Andreas Boll | ecd5c7c | 2012-06-12 09:05:03 +0200 | [diff] [blame] | 6 | <link rel="stylesheet" type="text/css" href="mesa.css"> |
| 7 | </head> |
Brian Paul | 2791570 | 2012-01-13 10:54:22 -0700 | [diff] [blame] | 8 | <body> |
| 9 | |
Andreas Boll | b5da52a | 2012-09-18 18:57:02 +0200 | [diff] [blame] | 10 | <div class="header"> |
| 11 | <h1>The Mesa 3D Graphics Library</h1> |
| 12 | </div> |
| 13 | |
| 14 | <iframe src="contents.html"></iframe> |
| 15 | <div class="content"> |
| 16 | |
Erik Faye-Lund | 6e0e550 | 2019-05-06 13:13:11 +0200 | [diff] [blame^] | 17 | <h1>VMware SVGA3D Guest Driver</h1> |
Brian Paul | 2791570 | 2012-01-13 10:54:22 -0700 | [diff] [blame] | 18 | |
| 19 | <p> |
Brian Paul | 7028e6d | 2012-02-09 18:06:06 -0700 | [diff] [blame] | 20 | This page describes how to build, install and use the |
Eric Engestrom | 30cf9ff | 2017-02-09 02:10:17 +0000 | [diff] [blame] | 21 | <a href="https://www.vmware.com/">VMware</a> guest GL driver |
Brian Paul | 2791570 | 2012-01-13 10:54:22 -0700 | [diff] [blame] | 22 | (aka the SVGA or SVGA3D driver) for Linux using the latest source code. |
| 23 | This driver gives a Linux virtual machine access to the host's GPU for |
| 24 | hardware-accelerated 3D. |
| 25 | VMware Workstation running on Linux or Windows and VMware Fusion running on |
| 26 | MacOS are all supported. |
| 27 | </p> |
| 28 | |
| 29 | <p> |
Brian Paul | 4fd3148 | 2015-08-13 13:50:13 -0700 | [diff] [blame] | 30 | With the August 2015 Workstation 12 / Fusion 8 releases, OpenGL 3.3 |
| 31 | is supported in the guest. |
| 32 | This requires: |
Erik Faye-Lund | 92917e8 | 2019-04-18 15:38:01 +0200 | [diff] [blame] | 33 | </p> |
Brian Paul | 4fd3148 | 2015-08-13 13:50:13 -0700 | [diff] [blame] | 34 | <ul> |
| 35 | <li>The VM is configured for virtual hardware version 12. |
| 36 | <li>The host OS, GPU and graphics driver supports DX11 (Windows) or |
| 37 | OpenGL 4.0 (Linux, Mac) |
| 38 | <li>On Linux, the vmwgfx kernel module must be version 2.9.0 or later. |
| 39 | <li>A recent version of Mesa with the updated svga gallium driver. |
| 40 | </ul> |
Brian Paul | 4fd3148 | 2015-08-13 13:50:13 -0700 | [diff] [blame] | 41 | |
| 42 | <p> |
| 43 | Otherwise, OpenGL 2.1 is supported. |
| 44 | </p> |
| 45 | |
| 46 | <p> |
Brian Paul | 5162735 | 2018-09-10 11:29:12 -0600 | [diff] [blame] | 47 | With the Fall 2018 Workstation 15 / Fusion 11 releases, additional |
| 48 | features are supported in the driver: |
| 49 | <ul> |
| 50 | <li>Multisample antialiasing (2x, 4x) |
| 51 | <li>GL_ARB/AMD_draw_buffers_blend |
| 52 | <li>GL_ARB_sample_shading |
| 53 | <li>GL_ARB_texture_cube_map_array |
| 54 | <li>GL_ARB_texture_gather |
| 55 | <li>GL_ARB_texture_query_lod |
| 56 | <li>GL_EXT/OES_draw_buffers_indexed |
| 57 | </ul> |
| 58 | <p> |
| 59 | This requires version 2.15.0 or later of the vmwgfx kernel module and |
| 60 | the VM must be configured for hardware version 16 or later. |
| 61 | </p> |
| 62 | |
| 63 | <p> |
Brian Paul | 4fd3148 | 2015-08-13 13:50:13 -0700 | [diff] [blame] | 64 | OpenGL 3.3 support can be disabled by setting the environment variable |
| 65 | SVGA_VGPU10=0. |
| 66 | You will then have OpenGL 2.1 support. |
| 67 | This may be useful to work around application bugs (such as incorrect use |
| 68 | of the OpenGL 3.x core profile). |
| 69 | </p> |
| 70 | |
| 71 | <p> |
Brian Paul | c47207d | 2014-01-07 10:50:21 -0700 | [diff] [blame] | 72 | Most modern Linux distros include the SVGA3D driver so end users shouldn't |
| 73 | be concerned with this information. |
| 74 | But if your distro lacks the driver or you want to update to the latest code |
| 75 | these instructions explain what to do. |
Brian Paul | 2791570 | 2012-01-13 10:54:22 -0700 | [diff] [blame] | 76 | </p> |
| 77 | |
Brian Paul | 548526f | 2012-01-13 13:45:58 -0700 | [diff] [blame] | 78 | <p> |
| 79 | For more information about the X components see these wiki pages at x.org: |
| 80 | </p> |
| 81 | <ul> |
Eric Engestrom | 30cf9ff | 2017-02-09 02:10:17 +0000 | [diff] [blame] | 82 | <li><a href="https://wiki.x.org/wiki/vmware"> |
Brian Paul | 548526f | 2012-01-13 13:45:58 -0700 | [diff] [blame] | 83 | Driver Overview</a> |
Eric Engestrom | 30cf9ff | 2017-02-09 02:10:17 +0000 | [diff] [blame] | 84 | <li><a href="https://wiki.x.org/wiki/vmware/vmware3D"> |
Brian Paul | 548526f | 2012-01-13 13:45:58 -0700 | [diff] [blame] | 85 | xf86-video-vmware Details</a> |
| 86 | </ul> |
Brian Paul | 2791570 | 2012-01-13 10:54:22 -0700 | [diff] [blame] | 87 | |
| 88 | |
| 89 | <h2>Components</h2> |
| 90 | |
| 91 | The components involved in this include: |
| 92 | <ul> |
| 93 | <li>Linux kernel module: vmwgfx |
| 94 | <li>X server 2D driver: xf86-video-vmware |
| 95 | <li>User-space libdrm library |
| 96 | <li>Mesa/gallium OpenGL driver: "svga" |
| 97 | </ul> |
| 98 | |
Brian Paul | c47207d | 2014-01-07 10:50:21 -0700 | [diff] [blame] | 99 | <p> |
| 100 | All of these components reside in the guest Linux virtual machine. |
| 101 | On the host, all you're doing is running VMware |
Eric Engestrom | 30cf9ff | 2017-02-09 02:10:17 +0000 | [diff] [blame] | 102 | <a href="https://www.vmware.com/products/workstation/">Workstation</a> or |
| 103 | <a href="https://www.vmware.com/products/fusion/">Fusion</a>. |
Brian Paul | c47207d | 2014-01-07 10:50:21 -0700 | [diff] [blame] | 104 | </p> |
| 105 | |
Brian Paul | 2791570 | 2012-01-13 10:54:22 -0700 | [diff] [blame] | 106 | |
| 107 | <h2>Prerequisites</h2> |
| 108 | |
| 109 | <ul> |
| 110 | <li>Kernel version at least 2.6.25 |
| 111 | <li>Xserver version at least 1.7 |
| 112 | <li>Ubuntu: For ubuntu you need to install a number of build dependencies. |
| 113 | <pre> |
| 114 | sudo apt-get install git-core |
| 115 | sudo apt-get install automake libtool libpthread-stubs0-dev |
Brian Paul | 481011f | 2012-01-16 09:59:20 -0700 | [diff] [blame] | 116 | sudo apt-get install xserver-xorg-dev x11proto-xinerama-dev libx11-xcb-dev |
| 117 | sudo apt-get install libxcb-glx0-dev libxrender-dev |
Brian Paul | 2791570 | 2012-01-13 10:54:22 -0700 | [diff] [blame] | 118 | sudo apt-get build-dep libgl1-mesa-dri libxcb-glx0-dev |
| 119 | </pre> |
| 120 | <li>Fedora: For Fedora you also need to install a number of build dependencies. |
| 121 | <pre> |
| 122 | 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] | 123 | sudo yum install libXrender-devel.i686 |
Brian Paul | 2791570 | 2012-01-13 10:54:22 -0700 | [diff] [blame] | 124 | sudo yum install automake gcc libtool expat-devel kernel-devel git-core |
Brian Paul | 481011f | 2012-01-16 09:59:20 -0700 | [diff] [blame] | 125 | sudo yum install makedepend flex bison |
Brian Paul | 2791570 | 2012-01-13 10:54:22 -0700 | [diff] [blame] | 126 | </pre> |
| 127 | </ul> |
| 128 | |
| 129 | <p> |
| 130 | Depending on your Linux distro, other packages may be needed. |
| 131 | The configure scripts should tell you what's missing. |
| 132 | </p> |
| 133 | |
| 134 | |
| 135 | |
| 136 | <h2>Getting the Latest Source Code</h2> |
| 137 | |
| 138 | Begin by saving your current directory location: |
| 139 | <pre> |
| 140 | export TOP=$PWD |
| 141 | </pre> |
| 142 | |
| 143 | <ul> |
| 144 | <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. |
| 145 | <pre> |
Eric Engestrom | ae2694e | 2018-09-21 14:39:53 +0100 | [diff] [blame] | 146 | git clone https://gitlab.freedesktop.org/mesa/mesa.git |
Brian Paul | 2791570 | 2012-01-13 10:54:22 -0700 | [diff] [blame] | 147 | </pre> |
| 148 | <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. |
| 149 | <pre> |
| 150 | git clone git://anongit.freedesktop.org/git/mesa/vmwgfx |
| 151 | </pre> |
Brian Paul | 133383f | 2013-01-15 13:00:09 -0700 | [diff] [blame] | 152 | <li>libdrm, a user-space library that interfaces with drm. |
| 153 | Most distros ship with this but it's safest to install a newer version. |
| 154 | To get the latest code from git: |
Brian Paul | 2791570 | 2012-01-13 10:54:22 -0700 | [diff] [blame] | 155 | <pre> |
Eric Engestrom | ae2694e | 2018-09-21 14:39:53 +0100 | [diff] [blame] | 156 | git clone https://gitlab.freedesktop.org/mesa/drm.git |
Brian Paul | 2791570 | 2012-01-13 10:54:22 -0700 | [diff] [blame] | 157 | </pre> |
| 158 | <li>xf86-video-vmware. The chainloading driver, vmware_drv.so, the legacy driver vmwlegacy_drv.so, and the vmwgfx driver vmwgfx_drv.so. |
| 159 | <pre> |
| 160 | git clone git://anongit.freedesktop.org/git/xorg/driver/xf86-video-vmware |
| 161 | </pre> |
| 162 | </ul> |
| 163 | |
| 164 | |
| 165 | <h2>Building the Code</h2> |
| 166 | |
| 167 | <ul> |
Brian Paul | 0004639 | 2015-11-13 07:59:42 -0700 | [diff] [blame] | 168 | <li> |
| 169 | Determine where the GL-related libraries reside on your system and set |
| 170 | the LIBDIR environment variable accordingly. |
| 171 | <br><br> |
| 172 | For 32-bit Ubuntu systems: |
| 173 | <pre> |
| 174 | export LIBDIR=/usr/lib/i386-linux-gnu |
| 175 | </pre> |
| 176 | For 64-bit Ubuntu systems: |
| 177 | <pre> |
| 178 | export LIBDIR=/usr/lib/x86_64-linux-gnu |
| 179 | </pre> |
| 180 | For 32-bit Fedora systems: |
| 181 | <pre> |
| 182 | export LIBDIR=/usr/lib |
| 183 | </pre> |
| 184 | For 64-bit Fedora systems: |
| 185 | <pre> |
| 186 | export LIBDIR=/usr/lib64 |
| 187 | </pre> |
| 188 | |
| 189 | </li> |
| 190 | |
| 191 | <li>Build libdrm: |
Brian Paul | 2791570 | 2012-01-13 10:54:22 -0700 | [diff] [blame] | 192 | <pre> |
| 193 | cd $TOP/drm |
Dylan Baker | b165ac9 | 2019-04-08 12:56:51 -0700 | [diff] [blame] | 194 | meson builddir --prefix=/usr --libdir=${LIBDIR} |
| 195 | ninja -C builddir |
| 196 | sudo ninja -C builddir install |
Brian Paul | 2791570 | 2012-01-13 10:54:22 -0700 | [diff] [blame] | 197 | </pre> |
| 198 | <li>Build Mesa and the vmwgfx_dri.so driver, the vmwgfx_drv.so xorg driver, the X acceleration library libxatracker. |
| 199 | The vmwgfx_dri.so is used by the OpenGL libraries during direct rendering, |
| 200 | and by the Xorg server during accelerated indirect GL rendering. |
| 201 | The libxatracker library is used exclusively by the X server to do render, |
| 202 | copy and video acceleration: |
| 203 | <br> |
| 204 | The following configure options doesn't build the EGL system. |
Brian Paul | 2791570 | 2012-01-13 10:54:22 -0700 | [diff] [blame] | 205 | <pre> |
| 206 | cd $TOP/mesa |
Dylan Baker | b165ac9 | 2019-04-08 12:56:51 -0700 | [diff] [blame] | 207 | meson builddir --prefix=/usr --libdir=${LIBDIR} -Dgallium-drivers=svga -Ddri-drivers=swrast -Dgallium-xa=true -Ddri3=false |
| 208 | ninja -C builddir |
| 209 | sudo ninja -C builddir install |
Brian Paul | 2791570 | 2012-01-13 10:54:22 -0700 | [diff] [blame] | 210 | </pre> |
| 211 | |
| 212 | Note that you may have to install other packages that Mesa depends upon |
| 213 | if they're not installed in your system. You should be told what's missing. |
| 214 | <br> |
| 215 | <br> |
| 216 | |
Brian Paul | 0004639 | 2015-11-13 07:59:42 -0700 | [diff] [blame] | 217 | <li>xf86-video-vmware: Now, once libxatracker is installed, we proceed with |
| 218 | building and replacing the current Xorg driver. |
| 219 | First check if your system is 32- or 64-bit. |
Brian Paul | 2791570 | 2012-01-13 10:54:22 -0700 | [diff] [blame] | 220 | <pre> |
| 221 | cd $TOP/xf86-video-vmware |
Brian Paul | 0004639 | 2015-11-13 07:59:42 -0700 | [diff] [blame] | 222 | ./autogen.sh --prefix=/usr --libdir=${LIBDIR} |
Brian Paul | 2791570 | 2012-01-13 10:54:22 -0700 | [diff] [blame] | 223 | make |
| 224 | sudo make install |
| 225 | </pre> |
Brian Paul | 0004639 | 2015-11-13 07:59:42 -0700 | [diff] [blame] | 226 | |
Brian Paul | 2791570 | 2012-01-13 10:54:22 -0700 | [diff] [blame] | 227 | <li>vmwgfx kernel module. First make sure that any old version of this kernel module is removed from the system by issuing |
Brian Paul | 0004639 | 2015-11-13 07:59:42 -0700 | [diff] [blame] | 228 | <pre> |
Brian Paul | 2791570 | 2012-01-13 10:54:22 -0700 | [diff] [blame] | 229 | sudo rm /lib/modules/`uname -r`/kernel/drivers/gpu/drm/vmwgfx.ko* |
Brian Paul | 0004639 | 2015-11-13 07:59:42 -0700 | [diff] [blame] | 230 | </pre> |
| 231 | Build and install: |
| 232 | <pre> |
Brian Paul | 2791570 | 2012-01-13 10:54:22 -0700 | [diff] [blame] | 233 | cd $TOP/vmwgfx |
| 234 | make |
| 235 | sudo make install |
Brian Paul | 0004639 | 2015-11-13 07:59:42 -0700 | [diff] [blame] | 236 | sudo depmod -a |
| 237 | </pre> |
| 238 | If you're using a Ubuntu OS: |
| 239 | <pre> |
| 240 | sudo update-initramfs -u |
| 241 | </pre> |
| 242 | If you're using a Fedora OS: |
| 243 | <pre> |
| 244 | sudo dracut --force |
| 245 | </pre> |
| 246 | Add 'vmwgfx' to the /etc/modules file: |
| 247 | <pre> |
| 248 | echo vmwgfx | sudo tee -a /etc/modules |
| 249 | </pre> |
Brian Paul | d83336c | 2013-01-28 17:44:46 -0700 | [diff] [blame] | 250 | |
| 251 | Note: some distros put DRM kernel drivers in different directories. |
| 252 | For example, sometimes vmwgfx.ko might be found in |
| 253 | <code>/lib/modules/{version}/extra/vmwgfx.ko</code> or in |
| 254 | <code>/lib/modules/{version}/kernel/drivers/gpu/drm/vmwgfx/vmwgfx.ko</code>. |
| 255 | <p> |
| 256 | After installing vmwgfx.ko you might want to run the following command to |
| 257 | check that the new kernel module is in the expected place: |
| 258 | <pre> |
| 259 | find /lib/modules -name vmwgfx.ko -exec ls -l '{}' \; |
| 260 | </pre> |
| 261 | If you see the kernel module listed in more than one place, you may need to |
| 262 | move things around. |
| 263 | <p> |
| 264 | Finally, if you update your kernel you'll probably have to rebuild and |
| 265 | reinstall the vmwgfx.ko module again. |
Brian Paul | 2791570 | 2012-01-13 10:54:22 -0700 | [diff] [blame] | 266 | </ul> |
| 267 | |
| 268 | |
| 269 | Now try to load the kernel module by issuing |
| 270 | <pre> |
| 271 | sudo modprobe vmwgfx</pre> |
| 272 | Then type |
| 273 | <pre> |
| 274 | dmesg</pre> |
| 275 | to watch the debug output. It should contain a number of lines prefixed with "[vmwgfx]". |
| 276 | |
| 277 | <p> |
| 278 | Then restart the Xserver (or reboot). |
| 279 | The lines starting with "vmwlegacy" or "VMWARE" in the file /var/log/Xorg.0.log |
| 280 | should now have been replaced with lines starting with "vmwgfx", indicating that |
| 281 | the new Xorg driver is in use. |
| 282 | </p> |
| 283 | |
| 284 | |
| 285 | <h2>Running OpenGL Programs</h2> |
| 286 | |
| 287 | <p> |
| 288 | In a shell, run 'glxinfo' and look for the following to verify that the |
| 289 | driver is working: |
| 290 | </p> |
| 291 | |
| 292 | <pre> |
| 293 | OpenGL vendor string: VMware, Inc. |
| 294 | OpenGL renderer string: Gallium 0.4 on SVGA3D; build: RELEASE; |
| 295 | OpenGL version string: 2.1 Mesa 8.0 |
| 296 | </pre> |
| 297 | |
Andreas Boll | df2be22 | 2012-06-12 09:05:22 +0200 | [diff] [blame] | 298 | <p> |
Brian Paul | 2791570 | 2012-01-13 10:54:22 -0700 | [diff] [blame] | 299 | If you don't see this, try setting this environment variable: |
| 300 | <pre> |
| 301 | export LIBGL_DEBUG=verbose</pre> |
Andreas Boll | df2be22 | 2012-06-12 09:05:22 +0200 | [diff] [blame] | 302 | <p> |
Brian Paul | 2791570 | 2012-01-13 10:54:22 -0700 | [diff] [blame] | 303 | then rerun glxinfo and examine the output for error messages. |
| 304 | </p> |
| 305 | |
Brian Paul | 4fd3148 | 2015-08-13 13:50:13 -0700 | [diff] [blame] | 306 | <p> |
| 307 | If OpenGL 3.3 is not working (you only get OpenGL 2.1): |
| 308 | </p> |
| 309 | <ul> |
| 310 | <li>Make sure the VM uses hardware version 12. |
| 311 | <li>Make sure the vmwgfx kernel module is version 2.9.0 or later. |
| 312 | <li>Check the vmware.log file for errors. |
| 313 | <li>Run 'dmesg | grep vmwgfx' and look for "DX: yes". |
Erik Faye-Lund | 3bda82b | 2019-04-18 15:39:35 +0200 | [diff] [blame] | 314 | </ul> |
Brian Paul | 4fd3148 | 2015-08-13 13:50:13 -0700 | [diff] [blame] | 315 | |
Andreas Boll | b5da52a | 2012-09-18 18:57:02 +0200 | [diff] [blame] | 316 | </div> |
Brian Paul | 2791570 | 2012-01-13 10:54:22 -0700 | [diff] [blame] | 317 | </body> |
| 318 | </html> |