<!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>Environment Variables</title>
  <link rel="stylesheet" type="text/css" href="mesa.css">
</head>
<body>

<div class="header">
  The Mesa 3D Graphics Library
</div>

<iframe src="contents.html"></iframe>
<div class="content">

<h1>Environment Variables</h1>

<p>
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.
</p>


<h2>LibGL environment variables</h2>

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

<h2>Core Mesa environment variables</h2>

<dl>
<dt><code>MESA_NO_ASM</code></dt>
<dd>if set, disables all assembly language optimizations</dd>
<dt><code>MESA_NO_MMX</code></dt>
<dd>if set, disables Intel MMX optimizations</dd>
<dt><code>MESA_NO_3DNOW</code></dt>
<dd>if set, disables AMD 3DNow! optimizations</dd>
<dt><code>MESA_NO_SSE</code></dt>
<dd>if set, disables Intel SSE optimizations</dd>
<dt><code>MESA_NO_ERROR</code></dt>
<dd>if set to 1, error checking is disabled as per <code>KHR_no_error</code>.
    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.</dd>
<dt><code>MESA_DEBUG</code></dt>
<dd>if set, error messages are printed to stderr.  For example,
    if the application generates a <code>GL_INVALID_ENUM</code> error, a
    corresponding error message indicating where the error occurred, and
    possibly why, will be printed to stderr. For release builds,
    <code>MESA_DEBUG</code> defaults to off (no debug output).
    <code>MESA_DEBUG</code> accepts the following comma-separated list of
    named flags, which adds extra behaviour to just set
    <code>MESA_DEBUG=1</code>:
    <dl>
      <dt><code>silent</code></dt>
      <dd>turn off debug messages. Only useful for debug builds.</dd>
      <dt><code>flush</code></dt>
      <dd>flush after each drawing command</dd>
      <dt><code>incomplete_tex</code></dt>
      <dd>extra debug messages when a texture is incomplete</dd>
      <dt><code>incomplete_fbo</code></dt>
      <dd>extra debug messages when a fbo is incomplete</dd>
      <dt><code>context</code></dt>
      <dd>create a debug context (see <code>GLX_CONTEXT_DEBUG_BIT_ARB</code>)
          and print error and performance messages to stderr (or
          <code>MESA_LOG_FILE</code>).</dd>
    </dl>
</dd>
<dt><code>MESA_LOG_FILE</code></dt>
<dd>specifies a file name for logging all errors, warnings,
    etc., rather than stderr</dd>
<dt><code>MESA_TEX_PROG</code></dt>
<dd>if set, implement conventional texture env modes with
    fragment programs (intended for developers only)</dd>
<dt><code>MESA_TNL_PROG</code></dt>
<dd>if set, implement conventional vertex transformation operations with
    vertex programs (intended for developers only). Setting this variable
    automatically sets the <code>MESA_TEX_PROG</code> variable as well.</dd>
<dt><code>MESA_EXTENSION_OVERRIDE</code></dt>
<dd>can be used to enable/disable extensions. A value such as
    <code>GL_EXT_foo -GL_EXT_bar</code> will enable the
    <code>GL_EXT_foo</code> extension and disable the
    <code>GL_EXT_bar</code> extension.</dd>
