=================================
User Guide for the DirectX Target
=================================

.. warning::
   Disclaimer: The DirectX backend is experimental and under active development.
   It is not yet feature complete or ready to be used outside of experimental or
   demonstration contexts.

.. contents::
   :local:

.. toctree::
   :hidden:

   DirectX/DXContainer
   DirectX/DXILArchitecture
   DirectX/DXILOpTableGenDesign
   DirectX/DXILResources
   DirectX/RootSignatures

Introduction
============

The DirectX target implements the DirectX programmability interfaces. These
interfaces are documented in the `DirectX Specifications. <https://github.com/Microsoft/DirectX-Specs>`_

Initially the backend is aimed at supporting DirectX 12, and support for DirectX
11 is planned at a later date.

The DirectX backend is currently experimental and is not shipped with any
release builds of LLVM tools. To enable building the DirectX backend locally add
``DirectX`` to the ``LLVM_EXPERIMENTAL_TARGETS_TO_BUILD`` CMake option. For more
information on building LLVM see the :doc:`CMake` documentation.

.. _dx-target-triples:

Target Triples
==============

At present the DirectX target only supports the ``dxil`` architecture, which
generates code for the
`DirectX Intermediate Language. <https://github.com/microsoft/DirectXShaderCompiler/blob/main/docs/DXIL.rst>`_

In addition to target architecture, the DirectX backend also needs to know the
target runtime version and pipeline stage. These are expressed using the OS and
Environment triple component.

Presently the DirectX backend requires targeting the ``shadermodel`` OS, and
supports versions 6.0+ (at time of writing the latest announced version is 6.7).

.. table:: DirectX Environments

     ================== ========================================================
     Environment         Description
     ================== ========================================================
     ``pixel``           Pixel shader
     ``vertex``          Vertex shader
     ``geometry``        Geometry shader
     ``hull``            Hull shader (tesselation)
     ``domain``          Domain shader (tesselation)
     ``compute``         Compute kernel
     ``library``         Linkable ``dxil`` library
     ``raygeneration``   Ray generation (ray tracing)
     ``intersection``    Ray intersection (ray tracing)
     ``anyhit``          Ray any collision (ray tracing)
     ``closesthit``      Ray closest collision (ray tracing)
     ``miss``            Ray miss (ray tracing)
     ``callable``        Callable shader (ray tracing)
     ``mesh``            Mesh shader
     ``amplification``   Amplification shader
     ================== ========================================================

Output Binaries
===============

The DirectX runtime APIs read a file format based on the
`DirectX Specification. <https://github.com/Microsoft/DirectX-Specs>`_. In
different codebases the file format is referred to by different names
(specifically ``DXBC`` and ``DXILContainer``). Since the format is used to store
both ``DXBC`` and ``DXIL`` outputs, and the ultimate goal is to support both as
code generation targets in LLVM, the LLVM codebase uses a more neutral name,
``DXContainer``.

The ``DXContainer`` format is sparsely documented in the functional
specification, but a reference implementation exists in the
`DirectXShaderCompiler. <https://github.com/microsoft/DirectXShaderCompiler>`_.
The format is documented in the LLVM project docs as well (see
:doc:`DirectX/DXContainer`).

Support for generating ``DXContainer`` files in LLVM, is being added to the LLVM
MC layer for object streamers and writers, and to the Object and ObjectYAML
libraries for testing and object file tooling.

For ``dxil`` targeting, bitcode emission into ``DXContainer`` files follows a
similar model to the ``-fembed-bitcode`` flag supported by clang for other
targets.
