The Mesa 3D Graphics Library

Environment Variables

Normally, no environment variables need to be set. Most of the environment variables used by Mesa/Gallium are for debugging purposes, but they can sometimes be useful for debugging end-user issues.

LibGL environment variables

LIBGL_DEBUG
If defined debug information will be printed to stderr. If set to verbose additional information will be printed.
LIBGL_DRIVERS_PATH
colon-separated list of paths to search for DRI drivers
LIBGL_ALWAYS_INDIRECT
if set to true, forces an indirect rendering context/connection.
LIBGL_ALWAYS_SOFTWARE
if set to true, always use software rendering
LIBGL_NO_DRAWARRAYS
if set to true, do not use DrawArrays GLX protocol (for debugging)
LIBGL_SHOW_FPS
print framerate to stdout based on the number of glXSwapBuffers calls per second.
LIBGL_DRI3_DISABLE
disable DRI3 if set to true.

Core Mesa environment variables

MESA_NO_ASM
if set, disables all assembly language optimizations
MESA_NO_MMX
if set, disables Intel MMX optimizations
MESA_NO_3DNOW
if set, disables AMD 3DNow! optimizations
MESA_NO_SSE
if set, disables Intel SSE optimizations
MESA_NO_ERROR
if set to 1, error checking is disabled as per KHR_no_error. This will result in undefined behaviour for invalid use of the api, but can reduce CPU use for apps that are known to be error free.
MESA_DEBUG
if set, error messages are printed to stderr. For example, if the application generates a GL_INVALID_ENUM error, a corresponding error message indicating where the error occurred, and possibly why, will be printed to stderr. For release builds, MESA_DEBUG defaults to off (no debug output). MESA_DEBUG accepts the following comma-separated list of named flags, which adds extra behaviour to just set MESA_DEBUG=1:
silent
turn off debug messages. Only useful for debug builds.
flush
flush after each drawing command
incomplete_tex
extra debug messages when a texture is incomplete
incomplete_fbo
extra debug messages when a fbo is incomplete
context
create a debug context (see GLX_CONTEXT_DEBUG_BIT_ARB) and print error and performance messages to stderr (or MESA_LOG_FILE).
MESA_LOG_FILE
specifies a file name for logging all errors, warnings, etc., rather than stderr
MESA_TEX_PROG
if set, implement conventional texture env modes with fragment programs (intended for developers only)
MESA_TNL_PROG
if set, implement conventional vertex transformation operations with vertex programs (intended for developers only). Setting this variable automatically sets the MESA_TEX_PROG variable as well.
MESA_EXTENSION_OVERRIDE
can be used to enable/disable extensions. A value such as GL_EXT_foo -GL_EXT_bar will enable the GL_EXT_foo extension and disable the GL_EXT_bar extension.
MESA_EXTENSION_MAX_YEAR
The GL_EXTENSIONS string returned by Mesa is sorted by extension year. If this variable is set to year X, only extensions defined on or before year X will be reported. This is to work-around a bug in some games where the extension string is copied into a fixed-size buffer without truncating. If the extension string is too long, the buffer overrun can cause the game to crash. This is a work-around for that.
MESA_GL_VERSION_OVERRIDE
changes the value returned by glGetString(GL_VERSION) and possibly the GL API type.
  • The format should be MAJOR.MINOR[FC|COMPAT]
  • FC is an optional suffix that indicates a forward compatible context. This is only valid for versions >= 3.0.
  • COMPAT is an optional suffix that indicates a compatibility context or GL_ARB_compatibility support. This is only valid for versions >= 3.1.
  • GL versions <= 3.0 are set to a compatibility (non-Core) profile
  • GL versions = 3.1, depending on the driver, it may or may not have the ARB_compatibility extension enabled.
  • GL versions >= 3.2 are set to a Core profile
  • Examples:
    2.1
    select a compatibility (non-Core) profile with GL version 2.1.
    3.0
    select a compatibility (non-Core) profile with GL version 3.0.
    3.0FC
    select a Core+Forward Compatible profile with GL version 3.0.
    3.1
    select GL version 3.1 with GL_ARB_compatibility enabled per the driver default.
    3.1FC
    select GL version 3.1 with forward compatibility and GL_ARB_compatibility disabled.
    3.1COMPAT
    select GL version 3.1 with GL_ARB_compatibility enabled.
    X.Y
    override GL version to X.Y without changing the profile.
    X.YFC
    select a Core+Forward Compatible profile with GL version X.Y.
    X.YCOMPAT
    select a Compatibility profile with GL version X.Y.
  • Mesa may not really implement all the features of the given version. (for developers only)
