Introduction to Mesa
Mesa offers a wide variety of
graphic software, like the OpenGL libraries and drivers, Vulkan
drivers, and other drivers.
Important
Read About OpenGL to decide if you want to install
OpenGL implementations from this provider. If you want to install
libglvnd-1.7.0, install that FIRST before installing this package
so that this package's OpenGL implementations do not get built.
Note
Mesa is updated relatively
often. You may want to use the latest available 25.1.x mesa
version.
Note
An Internet connection is needed for building the Nouveau Vulkan
driver. The system certificate store may need to be set up with
make-ca-1.16 before building this package.
Note
This may take a while to build. Feel free to do something else
while this is building.
Mesa Dependencies
Required
libdrm-2.4.124, mako-1.3.10, PyYAML-6.0.2, and
Xorg
Libraries
Recommended
-
Cbindgen-0.29.0, make-ca-1.16,
Meson Toolchain Files rust-bindgen-0.71.1, and rustc-1.87.0 (required for Nouveau Vulkan;
if the recommended dependencies are met, not counting
Meson Toolchain Files, setting
auto
or all
for vulkan-drivers=
will build them
by default, which is set for the lib32 build down below)
-
Glslang-15.3.0 (required for Vulkan
support)
-
libclc-20.1.5 (required for the Intel
Iris Gallium3D)
-
libva-2.22.0 (to provide VA-API support
for some Gallium3D 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-20.1.5 (required for the r300, r600,
and radeonsi drivers, and the LLVMpipe software rasterizer;
Clang in LLVM is required for Vulkan Swrast)
-
ply-3.11
(required for Intel Vulkan)
-
Vulkan-Loader-1.4.313 (required
for the Zink Gallium3D driver)
-
wayland-protocols-1.44 (required
for many desktop environments and recommended for GTK)
Optional
GBM
from Mesa-25.1.1,
libgcrypt, libglvnd-1.7.0, libunwind-1.8.1,
lm-sensors, Nettle-3.10.1,
valgrind, Mesa-Demos
(provides more than 300 demos to test Mesa), Bellagio OpenMAX Integration
Layer (for mobile platforms), and
libtizonia
Installation of Mesa
Install Mesa by running the
following commands:
mkdir build &&
cd build &&
meson setup \
--prefix=/usr \
--buildtype=release \
-D platforms=x11,wayland \
-D gallium-drivers=auto \
-D vulkan-drivers=auto \
-D gles1=disabled \
-D video-codecs=all \
-D valgrind=disabled \
-D libunwind=disabled \
.. &&
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-25.1.1
Command Explanations
Note
Inspect meson_options.txt
or
meson.options
for a full list of
options.
--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 platforms=...
: This
parameter controls which windowing systems will be supported.
Available linux platforms are x11 and wayland.
-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)
-
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 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 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 gles1=disabled
: This
flag disables building a deprecated spec of OpenGL ES.
-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 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 libunwind=disabled
: This
parameter disables the usage of libunwind.
-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.
-D gles2=disabled
: If you don't need
OpenGL ES, use this option. Be sure to read the section
called “About GLES (OpenGL ES)”.
-D legacy-x11="..."
This parameter
controls which legacy X11 features get built-in support. Available
linux options are none (default) and dri2. These features are
rarely needed anymore.
-D libgbm-external=true
: This links
against the system-installed libgbm
and disables building the GBM if GBM from Mesa-25.1.1 is installed.
Whenever updating this package, it is recommended to also update
the GBM.
BINDGEN_EXTRA_CLANG_ARGS="-m32"
: This
variable ensures that rust-bindgen-0.71.1 generates
bindings that don't go out of bounds when compiling lib32 Nouveau
Vulkan.
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.
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.