| # 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. |