教程:将应用迁移到 DirectX* 12 – 第 1 部分
简介
随着微软* 新版操作系统 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 优化
教程:将应用迁移到 DirectX* 12 – 第 1 部分的更多相关文章
- APU平台DirectX 12性能测试:超级大惊喜!
APU平台DirectX 12性能测试:超级大惊喜! 转自:http://www.ithome.com/html/digi/129840.htm [size=1pc]微软将会在接下来的GDC 2015 ...
- ASP.NET MVC 5 学习教程:数据迁移之添加字段
原文 ASP.NET MVC 5 学习教程:数据迁移之添加字段 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 全书总结
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 全书总结 本系列文章中可能有很多翻译有问题或者错误的地方:并且有些章节 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- Direct12优化
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- Direct12优化 第一章:向量代数 1.向量计算的时候,使用XMV ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十三章:角色动画
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十三章:角色动画 学习目标 熟悉蒙皮动画的术语: 学习网格层级变换 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十二章:四元数(QUATERNIONS)
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十二章:四元数(QUATERNIONS) 学习目标 回顾复数,以及 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十一章:环境光遮蔽(AMBIENT OCCLUSION)
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十一章:环境光遮蔽(AMBIENT OCCLUSION) 学习目标 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十章:阴影贴图
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十章:阴影贴图 本章介绍一种在游戏和应用中,模拟动态阴影的基本阴影 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十九章:法线贴图
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十九章:法线贴图 学习目标 理解为什么需要法线贴图: 学习法线贴图如 ...
随机推荐
- HDU 1069 Monkey and Banana(转换成LIS,做法很值得学习)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069 Monkey and Banana Time Limit: 2000/1000 MS (Java ...
- Python中获取异常(try Exception)信息
异常信息的获取对于程序的调试非常重要,可以有助于快速定位有错误程序语句的位置. 这里获取异常(Exception)信息采用try...except...程序结构.如下所示: try: ... exce ...
- 基于 Axis2的webService接口的基本开发步骤
Axis2webServicejavaWeb 前言: 今天给大家分享一下前段时间在做项目的时候做webservice接口的一些心得. 在web工程lib目录下导入 Axis2相关jar包 enter ...
- 获取 iOS APP 内存占用的大小
当我们想去获取 iOS 应用的占用内存时,通常我们能找到的方法是这样的,用 resident_size: #import <mach/mach.h> - (int64_t)memory ...
- es6解构赋值的几个用法
1.解构赋值可以轻松获取对象或者数组中的数据 var jsonData = { data: "111", data2: ["test","test2& ...
- Hadoop相关笔记
一. Zookeeper( 分布式协调服务框架 ) 1. Zookeeper概述和集群搭建: (1) Zookeeper概述: Zookeeper 是一个分布式 ...
- PL/SQL 报错:动态执行表不可访问,本会话的自动统计被禁止。 在执行菜单里你可以禁止统计,或在v$session,v$sesstat 和vSstatname表里获得选择权限。
现象: 第一次用PL/SQL Developer连接数据库,若用sys用户登录并操作则正常,若用普通用户比如haishu登录并创建一个表则报错“动态执行表不可访问,本会话的自动统计被禁止.在执行菜单里 ...
- vs+qt编程相关
vs+qt编程的那些事 以下以helloqt项目为例 文件构成 Form Files 窗体文件 /*.ui 界面文件 Generated Files 界面生成文件 /ui_helloqt.h 添加带界 ...
- IAR新建MSP430工程
一.在IAR官网下载IAR for MSP430 软件 https://www.iar.com/iar-embedded-workbench/#!?architecture= 选择MSP430,然后 ...
- 总结安装matlab踩到的坑
个人安装matlab3次,每次都遇到不同的安装问题,现在将遇到的问题总结下来,以供参考. 本次安装MATLAB的步骤参考的博文 https://blog.csdn.net/u012313335/art ...