<!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>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>
