教程:将应用迁移到 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 学习笔记之 --- 第十九章:法线贴图 学习目标 理解为什么需要法线贴图: 学习法线贴图如 ...
随机推荐
- 大话Linux内核中锁机制之信号量、读写信号量
大话Linux内核中锁机制之信号量.读写信号量 在上一篇博文中笔者分析了关于内存屏障.读写自旋锁以及顺序锁的相关内容,本篇博文将着重讨论有关信号量.读写信号量的内容. 六.信号量 关于信号量的内容,实 ...
- Java导包后在测试类中执行正确但在Servlet中执行错误报ClassNotFoundException或者ClassDefNotFoundException解决办法
将原来导的包remove from build path,并复制到Web-root下的lib目录中,再add to build path,
- 数据库事务ACID特性及隔离级别
数据库ACID特性介绍 1.原子性(Atomic)一个事务被视为一个不可分割的最小工作单元,这个事务里的所有操作要么全部成功执行,要么全都不执行,不能只执行其中的一部分操作.实现事务的原子性,要支持回 ...
- python-基础小游戏,人在 江湖飘,哪能不挨刀,我几刀砍死你
#人在 江湖飘,哪能不挨刀,我几刀砍死你 #规则:5赢4. 4赢3 .3赢2. 2赢1 . 1赢5 #提示:绝对值函数abs #假设:老王和老李 import random import time p ...
- Model验证简单易懂
public bool UserSex { get; set; } //定义名字 [Display(Name = "年龄")] [Range(0, 150, ErrorMessag ...
- jQuery实现购物车计算价格功能的方法
本文实例讲述了jQuery实现购物车计算价格功能的简易方法,做的比较简单,现分享给大家供大家参考.具体如下: 目的: <%@ page language="java" con ...
- jQuery对象与DOM对象的相互转化
jQuery是一个类数组对象,DOM对象就是一个单独的DOM元素,他们都是可以操作的DOM元素. 一.jQuery对象转化为DOM对象 有以下两种方法: 方法一:利用数组下标的方式读取jQuery中的 ...
- linux 命令 uniq
linux命令uniq去重 实例详细说明linux下去除重复行命令uniq 一,uniq干什么用的 文本中的重复行,基本上不是我们所要的,所以就要去除掉.linux下有其他命令可以去除重复行,但是我觉 ...
- VUE 采坑之旅-- Mint-ui 按需引入报出Module build failed: Error: Couldn't find preset "es2015" relative to directory "C:\\phpStudy\\PHPTutorial\\WWW\\text\\vuep\\vue-demo"
首先按照mint-ui的文档中按需引入的要求,先执行 npm install babel-plugin-component -D 然后,将.babelrc文件替换了,但是后来我又将其改了(采坑过程我也 ...
- ElasticSearch优化系列六:索引过程
大家可能会遇到索引数据比较慢的过程.其实明白索引的原理就可以有针对性的进行优化.ES索引的过程到相对Lucene的索引过程多了分布式数据的扩展,而这ES主要是用tranlog进行各节点之间的数据平衡. ...