android: radeonsi/gfx10: generate gfx10_format_table.h (v2)
[mesa.git] / docs / vmware-guest.html
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">
5 <title>VMware SVGA3D Guest Driver</title>
6 <link rel="stylesheet" type="text/css" href="mesa.css">
7 </head>
8 <body>
9
10 <div class="header">
11 The Mesa 3D Graphics Library
12 </div>
13
14 <iframe src="contents.html"></iframe>
15 <div class="content">
16
17 <h1>VMware SVGA3D Guest Driver</h1>
18
19 <p>
20 This page describes how to build, install and use the
21 <a href="https://www.vmware.com/">VMware</a> guest GL driver
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>
30 With the August 2015 Workstation 12 / Fusion 8 releases, OpenGL 3.3
31 is supported in the guest.
32 This requires:
33 </p>
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>
41
42 <p>
43 Otherwise, OpenGL 2.1 is supported.
44 </p>
45
46 <p>
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>
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>
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.
76 </p>
77
78 <p>
79 For more information about the X components see these wiki pages at x.org:
80 </p>
81 <ul>
82 <li><a href="https://wiki.x.org/wiki/vmware">
83 Driver Overview</a>
84 <li><a href="https://wiki.x.org/wiki/vmware/vmware3D">
85 xf86-video-vmware Details</a>
86 </ul>
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
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
102 <a href="https://www.vmware.com/products/workstation/">Workstation</a> or
103 <a href="https://www.vmware.com/products/fusion/">Fusion</a>.
104 </p>
105
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 ninja-build meson libpthread-stubs0-dev
116 sudo apt-get install xserver-xorg-dev x11proto-xinerama-dev libx11-xcb-dev
117 sudo apt-get install libxcb-glx0-dev libxrender-dev
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
123 sudo yum install libXrender-devel.i686
124 sudo yum install ninja-build meson gcc expat-devel kernel-devel git-core
125 sudo yum install makedepend flex bison
126 </pre>
127 </ul>
128
129 <p>
130 Depending on your Linux distro, other packages may be needed.
131 Meson 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>
146 git clone https://gitlab.freedesktop.org/mesa/mesa.git
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>
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:
155 <pre>
156 git clone https://gitlab.freedesktop.org/mesa/drm.git
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>
168 <li>
169 <p>
170 Determine where the GL-related libraries reside on your system and set
171 the LIBDIR environment variable accordingly.
172 </p>
173 For 32-bit Ubuntu systems:
174 <pre>
175 export LIBDIR=/usr/lib/i386-linux-gnu
176 </pre>
177 For 64-bit Ubuntu systems:
178 <pre>
179 export LIBDIR=/usr/lib/x86_64-linux-gnu
180 </pre>
181 For 32-bit Fedora systems:
182 <pre>
183 export LIBDIR=/usr/lib
184 </pre>
185 For 64-bit Fedora systems:
186 <pre>
187 export LIBDIR=/usr/lib64
188 </pre>
189
190 </li>
191
192 <li>Build libdrm:
193 <pre>
194 cd $TOP/drm
195 meson builddir --prefix=/usr --libdir=${LIBDIR}
196 ninja -C builddir
197 sudo ninja -C builddir install
198 </pre>
199 <li>
200 <p>Build Mesa and the vmwgfx_dri.so driver, the vmwgfx_drv.so xorg driver, the X acceleration library libxatracker.
201 The vmwgfx_dri.so is used by the OpenGL libraries during direct rendering,
202 and by the Xorg server during accelerated indirect GL rendering.
203 The libxatracker library is used exclusively by the X server to do render,
204 copy and video acceleration:
205 </p>
206
207 The following configure options doesn't build the EGL system.
208 <pre>
209 cd $TOP/mesa
210 meson builddir --prefix=/usr --libdir=${LIBDIR} -Dgallium-drivers=svga -Ddri-drivers=swrast -Dgallium-xa=true -Ddri3=false
211 ninja -C builddir
212 sudo ninja -C builddir install
213 </pre>
214
215 <p>
216 Note that you may have to install other packages that Mesa depends upon
217 if they're not installed in your system. You should be told what's missing.
218 </p>
219
220 <li>xf86-video-vmware: Now, once libxatracker is installed, we proceed with
221 building and replacing the current Xorg driver.
222 First check if your system is 32- or 64-bit.
223 <pre>
224 cd $TOP/xf86-video-vmware
225 ./autogen.sh --prefix=/usr --libdir=${LIBDIR}
226 make
227 sudo make install
228 </pre>
229
230 <li>vmwgfx kernel module. First make sure that any old version of this kernel module is removed from the system by issuing
231 <pre>
232 sudo rm /lib/modules/`uname -r`/kernel/drivers/gpu/drm/vmwgfx.ko*
233 </pre>
234 Build and install:
235 <pre>
236 cd $TOP/vmwgfx
237 make
238 sudo make install
239 sudo depmod -a
240 </pre>
241 If you're using a Ubuntu OS:
242 <pre>
243 sudo update-initramfs -u
244 </pre>
245 If you're using a Fedora OS:
246 <pre>
247 sudo dracut --force
248 </pre>
249 Add 'vmwgfx' to the /etc/modules file:
250 <pre>
251 echo vmwgfx | sudo tee -a /etc/modules
252 </pre>
253
254 Note: some distros put DRM kernel drivers in different directories.
255 For example, sometimes vmwgfx.ko might be found in
256 <code>/lib/modules/{version}/extra/vmwgfx.ko</code> or in
257 <code>/lib/modules/{version}/kernel/drivers/gpu/drm/vmwgfx/vmwgfx.ko</code>.
258 <p>
259 After installing vmwgfx.ko you might want to run the following command to
260 check that the new kernel module is in the expected place:
261 <pre>
262 find /lib/modules -name vmwgfx.ko -exec ls -l '{}' \;
263 </pre>
264 If you see the kernel module listed in more than one place, you may need to
265 move things around.
266 <p>
267 Finally, if you update your kernel you'll probably have to rebuild and
268 reinstall the vmwgfx.ko module again.
269 </ul>
270
271
272 Now try to load the kernel module by issuing
273 <pre>
274 sudo modprobe vmwgfx</pre>
275 Then type
276 <pre>
277 dmesg</pre>
278 to watch the debug output. It should contain a number of lines prefixed with "[vmwgfx]".
279
280 <p>
281 Then restart the Xserver (or reboot).
282 The lines starting with "vmwlegacy" or "VMWARE" in the file /var/log/Xorg.0.log
283 should now have been replaced with lines starting with "vmwgfx", indicating that
284 the new Xorg driver is in use.
285 </p>
286
287
288 <h2>Running OpenGL Programs</h2>
289
290 <p>
291 In a shell, run 'glxinfo' and look for the following to verify that the
292 driver is working:
293 </p>
294
295 <pre>
296 OpenGL vendor string: VMware, Inc.
297 OpenGL renderer string: Gallium 0.4 on SVGA3D; build: RELEASE;
298 OpenGL version string: 2.1 Mesa 8.0
299 </pre>
300
301 <p>
302 If you don't see this, try setting this environment variable:
303 <pre>
304 export LIBGL_DEBUG=verbose</pre>
305 <p>
306 then rerun glxinfo and examine the output for error messages.
307 </p>
308
309 <p>
310 If OpenGL 3.3 is not working (you only get OpenGL 2.1):
311 </p>
312 <ul>
313 <li>Make sure the VM uses hardware version 12.
314 <li>Make sure the vmwgfx kernel module is version 2.9.0 or later.
315 <li>Check the vmware.log file for errors.
316 <li>Run 'dmesg | grep vmwgfx' and look for "DX: yes".
317 </ul>
318
319 </div>
320 </body>
321 </html>