forked from OSchip/llvm-project
90 lines
3.6 KiB
ReStructuredText
90 lines
3.6 KiB
ReStructuredText
=================================
|
|
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:
|
|
|
|
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>`_.
|
|
|
|
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.
|