MESA_GLES_VERSION_OVERRIDE
changes the value returned by glGetString(GL_VERSION) for OpenGL ES.
  • The format should be MAJOR.MINOR
  • Examples: 2.0, 3.0, 3.1
  • Mesa may not really implement all the features of the given version. (for developers only)
MESA_GLSL_VERSION_OVERRIDE
changes the value returned by glGetString(GL_SHADING_LANGUAGE_VERSION). Valid values are integers, such as 130. Mesa will not really implement all the features of the given language version if it's higher than what's normally reported. (for developers only)
MESA_GLSL_CACHE_DISABLE
if set to true, disables the GLSL shader cache
MESA_GLSL_CACHE_MAX_SIZE
if set, determines the maximum size of the on-disk cache of compiled GLSL programs. Should be set to a number optionally followed by K, M, or G to specify a size in kilobytes, megabytes, or gigabytes. By default, gigabytes will be assumed. And if unset, a maximum size of 1GB will be used. Note: A separate cache might be created for each architecture that Mesa is installed for on your system. For example under the default settings you may end up with a 1GB cache for x86_64 and another 1GB cache for i386.
MESA_GLSL_CACHE_DIR
if set, determines the directory to be used for the on-disk cache of compiled GLSL programs. If this variable is not set, then the cache will be stored in $XDG_CACHE_HOME/mesa_shader_cache (if that variable is set), or else within .cache/mesa_shader_cache within the user's home directory.
MESA_GLSL
shading language compiler options
MESA_NO_MINMAX_CACHE
when set, the minmax index cache is globally disabled.
MESA_SHADER_CAPTURE_PATH
see Capturing Shaders
MESA_SHADER_DUMP_PATH and MESA_SHADER_READ_PATH
see Experimenting with Shader Replacements
MESA_VK_VERSION_OVERRIDE
changes the Vulkan physical device version as returned in VkPhysicalDeviceProperties::apiVersion.
  • The format should be MAJOR.MINOR[.PATCH]
  • This will not let you force a version higher than the driver's instance version as advertised by vkEnumerateInstanceVersion
  • This can be very useful for debugging but some features may not be implemented correctly. (For developers only)

NIR passes enviroment variables

The following are only applicable for drivers that uses NIR, as they modify the behaviour for the common NIR_PASS and NIR_PASS_V macros, that wrap calls to NIR lowering/optimizations.

NIR_PRINT
If defined, the resulting NIR shader will be printed out at each succesful NIR lowering/optimization call.
NIR_TEST_CLONE
If defined, cloning a NIR shader would be tested at each succesful NIR lowering/optimization call.
NIR_TEST_SERIALIZE
If defined, serialize and deserialize a NIR shader would be tested at each succesful NIR lowering/optimization call.

Mesa Xlib driver environment variables

The following are only applicable to the Mesa Xlib software driver. See the Xlib software driver page for details.

MESA_RGB_VISUAL
specifies the X visual and depth for RGB mode
MESA_CI_VISUAL
specifies the X visual and depth for CI mode
MESA_BACK_BUFFER
specifies how to implement the back color buffer, either pixmap or ximage
MESA_GAMMA
gamma correction coefficients for red, green, blue channels
MESA_XSYNC
enable synchronous X behavior (for debugging only)
MESA_GLX_FORCE_CI
if set, force GLX to treat 8bpp visuals as CI visuals
MESA_GLX_FORCE_ALPHA
if set, forces RGB windows to have an alpha channel.
MESA_GLX_DEPTH_BITS
specifies default number of bits for depth buffer.
MESA_GLX_ALPHA_BITS
specifies default number of bits for alpha channel.

i945/i965 driver environment variables (non-Gallium)

