原文地址

简介

随着微软* 新版操作系统 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 部分的更多相关文章

  1. APU平台DirectX 12性能测试:超级大惊喜!

    APU平台DirectX 12性能测试:超级大惊喜! 转自:http://www.ithome.com/html/digi/129840.htm [size=1pc]微软将会在接下来的GDC 2015 ...

  2. ASP.NET MVC 5 学习教程:数据迁移之添加字段

    原文 ASP.NET MVC 5 学习教程:数据迁移之添加字段 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符 ...

  3. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 全书总结

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 全书总结 本系列文章中可能有很多翻译有问题或者错误的地方:并且有些章节 ...

  4. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- Direct12优化

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- Direct12优化 第一章:向量代数 1.向量计算的时候,使用XMV ...

  5. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十三章:角色动画

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十三章:角色动画 学习目标 熟悉蒙皮动画的术语: 学习网格层级变换 ...

  6. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十二章:四元数(QUATERNIONS)

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十二章:四元数(QUATERNIONS) 学习目标 回顾复数,以及 ...

  7. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十一章:环境光遮蔽(AMBIENT OCCLUSION)

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十一章:环境光遮蔽(AMBIENT OCCLUSION) 学习目标 ...

  8. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十章:阴影贴图

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十章:阴影贴图 本章介绍一种在游戏和应用中,模拟动态阴影的基本阴影 ...

  9. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十九章:法线贴图

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十九章:法线贴图 学习目标 理解为什么需要法线贴图: 学习法线贴图如 ...

随机推荐

  1. AndroidUI组件之AdapterViewFilpper

    package com.gc.adapterviewflipperdemo; /** * 功能:自己主动播放的图片库 * @author Android将军 */ /* * 1.AdapterView ...

  2. DataGuard相关视图

    1.v$database SELECT name,open_mode,database_role,protection_mode,protection_level FROM v$database; 其 ...

  3. Linux-- 查看文件 cat/tac

    cat 查看文件 用法:cat 文件名 1.显示非空白行行号 -b 2.显示所有行号 -n 3.将[Tab]按键以 ^T 显示出来 -T 4.显示出特殊字符 -V 5.将结尾的断行字符$显示出来 -E ...

  4. iOS:手势与矩形、点运算相关(18-01-24更)

    1.矩形.点运算 1.获取当前的View在Window的frame 2.包含判断 3.获取点击在响应者 touchesBegan 的位置 4.UIScrollView.UITableView 实时 位 ...

  5. jQuery+zTree

    0 zTree简介 树形控件的使用是应用开发过程中必不可少的.zTree 是一个依靠 jQuery 实现的多功能 “树插件”.优异的性能.灵活的配置.多种功能的组合是 zTree 最大优点. 0.0 ...

  6. VUE 跳转另一页面返回之前页面刷新,但数据依然存在

    在第一个页面填写数据后存入本地缓存: 再次跳转回来时判断是否填入数据,如果有数据,将缓存数据填写上.

  7. Hive sql & Spark sql笔记

    记录了日常使用时遇到的特殊的查询语句.不断更新- 1. SQL查出内容输出到文件 hive -e "...Hive SQL..." > /tmp/out sparkhive ...

  8. Shell学习积累//持续更新

    1.until的使用 直到判断条件满足,否则会一直执行,与while使用相反 until [ $command -eq 200 ] do command=`curl -o /dev/null -s - ...

  9. md5.digest()与md5.hexdigest()之间的区别及转换

    举给例子 md5 = hashlib.md5('adsf') md5.digest() //返回: '\x05\xc1*(s48l\x94\x13\x1a\xb8\xaa\x00\xd0\x8a' # ...

  10. 阿里云ubantu16.04 搭建LAMP环境

    1.登录服务器 2.sudo apt-get update 更新软件列表 3.sudo apt-get install lamp-server^  (注意右上角的' ^ '这个不能少) 输入apach ...