<dt><code>MESA_EXTENSION_MAX_YEAR</code></dt>
<dd>The <code>GL_EXTENSIONS</code> 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.</dd>
<dt><code>MESA_GL_VERSION_OVERRIDE</code></dt>
<dd>changes the value returned by
<code>glGetString(GL_VERSION)</code> and possibly the GL API type.
<ul>
  <li>The format should be <code>MAJOR.MINOR[FC|COMPAT]</code>
  <li><code>FC</code> is an optional suffix that indicates a forward
      compatible context. This is only valid for versions &gt;= 3.0.
  <li><code>COMPAT</code> is an optional suffix that indicates a
      compatibility context or <code>GL_ARB_compatibility</code> support.
      This is only valid for versions &gt;= 3.1.
  <li>GL versions &lt;= 3.0 are set to a compatibility (non-Core)
      profile
  <li>GL versions = 3.1, depending on the driver, it may or may not
      have the <code>ARB_compatibility</code> extension enabled.
  <li>GL versions &gt;= 3.2 are set to a Core profile
  <li>Examples:
  <dl>
    <dt><code>2.1</code></dt>
    <dd>select a compatibility (non-Core) profile with GL version 2.1.</dd>
    <dt><code>3.0</code></dt>
    <dd>select a compatibility (non-Core) profile with GL version 3.0.</dd>
    <dt><code>3.0FC</code></dt>
    <dd>select a Core+Forward Compatible profile with GL version 3.0.</dd>
    <dt><code>3.1</code></dt>
    <dd>select GL version 3.1 with <code>GL_ARB_compatibility</code>
        enabled per the driver default.</dd>
    <dt><code>3.1FC</code></dt>
    <dd>select GL version 3.1 with forward compatibility and
        <code>GL_ARB_compatibility</code> disabled.</dd>
    <dt><code>3.1COMPAT</code></dt>
    <dd>select GL version 3.1 with <code>GL_ARB_compatibility</code>
        enabled.</dd>
    <dt><code>X.Y</code></dt>
    <dd>override GL version to X.Y without changing the profile.</dd>
    <dt><code>X.YFC</code></dt>
    <dd>select a Core+Forward Compatible profile with GL version X.Y.</dd>
    <dt><code>X.YCOMPAT</code></dt>
    <dd>select a Compatibility profile with GL version X.Y.</dd>
  </dl>
  <li>Mesa may not really implement all the features of the given
      version. (for developers only)
</ul>
</dd>
<dt><code>MESA_GLES_VERSION_OVERRIDE</code></dt>
<dd>changes the value returned by <code>glGetString(GL_VERSION)</code>
    for OpenGL ES.
<ul>
<li> The format should be <code>MAJOR.MINOR</code>
<li> Examples: <code>2.0</code>, <code>3.0</code>, <code>3.1</code>
<li> Mesa may not really implement all the features of the given version.
(for developers only)
</ul>
</dd>
<dt><code>MESA_GLSL_VERSION_OVERRIDE</code></dt>
<dd>changes the value returned by
    <code>glGetString(GL_SHADING_LANGUAGE_VERSION)</code>.
    Valid values are integers, such as <code>130</code>.  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)
</dd>
<dt><code>MESA_GLSL_CACHE_DISABLE</code></dt>
<dd>if set to <code>true</code>, disables the GLSL shader cache</dd>
<dt><code>MESA_GLSL_CACHE_MAX_SIZE</code></dt>
<dd>if set, determines the maximum size of the on-disk cache of compiled GLSL
    programs. Should be set to a number optionally followed by <code>K</code>,
    <code>M</code>, or <code>G</code> 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.</dd>
<dt><code>MESA_GLSL_CACHE_DIR</code></dt>
<dd>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 <code>$XDG_CACHE_HOME/mesa_shader_cache</code> (if that
    variable is set), or else within <code>.cache/mesa_shader_cache</code>
    within the user's home directory.
</dd>
<dt><code>MESA_GLSL</code></dt>
<dd><a href="shading.html#envvars">shading language compiler options</a></dd>
<dt><code>MESA_NO_MINMAX_CACHE</code></dt>
<dd>when set, the minmax index cache is globally disabled.</dd>
<dt><code>MESA_SHADER_CAPTURE_PATH</code></dt>
<dd>see <a href="shading.html#capture">Capturing Shaders</a></dd>
<dt><code>MESA_SHADER_DUMP_PATH</code> and <code>MESA_SHADER_READ_PATH</code></dt>
<dd>see <a href="shading.html#replacement">Experimenting with Shader Replacements</a></dd>
<dt><code>MESA_VK_VERSION_OVERRIDE</code></dt>
<dd>changes the Vulkan physical device version
    as returned in <code>VkPhysicalDeviceProperties::apiVersion</code>.
  <ul>
    <li>The format should be <code>MAJOR.MINOR[.PATCH]</code></li>
    <li>This will not let you force a version higher than the driver's
        instance version as advertised by
        <code>vkEnumerateInstanceVersion</code></li>
    <li>This can be very useful for debugging but some features may not be
        implemented correctly. (For developers only)</li>
  </ul>
</dd>
</dl>


<h2>NIR passes enviroment variables</h2>
<p>
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.
</p>

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


<h2>Mesa Xlib driver environment variables</h2>

<p>
The following are only applicable to the Mesa Xlib software driver.
See the <a href="xlibdriver.html">Xlib software driver page</a> for details.
</p>
<dl>
<dt><code>MESA_RGB_VISUAL</code></dt>
<dd>specifies the X visual and depth for RGB mode</dd>
<dt><code>MESA_CI_VISUAL</code></dt>
<dd>specifies the X visual and depth for CI mode</dd>
<dt><code>MESA_BACK_BUFFER</code></dt>
<dd>specifies how to implement the back color buffer, either
    <code>pixmap</code> or <code>ximage</code></dd>