INTEL_NO_HW
if set to 1, prevents batches from being submitted to the hardware. This is useful for debugging hangs, etc.
INTEL_DEBUG
a comma-separated list of named flags, which do various things:
ann
annotate IR in assembly dumps
aub
dump batches into an AUB trace for use with simulation tools
bat
emit batch information
blit
emit messages about blit operations
blorp
emit messages about the blorp operations (blits & clears)
buf
emit messages about buffer objects
clip
emit messages about the clip unit (for old gens, includes the CLIP program)
color
use color in output
cs
dump shader assembly for compute shaders
do32
generate compute shader SIMD32 programs even if workgroup size doesn't exceed the SIMD16 limit
dri
emit messages about the DRI interface
fbo
emit messages about framebuffers
fs
dump shader assembly for fragment shaders
gs
dump shader assembly for geometry shaders
hex
print instruction hex dump with the disassembly
l3
emit messages about the new L3 state during transitions
miptree
emit messages about miptrees
no8
don't generate SIMD8 fragment shader
no16
suppress generation of 16-wide fragment shaders. useful for debugging broken shaders
nocompact
disable instruction compaction
nodualobj
suppress generation of dual-object geometry shader code
nofc
disable fast clears
norbc
disable single sampled render buffer compression
optimizer
dump shader assembly to files at each optimization pass and iteration that make progress
perf
emit messages about performance issues
perfmon
emit messages about AMD_performance_monitor
pix
emit messages about pixel operations
prim
emit messages about drawing primitives
reemit
mark all state dirty on each draw call
sf
emit messages about the strips & fans unit (for old gens, includes the SF program)
shader_time
record how much GPU time is spent in each shader
spill_fs
force spilling of all registers in the scalar backend (useful to debug spilling code)
spill_vec4
force spilling of all registers in the vec4 backend (useful to debug spilling code)
state
emit messages about state flag tracking
submit
emit batchbuffer usage statistics
sync
after sending each batch, emit a message and wait for that batch to finish rendering
tcs
dump shader assembly for tessellation control shaders
tes
dump shader assembly for tessellation evaluation shaders
tex
emit messages about textures.
urb
emit messages about URB setup
vert
emit messages about vertex assembly
vs
dump shader assembly for vertex shaders
INTEL_SCALAR_VS (or TCS, TES, GS)
force scalar/vec4 mode for a shader stage (Gen8-9 only)
INTEL_PRECISE_TRIG
if set to 1, true or yes, then the driver prefers accuracy over performance in trig functions.

Radeon driver environment variables (radeon, r200, and r300g)

RADEON_NO_TCL
if set, disable hardware-accelerated Transform/Clip/Lighting.

EGL environment variables

Mesa EGL supports different sets of environment variables. See the Mesa EGL page for the details.

Gallium environment variables

GALLIUM_HUD
draws various information on the screen, like framerate, cpu load, driver statistics, performance counters, etc. Set GALLIUM_HUD=help and run e.g. glxgears for more info.
GALLIUM_HUD_PERIOD
sets the hud update rate in seconds (float). Use zero to update every frame. The default period is 1/2 second.
GALLIUM_HUD_VISIBLE
control default visibility, defaults to true.
GALLIUM_HUD_TOGGLE_SIGNAL
toggle visibility via user specified signal. Especially useful to toggle hud at specific points of application and disable for unencumbered viewing the rest of the time. For example, set GALLIUM_HUD_VISIBLE to false and GALLIUM_HUD_TOGGLE_SIGNAL to 10 (SIGUSR1). Use kill -10 <pid> to toggle the hud as desired.
GALLIUM_HUD_DUMP_DIR
specifies a directory for writing the displayed hud values into files.
GALLIUM_DRIVER
useful in combination with LIBGL_ALWAYS_SOFTWARE=true for choosing one of the software renderers softpipe, llvmpipe or swr.
GALLIUM_LOG_FILE
specifies a file for logging all errors, warnings, etc. rather than stderr.
GALLIUM_PRINT_OPTIONS
if non-zero, print all the Gallium environment variables which are used, and their current values.
GALLIUM_DUMP_CPU
if non-zero, print information about the CPU on start-up
TGSI_PRINT_SANITY
if set, do extra sanity checking on TGSI shaders and print any errors to stderr.
DRAW_FSE
???
DRAW_NO_FSE
???
DRAW_USE_LLVM
if set to zero, the draw module will not use LLVM to execute shaders, vertex fetch, etc.
ST_DEBUG
controls debug output from the Mesa/Gallium state tracker. Setting to tgsi, for example, will print all the TGSI shaders. See src/mesa/state_tracker/st_debug.c for other options.

