Introduction to Mesa
Mesa offers a wide variety of
graphic software, offering the OpenGL library, OpenGL drivers,
Vulkan drivers, and so forth.
Note
Mesa is updated relatively
often. You may want to use the latest available 24.2.x mesa
version.
Mesa Dependencies
Required
Xorg
Libraries, libdrm-2.4.123, mako-1.3.6, and PyYAML-6.0.2
Recommended
-
Cbindgen-0.27.0, rust-bindgen-0.69.5, and rustc-1.82.0
(required for NVK and Vulkan swrast)
-
Glslang-15.0.0 (required for Vulkan
support)
-
libclc-19.1.0 (required for Intel Iris
Gallium)
-
libglvnd-1.7.0 (required for Steam-1.0.0.82)
-
libva-2.22.0 (to provide VA-API support
for some gallium drivers, note that there is a circular
dependency. You must build libva first without EGL and GLX support,
install this package, and rebuild libva)
-
libvdpau-1.5 (to build VDPAU drivers)
-
LLVM-19.1.0 (required for the r300, r600,
and radeonsi drivers, and the LLVMpipe software rasterizer;
Clang in LLVM is required for Vulkan Swrast)
-
Meson Toolchain Files (required
for multilib 32-bit Nouveau and Swrast Vulkan; if the
recommended dependencies are met, setting auto
or all
for vulkan-drivers=
will build them
by default, which is set for the 32-bit build down below)
-
ply-3.11
(required for Intel Vulkan)
-
Vulkan-Loader-1.3.301 (required
for the Zink Gallium3D driver)
-
wayland-protocols-1.38 (required
for many desktop environments and recommended for GTK)
Optional
libgcrypt, libunwind-1.8.1,
lm_sensors , Nettle-3.10, valgrind,
mesa-demos (provides more
than 300 demos to test Mesa),
Bellagio
OpenMAX Integration Layer (for mobile platforms), and
libtizonia
Note
An Internet connection is needed for building the Nouveau Vulkan
driver.
Installation of Mesa
Note
If you are using NVIDIA-560.35.03 and wish to use Steam-1.0.0.82, this package is still a
requirement as Steam depends on
Mesa's GBM, or else the webhelper will repeatedly launch and
crash before showing an error screen. You will need to have at
least one gallium driver for this package to compile. Set the
option -D
gallium-drivers=nouveau
to get this package over and
done with as then you can move on. The 32-bit version of this
package is not necessary if you are doing this.
Install Mesa by running the
following commands:
mkdir build &&
cd build &&
meson setup \
--prefix=/usr \
--buildtype=release \
-D osmesa=true \
-D platforms=x11,wayland \
-D gallium-drivers=auto \
-D vulkan-drivers=auto \
-D valgrind=disabled \
-D video-codecs=all \
-D libunwind=disabled \
-D glvnd=enabled \
.. &&
ninja
To test the results, issue: meson
configure -D build-tests=true && ninja
test.
Now, as the root
user:
ninja install
If desired, install the optional documentation by running the
following commands as the root
user:
cp -rv ../docs -T /usr/share/doc/mesa-24.2.7
32-bit Installation of Mesa
First clean the build directory:
rm -rf *
Install lib32-Mesa by running the
following commands:
meson setup \
--cross-file lib32 \
--prefix=/usr \
--libdir=/usr/lib32 \
--buildtype=release \
-D osmesa=true \
-D platforms=x11,wayland \
-D gallium-drivers=auto \
-D vulkan-drivers=auto \
-D valgrind=disabled \
-D video-codecs=all \
-D libunwind=disabled \
-D glvnd=enabled \
.. &&
sed -i 's/\/usr\/lib\//\/usr\/lib32\//g' ./build.ninja &&
ninja
Now, as the root
user:
DESTDIR=$PWD/DESTDIR ninja install &&
cp -vr DESTDIR/usr/lib32/* /usr/lib32 &&
if [ -d DESTDIR/usr/share/vulkan ]; then
cp -vR DESTDIR/usr/share/vulkan /usr/share
fi &&
rm -rf DESTDIR &&
ldconfig
Command Explanations
--buildtype=release
: This
switch ensures a fully-optimized build, and disables debug
assertions which will severely slow down the libraries in certain
use-cases. Without this switch, build sizes can span into the 2GB
range.
-D gallium-drivers=auto
:
This parameter controls which Gallium3D drivers should be built.
Gallium drivers are essentially OpenGL drivers. If you wish to
build specific drivers, valid options include:
-
auto
selects all Gallium3D
drivers available for x86
-
r300
(for ATI Radeon 9000 or
Radeon X series)
-
r600
(for AMD/ATI Radeon HD
2000-6000 series)
-
radeonsi
(for AMD Radeon HD 7000
or newer AMD GPU models)
-
nouveau
(for Supported NVIDIA
GPUs, they are listed as all “3D features”
either “DONE” or “N/A” in the
Nouveau status page)
-
virgl
(for QEMU virtual GPU with
virglrender support)
-
svga
(for VMWare virtual GPU)
-
softpipe
(using CPU for 3D
rasterization; needed for OSMesa which provides OpenGL bitmap
support)
-
llvmpipe
(softpipe
but uses LLVM to increase performance)
-
zink
(a driver converting OpenGL
calls to Vulkan; if the Vulkan driver is performant, this
driver can also be performant; can be used as a replacement
for Gallium3D drivers like nouveau
as detailed in What Now?)
-
iris
(for Intel GPUs shipped
with Broadwell or newer CPUs)
-
crocus
(for Intel GMA 3000,
X3000 series, 4000 series, or X4000 series GPUs shipped with
chipsets, or Intel HD GPUs shipped with pre-Broadwell CPUs)
-
i915
(for Intel GMA 900, 950,
3100, or 3150 GPUs shipped with chipsets or Atom D/N 4xx/5xx
CPUs)
You may replace auto
with a
comma-separated list to build only a subset of these drivers if you
precisely know which drivers you need, for example: -D gallium-drivers=radeonsi,iris,swrast
.
-D osmesa=true
: This switch
enables building the libOSMesa
library and provides Gallium3D support in it. It requires the
softpipe gallium driver.
-D platforms=...
: This
parameter controls which windowing systems will be supported.
Available linux platforms are x11 and wayland.
-D vulkan-drivers=auto
:
This switch enables support for the Vulkan graphics API. It
automatically builds all graphics drivers that are available for
Vulkan. If you wish to build specific drivers, valid options
include:
-
amd
(for AMD Radeon HD 7730 or
newer AMD GPUs)
-
intel
(for Intel GPUs shipped
with Skylake or newer CPUs, or as a dedicated PCIe card)
-
intel_hasvk
(for Intel GPUs
shipped with Ivy Bridge, Haswell, or Broadwell CPUs)
-
nouveau
(for GTX 16XX, RTX 20XX,
or newer NVIDIA GPUs; this driver is maturing and is already
quite performant, although less so than the NVIDIA-560.35.03 driver; however, it
is a good replacement, especially when used with Gallium3D
zink
)
-
swrast
(using CPU for 3D
rasterization. Note that it's much slower than using a modern
3D-capable GPU)
You may replace auto
with a
comma-separated list to build only a subset of these drivers if you
precisely know which drivers you need, for example: -D vulkan-drivers=amd,nouveau,swrast
.
-D valgrind=disabled
: This
parameter disables the usage of Valgrind during the build process.
Remove this parameter if you have Valgrind installed, and wish to
check for memory leaks.
-D video-codecs=all
: This
parameter enables building all the video codecs as they are
disabled by default to avoid legal issues. It would be prudent to
not distribute your build if you set this option. The matter is
still unclear, however. See this Debian
bug report for more info.
-D libunwind=disabled
: This
parameter disables the usage of libunwind.
-D glvnd=enabled
: This
parameter disables this package from building its own OpenGL
library and uses the libraries provided by libglvnd-1.7.0. Omit
parameter if you do not want to use Steam-1.0.0.82.
Otherwise, keep the parameter and install libglvnd-1.7.0 before
compiling this package.
meson configure -D
build-tests=true: This command will reconfigure the
build to set -D build-tests=true
, but
keep the other options specified in the meson setup command unchanged. It
allows ninja test to
build and run unit tests.
-D egl-native-platform="..."
: This
parameter controls which Embedded Graphics Library support will be
built. Available linux options are auto (default), x11, wayland,
surfaceless, and drm.
sed -i
's/\/usr\/lib\//\/usr\/lib32\//g' ./build.ninja:
This package is stubborn and likes to link against LLVM libraries
in /lib
, even on a multilib
installation, so this command tells this package to link against
libraries in the proper directory.