turnip: Execute ir3_nir_lower_gs pass again
[mesa.git] / docs / vmware-guest.html
index 1fe4a059fa922d4e7812cfa54fc01e503a7acd26..378b9c5797c23be719781af442fb38fe77ceeef0 100644 (file)
@@ -2,16 +2,23 @@
 <html lang="en">
 <head>
   <meta http-equiv="content-type" content="text/html; charset=utf-8">
-  <title>VMware guest GL driver</title>
+  <title>VMware SVGA3D Guest Driver</title>
   <link rel="stylesheet" type="text/css" href="mesa.css">
 </head>
 <body>
 
-<h1>VMware guest GL driver</h1>
+<div class="header">
+  The Mesa 3D Graphics Library
+</div>
+
+<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
-<a href="http://www.vmware.com/" target="_parent">VMware</a> guest GL driver
+<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.
@@ -20,17 +27,61 @@ 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="http://wiki.x.org/wiki/vmware" target="_parent">
+<li><a href="https://wiki.x.org/wiki/vmware">
 Driver Overview</a>
-<li><a href="http://wiki.x.org/wiki/vmware/vmware3D" target="_parent">
+<li><a href="https://wiki.x.org/wiki/vmware/vmware3D">
 xf86-video-vmware Details</a>
 </ul>
 
@@ -45,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>
 
@@ -53,24 +111,24 @@ The components involved in this include:
 <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
+sudo apt-get install git-core
+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 libXrender-devel.i686
-  sudo yum install automake gcc libtool expat-devel kernel-devel git-core
-  sudo yum install makedepend flex bison
+sudo yum install mesa-libGL-devel xorg-x11-server-devel xorg-x11-util-macros
+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>
 
 
@@ -79,26 +137,27 @@ The configure scripts should tell you what's missing.
 
 Begin by saving your current directory location:
   <pre>
-  export TOP=$PWD
+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
+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
+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>
-  git clone git://anongit.freedesktop.org/git/xorg/driver/xf86-video-vmware
+git clone git://anongit.freedesktop.org/git/xorg/driver/xf86-video-vmware
   </pre>
 </ul>
 
@@ -106,63 +165,116 @@ 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
+cd $TOP/drm
+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
+cd $TOP/mesa
+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
-  make
-  sudo make install
+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>
-Then 
-  <pre>
-  cd $TOP/vmwgfx
-  make
-  sudo make install
-  sudo cp 00-vmwgfx.rules /etc/udev/rules.d
-  sudo depmod -ae
-  </pre>
+<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>
+sudo modprobe vmwgfx</pre>
 Then type 
   <pre>
-  dmesg</pre>
+dmesg</pre>
 to watch the debug output. It should contain a number of lines prefixed with "[vmwgfx]". 
 
 <p>
@@ -189,12 +301,21 @@ OpenGL version string: 2.1 Mesa 8.0
 <p>
 If you don't see this, try setting this environment variable:
   <pre>
-  export LIBGL_DEBUG=verbose</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>