diff --git a/llvm/docs/DirectXUsage.rst b/llvm/docs/DirectXUsage.rst new file mode 100644 --- /dev/null +++ b/llvm/docs/DirectXUsage.rst @@ -0,0 +1,89 @@ +================================= +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. `_ + +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. `_ + +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. `_. 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. `_. + +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. diff --git a/llvm/docs/UserGuides.rst b/llvm/docs/UserGuides.rst --- a/llvm/docs/UserGuides.rst +++ b/llvm/docs/UserGuides.rst @@ -29,6 +29,7 @@ CoverageMappingFormat CycleTerminology DebuggingJITedCode + DirectXUsage Docker ExtendingLLVM GoldPlugin @@ -247,3 +248,7 @@ :doc:`SPIRVUsage` This document describes using the SPIR-V target to compile GPU kernels. + +:doc:`DirectXUsage` + This document describes using the DirectX target to compile GPU code for the + DirectX runtime.