简介
随着微软* 新版操作系统 Windows 10* 的发布,核心图形技术将升级到最新的 DirectX* 12。要帮助拥有 DirectX* 开发经验的程序员熟悉 DirectX* 12 并尽快着手开发游戏,微软*、英特尔® 和苏州蜗牛公司吸收了苏州蜗牛“武术之王”游戏所搭载的 PC DirectX* 12 的开发经验,合作编写了这篇白皮书。我们希望为所有热衷 DirectX* 技术的开发人员带来前沿的第一手材料。本白皮书的技术顾问是来自微软* 的资深制图专家兼 DirectX* 12 的项目经理 Jianye Lu。这三家公司的技术专家合作编写了所有章节。
- 第 1 章:DirectX* 12 概述 - Yingguang Mei(微软*)
- 第 2 章:DirectX 12 工具 - Yingguang Mei(微软*)
- 第 3 章:从 DirectX 11 迁移到 DirectX 12 - Wenwei Lv(苏州蜗牛公司)
- 第 4 章:DirectX 12 特性 - Sheng Guo(英特尔®)和 Wenwei Lv(苏州蜗牛公司)
- 第 5 章:DirectX 12 优化 - Kai Wang(英特尔®)和 Wenwei Lv(苏州蜗牛公司)
目前,本文是白皮书的第一个版本。我们正在不断丰富和更新本教程,并且特别希望能得到你们的建议和意见。以下是我们的联系方式:
Yingguang Mei: yimei@microsoft.com
Sheng Guo: sheng.guo@intel.com
Wenwei Lv: lvww@snailgame.net
目录
引言。
目录。
第 1 章 DirectX* 12 概述
1.1 DirectX* 12 概述
1.1.1 DirectX* 12 的开发环境和硬件配置
1.1.2 Direct3D 12
1.2 Direct3D 12 的核心概念
1.2.1 作品提交
1.2.2 内存管理
1.3 从 Direct3D 11 到 Direct3D12 出现的重大变化
1.4 开发首款 DirectX* 12 程序
第 1 章 DirectX* 12 概述
DirectX* 是一种编程接口套件,微软*将其用于控制基本硬件及处理 Windows 操作系统平台上的多媒体任务(尤其是游戏和视频)。DirectX* API 被分成多个组件。不同组件内的 API 是独立的且单独进行更新,这确保了游戏只使用必要的功能。各组件都具有访问不同硬件的功能,这些硬件包括显卡、声卡、GPU 和其他配备标准接口的输入设备,诸如操纵杆和鼠标。
1.1 DirectX* 12 概述
DirectX* 12 主要包括以下组件:
Direct2D:用于 2D 图形渲染。它是一种高性能矢量渲染库。
DirectWrite:利用 Direct2D 应用来渲染字体和文本
Direct3D:用于在 DirectX* 中构建所有 3D 显卡。API 获得了最多关注并且更新频率最高。
XAudio2:低级别音频处理 API。
XACT3:XAudio2 内置的高级音频处理 API。
XInput:用于处理来自 Xbox* 游戏控制台等设备的所有输入。
DirectCompute:新增到 DirectX*11 的新 API 集。GPU 用于执行通用多线程计算。
1.1.1 DirectX* 12 的开发环境和硬件配置
开发环境
- 软件安装
- Windows 10
- Visual Studio 2013 + Update4 / Visual Studio 2015(配备了更出色的 DX12 调试工具)
- DirectX* 12 SDK
- 安装驱动程序
- AMD 驱动程序
- 英特尔® 驱动程序
- NVIDIA* 台式机/移动驱动程序
硬件配置
- CPU:英特尔酷睿 i5-4670K
- 内存:超过 16GB 内存
- 显卡(支持特性级别 11.1 和更高版本):
- NVIDIA*:GTX 970/980(超过 4GB 内存)/GTX TITAN(超过 4GB 内存)
- AMD:R9 290(超过 4GB 内存)
- 英特尔®:显卡内置在 CPU.HasWell 及更高版本。
- 硬盘:1TB
1.1.2 Direct3D 12
Direct3D 是最重要的 DirectX* 组件。随着 DirectX* 12 的发布,Direct3D 也更新到最新一代 - Direct3D 12。相比之前的版本,Direct3D 12 更快、更高效且能够支持更丰富的场景、更多的对象、更多出色的特性,进而充分利用主流 GPU。
更高效的性能
Direct3D 12 提供了比平常低得多的硬件抽象层,这样,游戏和应用都能显著地提升 CPU 利用率和多线程负载平衡功能。Direct3D 12 允许游戏和应用自行管理内存。此外,使用 Direct3D 12 的新特性可显著地减少 GPU 开销并提升游戏和应用的演示效果。这些新特性包括:命令队列和列表、资源描述符表和管道状态对象等。此外,Direct3D 12 还支持许多新的管道渲染技术,如保守光栅化算法、立体平铺资源和光栅顺序视图。
功能更强大的主机
对于渲染功能,Direct3D 12 是 Direct3D 11 的一个超集。Direct3D 12 保留了 Direct3D 11 的渲染功能,同时在现代显卡的多核 CPU 和 GPU 上实现了更高性能,显著地提升了主机平台 API 的效率。基于 Direct3D 12,现代主机可确保充分利用所有 CPU 和 GPU 核心资源,以利用最强大的渲染潜力。
更出色的工具
Direct3D 12 为调试和分析 D3D 应用运行时间提供了更出色的 PIX 工具。除了跟踪许多有用的信息(如 API 调用和时间统计)、调试 GPU 上的着色器代码以及在代码中设置断点和调试,测试 Xbox* 应用的性能相比以前也有大幅提升。最新的 PIX 工具为 DirextX* 应用提供了完整的图形调试环境。
1.2 Direct3D 12 的核心概念
1.2.1 作品提交
提交后,命令列表的执行与 CPU 是异步的。也就是说,程序向命令队列提交命令列表后,CPU 将直接返回到该程序,而不是等待执行命令,这就确保了 CPU 可以随时提交渲染命令列表。Direct3D 12 提供了可在 CPU 和 GPU 之间进行通信的同步原语,以便了解由 GPU 执行的渲染任务的状态。
这类命令列表非常有效。API 命令被直接转换成原始 GPU 命令,可最大程度地减轻显示驱动程序的负担。这是一种呈现渲染的高性能方法。要获得这样的性能,在应用的最终发布版本中构建渲染命令列表时,显示驱动程序的核心程序应该只执行数量最少的错误检查工作。在开发过程中,您可以使用调试工具来确保渲染正确无误。为了方便输入验证、分析和调试,您也可以使用采用了 Direct3D 12 API 的调试层进行全面的状态检查,以便了解错误和警告(如“无效的渲染操作”错误和“不确定的渲染操作”警告等)。
1.2.2 内存管理
由 Direct3D 12 API 处理的数据存储在名为资源堆的内存对象中。
资源堆可存在于本地图形内存或系统内存中。它具备一些特点,如配备一定数量的高速缓存以及由 CPU 或 GPU 进行访问。应用可通过使用由多种堆创建的 API 参数来控制属性以及资源堆内存的分配。
在资源栈内,程序可以自由地分配纹理和缓冲等资源。这是相对轻型的操作。在现有资源堆中创建资源不会引起实际的内存分配操作。要让 GPU 正确访问这些资源,应用需要创建资源描述符视图,如:着色器资源视图或无序访问视图。
要读取或写入 CPU 的资源堆内存,应用必须映射基于堆的资源,这样,CPU 才能进行访问。
要确保 GPU 内存连续分配数据以及管道在 Direct3D 12 中正确运行,则通常可以采用环缓冲区或类似的技术。API 提供了同步原语,以确保这类管道正常运行。
1.3 从 Direct3D 11 到 Direct3D12 发生的重大变化
请在 MSDN 上查看以下网站,了解 Direct3D 12 和 Direct3D 11 之间的重要区别:
https://msdn.microsoft.com/en-us/library/windows/desktop/dn899194(v=vs.85).aspx
1.4 开发首款 DirectX* 12 程序
请在 MSDN 上查看以下网站,了解如何创建基本的 Direct3D 12 组件:
https://msdn.microsoft.com/en-us/library/windows/desktop/dn859356(v=vs.85).aspx
即将推出:链接至以下章节
第 2 章: DirectX 12 工具
第 3 章:从 DirectX 11 迁移到 DirectX
第 4 章: DirectX 12 特性
第 5 章: DirectX 12 优化