radv/aco: enable VK_KHR_shader_subgroup_extended_types
[mesa.git] / docs / vmware-guest.html
index 9295644c14f3a7c0302b3025fedc02a4ec6c4c17..c43873984117401ba5ed72bc7cf71794155e93af 100644 (file)
@@ -1,16 +1,24 @@
-<html>
-
-<title>VMware guest GL driver</title>
-
-<link rel="stylesheet" type="text/css" href="mesa.css"></head>
-
+<!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 SVGA3D Guest Driver</title>
+  <link rel="stylesheet" type="text/css" href="mesa.css">
+</head>
 <body>
 
+<div class="header">
+  The Mesa 3D Graphics Library
+</div>
 
-<h1>VMware guest GL driver</h1>
+<iframe src="contents.html"></iframe>
+<div class="content">
+
+<h1>VMware SVGA3D Guest Driver</h1>
 
 <p>
-This page describes how to build, install and use the VMware guest GL driver
+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.
@@ -19,10 +27,63 @@ MacOS are all supported.
 </p>
 
 <p>
-End users shouldn't have to go through all these steps once the driver is
-included in newer Linux distributions.
+With the August 2015 Workstation 12 / Fusion 8 releases, OpenGL 3.3
+is supported in the guest.
+This requires:
+</p>
+<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>
+Otherwise, OpenGL 2.1 is supported.
+</p>
+
+<p>
+With the Fall 2018 Workstation 15 / Fusion 11 releases, additional
+features are supported in the driver:
+<ul>
+<li>Multisample antialiasing (2x, 4x)
+<li>GL_ARB/AMD_draw_buffers_blend
+<li>GL_ARB_sample_shading
+<li>GL_ARB_texture_cube_map_array
+<li>GL_ARB_texture_gather
+<li>GL_ARB_texture_query_lod
+<li>GL_EXT/OES_draw_buffers_indexed
+</ul>
+<p>
+This requires version 2.15.0 or later of the vmwgfx kernel module and
+the VM must be configured for hardware version 16 or later.
+</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>
@@ -35,6 +96,13 @@ The components involved in this include:
 <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>
 
@@ -44,20 +112,23 @@ The components involved in this include:
 <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
+  sudo apt-get install ninja-build meson 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 automake gcc libtool expat-devel kernel-devel git-core
+  sudo yum install libXrender-devel.i686
+  sudo yum install ninja-build meson gcc 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.
+Meson should tell you what's missing.
 </p>
 
 
@@ -72,16 +143,17 @@ Begin by saving your current directory location:
 <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
+  git clone https://gitlab.freedesktop.org/mesa/mesa.git
   </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 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: 
+<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
+  git clone https://gitlab.freedesktop.org/mesa/drm.git
   </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>
@@ -93,54 +165,107 @@ Begin by saving your current directory location:
 <h2>Building the Code</h2>
 
 <ul>
-<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. 
+<li>
+<p>
+Determine where the GL-related libraries reside on your system and set
+the LIBDIR environment variable accordingly.
+</p>
+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 --enable-vmwgfx-experimental-api --libdir=/usr/lib64
-  make
-  sudo make install
+  meson builddir --prefix=/usr --libdir=${LIBDIR}
+  ninja -C builddir
+  sudo ninja -C builddir install
   </pre>
-<li>Build Mesa and the vmwgfx_dri.so driver, the vmwgfx_drv.so xorg driver, the X acceleration library libxatracker.
+<li>
+<p>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>
+</p>
+
 The following configure options doesn't build the EGL system.
-<br>
-As before, if you're on a 32-bit system, you should skip the --libdir
-configure option.
   <pre>
   cd $TOP/mesa
-  ./autogen.sh --prefix=/usr --libdir=/usr/lib64 --with-gallium-drivers=svga --with-dri-drivers= --enable-xa
-  make
-  sudo make install
+  meson builddir --prefix=/usr --libdir=${LIBDIR} -Dgallium-drivers=svga -Ddri-drivers=swrast -Dgallium-xa=true -Ddri3=false
+  ninja -C builddir
+  sudo ninja -C builddir install
   </pre>
 
+<p>
 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>
+</p>
 
-<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. 
+<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=/usr/lib64
+  ./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>
+<pre>
   sudo rm /lib/modules/`uname -r`/kernel/drivers/gpu/drm/vmwgfx.ko*
-  </pre>
-Then 
-  <pre>
+</pre>
+Build and install:
+<pre>
   cd $TOP/vmwgfx
   make
   sudo make install
-  sudo cp 00-vmwgfx.rules /etc/udev/rules.d
-  sudo depmod -ae
-  </pre>
+  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>
 
 
@@ -173,13 +298,24 @@ 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".
+</ul>
 
-
+</div>
 </body>
 </html>