D3D12
=====

Overview
--------

The D3D12 driver is a Gallium driver that emits API calls for Microsoft's
:abbr:`D3D12 (Direct3D 12)` API instead of targeting a specific GPU
architecture. This can be used to get full desktop OpenGL 3.3 support on
devices that only support D3D12.

Debugging
---------

There's a few tools that are useful for debugging D3D12, such as these
environment variables:

.. envvar:: D3D12_DEBUG <flags> ("")

``verbose``
   Enable verbose output to stdout
``blit``
   Trace blit and copy resource calls
``experimental``
   Enable experimental shader models feature
``dxil``
   Dump DXIL during program compile
``disass``
   Dump disassambly of created DXIL shader
``res``
   Debug resources
``debuglayer``
   Enable `debug layer`_
``gpuvalidator``
   Enable `GPU validator`_

.. envvar:: DXIL_DEBUG <flags> ("")

``verbose``
   Enable verbose output to stdout
``dump_blob``
   Write shader blobs
``trace``
   Trace instruction conversion
``dump_module``
   dump module tree to stderr

.. _debug layer: https://docs.microsoft.com/en-us/windows/win32/direct3d12/understanding-the-d3d12-debug-layer
.. _GPU validator: https://docs.microsoft.com/en-us/windows/win32/direct3d12/using-d3d12-debug-layer-gpu-based-validation