Clover state tracker environment variables

CLOVER_EXTRA_BUILD_OPTIONS
allows specifying additional compiler and linker options. Specified options are appended after the options set by the OpenCL program in clBuildProgram.
CLOVER_EXTRA_COMPILE_OPTIONS
allows specifying additional compiler options. Specified options are appended after the options set by the OpenCL program in clCompileProgram.
CLOVER_EXTRA_LINK_OPTIONS
allows specifying additional linker options. Specified options are appended after the options set by the OpenCL program in clLinkProgram.

Softpipe driver environment variables

SOFTPIPE_DUMP_FS
if set, the softpipe driver will print fragment shaders to stderr
SOFTPIPE_DUMP_GS
if set, the softpipe driver will print geometry shaders to stderr
SOFTPIPE_NO_RAST
if set, rasterization is no-op'd. For profiling purposes.
SOFTPIPE_USE_LLVM
if set, the softpipe driver will try to use LLVM JIT for vertex shading processing.

LLVMpipe driver environment variables

LP_NO_RAST
if set LLVMpipe will no-op rasterization
LP_DEBUG
a comma-separated list of debug options is accepted. See the source code for details.
LP_PERF
a comma-separated list of options to selectively no-op various parts of the driver. See the source code for details.
LP_NUM_THREADS
an integer indicating how many threads to use for rendering. Zero turns off threading completely. The default value is the number of CPU cores present.

VMware SVGA driver environment variables

SVGA_FORCE_SWTNL
force use of software vertex transformation
SVGA_NO_SWTNL
don't allow software vertex transformation fallbacks (will often result in incorrect rendering).
SVGA_DEBUG
for dumping shaders, constant buffers, etc. See the code for details.
SVGA_EXTRA_LOGGING
if set, enables extra logging to the vmware.log file, such as the OpenGL program's name and command line arguments.
SVGA_NO_LOGGING
if set, disables logging to the vmware.log file. This is useful when using Valgrind because it otherwise crashes when initializing the host log feature.

See the driver code for other, lesser-used variables.

WGL environment variables

WGL_SWAP_INTERVAL
to set a swap interval, equivalent to calling wglSwapIntervalEXT() in an application. If this environment variable is set, application calls to wglSwapIntervalEXT() will have no effect.

VA-API state tracker environment variables

VAAPI_MPEG4_ENABLED
enable MPEG4 for VA-API, disabled by default.

VC4 driver environment variables

VC4_DEBUG
a comma-separated list of named flags, which do various things:
cl
dump command list during creation
qpu
dump generated QPU instructions
qir
dump QPU IR during program compile
nir
dump NIR during program compile
tgsi
dump TGSI during program compile
shaderdb
dump program compile information for shader-db analysis
perf
print during performance-related events
norast
skip actual hardware execution of commands
always_flush
flush after each draw call
always_sync
wait for finish after each flush
dump
write a GPU command stream trace file (VC4 simulator only)

RADV driver environment variables

