| # User Guide for the DirectX Target | |
| ```{toctree} | |
| :hidden: | |
| DirectX/DXContainer | |
| DirectX/DXILArchitecture | |
| DirectX/DXILOpTableGenDesign | |
| DirectX/DXILResources | |
| DirectX/RootSignatures | |
| DirectX/SemanticSignatures | |
| ``` | |
| ## 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 an official LLVM target and is built by default as part | |
| of `LLVM_ALL_TARGETS`. 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+ (as 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. |