<dt><code>MESA_GAMMA</code></dt>
<dd>gamma correction coefficients for red, green, blue channels</dd>
<dt><code>MESA_XSYNC</code></dt>
<dd>enable synchronous X behavior (for debugging only)</dd>
<dt><code>MESA_GLX_FORCE_CI</code></dt>
<dd>if set, force GLX to treat 8bpp visuals as CI visuals</dd>
<dt><code>MESA_GLX_FORCE_ALPHA</code></dt>
<dd>if set, forces RGB windows to have an alpha channel.</dd>
<dt><code>MESA_GLX_DEPTH_BITS</code></dt>
<dd>specifies default number of bits for depth buffer.</dd>
<dt><code>MESA_GLX_ALPHA_BITS</code></dt>
<dd>specifies default number of bits for alpha channel.</dd>
</dl>


<h2>i945/i965 driver environment variables (non-Gallium)</h2>

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


<h2>Radeon driver environment variables (radeon, r200, and r300g)</h2>

<dl>
<dt><code>RADEON_NO_TCL</code></dt>
<dd>if set, disable hardware-accelerated Transform/Clip/Lighting.</dd>
</dl>


<h2>EGL environment variables</h2>

<p>
Mesa EGL supports different sets of environment variables.  See the
<a href="egl.html">Mesa EGL</a> page for the details.
</p>


<h2>Gallium environment variables</h2>

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

<h3>Clover state tracker environment variables</h3>

<dl>
<dt><code>CLOVER_EXTRA_BUILD_OPTIONS</code></dt>
<dd>allows specifying additional compiler and linker
    options. Specified options are appended after the options set by the OpenCL
    program in <code>clBuildProgram</code>.</dd>
<dt><code>CLOVER_EXTRA_COMPILE_OPTIONS</code></dt>
<dd>allows specifying additional compiler
    options. Specified options are appended after the options set by the OpenCL
    program in <code>clCompileProgram</code>.</dd>
<dt><code>CLOVER_EXTRA_LINK_OPTIONS</code></dt>
<dd>allows specifying additional linker
    options. Specified options are appended after the options set by the OpenCL
    program in <code>clLinkProgram</code>.</dd>
</dl>


<h3>Softpipe driver environment variables</h3>
<dl>
<dt><code>SOFTPIPE_DUMP_FS</code></dt>
<dd>if set, the softpipe driver will print fragment shaders to stderr</dd>
<dt><code>SOFTPIPE_DUMP_GS</code></dt>
<dd>if set, the softpipe driver will print geometry shaders to stderr</dd>
<dt><code>SOFTPIPE_NO_RAST</code></dt>
<dd>if set, rasterization is no-op'd.  For profiling purposes.</dd>
<dt><code>SOFTPIPE_USE_LLVM</code></dt>
<dd>if set, the softpipe driver will try to use LLVM JIT for
    vertex shading processing.</dd>
</dl>


<h3>LLVMpipe driver environment variables</h3>
<dl>
<dt><code>LP_NO_RAST</code></dt>
<dd>if set LLVMpipe will no-op rasterization</dd>
<dt><code>LP_DEBUG</code></dt>
<dd>a comma-separated list of debug options is accepted.  See the
    source code for details.</dd>
<dt><code>LP_PERF</code></dt>
<dd>a comma-separated list of options to selectively no-op various
    parts of the driver.  See the source code for details.</dd>
<dt><code>LP_NUM_THREADS</code></dt>
<dd>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.</dd>
</dl>

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

<h3>WGL environment variables</h3>
<dl>
<dt><code>WGL_SWAP_INTERVAL</code></dt>
<dd>to set a swap interval, equivalent to calling
    <code>wglSwapIntervalEXT()</code> in an application.  If this
    environment variable is set, application calls to
    <code>wglSwapIntervalEXT()</code> will have no effect.</dd>
</dl>

<h3>VA-API state tracker environment variables</h3>
<dl>
<dt><code>VAAPI_MPEG4_ENABLED</code></dt>
<dd>enable MPEG4 for VA-API, disabled by default.</dd>
</dl>


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


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

</div>
</body>
</html>
