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 和 Environment 三元组组件表示。

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

表 116 DirectX 环境

环境

描述

pixel

像素着色器

vertex

顶点着色器

geometry

几何着色器

hull

Hull 着色器 (细分)

domain

Domain 着色器 (细分)

compute

计算内核

library

可链接的 dxil

raygeneration

光线生成 (光线追踪)

intersection

光线相交 (光线追踪)

anyhit

光线任意碰撞 (光线追踪)

closesthit

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

miss

光线丢失 (光线追踪)

callable

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

mesh

网格着色器

amplification

放大着色器

输出二进制文件

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

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

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

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