DirectX 目标用户指南

警告

免责声明:DirectX 后端处于实验阶段,并且正在积极开发中。它尚未功能完备,也不适合在实验或演示环境之外使用。

简介

DirectX 目标实现了 DirectX 可编程接口。这些接口在DirectX 规范中进行了说明。

最初,后端旨在支持 DirectX 12,并计划在稍后日期支持 DirectX 11。

DirectX 后端目前处于实验阶段,未与任何 LLVM 工具的发布版本一起提供。若要在本地构建 DirectX 后端,请将DirectX添加到 LLVM_EXPERIMENTAL_TARGETS_TO_BUILD CMake 选项中。有关构建 LLVM 的更多信息,请参阅使用 CMake 构建 LLVM文档。

目标三元组

目前,DirectX 目标仅支持dxil架构,该架构为DirectX 中间语言生成代码。

除了目标架构之外,DirectX 后端还需要知道目标运行时版本和管道阶段。这些是使用 OS 和环境三元组组件表示的。

目前,DirectX 后端需要针对shadermodel OS,并支持 6.0+ 版本(在撰写本文时,最新发布的版本是 6.7)。

表 108 DirectX 环境

环境

描述

像素

像素着色器

顶点

顶点着色器

几何

几何着色器

外壳

外壳着色器(细分)

域着色器(细分)

计算

计算内核

可链接的dxil

射线生成

射线生成(光线追踪)

交点

射线交点(光线追踪)

任何命中

射线任何碰撞(光线追踪)

最近命中

射线最近碰撞(光线追踪)

未命中

射线未命中(光线追踪)

可调用

可调用着色器(光线追踪)

网格

网格着色器

放大

放大着色器

输出二进制文件

DirectX 运行时 API 读取基于DirectX 规范的文件格式。在不同的代码库中,文件格式被称为不同的名称(特别是DXBCDXILContainer)。由于该格式用于存储DXBCDXIL输出,并且最终目标是在 LLVM 中支持两者作为代码生成目标,因此 LLVM 代码库使用更通用的名称DXContainer

DXContainer格式在功能规范中很少有说明,但在DirectXShaderCompiler中存在参考实现。该格式也在 LLVM 项目文档中进行了说明(请参阅DirectX 容器)。

LLVM 中对生成DXContainer文件的支持正在添加到 LLVM MC 层的对象流和写入器中,以及添加到 Object 和 ObjectYAML 库中以进行测试和对象文件工具。

对于dxil目标,将位码输出到DXContainer文件遵循与 clang 为其他目标支持的-fembed-bitcode标志类似的模型。