xref: /aosp_15_r20/external/mesa3d/docs/envvars.rst (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1Environment Variables
2=====================
3
4Normally, no environment variables need to be set. Most of the
5environment variables used by Mesa/Gallium are for debugging purposes,
6but they can sometimes be useful for debugging end-user issues.
7
8LibGL environment variables
9---------------------------
10
11.. envvar:: LIBGL_DEBUG
12
13   If defined debug information will be printed to stderr. If set to
14   ``verbose`` additional information will be printed.
15
16.. envvar:: LIBGL_ALWAYS_INDIRECT
17
18   if set to ``true``, forces an indirect rendering context/connection.
19
20.. envvar:: LIBGL_ALWAYS_SOFTWARE
21
22   if set to ``true``, always use software rendering
23
24.. envvar:: LIBGL_NO_DRAWARRAYS
25
26   if set to ``true``, do not use DrawArrays GLX protocol (for
27   debugging)
28
29.. envvar:: LIBGL_DRI2_DISABLE
30
31   disable DRI2 if set to ``true``.
32
33.. envvar:: LIBGL_DRI3_DISABLE
34
35   disable DRI3 if set to ``true``.
36
37.. envvar:: LIBGL_KOPPER_DISABLE
38
39   disable Vulkan swapchains with Zink if set to ``true``.
40   In general, this should not be used unless you know what you are
41   doing. Some examples of "knowing what you are doing" include:
42   - using a VK driver which has no WSI implementation for your display server
43   - profiling the DRI frontend against your VK driver's WSI implementation
44
45.. envvar:: LIBGL_KOPPER_DRI2
46
47   disable DRI3 with Zink if set to ``true``.
48   In general, this should not be used unless you know what you are
49   doing. Some examples of "knowing what you are doing" include:
50   - running xrdp
51   - using a VK driver which doesn't support modifiers
52
53Core Mesa environment variables
54-------------------------------
55
56.. envvar:: MESA_NO_ERROR
57
58   if set to 1, error checking is disabled as per :ext:`GL_KHR_no_error`.
59   This will result in undefined behavior for invalid use of the API, but
60   can reduce CPU use for apps that are known to be error free.
61
62.. envvar:: MESA_DEBUG
63
64   if set, error messages are printed to stderr. For example, if the
65   application generates a ``GL_INVALID_ENUM`` error, a corresponding
66   error message indicating where the error occurred, and possibly why,
67   will be printed to stderr. For release builds, :envvar:`MESA_DEBUG`
68   defaults to off (no debug output). :envvar:`MESA_DEBUG` accepts the
69   following comma-separated list of named flags, which adds extra
70   behavior to just set :envvar:`MESA_DEBUG` to ``1``:
71
72   ``silent``
73      turn off debug messages. Only useful for debug builds.
74   ``flush``
75      flush after each drawing command
76   ``incomplete_tex``
77      extra debug messages when a texture is incomplete
78   ``incomplete_fbo``
79      extra debug messages when a FBO is incomplete
80   ``context``
81      create a debug context (see ``GLX_CONTEXT_DEBUG_BIT_ARB``) and
82      print error and performance messages to stderr (or
83      ``MESA_LOG_FILE``).
84
85.. envvar:: MESA_PROCESS_NAME
86
87   if set, overrides the process name string used internally for various
88   purposes (e.g. for driconf option matching, logging, artifact storage,
89   etc.).
90
91.. envvar:: MESA_LOG_FILE
92
93   specifies a file name for logging all errors, warnings, etc., rather
94   than stderr
95
96.. envvar:: MESA_EXTENSION_OVERRIDE
97
98   can be used to enable/disable extensions. A value such as
99   ``GL_EXT_foo -GL_EXT_bar`` will enable the ``GL_EXT_foo`` extension
100   and disable the ``GL_EXT_bar`` extension. Note that this will override
101   extensions override configured using driconf.
102
103.. envvar:: MESA_EXTENSION_MAX_YEAR
104
105   The ``GL_EXTENSIONS`` string returned by Mesa is sorted by extension
106   year. If this variable is set to year X, only extensions defined on
107   or before year X will be reported. This is to work-around a bug in
108   some games where the extension string is copied into a fixed-size
109   buffer without truncating. If the extension string is too long, the
110   buffer overrun can cause the game to crash. This is a work-around for
111   that.
112
113.. envvar:: MESA_GL_VERSION_OVERRIDE
114
115   changes the value returned by ``glGetString(GL_VERSION)`` and
116   possibly the GL API type.
117
118   -  The format should be ``MAJOR.MINOR[FC|COMPAT]``
119   -  ``FC`` is an optional suffix that indicates a forward compatible
120      context. This is only valid for versions >= 3.0.
121   -  ``COMPAT`` is an optional suffix that indicates a compatibility
122      context or :ext:`GL_ARB_compatibility` support. This is only valid
123      for versions >= 3.1.
124   -  GL versions <= 3.0 are set to a compatibility (non-Core) profile
125   -  GL versions = 3.1, depending on the driver, it may or may not have
126      the :ext:`GL_ARB_compatibility` extension enabled.
127   -  GL versions >= 3.2 are set to a Core profile
128   -  Examples:
129
130      ``2.1``
131         select a compatibility (non-Core) profile with GL version 2.1.
132      ``3.0``
133         select a compatibility (non-Core) profile with GL version 3.0.
134      ``3.0FC``
135         select a Core+Forward Compatible profile with GL version 3.0.
136      ``3.1``
137         select GL version 3.1 with :ext:`GL_ARB_compatibility` enabled
138         per the driver default.
139      ``3.1FC``
140         select GL version 3.1 with forward compatibility and
141         :ext:`GL_ARB_compatibility` disabled.
142      ``3.1COMPAT``
143         select GL version 3.1 with :ext:`GL_ARB_compatibility` enabled.
144      ``X.Y``
145         override GL version to X.Y without changing the profile.
146      ``X.YFC``
147         select a Core+Forward Compatible profile with GL version X.Y.
148      ``X.YCOMPAT``
149         select a Compatibility profile with GL version X.Y.
150
151   -  Mesa may not really implement all the features of the given
152      version. (for developers only)
153
154.. envvar:: MESA_GLES_VERSION_OVERRIDE
155
156   changes the value returned by ``glGetString(GL_VERSION)`` for OpenGL
157   ES.
158
159   -  The format should be ``MAJOR.MINOR``
160   -  Examples: ``2.0``, ``3.0``, ``3.1``
161   -  Mesa may not really implement all the features of the given
162      version. (for developers only)
163
164.. envvar:: MESA_GLSL_VERSION_OVERRIDE
165
166   changes the value returned by
167   ``glGetString(GL_SHADING_LANGUAGE_VERSION)``. Valid values are
168   integers, such as ``130``. Mesa will not really implement all the
169   features of the given language version if it's higher than what's
170   normally reported. (for developers only)
171
172.. envvar:: MESA_DRICONF_EXECUTABLE_OVERRIDE
173
174   if set, overrides the "executable" string used specifically for driconf
175   option matching. This takes higher precedence over more general process
176   name override (e.g. MESA_PROCESS_NAME).
177
178.. envvar:: MESA_SHADER_CACHE_DISABLE
179
180   if set to ``true``, disables the on-disk shader cache. If set to
181   ``false``, enables the on-disk shader cache when it is disabled by
182   default.  Note that EGL_ANDROID_blob_cache is still enabled even
183   if on-disk shader cache is disabled.
184
185.. envvar:: MESA_SHADER_CACHE_MAX_SIZE
186
187   if set, determines the maximum size of the on-disk cache of compiled
188   shader programs. Should be set to a number optionally followed by
189   ``K``, ``M``, or ``G`` to specify a size in kilobytes, megabytes, or
190   gigabytes. By default, gigabytes will be assumed. And if unset, a
191   maximum size of 1GB will be used.
192
193   .. note::
194
195      A separate cache might be created for each architecture that Mesa is
196      installed for on your system. For example under the default settings
197      you may end up with a 1GB cache for x86_64 and another 1GB cache for
198      i386.
199
200.. envvar:: MESA_SHADER_CACHE_DIR
201
202   if set, determines the directory to be used for the on-disk cache of
203   compiled shader programs. If this variable is not set, then the cache
204   will be stored in ``$XDG_CACHE_HOME/mesa_shader_cache_db`` (if that
205   variable is set), or else within ``.cache/mesa_shader_cache_db`` within
206   the user's home directory.
207
208.. envvar:: MESA_SHADER_CACHE_SHOW_STATS
209
210   if set to ``true``, keeps hit/miss statistics for the shader cache.
211   These statistics are printed when the app terminates.
212
213.. envvar:: MESA_DISK_CACHE_SINGLE_FILE
214
215   if set to 1, enables the single file Fossilize DB on-disk shader
216   cache implementation instead of the default Mesa-DB cache
217   implementation. This implementation allows for loading of precompiled
218   cache DBs via :envvar:`MESA_DISK_CACHE_READ_ONLY_FOZ_DBS` or
219   :envvar:`MESA_DISK_CACHE_READ_ONLY_FOZ_DBS_DYNAMIC_LIST`. This
220   implementation does not support cache size limits via
221   :envvar:`MESA_SHADER_CACHE_MAX_SIZE`. If
222   :envvar:`MESA_SHADER_CACHE_DIR` is not set, the cache will be stored
223   in ``$XDG_CACHE_HOME/mesa_shader_cache_sf`` (if that variable is set)
224   or else within ``.cache/mesa_shader_cache_sf`` within the user's home
225   directory.
226
227.. envvar:: MESA_DISK_CACHE_MULTI_FILE
228
229   if set to 1, enables the multi file on-disk shader cache implementation
230   instead of the default Mesa-DB cache implementation.
231   This implementation increases the overall disk usage.
232   If :envvar:`MESA_SHADER_CACHE_DIR` is not set, the cache will be stored
233   in ``$XDG_CACHE_HOME/mesa_shader_cache`` (if that variable is set)
234   or else within ``.cache/mesa_shader_cache`` within the user's home
235   directory.
236
237.. envvar:: MESA_DISK_CACHE_READ_ONLY_FOZ_DBS
238
239   if set with :envvar:`MESA_DISK_CACHE_SINGLE_FILE` enabled, references
240   a string of comma separated file paths to read only Fossilize DB
241   shader caches for loading at initialization. The file paths are
242   relative to the cache directory and do not include suffixes,
243   referencing both the cache DB and its index file. E.g.
244   ``MESA_DISK_CACHE_SINGLE_FILE=filename1`` refers to ``filename1.foz``
245   and ``filename1_idx.foz``. A limit of 8 DBs can be loaded and this limit
246   is shared with :envvar:`MESA_DISK_CACHE_READ_ONLY_FOZ_DBS_DYNAMIC_LIST`.
247
248.. envvar:: MESA_DISK_CACHE_DATABASE_NUM_PARTS
249
250   specifies number of mesa-db cache parts, default is 50.
251
252.. envvar:: MESA_DISK_CACHE_DATABASE_EVICTION_SCORE_2X_PERIOD
253
254   Mesa-DB cache eviction algorithm calculates weighted score for the
255   cache items. The weight is doubled based on the last access time of
256   cache entry. By default period of weight doubling is set to one month.
257   Period value is given in seconds.
258
259.. envvar:: MESA_DISK_CACHE_READ_ONLY_FOZ_DBS_DYNAMIC_LIST
260
261   if set with :envvar:`MESA_DISK_CACHE_SINGLE_FILE` enabled, references
262   a text file that contains a new-line separated list of read only
263   Fossilize DB shader caches to load. The list file is modifiable at
264   runtime to allow for loading read only caches after initialization
265   unlike :envvar:`MESA_DISK_CACHE_READ_ONLY_FOZ_DBS`. This variable
266   takes an absolute path to the list file. The list file must exist at
267   initialization for updating to occur. Cache files in the list take
268   relative paths to the current cache directory like
269   :envvar:`MESA_DISK_CACHE_READ_ONLY_FOZ_DBS`. A limit of 8 DBs can be
270   loaded and this limit is shared with
271   :envvar:`MESA_DISK_CACHE_READ_ONLY_FOZ_DBS`.
272
273.. envvar:: MESA_DISK_CACHE_COMBINE_RW_WITH_RO_FOZ
274
275   if set to 1, enables simultaneous use of :abbr:`RW (read-write)` and
276   :abbr:`RW (read-write)` Fossilize DB caches. At first, data will be
277   retrieved from the RO Fossilize cache. If data isn't found in the RO
278   cache, then it will be retrieved from the RW cache.
279
280.. envvar:: MESA_GLSL
281
282   :ref:`shading language compiler options <envvars>`
283
284.. envvar:: MESA_NO_MINMAX_CACHE
285
286   when set, the minmax index cache is globally disabled.
287
288.. envvar:: MESA_SHADER_CAPTURE_PATH
289
290   see :ref:`Capturing Shaders <capture>`
291
292.. envvar:: MESA_SHADER_DUMP_PATH
293
294   see :ref:`Experimenting with Shader Replacements <replacement>`
295
296.. envvar:: MESA_SHADER_READ_PATH
297
298   see :ref:`Experimenting with Shader Replacements <replacement>`
299
300.. envvar:: MESA_VK_VERSION_OVERRIDE
301
302   changes the Vulkan physical device version as returned in
303   ``VkPhysicalDeviceProperties::apiVersion``.
304
305   -  The format should be ``MAJOR.MINOR[.PATCH]``
306   -  This will not let you force a version higher than the driver's
307      instance version as advertised by ``vkEnumerateInstanceVersion``
308   -  This can be very useful for debugging but some features may not be
309      implemented correctly. (For developers only)
310
311.. envvar:: MESA_VK_WSI_PRESENT_MODE
312
313   overrides the WSI present mode clients specify in
314   ``VkSwapchainCreateInfoKHR::presentMode``. Values can be ``fifo``,
315   ``relaxed``, ``mailbox`` or ``immediate``.
316
317.. envvar:: MESA_VK_WSI_HEADLESS_SWAPCHAIN
318
319   Forces all swapchains to be headless (no rendering will be display
320   in the swapchain's window).
321
322.. envvar:: MESA_VK_ABORT_ON_DEVICE_LOSS
323
324   causes the Vulkan driver to call abort() immediately after detecting a
325   lost device.  This is extremely useful when testing as it prevents the
326   test suite from continuing on with a lost device.
327
328.. envvar:: MESA_VK_ENABLE_SUBMIT_THREAD
329
330   for Vulkan drivers which support real timeline semaphores, this forces
331   them to use a submit thread from the beginning, regardless of whether or
332   not they ever see a wait-before-signal condition.
333
334.. envvar:: MESA_VK_DEVICE_SELECT_DEBUG
335
336   print debug info about device selection decision-making
337
338.. envvar:: MESA_VK_TRACE
339
340   A comma-separated list of trace types used for offline analysis. The
341   option names are equal to the file extension. Traces are dumped into ``/tmp``.
342   Captures can be triggered by pressing ``F1`` with the application window
343   focused (Currently X11 only) or via :envvar:`MESA_VK_TRACE_FRAME` and
344   :envvar:`MESA_VK_TRACE_TRIGGER`.
345
346   .. list-table::
347      :header-rows: 1
348
349      * - File extension
350        - Offline analysis tool
351        - Supported drivers
352      * - ``rmv``
353        - Radeon Memory Visualizer
354        - ``RADV``
355      * - ``rgp``
356        - Radeon GPU Profiler
357        - ``RADV``
358      * - ``rra``
359        - Radeon Raytracing Analyzer
360        - ``RADV``
361      * - ``ctxroll``
362        - Context rolls
363        - ``RADV``
364
365   - Creating RMV captures requires the ``scripts/setup.sh`` script in the
366     Radeon Developer Tools folder to be run beforehand
367
368.. envvar:: MESA_VK_TRACE_FRAME
369
370   Specifies a frame index at which a trace capture is automatically triggered.
371
372.. envvar:: MESA_VK_TRACE_TRIGGER
373
374   Specifies a trigger file. Creating the file triggers the capture. (e.g.
375   ``export MESA_VK_TRACE_TRIGGER=/tmp/trigger`` and then ``touch /tmp/trigger``)
376
377.. envvar:: MESA_LOADER_DRIVER_OVERRIDE
378
379   chooses a different driver binary such as ``etnaviv`` or ``zink``.
380
381.. envvar:: DRI_PRIME_DEBUG
382
383   print debug info about device selection decision-making
384
385.. envvar:: DRI_PRIME
386
387   the default GPU is the one used by Wayland/Xorg or the one connected to a
388   display. This variable allows to select a different GPU. It applies to OpenGL
389   and Vulkan (in this case "select" means the GPU will be first in the reported
390   physical devices list). The supported syntaxes are:
391
392   - ``DRI_PRIME=N``: selects the Nth non-default GPU (N > 0).
393   - ``DRI_PRIME=pci-0000_02_00_0``: selects the GPU connected to this PCIe bus
394   - ``DRI_PRIME=vendor_id:device_id``: selects the first GPU matching these ids.
395
396   For Vulkan it's possible to append ``!``, in which case only the selected GPU
397   will be exposed to the application (e.g.: DRI_PRIME=1!).
398
399   .. note::
400
401      ``lspci -nn | grep VGA`` can be used to know the PCIe bus or ids to use.
402
403.. envvar:: DRIRC_CONFIGDIR
404
405   If set, overrides the global search-directories used when searching for
406   drirc config files. The user-local one will still be used. Mostly useful for
407   internal debugging.
408
409NIR passes environment variables
410--------------------------------
411
412The following are only applicable for drivers that uses NIR, as they
413modify the behavior for the common ``NIR_PASS`` and ``NIR_PASS_V`` macros,
414that wrap calls to NIR lowering/optimizations.
415
416.. envvar:: NIR_DEBUG
417
418   a comma-separated list of debug options to apply to NIR
419   shaders. Use ``NIR_DEBUG=help`` to print a list of available options.
420
421.. envvar:: NIR_SKIP
422
423   a comma-separated list of optimization/lowering passes to skip.
424
425Mesa Xlib driver environment variables
426--------------------------------------
427
428The following are only applicable to the Mesa Xlib software driver. See
429the :doc:`Xlib software driver page <xlibdriver>` for details.
430
431.. envvar:: MESA_RGB_VISUAL
432
433   specifies the X visual and depth for RGB mode
434
435.. envvar:: MESA_BACK_BUFFER
436
437   specifies how to implement the back color buffer, either ``pixmap``
438   or ``ximage``
439
440.. envvar:: MESA_XSYNC
441
442   enable synchronous X behavior (for debugging only)
443
444.. envvar:: MESA_GLX_FORCE_ALPHA
445
446   if set, forces RGB windows to have an alpha channel.
447
448.. envvar:: MESA_GLX_DEPTH_BITS
449
450   specifies default number of bits for depth buffer.
451
452.. envvar:: MESA_GLX_ALPHA_BITS
453
454   specifies default number of bits for alpha channel.
455
456Mesa WGL driver environment variables
457-------------------------------------
458
459The following are only applicable to the Mesa WGL driver, which is in use
460on Windows.
461
462.. envvar:: WGL_FORCE_MSAA
463
464   if set to a positive value, specifies the number of MSAA samples to
465   force when choosing the display configuration.
466
467.. envvar:: WGL_DISABLE_ERROR_DIALOGS
468
469   if set to 1, true or yes, disables Win32 error dialogs. Useful for
470   automated test-runs.
471
472Intel driver environment variables
473----------------------------------------------------
474
475.. envvar:: INTEL_BLACKHOLE_DEFAULT
476
477   if set to 1, true or yes, then the OpenGL implementation will
478   default ``GL_BLACKHOLE_RENDER_INTEL`` to true, thus disabling any
479   rendering.
480
481.. envvar:: INTEL_DEBUG
482
483   a comma-separated list of named flags, which do various things:
484
485   ``ann``
486      annotate IR in assembly dumps
487   ``bat``
488      emit batch information. Can control in which frames batches
489      get dumped using ``INTEL_DEBUG_BATCH_FRAME_*``, where
490      ``INTEL_DEBUG_BATCH_FRAME_START`` <= frame < ``INTEL_DEBUG_BATCH_FRAME_STOP``
491   ``blit``
492      emit messages about blit operations
493   ``blorp``
494      emit messages about the blorp operations (blits & clears)
495   ``buf``
496      emit messages about buffer objects
497   ``bt``
498      emit messages binding tables
499   ``capture-all``
500      flag all buffers to be captured by the kernel driver when
501      generating an error stage after a GPU hang
502   ``clip``
503      emit messages about the clip unit (for old gens, includes the CLIP
504      program)
505   ``color``
506      use color in output
507   ``cs``
508      dump shader assembly for compute shaders
509   ``do32``
510      generate compute shader SIMD32 programs even if workgroup size
511      doesn't exceed the SIMD16 limit
512   ``draw_bkp``
513      Add semaphore wait before/after draw call count.
514      ``INTEL_DEBUG_BKP_BEFORE_DRAW_COUNT`` or
515      ``INTEL_DEBUG_BKP_AFTER_DRAW_COUNT`` can control draw call number.
516      To make test wait forever, we need to set preempt_timeout_ms and
517      i915.enable_hangcheck to zero.
518   ``fall``
519      emit messages about performance issues (same as ``perf``)
520   ``fs``
521      dump shader assembly for fragment shaders
522   ``gs``
523      dump shader assembly for geometry shaders
524   ``heaps``
525      print information about the driver's heaps (ANV only)
526   ``hex``
527      print instruction hex dump with the disassembly
528   ``l3``
529      emit messages about the new L3 state during transitions
530   ``mesh``
531      dump shader assembly for mesh shaders
532   ``no8``
533      don't generate SIMD8 fragment shader
534   ``no16``
535      suppress generation of 16-wide fragment shaders. useful for
536      debugging broken shaders
537   ``no32``
538      suppress generation of 32-wide fragment shaders. useful for
539      debugging broken shaders
540   ``no-oaconfig``
541      disable HW performance metric configuration, and anything
542      related to i915-perf (useful when running on simulation)
543   ``nocompact``
544      disable instruction compaction
545   ``nodualobj``
546      suppress generation of dual-object geometry shader code
547   ``nofc``
548      disable fast clears
549   ``noccs``
550      disable lossless color compression
551   ``optimizer``
552      dump shader assembly to files at each optimization pass and
553      iteration that make progress
554   ``pc``
555      emit messages about PIPE_CONTROL instruction usage
556   ``perf``
557      emit messages about performance issues
558   ``perfmon``
559      emit messages about :ext:`GL_AMD_performance_monitor`
560   ``perf-symbol-names``
561      use performance counter symbols instead of the counter name
562      (counter symbols are like variable names, it's sometimes easier
563      to work with when you have lots of metrics to collect)
564   ``reemit``
565      mark all state dirty on each draw call
566   ``rt``
567      dump shader assembly for ray tracing shaders
568   ``sf``
569      emit messages about the strips & fans unit (for old gens, includes
570      the SF program)
571   ``shader-print``
572      allow developer print traces added by `brw_nir_printf` to be
573      printed out on the console
574   ``soft64``
575      enable implementation of software 64bit floating point support
576   ``sparse``
577      dump usage of sparse resources
578   ``spill_fs``
579      force spilling of all registers in the scalar backend (useful to
580      debug spilling code)
581   ``spill_vec4``
582      force spilling of all registers in the vec4 backend (useful to
583      debug spilling code)
584   ``stall``
585      inserts a stall on the GPU after each draw/dispatch command to
586      wait for it to finish before starting any new work.
587   ``submit``
588      emit batchbuffer usage statistics
589   ``sync``
590      after sending each batch, wait on the CPU for that batch to
591      finish rendering
592   ``swsb-stall``
593      Insert sync NOP after each instruction. This is only valid for Gfx12+.
594   ``task``
595      dump shader assembly for task shaders
596   ``tcs``
597      dump shader assembly for tessellation control shaders
598   ``tcs8``
599      force usage of 8-patches tessellation control shaders (only
600      for gfx 9-11)
601   ``tes``
602      dump shader assembly for tessellation evaluation shaders
603   ``tex``
604      emit messages about textures.
605   ``urb``
606      emit messages about URB setup
607   ``vs``
608      dump shader assembly for vertex shaders
609   ``wm``
610      dump shader assembly for fragment shaders (same as ``fs``)
611   ``cl-quiet``
612      quiets the OpenCL warnings recommending use of Intel compute-runtime
613
614.. envvar:: INTEL_DECODE
615
616   a comma-separated list of enable/disable flags configuring the
617   output produced by ``INTEL_DEBUG=bat`` (use with
618   ``INTEL_DECODE=+color,-floats``) :
619
620   ``color``
621      print colored output
622
623   ``floats``
624      try to decode floating point data in buffers
625
626   ``full``
627      print additional custom information for instructions (usually
628      pulling more information by inspecting memory)
629
630   ``offsets``
631      print offsets of instructions
632
633.. envvar:: INTEL_EXTENDED_METRICS
634
635   By default, only a standard set of GPU metrics are advertised. This
636   reduces time to collect metrics and hides infrequently used metrics.
637   To enable all metrics, set value to 1.
638
639.. envvar:: INTEL_FORCE_PROBE
640
641   A comma-separated list of device probe override values. The basic
642   format is ``<pci-id>[,<pci-id>,...]``. The wildcard value of ``*``
643   will specify all known PCI IDs. If ``!`` precedes a PCI ID, or the
644   wildcard value, then the device support will be disabled. All
645   numbers are interpreted in base 16, and a ``0x`` prefix is
646   optional. Values specified later take precedence, so the wildcard
647   probably should only be used at the beginning.
648
649   Some examples :
650
651   ``1234,!abcd``
652      Device 0x1234 would be forced on and 0xabcd would be disabled.
653
654   ``1234,!*``
655      All devices are disabled since the wildcard appears later.
656
657   ``!*,0x1234``
658      All devices disabled except 0x1234 which is forced on.
659
660   ``*,!0x1234``
661      All devices are forced on, except 0x1234 which is disabled.
662
663   ``!0x1234,1234``
664      Support for device 0x1234 is forced on since the enable appears
665      later.
666
667   .. note::
668      If a device requires using :envvar:`INTEL_FORCE_PROBE` to force
669      it to load, then Mesa does not have full support for the device.
670      It may have limited, or possibly no functionality within Mesa at
671      this point. It is recommended to upgrade to a Mesa which does
672      not require :envvar:`INTEL_FORCE_PROBE` for the device as soon
673      as it is available.
674
675.. envvar:: INTEL_MEASURE
676
677   Collects GPU timestamps over common intervals, and generates a CSV report
678   to show how long rendering took.  The overhead of collection is limited to
679   the flushing that is required at the interval boundaries for accurate
680   timestamps. By default, timing data is sent to ``stderr``.  To direct output
681   to a file:
682
683   ``INTEL_MEASURE=file=/tmp/measure.csv {workload}``
684
685   To begin capturing timestamps at a particular frame:
686
687   ``INTEL_MEASURE=file=/tmp/measure.csv,start=15 {workload}``
688
689   To capture only 23 frames:
690
691   ``INTEL_MEASURE=count=23 {workload}``
692
693   To capture frames 15-37, stopping before frame 38:
694
695   ``INTEL_MEASURE=start=15,count=23 {workload}``
696
697   Designate an asynchronous control file with:
698
699   ``INTEL_MEASURE=control=path/to/control.fifo {workload}``
700
701   As the workload runs, enable capture for 5 frames with:
702
703   ``$ echo 5 > path/to/control.fifo``
704
705   Enable unbounded capture:
706
707   ``$ echo -1 > path/to/control.fifo``
708
709   and disable with:
710
711   ``$ echo 0 > path/to/control.fifo``
712
713   Select the boundaries of each snapshot with:
714
715   ``INTEL_MEASURE=draw``
716      Collects timings for every render (DEFAULT)
717
718   ``INTEL_MEASURE=rt``
719      Collects timings when the render target changes
720
721   ``INTEL_MEASURE=batch``
722      Collects timings when batches are submitted
723
724   ``INTEL_MEASURE=frame``
725      Collects timings at frame boundaries
726
727   With ``INTEL_MEASURE=interval=5``, the duration of 5 events will be
728   combined into a single record in the output.  When possible, a single
729   start and end event will be submitted to the GPU to minimize
730   stalling.  Combined events will not span batches, except in
731   the case of ``INTEL_MEASURE=frame``.
732
733   Collect CPU timestamps instead of GPU timestamps.  Prints results
734   immediately instead of waiting for GPU execution.  Useful when used
735   with interactive debug to know which frame, or where in frame, you
736   are currently in.
737
738   ``INTEL_MEASURE=cpu {workload}``
739
740.. envvar:: INTEL_MODIFIER_OVERRIDE
741
742   if set, determines the single DRM modifier reported back to (Vulkan)
743   applications, in order to make selecting modifier deterministic
744   between Vulkan driver and applications. The value can be one of the
745   supported modifiers on a platform, but other values are also acceptable
746   for debug purposes.
747
748.. envvar:: INTEL_NO_HW
749
750   if set to 1, true or yes, prevents batches from being submitted to the
751   hardware. This is useful for debugging hangs, etc.
752
753.. envvar:: INTEL_PRECISE_TRIG
754
755   if set to 1, true or yes, then the driver prefers accuracy over
756   performance in trig functions.
757
758.. envvar:: INTEL_SHADER_OPTIMIZER_PATH
759
760   if set, determines the directory to be used for overriding shader
761   assembly. The binaries with custom assembly should be placed in
762   this folder and have a name formatted as ``sha1_of_assembly.bin``.
763   The SHA-1 of a shader assembly is printed when assembly is dumped via
764   corresponding :envvar:`INTEL_DEBUG` flag (e.g. ``vs`` for vertex shader).
765   A binary could be generated from a dumped assembly by ``i965_asm``.
766   For :envvar:`INTEL_SHADER_ASM_READ_PATH` to work it is necessary to enable
767   dumping of corresponding shader stages via :envvar:`INTEL_DEBUG`.
768   It is advised to use ``nocompact`` flag of :envvar:`INTEL_DEBUG` when
769   dumping and overriding shader assemblies.
770   The success of assembly override would be signified by "Successfully
771   overrode shader with sha1 <SHA-1>" in stderr replacing the original
772   assembly.
773
774.. envvar:: INTEL_SHADER_ASM_READ_PATH
775
776   if set, determines the directory to be used for overriding shader
777   assembly. The binaries with custom assembly should be placed in
778   this folder and have a name formatted as ``sha1_of_assembly.bin``.
779   The SHA-1 of a shader assembly is printed when assembly is dumped via
780   corresponding :envvar:`INTEL_DEBUG` flag (e.g. ``vs`` for vertex shader).
781   A binary could be generated from a dumped assembly by ``i965_asm``.
782   For :envvar:`INTEL_SHADER_ASM_READ_PATH` to work it is necessary to enable
783   dumping of corresponding shader stages via :envvar:`INTEL_DEBUG`.
784   It is advised to use ``nocompact`` flag of :envvar:`INTEL_DEBUG` when
785   dumping and overriding shader assemblies.
786   The success of assembly override would be signified by "Successfully
787   overrode shader with sha1 <SHA-1>" in stderr replacing the original
788   assembly.
789
790.. envvar:: INTEL_SHADER_BIN_DUMP_PATH
791
792   if set, determines the directory to which the compiled shaders will be
793   dumped. They will be dumped as ``sha1_of_assembly.bin``, where the sha1
794   values will be the same as can be found in the :envvar:`INTEL_DEBUG`
795   output, and can be used for :envvar:`INTEL_SHADER_ASM_READ_PATH` input.
796
797   .. note::
798      Unlike the text form of shader dumping, :envvar:`INTEL_DEBUG`
799      does not affect on the list of shaders to dump. All generated shaders
800      are always dumped if :envvar:`INTEL_SHADER_BIN_DUMP_PATH` variable is
801      set.
802
803.. envvar:: INTEL_SIMD_DEBUG
804
805   a comma-separated list of named flags, which control simd dispatch widths:
806
807   ``fs8``
808      allow generation of SIMD8 fragment shader
809   ``fs16``
810      allow generation of SIMD16 fragment shader
811   ``fs32``
812      allow generation of SIMD32 fragment shader
813   ``cs8``
814      allow generation of SIMD8 compute shader
815   ``cs16``
816      allow generation of SIMD16 compute shader
817   ``cs32``
818      allow generation of SIMD32 compute shader
819   ``ts8``
820      allow generation of SIMD8 task shader
821   ``ts16``
822      allow generation of SIMD16 task shader
823   ``ts32``
824      allow generation of SIMD32 task shader
825   ``ms8``
826      allow generation of SIMD8 mesh shader
827   ``ms16``
828      allow generation of SIMD16 mesh shader
829   ``ms32``
830      allow generation of SIMD32 mesh shader
831   ``rt8``
832      allow generation of SIMD8 ray-tracing shader
833   ``rt16``
834      allow generation of SIMD16 ray-tracing shader
835   ``rt32``
836      allow generation of SIMD32 ray-tracing shader
837
838   If none of widths for particular shader stage was specified, then all
839   widths are allowed.
840
841Anvil(ANV) driver environment variables
842---------------------------------------
843
844.. envvar:: ANV_ENABLE_PIPELINE_CACHE
845
846   If defined to ``0`` or ``false``, this will disable pipeline
847   caching, forcing ANV to reparse and recompile any VkShaderModule
848   (SPIRV) it is given.
849
850.. envvar:: ANV_DISABLE_SECONDARY_CMD_BUFFER_CALLS
851
852   If defined to ``1`` or ``true``, this will prevent usage of self
853   modifying command buffers to implement ``vkCmdExecuteCommands``. As
854   a result of this, it will also disable :ext:`VK_KHR_performance_query`.
855
856.. envvar:: ANV_ALWAYS_BINDLESS
857
858   If defined to ``1`` or ``true``, this forces all descriptor sets to
859   use the internal :ref:`Bindless model`.
860
861.. envvar:: ANV_QUEUE_THREAD_DISABLE
862
863   If defined to ``1`` or ``true``, this disables support for timeline
864   semaphores.
865
866.. envvar:: ANV_USERSPACE_RELOCS
867
868   If defined to ``1`` or ``true``, this forces ANV to always do
869   kernel relocations in command buffers. This should only have an
870   effect on hardware that doesn't support soft-pinning (Ivybridge,
871   Haswell, Cherryview).
872
873.. envvar:: ANV_PRIMITIVE_REPLICATION_MAX_VIEWS
874
875   Specifies up to how many view shaders can be lowered to handle
876   :ext:`VK_KHR_multiview`. Beyond this number, multiview is implemented
877   using instanced rendering. If unspecified, the value default to
878   ``2``.
879
880.. envvar:: ANV_NO_GPL
881
882   If set to 1, true, or yes, then VK_EXT_graphics_pipeline_library
883   will be disabled.
884
885.. envvar:: ANV_SPARSE
886
887   By default, the sparse resources feature is enabled. However, if set to 0,
888   false, or no, it will be disabled.
889   Platforms older than Tiger Lake do not support this feature.
890
891.. envvar:: ANV_SPARSE_USE_TRTT
892
893   On platforms supported by Xe KMD (Lunar Lake and newer) this parameter
894   changes the implementation of sparse resources feature.
895   For i915 there is no option, sparse resources is always implemented with
896   TRTT.
897
898DRI environment variables
899-------------------------
900
901.. envvar:: DRI_NO_MSAA
902
903   disable MSAA for GLX/EGL MSAA visuals
904
905
906Vulkan mesa device select layer environment variables
907-----------------------------------------------------
908
909.. envvar:: MESA_VK_DEVICE_SELECT
910
911   when set to "list" prints the list of devices.
912   when set to "vid:did" number from PCI device. That PCI device is
913   selected as default. The default device is returned as the first
914   device in vkEnumeratePhysicalDevices API.
915   Using "vid:did!" will have the same effect as using the
916   ``MESA_VK_DEVICE_SELECT_FORCE_DEFAULT_DEVICE`` variable.
917
918.. envvar:: MESA_VK_DEVICE_SELECT_FORCE_DEFAULT_DEVICE
919
920   when set to 1, the device identified as default will be the only
921   one returned in vkEnumeratePhysicalDevices API.
922
923
924EGL environment variables
925-------------------------
926
927Mesa EGL supports different sets of environment variables. See the
928:doc:`Mesa EGL <egl>` page for the details.
929
930Gallium environment variables
931-----------------------------
932
933.. envvar:: GALLIUM_HUD
934
935   draws various information on the screen, like framerate, CPU load,
936   driver statistics, performance counters, etc. Set
937   :envvar:`GALLIUM_HUD` to ``help`` and run e.g. ``glxgears`` for more info.
938
939.. envvar:: GALLIUM_HUD_PERIOD
940
941   sets the HUD update rate in seconds (float). Use zero to update every
942   frame. The default period is 1/2 second.
943
944.. envvar:: GALLIUM_HUD_VISIBLE
945
946   control default visibility, defaults to true.
947
948.. envvar:: GALLIUM_HUD_OPACITY
949
950   control background opacity as an integer percentage (1-100), defaults to 66%.
951
952.. envvar:: GALLIUM_HUD_TOGGLE_SIGNAL
953
954   toggle visibility via user specified signal. Especially useful to
955   toggle HUD at specific points of application and disable for
956   unencumbered viewing the rest of the time. For example, set
957   :envvar:`GALLIUM_HUD_VISIBLE` to ``false`` and
958   :envvar:`GALLIUM_HUD_TOGGLE_SIGNAL` to ``10`` (``SIGUSR1``). Use
959   ``kill -10 <pid>`` to toggle the HUD as desired.
960
961.. envvar:: GALLIUM_HUD_SCALE
962
963   Scale HUD by an integer factor, for high DPI displays. Default is 1.
964
965.. envvar:: GALLIUM_HUD_ROTATION
966
967   Rotate the HUD by an integer number of degrees, the specified value must be
968   a multiple of 90. Default is 0.
969
970.. envvar:: GALLIUM_HUD_DUMP_DIR
971
972   specifies a directory for writing the displayed HUD values into
973   files.
974
975.. envvar:: GALLIUM_DRIVER
976
977   useful in combination with :envvar:`LIBGL_ALWAYS_SOFTWARE` = ``true`` for
978   choosing one of the software renderers ``softpipe`` or ``llvmpipe``.
979
980.. envvar:: GALLIUM_LOG_FILE
981
982   specifies a file for logging all errors, warnings, etc. rather than
983   stderr.
984
985.. envvar:: GALLIUM_PIPE_SEARCH_DIR
986
987   specifies an alternate search directory for pipe-loader which overrides
988   the compile-time path based on the install location.
989
990.. envvar:: GALLIUM_PRINT_OPTIONS
991
992   if non-zero, print all the Gallium environment variables which are
993   used, and their current values.
994
995.. envvar:: GALLIUM_TRACE
996
997   If set, this variable will cause the :ref:`trace` output to be written to the
998   specified file. Paths may be relative or absolute; relative paths are relative
999   to the working directory.  For example, setting it to "trace.xml" will cause
1000   the trace to be written to a file of the same name in the working directory.
1001
1002.. envvar:: GALLIUM_TRACE_TC
1003
1004   If enabled while :ref:`trace` is active, this variable specifies that the threaded context
1005   should be traced for drivers which implement it. By default, the driver thread is traced,
1006   which will include any reordering of the command stream from threaded context.
1007
1008.. envvar:: GALLIUM_TRACE_TRIGGER
1009
1010   If set while :ref:`trace` is active, this variable specifies a filename to monitor.
1011   Once the file exists (e.g., from the user running 'touch /path/to/file'), a single
1012   frame will be recorded into the trace output.
1013   Paths may be relative or absolute; relative paths are relative to the working directory.
1014
1015.. envvar:: GALLIUM_DUMP_CPU
1016
1017   if non-zero, print information about the CPU on start-up
1018
1019.. envvar:: TGSI_PRINT_SANITY
1020
1021   if set, do extra sanity checking on TGSI shaders and print any errors
1022   to stderr.
1023
1024.. envvar:: DRAW_FSE
1025
1026   Enable fetch-shade-emit middle-end even though its not correct (e.g.
1027   for Softpipe)
1028
1029.. envvar:: DRAW_NO_FSE
1030
1031   Disable fetch-shade-emit middle-end even when it is correct
1032
1033.. envvar:: DRAW_USE_LLVM
1034
1035   if set to zero, the draw module will not use LLVM to execute shaders,
1036   vertex fetch, etc.
1037
1038.. envvar:: ST_DEBUG
1039
1040   controls debug output from the Mesa/Gallium state tracker. Setting to
1041   ``tgsi``, for example, will print all the TGSI shaders. See
1042   :file:`src/mesa/state_tracker/st_debug.c` for other options.
1043
1044.. envvar:: GALLIUM_OVERRIDE_CPU_CAPS
1045
1046   Override CPU capabilities for LLVMpipe and Softpipe, possible values for x86:
1047   ``nosse``
1048   ``sse``
1049   ``sse2``
1050   ``sse3``
1051   ``ssse3``
1052   ``sse4.1``
1053   ``avx``
1054
1055Clover environment variables
1056----------------------------
1057
1058.. envvar:: CLOVER_DEVICE_TYPE
1059
1060   allows to overwrite the device type of devices. Possible values are
1061   ``accelerator``, ``cpu``, ``custom`` and ``gpu``
1062
1063.. envvar:: CLOVER_DEVICE_VERSION_OVERRIDE
1064
1065   overwrites the auto detected OpenCL version of a device. Possible values:
1066   ``1.0``
1067   ``1.1``
1068   ``1.2``
1069   ``2.0``
1070   ``2.1``
1071   ``2.2``
1072   ``3.0``
1073
1074.. envvar:: CLOVER_DEVICE_CLC_VERSION_OVERRIDE
1075
1076   overwrites the auto detected CLC version. Possible values:
1077   ``1.0``
1078   ``1.1``
1079   ``1.2``
1080   ``2.0``
1081   ``2.1``
1082   ``2.2``
1083   ``3.0``
1084
1085.. envvar:: CLOVER_EXTRA_BUILD_OPTIONS
1086
1087   allows specifying additional compiler and linker options. Specified
1088   options are appended after the options set by the OpenCL program in
1089   ``clBuildProgram``.
1090
1091.. envvar:: CLOVER_EXTRA_COMPILE_OPTIONS
1092
1093   allows specifying additional compiler options. Specified options are
1094   appended after the options set by the OpenCL program in
1095   ``clCompileProgram``.
1096
1097.. envvar:: CLOVER_EXTRA_LINK_OPTIONS
1098
1099   allows specifying additional linker options. Specified options are
1100   appended after the options set by the OpenCL program in
1101   ``clLinkProgram``.
1102
1103.. _rusticl-env-var:
1104
1105.. envvar:: IRIS_ENABLE_CLOVER
1106
1107   allows to enable experimental Clover NIR support with the iris driver if
1108   set to 1 or true.
1109
1110Rusticl environment variables
1111-----------------------------
1112
1113.. envvar:: RUSTICL_DEVICE_TYPE
1114
1115   allows to overwrite the device type of devices. Possible values are
1116   ``accelerator``, ``cpu``, ``custom`` and ``gpu``
1117
1118.. envvar:: RUSTICL_CL_VERSION
1119
1120   overwrites the auto detected OpenCL version of all devices. Specified as
1121   ``major.minor``.
1122
1123.. envvar:: RUSTICL_ENABLE
1124
1125   a comma-separated list of drivers to enable CL on. An optional list of
1126   comma-separated integers can be passed per driver to specify which devices
1127   to enable. Examples:
1128
1129   -  ``RUSTICL_ENABLE=iris`` (enables all iris devices)
1130   -  ``RUSTICL_ENABLE=iris:1,radeonsi:0,2`` (enables second iris and first
1131      and third radeonsi device)
1132
1133   Supported drivers (decent support with maybe a few conformance issues or bugs):
1134   ``iris``,
1135   ``llvmpipe``,
1136   ``nouveau``,
1137   ``panfrost``,
1138   ``radeonsi``,
1139   Experimental drivers (unknown level of support, expect conformance issues or major bugs):
1140   ``r600``
1141
1142.. envvar:: RUSTICL_FEATURES
1143
1144   a comma-separated list of features to enable. Those are disabled by default
1145   as they might not be stable enough or break OpenCL conformance.
1146
1147   - ``fp16`` enables OpenCL half support
1148   - ``fp64`` enables OpenCL double support
1149
1150.. envvar:: RUSTICL_DEBUG
1151
1152   a comma-separated list of debug channels to enable.
1153
1154   - ``allow_invalid_spirv`` disables validation of any input SPIR-V
1155   - ``clc`` dumps all OpenCL C source being compiled
1156   - ``nir`` dumps nirs in various compilation stages. Might print nothing if shader caching is
1157             enabled.
1158   - ``no_reuse_context`` pipe_contexts are not recycled
1159   - ``no_variants`` disable kernel variants (e.g. specialized binaries for offsets == 0)
1160   - ``perf`` prints a warning when hitting slow paths once
1161   - ``perfspam`` same as perf, but doesn't skip same warnings
1162   - ``program`` dumps compilation logs to stderr
1163   - ``sync`` waits on the GPU to complete after every event
1164   - ``validate`` validates any internally generated SPIR-Vs, e.g. through compiling OpenCL C code
1165
1166.. envvar:: RUSTICL_MAX_WORK_GROUPS
1167
1168   Limits the amount of threads per dimension in a work-group. Useful for splitting up long running
1169   tasks to increase responsiveness or to simulate the lowering of huge global sizes for testing.
1170
1171.. _clc-env-var:
1172
1173clc environment variables
1174-----------------------------
1175
1176.. envvar:: CLC_DEBUG
1177
1178   a comma-separated list of debug channels to enable.
1179
1180   - ``dump_llvm`` Dumps all generated LLVM IRs
1181   - ``dump_spirv`` Dumps all compiled, linked and specialized SPIR-Vs
1182   - ``verbose`` Enable debug logging of clc code
1183
1184Nine frontend environment variables
1185-----------------------------------
1186
1187.. envvar:: D3D_ALWAYS_SOFTWARE
1188
1189   an integer, which forces Nine to use the CPU instead of GPU acceleration.
1190
1191.. envvar:: NINE_DEBUG
1192
1193   a comma-separated list of named flags that do debugging things.
1194   Use ``NINE_DEBUG=help`` to print a list of available options.
1195
1196.. envvar:: NINE_FF_DUMP
1197
1198   a boolean, which dumps shaders generated by a fixed function (FF).
1199
1200.. envvar:: NINE_SHADER
1201
1202   a comma-separated list of named flags, which do alternate shader handling.
1203   Use ``NINE_SHADER=help`` to print a list of available options.
1204
1205.. envvar:: NINE_QUIRKS
1206
1207   a comma-separated list of named flags that do various things.
1208   Use ``NINE_DEBUG=help`` to print a list of available options.
1209
1210Softpipe driver environment variables
1211-------------------------------------
1212
1213.. envvar:: SOFTPIPE_DEBUG
1214
1215   a comma-separated list of named flags, which do various things:
1216
1217   ``vs``
1218      Dump vertex shader assembly to stderr
1219   ``fs``
1220      Dump fragment shader assembly to stderr
1221   ``gs``
1222      Dump geometry shader assembly to stderr
1223   ``cs``
1224      Dump compute shader assembly to stderr
1225   ``no_rast``
1226      rasterization is disabled. For profiling purposes.
1227   ``use_llvm``
1228      the Softpipe driver will try to use LLVM JIT for vertex
1229      shading processing.
1230
1231LLVMpipe driver environment variables
1232-------------------------------------
1233
1234.. envvar:: LP_NO_RAST
1235
1236   if set LLVMpipe will no-op rasterization
1237
1238.. envvar:: LP_DEBUG
1239
1240   a comma-separated list of debug options is accepted. See the source
1241   code for details.
1242
1243.. envvar:: LP_PERF
1244
1245   a comma-separated list of options to selectively no-op various parts
1246   of the driver. See the source code for details.
1247
1248.. envvar:: LP_NUM_THREADS
1249
1250   an integer indicating how many threads to use for rendering. Zero
1251   turns off threading completely. The default value is the number of
1252   CPU cores present.
1253
1254VMware SVGA driver environment variables
1255----------------------------------------
1256
1257.. envvar:: SVGA_FORCE_SWTNL
1258
1259   force use of software vertex transformation
1260
1261.. envvar:: SVGA_NO_SWTNL
1262
1263   don't allow software vertex transformation fallbacks (will often
1264   result in incorrect rendering).
1265
1266.. envvar:: SVGA_DEBUG
1267
1268   for dumping shaders, constant buffers, etc. See the code for details.
1269
1270.. envvar:: SVGA_EXTRA_LOGGING
1271
1272   if set, enables extra logging to the ``vmware.log`` file, such as the
1273   OpenGL program's name and command line arguments.
1274
1275.. envvar:: SVGA_NO_LOGGING
1276
1277   if set, disables logging to the ``vmware.log`` file. This is useful
1278   when using Valgrind because it otherwise crashes when initializing
1279   the host log feature.
1280
1281See the driver code for other, lesser-used variables.
1282
1283WGL environment variables
1284-------------------------
1285
1286.. envvar:: WGL_SWAP_INTERVAL
1287
1288   to set a swap interval, equivalent to calling
1289   ``wglSwapIntervalEXT()`` in an application. If this environment
1290   variable is set, application calls to ``wglSwapIntervalEXT()`` will
1291   have no effect.
1292
1293VA-API environment variables
1294----------------------------
1295
1296.. envvar:: VAAPI_MPEG4_ENABLED
1297
1298   enable MPEG4 for VA-API, disabled by default.
1299
1300VC4 driver environment variables
1301--------------------------------
1302
1303.. envvar:: VC4_DEBUG
1304
1305   a comma-separated list of named flags, which do various things. Use
1306   ``VC4_DEBUG=help`` to print a list of available options.
1307
1308V3D/V3DV driver environment variables
1309-------------------------------------
1310
1311.. envvar:: V3D_DEBUG
1312
1313   a comma-separated list of debug options. Use ``V3D_DEBUG=help`` to
1314   print a list of available options.
1315
1316
1317.. _radv env-vars:
1318
1319RADV driver environment variables
1320---------------------------------
1321
1322.. envvar:: RADV_DEBUG
1323
1324   a comma-separated list of named flags, which do various things:
1325
1326   ``llvm``
1327      enable LLVM compiler backend
1328   ``allbos``
1329      force all allocated buffers to be referenced in submissions
1330   ``checkir``
1331      validate the LLVM IR before LLVM compiles the shader
1332   ``epilogs``
1333      dump fragment shader epilogs
1334   ``extra_md``
1335      add extra information in bo metadata to help tools (umr)
1336   ``forcecompress``
1337      Enables DCC,FMASK,CMASK,HTILE in situations where the driver supports it
1338      but normally does not deem it beneficial.
1339   ``hang``
1340      enable GPU hangs detection and dump a report to
1341      $HOME/radv_dumps_<pid>_<time> if a GPU hang is detected
1342   ``img``
1343      Print image info
1344   ``info``
1345      show GPU-related information
1346   ``invariantgeom``
1347      Mark geometry-affecting outputs as invariant. This works around a common
1348      class of application bugs appearing as flickering.
1349   ``metashaders``
1350      dump internal meta shaders
1351   ``noatocdithering``
1352      disable dithering for alpha to coverage
1353   ``nobinning``
1354      disable primitive binning
1355   ``nocache``
1356      disable shaders cache
1357   ``nocompute``
1358      disable compute queue
1359   ``nodcc``
1360      disable Delta Color Compression (DCC) on images
1361   ``nodisplaydcc``
1362      disable Delta Color Compression (DCC) on displayable images
1363   ``nodynamicbounds``
1364      do not check OOB access for dynamic descriptors
1365   ``noeso``
1366      disable VK_EXT_shader_object
1367   ``nofastclears``
1368      disable fast color/depthstencil clears
1369   ``nofmask``
1370      disable FMASK compression on MSAA images (GFX6-GFX10.3)
1371   ``nogpl``
1372      disable VK_EXT_graphics_pipeline_library
1373   ``nohiz``
1374      disable HIZ for depthstencil images
1375   ``noibs``
1376      disable directly recording command buffers in GPU-visible memory
1377   ``nomeshshader``
1378      disable mesh shader support on GFX10.3+
1379   ``nongg``
1380      disable NGG for GFX10 and GFX10.3
1381   ``nonggc``
1382      disable NGG culling on GPUs where it's enabled by default (GFX10.3 only).
1383   ``nongg_gs``
1384      disable NGG GS for GFX10 and GFX10.3
1385   ``nort``
1386      skip executing vkCmdTraceRays and ray queries (RT extensions will still be
1387      advertised)
1388   ``notccompatcmask``
1389      disable TC-compat CMASK for MSAA surfaces
1390   ``noumr``
1391      disable UMR dumps during GPU hang detection (only with
1392      :envvar:`RADV_DEBUG` = ``hang``)
1393   ``novrsflatshading``
1394      disable VRS for flat shading (only on GFX10.3+)
1395   ``preoptir``
1396      dump LLVM IR before any optimizations
1397   ``prologs``
1398      dump vertex shader prologs
1399   ``shaders``
1400      dump shaders
1401   ``shaderstats``
1402      dump shader statistics
1403   ``shadowregs``
1404      enable register shadowing
1405   ``spirv``
1406      dump SPIR-V
1407   ``splitfma``
1408      split application-provided fused multiply-add in geometry stages
1409   ``startup``
1410      display info at startup
1411   ``syncshaders``
1412      synchronize shaders after all draws/dispatches
1413   ``zerovram``
1414      initialize all memory allocated in VRAM as zero
1415
1416.. envvar:: RADV_FORCE_FAMILY
1417
1418   create a null device to compile shaders without a AMD GPU (e.g. VEGA10)
1419
1420.. envvar:: RADV_FORCE_VRS
1421
1422   allow to force per-pipeline vertex VRS rates on GFX10.3+. This is only
1423   forced for pipelines that don't explicitly use VRS or flat shading.
1424   The supported values are 2x2, 1x2, 2x1 and 1x1. Only for testing purposes.
1425
1426.. envvar:: RADV_FORCE_VRS_CONFIG_FILE
1427
1428   similar to ``RADV_FORCE_VRS`` but allow to configure from a file. If present,
1429   this supersedes ``RADV_FORCE_VRS``.
1430
1431.. envvar:: RADV_PERFTEST
1432
1433   a comma-separated list of named flags, which do various things:
1434
1435   ``bolist``
1436      enable the global BO list
1437   ``cswave32``
1438      enable wave32 for compute shaders (GFX10+)
1439   ``dccmsaa``
1440      enable DCC for MSAA images
1441   ``dmashaders``
1442      upload shaders to invisible VRAM (might be useful for non-resizable BAR systems)
1443   ``emulate_rt``
1444      forces ray-tracing to be emulated in software on GFX10_3+ and enables
1445      rt extensions with older hardware.
1446   ``gewave32``
1447      enable wave32 for vertex/tess/geometry shaders (GFX10+)
1448   ``localbos``
1449      enable local BOs
1450   ``nggc``
1451      enable NGG culling on GPUs where it's not enabled by default (GFX10.1 only).
1452   ``nircache``
1453      cache per-stage NIR for graphics pipelines
1454   ``nosam``
1455      disable optimizations that get enabled when all VRAM is CPU visible.
1456   ``pswave32``
1457      enable wave32 for pixel shaders (GFX10+)
1458   ``rtwave32``
1459      enable wave32 for ray tracing shaders (GFX11+)
1460   ``rtwave64``
1461      enable wave64 for ray tracing shaders (GFX10-10.3)
1462   ``sam``
1463      enable optimizations to move more driver internal objects to VRAM.
1464   ``transfer_queue``
1465      enable experimental transfer queue support (GFX9+, not yet spec compliant)
1466   ``video_decode``
1467      enable experimental video decoding support
1468
1469.. envvar:: RADV_TEX_ANISO
1470
1471   force anisotropy filter (up to 16)
1472
1473.. envvar:: RADV_THREAD_TRACE_BUFFER_SIZE
1474
1475   set the SQTT/RGP buffer size in bytes (default value is 32MiB, the buffer is
1476   automatically resized if too small)
1477
1478.. envvar:: RADV_THREAD_TRACE_CACHE_COUNTERS
1479
1480   enable/disable SQTT/RGP cache counters on GFX10+ (enabled by default)
1481
1482.. envvar:: RADV_THREAD_TRACE_INSTRUCTION_TIMING
1483
1484   enable/disable SQTT/RGP instruction timing (enabled by default)
1485
1486.. envvar:: RADV_THREAD_TRACE_QUEUE_EVENTS
1487
1488   enable/disable SQTT/RGP queue events (enabled by default)
1489
1490.. envvar:: RADV_RRA_TRACE_VALIDATE
1491
1492   enable validation of captured acceleration structures. Can be
1493   useful if RRA crashes upon opening a trace.
1494
1495.. envvar:: RADV_RRA_TRACE_HISTORY_SIZE
1496
1497   set the ray history buffer size when capturing RRA traces (default value is 100MiB,
1498   small buffers may result in incomplete traces)
1499
1500.. envvar:: RADV_RRA_TRACE_RESOLUTION_SCALE
1501
1502   decrease the resolution used for dumping the ray history resolution when capturing
1503   RRA traces. This allows for dumping every Nth invocation along each dispatch dimension.
1504
1505.. envvar:: RADV_PROFILE_PSTATE
1506
1507   choose the specific pstate to enter when using thread tracing or when acquiring the
1508   profiling lock for performance queries.
1509
1510   ``standard``
1511      force GPU clocks to an arbitrary fixed level
1512   ``min_sclk``
1513      force the shader clock to its minimum level
1514   ``min_mclk``
1515      force the memory clock to its minimum level
1516   ``peak``
1517      force GPU clocks to their maximum level, this is the default value
1518
1519.. envvar:: ACO_DEBUG
1520
1521   a comma-separated list of named flags, which do various things:
1522
1523   ``validateir``
1524      validate the ACO IR at various points of compilation (enabled by
1525      default for debug/debugoptimized builds)
1526   ``novalidateir``
1527      disable ACO IR validation in debug/debugoptimized builds
1528   ``validatera``
1529      validate register assignment of ACO IR and catches many RA bugs
1530   ``force-waitcnt``
1531      force emitting waitcnt states if there is something to wait for
1532   ``force-waitdeps``
1533     force emitting waitcnt dependencies for debugging hazards on GFX10+
1534   ``novn``
1535      disable value numbering
1536   ``noopt``
1537      disable various optimizations
1538   ``nosched``
1539      disable pre-RA, ILP and VOPD instruction scheduling
1540   ``nosched-ilp``
1541      disable ILP instruction scheduling
1542   ``nosched-vopd``
1543      disable VOPD instruction scheduling
1544   ``perfinfo``
1545      print information used to calculate some pipeline statistics
1546   ``liveinfo``
1547      print liveness and register demand information before scheduling
1548
1549RadeonSI driver environment variables
1550-------------------------------------
1551
1552.. envvar:: radeonsi_no_infinite_interp
1553
1554   Kill PS with infinite interp coeff (might fix hangs)
1555
1556.. envvar:: radeonsi_clamp_div_by_zero
1557
1558   Clamp div by zero (x / 0 becomes FLT_MAX instead of NaN) (might fix rendering corruptions)
1559
1560.. envvar:: radeonsi_zerovram
1561
1562   Clear all allocated memory to 0 before usage (might fix rendering corruptions)
1563
1564.. envvar:: AMD_DEBUG
1565
1566   a comma-separated list of named flags, which do various things:
1567
1568   ``nodcc``
1569      Disable DCC.
1570   ``nodccclear``
1571      Disable DCC fast clear
1572   ``nodisplaydcc``
1573      disable Delta Color Compression (DCC) on displayable images
1574   ``nodccmsaa``
1575      Disable DCC for MSAA
1576   ``nodpbb``
1577      Disable DPBB. Overrules the dpbb enable option.
1578   ``noefc``
1579      Disable hardware based encoder color format conversion
1580   ``lowlatencyenc``
1581      Enable low latency encoding
1582   ``notiling``
1583      Disable tiling
1584   ``nofmask``
1585      Disable MSAA compression
1586   ``nohyperz``
1587      Disable Hyper-Z
1588   ``no2d``
1589      Disable 2D tiling
1590   ``info``
1591      Print driver information
1592   ``tex``
1593      Print texture info
1594   ``compute``
1595      Print compute info
1596   ``vm``
1597      Print virtual addresses when creating resources
1598   ``vs``
1599      Print vertex shaders
1600   ``ps``
1601      Print pixel shaders
1602   ``gs``
1603      Print geometry shaders
1604   ``tcs``
1605      Print tessellation control shaders
1606   ``tes``
1607      Print tessellation evaluation shaders
1608   ``cs``
1609      Print compute shaders
1610   ``noir``
1611      Don't print the LLVM IR
1612   ``nonir``
1613      Don't print NIR when printing shaders
1614   ``noasm``
1615      Don't print disassembled shaders
1616   ``preoptir``
1617      Print the LLVM IR before initial optimizations
1618   ``w32ge``
1619      Use Wave32 for vertex, tessellation, and geometry shaders.
1620   ``w32ps``
1621      Use Wave32 for pixel shaders.
1622   ``w32cs``
1623      Use Wave32 for computes shaders.
1624   ``w64ge``
1625      Use Wave64 for vertex, tessellation, and geometry shaders.
1626   ``w64ps``
1627      Use Wave64 for pixel shaders.
1628   ``w64cs``
1629      Use Wave64 for computes shaders.
1630   ``checkir``
1631      Enable additional sanity checks on shader IR
1632   ``mono``
1633      Use old-style monolithic shaders compiled on demand
1634   ``nooptvariant``
1635      Disable compiling optimized shader variants.
1636   ``useaco``
1637      Use ACO as shader compiler when possible
1638   ``nowc``
1639      Disable GTT write combining
1640   ``check_vm``
1641      Check VM faults and dump debug info.
1642   ``reserve_vmid``
1643      Force VMID reservation per context.
1644   ``nongg``
1645      Disable NGG and use the legacy pipeline.
1646   ``nggc``
1647      Always use NGG culling even when it can hurt.
1648   ``nonggc``
1649      Disable NGG culling.
1650   ``switch_on_eop``
1651      Program WD/IA to switch on end-of-packet.
1652   ``nooutoforder``
1653      Disable out-of-order rasterization
1654   ``dpbb``
1655      Enable DPBB. Enable DPBB for gfx9 dGPU. Default enabled for gfx9 APU and >= gfx10.
1656   ``extra_md``
1657      add extra information in bo metadata to help tools (umr)
1658
1659r600 driver environment variables
1660---------------------------------
1661
1662.. envvar:: R600_DEBUG
1663
1664   a comma-separated list of named flags, which do various things:
1665
1666   ``nocpdma``
1667      Disable CP DMA
1668   ``nosb``
1669      Disable sb backend for graphics shaders
1670   ``sbcl``
1671      Enable sb backend for compute shaders
1672   ``sbdry``
1673      Don't use optimized bytecode (just print the dumps)
1674   ``sbstat``
1675      Print optimization statistics for shaders
1676   ``sbdump``
1677      Print IR dumps after some optimization passes
1678   ``sbnofallback``
1679      Abort on errors instead of fallback
1680   ``sbdisasm``
1681      Use sb disassembler for shader dumps
1682   ``sbsafemath``
1683      Disable unsafe math optimizations
1684   ``nirsb``
1685      Enable NIR with SB optimizer
1686   ``tex``
1687      Print texture info
1688   ``nir``
1689      Enable experimental NIR shaders
1690   ``compute``
1691      Print compute info
1692   ``vm``
1693      Print virtual addresses when creating resources
1694   ``info``
1695      Print driver information
1696   ``fs``
1697      Print fetch shaders
1698   ``vs``
1699      Print vertex shaders
1700   ``gs``
1701      Print geometry shaders
1702   ``ps``
1703      Print pixel shaders
1704   ``cs``
1705      Print compute shaders
1706   ``tcs``
1707      Print tessellation control shaders
1708   ``tes``
1709      Print tessellation evaluation shaders
1710   ``noir``
1711      Don't print the LLVM IR
1712   ``notgsi``
1713      Don't print the TGSI
1714   ``noasm``
1715      Don't print disassembled shaders
1716   ``preoptir``
1717      Print the LLVM IR before initial optimizations
1718   ``checkir``
1719      Enable additional sanity checks on shader IR
1720   ``nooptvariant``
1721      Disable compiling optimized shader variants.
1722   ``testdma``
1723      Invoke SDMA tests and exit.
1724   ``testvmfaultcp``
1725      Invoke a CP VM fault test and exit.
1726   ``testvmfaultsdma``
1727      Invoke a SDMA VM fault test and exit.
1728   ``testvmfaultshader``
1729      Invoke a shader VM fault test and exit.
1730   ``nodma``
1731      Disable asynchronous DMA
1732   ``nohyperz``
1733      Disable Hyper-Z
1734   ``noinvalrange``
1735      Disable handling of INVALIDATE_RANGE map flags
1736   ``no2d``
1737      Disable 2D tiling
1738   ``notiling``
1739      Disable tiling
1740   ``switch_on_eop``
1741      Program WD/IA to switch on end-of-packet.
1742   ``forcedma``
1743      Use asynchronous DMA for all operations when possible.
1744   ``precompile``
1745      Compile one shader variant at shader creation.
1746   ``nowc``
1747      Disable GTT write combining
1748   ``check_vm``
1749      Check VM faults and dump debug info.
1750   ``unsafemath``
1751      Enable unsafe math shader optimizations
1752
1753.. envvar:: R600_DEBUG_COMPUTE
1754
1755   if set to ``true``, various compute-related debug information will
1756   be printed to stderr. Defaults to ``false``.
1757
1758.. envvar:: R600_DUMP_SHADERS
1759
1760   if set to ``true``, NIR shaders will be printed to stderr. Defaults
1761   to ``false``.
1762
1763.. envvar:: R600_HYPERZ
1764
1765   If set to ``false``, disables HyperZ optimizations. Defaults to ``true``.
1766
1767.. envvar:: R600_NIR_DEBUG
1768
1769   a comma-separated list of named flags, which do various things:
1770
1771   ``instr``
1772      Log all consumed nir instructions
1773   ``ir``
1774      Log created R600 IR
1775   ``cc``
1776      Log R600 IR to assembly code creation
1777   ``noerr``
1778      Don't log shader conversion errors
1779   ``si``
1780      Log shader info (non-zero values)
1781   ``reg``
1782      Log register allocation and lookup
1783   ``io``
1784      Log shader in and output
1785   ``ass``
1786      Log IR to assembly conversion
1787   ``flow``
1788      Log control flow instructions
1789   ``merge``
1790      Log register merge operations
1791   ``nomerge``
1792      Skip register merge step
1793   ``tex``
1794      Log texture ops
1795   ``trans``
1796      Log generic translation messages
1797
1798r300 driver environment variables
1799---------------------------------
1800
1801.. envvar:: RADEON_DEBUG
1802
1803   a comma-separated list of named flags, which do various things:
1804
1805   ``info``
1806      Print hardware info (printed by default on debug builds
1807   ``fp``
1808      Log fragment program compilation
1809   ``vp``
1810      Log vertex program compilation
1811   ``draw``
1812      Log draw calls
1813   ``swtcl``
1814      Log SWTCL-specific info
1815   ``rsblock``
1816      Log rasterizer registers
1817   ``psc``
1818      Log vertex stream registers
1819   ``tex``
1820      Log basic info about textures
1821   ``texalloc``
1822      Log texture mipmap tree info
1823   ``rs``
1824      Log rasterizer
1825   ``fb``
1826      Log framebuffer
1827   ``cbzb``
1828      Log fast color clear info
1829   ``hyperz``
1830      Log HyperZ info
1831   ``scissor``
1832      Log scissor info
1833   ``msaa``
1834      Log MSAA resources
1835   ``anisohq``
1836      Use high quality anisotropic filtering
1837   ``notiling``
1838      Disable tiling
1839   ``noimmd``
1840      Disable immediate mode
1841   ``noopt``
1842      Disable shader optimizations
1843   ``nocbzb``
1844      Disable fast color clear
1845   ``nozmask``
1846      Disable zbuffer compression
1847   ``nohiz``
1848      Disable hierarchical zbuffer
1849   ``nocmask``
1850      Disable AA compression and fast AA clear
1851   ``notcl``
1852      Disable hardware accelerated Transform/Clip/Lighting
1853
1854Asahi driver environment variables
1855----------------------------------
1856
1857.. envvar:: ASAHI_MESA_DEBUG
1858
1859   a comma-separated list of named flags, which do various things:
1860
1861   ``trace``
1862      Trace work submitted to the GPU to files, using the agxdecode
1863      infrastructure. This produces a large volume of data, so should be used
1864      with caution. The traces are written to ``agxdecode.dump``,
1865      but this can be overridden using ``AGXDECODE_DUMP_FILE``.
1866   ``no16``
1867      Disable 16-bit floating point support. This may workaround application
1868      bugs in certain OpenGL ES applications originally written for desktops. If
1869      such applications are found in the wild, they should be fixed upstream (if
1870      possible) or added in the Mesa-wide driconf (if closed source).
1871   ``dirty``
1872      In debug builds only: disable dirty tracking optimizations.
1873   ``nowc``
1874      Disable write-combining (force all allocations to be write-through). This
1875      may be useful for diagnosing certain performance issues. Note imported
1876      buffers may still be write-combined.
1877
1878.. envvar:: AGX_MESA_DEBUG
1879
1880   a comma-separated list of named flags, which do various things:
1881
1882   ``shaders``
1883      Print shaders being compiled at various stages in the pipeline.
1884   ``shaderdb``
1885      Print statistics about compiled shaders.
1886   ``verbose``
1887      Disassemble in verbose mode, including additional information that may be
1888      useful for debugging.
1889   ``internal``
1890      Include even internal shaders (as produced for clears, blits, and such)
1891      when printing shaders. Without this flag, internal shaders are ignored by
1892      the shaders and shaderdb flags.
1893   ``novalidate``
1894      In debug builds only: skip internal intermediate representation validation.
1895   ``noopt``
1896      Disable various backend optimizations.
1897
1898.. _imagination env-vars:
1899
1900PowerVR driver environment variables
1901------------------------------------------------
1902
1903.. envvar:: PVR_DEBUG
1904
1905   A comma-separated list of debug options. Use ``PVR_DEBUG=help`` to
1906   print a list of available options.
1907
1908.. envvar:: ROGUE_DEBUG
1909
1910   a comma-separated list of named flags for the Rogue compiler,
1911   which do various things:
1912
1913   ``nir``
1914      Print the input NIR to stdout.
1915   ``nir_passes``
1916      Print the output of each NIR pass to stdout.
1917   ``ir``
1918      Print the input Rogue IR to stdout.
1919   ``ir_passes``
1920      Print the output of each Rogue IR pass to stdout.
1921   ``ir_details``
1922      Includes additional details when printing Rogue IR.
1923   ``vld_skip``
1924      Skips the compiler validation step.
1925   ``vld_nonfatal``
1926      Prints all the validation errors instead of stopping after the first.
1927
1928.. envvar:: ROGUE_COLOR
1929
1930   if set to ``auto`` Rogue IR will be colorized if stdout is not a pipe.
1931   Color is forced off if set to ``off``/``0`` or on if set to ``on``/``1``.
1932   Defaults to ``auto``.
1933
1934i915 driver environment variables
1935---------------------------------
1936
1937.. envvar:: I915_DEBUG
1938
1939   Debug flags for the i915 driver.
1940
1941.. envvar:: I915_NO_HW
1942
1943   Stop the i915 driver from submitting commands to the hardware.
1944
1945.. envvar:: I915_DUMP_CMD
1946
1947   Dump all commands going to the hardware.
1948
1949Freedreno driver environment variables
1950--------------------------------------
1951
1952.. envvar:: FD_MESA_DEBUG
1953
1954   Debug flags for the Freedreno driver.
1955
1956----
1957
1958Other Gallium drivers have their own environment variables. These may
1959change frequently so the source code should be consulted for details.
1960
1961
1962Vulkan loader environment variables
1963-----------------------------------
1964
1965These variable are handled by `Khronos' Vulkan loader
1966<https://github.com/KhronosGroup/Vulkan-Loader>`__, *not by Mesa*, but they
1967are documented here as we reference them in other places in our docs.
1968
1969.. envvar:: VK_DRIVER_FILES
1970
1971   Force the loader to use the specific driver JSON files. The value contains
1972   a list of delimited full path listings to driver JSON Manifest files
1973   and/or paths to folders containing driver JSON files.
1974
1975   See `Vulkan loader docs on environment variables`_.
1976
1977.. envvar:: VK_LOADER_LAYERS_ENABLE
1978
1979    A comma-delimited list of globs to search for in known layers and used to
1980    select only the layers whose layer name matches one or more of the
1981    provided globs.
1982    Known layers are those which are found by the loader taking into account
1983    default search paths and other environment variables (like VK_LAYER_PATH).
1984
1985   See `Vulkan loader docs on environment variables`_.
1986
1987.. envvar:: VK_ICD_FILENAMES
1988
1989   `Deprecated`_, replaced by :envvar:`VK_DRIVER_FILES`.
1990
1991.. envvar:: VK_INSTANCE_LAYERS
1992
1993   `Deprecated`_, replaced by :envvar:`VK_LOADER_LAYERS_ENABLE`.
1994
1995.. _Vulkan loader docs on environment variables: https://github.com/KhronosGroup/Vulkan-Loader/blob/main/docs/LoaderInterfaceArchitecture.md#table-of-debug-environment-variables
1996.. _Deprecated: https://github.com/KhronosGroup/Vulkan-Loader/blob/main/docs/LoaderInterfaceArchitecture.md#deprecated-environment-variables
1997