RADV_DEBUG
a comma-separated list of named flags, which do various things:
allbos
force all allocated buffers to be referenced in submissions
allentrypoints
enable all device/instance entrypoints
checkir
validate the LLVM IR before LLVM compiles the shader
errors
display more info about errors
info
show GPU-related information
metashaders
dump internal meta shaders
nobinning
disable primitive binning
nocache
disable shaders cache
nocompute
disable compute queue
nodcc
disable Delta Color Compression (DCC) on images
nodynamicbounds
do not check OOB access for dynamic descriptors
nofastclears
disable fast color/depthstencil clears
nohiz
disable HIZ for depthstencil images
noibs
disable directly recording command buffers in GPU-visible memory
noloadstoreopt
disable LLVM SILoadStoreOptimizer pass
nomemorycache
disable memory shaders cache
nongg
disable NGG for GFX10+
noop
do not submit any IBs
nooutoforder
disable out-of-order rasterization
noshaderballot
disable shader ballot
nothreadllvm
disable LLVM threaded compilation
preoptir
dump LLVM IR before any optimizations
shaders
dump shaders
shaderstats
dump shader statistics
spirv
dump SPIR-V
startup
display info at startup
syncshaders
synchronize shaders after all draws/dispatches
vmfaults
check for VM memory faults via dmesg
zerovram
initialize all memory allocated in VRAM as zero
RADV_FORCE_FAMILY
force the driver to use a specific family eg. gfx900 (developers only)
RADV_PERFTEST
a comma-separated list of named flags, which do various things:
aco
enable ACO experimental compiler
bolist
enable the global BO list
cswave32
enable wave32 for compute shaders (GFX10+)
dccmsaa
enable DCC for MSAA images
dfsm
enable dfsm
gewave32
enable wave32 for vertex/tess/geometry shaders (GFX10+)
localbos
enable local BOs
pswave32
enable wave32 for pixel shaders (GFX10+)
shader_ballot
enable shader ballot
tccompatcmask
enable TC-compat cmask for MSAA images
RADV_SECURE_COMPILE_THREADS
maximum number of secure compile threads (up to 32)
RADV_TEX_ANISO
force anisotropy filter (up to 16)
RADV_TRACE_FILE
generate cmdbuffer tracefiles when a GPU hang is detected

radeonsi driver environment variables

AMD_DEBUG
a comma-separated list of named flags, which do various things:

Disable features / workaround flags (useful to diagnose an issue):

nodma
Disable SDMA
nodmaclear
Disable SDMA clears
nodmacopyimage
Disable SDMA image copies
zerovram
Clear VRAM allocations.
nodcc
Disable DCC.
nodccclear
Disable DCC fast clear.
nodccfb
Disable separate DCC on the main framebuffer
nodccmsaa
Disable DCC for MSAA
nodpbb
Disable DPBB.
nodfsm
Disable DFSM.
notiling
Disable tiling
nofmask
Disable MSAA compression
nohyperz
Disable Hyper-Z
norbplus
Disable RB+.
no2d
Disable 2D tiling

Info flags:

info
Print driver information
tex
Print texture info
compute
Print compute info
vm
Print virtual addresses when creating resources

Print shaders flags:

vs
Print vertex shaders
ps
Print pixel shaders
gs
Print geometry shaders
tcs
Print tessellation control shaders
tes
Print tessellation evaluation shaders
cs
Print compute shaders
noir
Don't print the LLVM IR
nonir
Don't print NIR when printing shaders
noasm
Don't print disassembled shaders
preoptir
Print the LLVM IR before initial optimizations

Shader compilation tuning flags:

sisched
Enable LLVM SI Machine Instruction Scheduler.
gisel
Enable LLVM global instruction selector.
w32ge
Use Wave32 for vertex, tessellation, and geometry shaders.
w32ps
Use Wave32 for pixel shaders.
w32cs
Use Wave32 for computes shaders.
w64ge
Use Wave64 for vertex, tessellation, and geometry shaders.
w64ps
Use Wave64 for pixel shaders.
w64cs
Use Wave64 for computes shaders.
checkir
Enable additional sanity checks on shader IR
mono
Use old-style monolithic shaders compiled on demand
nooptvariant
Disable compiling optimized shader variants.

Advanced usage flags:

forcedma
Use SDMA for all operations when possible.
nowc
Disable GTT write combining
check_vm
Check VM faults and dump debug info.
reserve_vmid
Force VMID reservation per context.
nogfx
Disable graphics. Only multimedia compute paths can be used.
nongg
Disable NGG and use the legacy pipeline.
nggc
Always use NGG culling even when it can hurt.
nonggc
Disable NGG culling.
alwayspd
Always enable the primitive discard compute shader.
pd
Enable the primitive discard compute shader for large draw calls.
nopd
Disable the primitive discard compute shader.
switch_on_eop
Program WD/IA to switch on end-of-packet.
nooutoforder
Disable out-of-order rasterization
dpbb
Enable DPBB.
dfsm
Enable DFSM.

Other Gallium drivers have their own environment variables. These may change frequently so the source code should be consulted for details.