其实到写这篇文章的时候,DXGI已经出1.5版了,但很多朋友实际上还在用1.2甚至1.1,所以现在谈1.4一点也不过时,而且1.4又是一次非常重大的更新,很值得仔细谈谈。

为了支持Direct3D 12(DXGI还处于1.4版本的时候,Direct3D还按照老命名方式叫Direct3D 12,现在已统一更名为DirectX 12),DXGI加入了一下这些新功能:

  • 更廉价的适配器枚举机制
  • 视频内存预算追踪
  • Direct3D 12Swapchain 改进
  • 相关话题

更廉价的适配器枚举机制

在Direct3D 12里已经不能从device反向追踪创建它的IDXGIAdapter适配器对象了。在调用D3D12CreateDevice的时候也不能指定D3D_DRIVER_TYPE_WARP了。但你可以用IDXFactory4去处理这些事。IDXGIFactory4::EnumAdapterByLuid可以在D3D 12环境下追踪创建device的adapter(与ID3D12Device::GetAdapterLuid结对使用)。如果想让D3D12CreateDevice使用WARP渲染器,要用到IDXGIFactory4::EnumWarpAdapter提供的适配器(Adapter)。

视频内存预算追踪

微软建议开发者在处理视频内存时使用他们设计的预约内存系统,这样能告知操作系统为开发者预留应用所需要的最低内存。(这是一种很好的机制,但也有些限制)

一个系统能为某个应用提供的物理内存数量叫做这个应用的“视频内存预算(video memory budget)”。当后台进程唤醒或睡眠的时候预算会出现极大的波动;当终端用户切换进程的时候预算会急剧变化。应用此时会被系统通知并进行统计当前消费内存和预算内存。应用如果觉得预算不够,就会休眠并允许其他应用执行,当时调用的创建类函数也有可能返回错误。IDXGIAdapter3就与此事有关,尤其是QueryVideoMemoryInfo和RegisterVideoMemoryBudgetChangeNotificationEvent。

更多相关信息查看这里:Residency。

Direct3D 12Swapchain 改进

为了减小开销,在D3D12中,有些D3D11时代的swapchain功能不建议再使用了。为了更好地对应D3D12中的新概念以及为新功能服务,微软还对API做了其他一些调整,

恒定backbuffer一致

在D3D11,应用只能调用GetBUffer(0,…)一次。每次调用Present都隐含着修改了返回接口的一致性。由于CPU开销需求和弹性的资源描述符设计,D3D12不再支持这种隐性资源一致性变更。那么应用就需要为每块和swapchain一起创建的buffer手动调用GetBuffer。应用也得手动渲染在Present操作之后的队列中的buffer。微软也鼓励开发者不要每次Present就重建很多对象,而是给每个缓冲区(buffer)缓存(cache)。

多适配器支持

在多GPU适配器环境下,backbuffer只从节点1创建,并且只有一个命令队列(command queue,这在DirectX中是相当重要的概念,尤其是多线程多适配器多显示器的环境中)ResizeBuffer允许应用在其他节点创建backbuffer,还允许给每个backbuffer使用不同的命令队列。这些功能与swapchain一起构建了交替帧渲染(AFR)技术。更多请看Direct3D 12 Multi-Adapters。

杂项

  • 命令队列不再传给D3D的device对象而一定要传给CreateSwapChain方法。
  • 只支持以下两个flip mode swap effects:

应用全力渲染backbuffer或想更轻巧地支持多适配器场景就应该优先使用DXGI_SWAP_EFFECT_FLIP_DISCARD标识符

如果想优化画面提交过程或正式从前一个已经提交的backbuffer里进行读取就应该用DXGI_SWAPEFFECT_FLIP_SEQUENTIAL标识符

  • SetFullscreenState对显示不再具备排斥性,所以用户初始化的操作系统元素可以无缝显示在应用输出的前面。比如说体设定(Volume Settings)。

相关话题

Direct3D 12 Hardware Feature Levels
Programming Guide for DXGI

DXGI 1.4的新特性的更多相关文章

  1. SQL Server 2014 新特性——内存数据库

    SQL Server 2014 新特性——内存数据库 目录 SQL Server 2014 新特性——内存数据库 简介: 设计目的和原因: 专业名词 In-Memory OLTP不同之处 内存优化表 ...

  2. ElasticSearch 5学习(10)——结构化查询(包括新特性)

    之前我们所有的查询都属于命令行查询,但是不利于复杂的查询,而且一般在项目开发中不使用命令行查询方式,只有在调试测试时使用简单命令行查询,但是,如果想要善用搜索,我们必须使用请求体查询(request ...

  3. [干货来袭]C#6.0新特性

    微软昨天发布了新的VS 2015 ..随之而来的还有很多很多东西... .NET新版本 ASP.NET新版本...等等..太多..实在没消化.. 分享一下也是昨天发布的新的C#6.0的部分新特性吧.. ...

  4. CSS3新特性应用之结构与布局

    一.自适应内部元素 利用width的新特性min-content实现 width新特性值介绍: fill-available,自动填充盒子模型中剩余的宽度,包含margin.padding.borde ...

  5. 【译】Meteor 新手教程:在排行榜上添加新特性

    原文:http://danneu.com/posts/6-meteor-tutorial-for-fellow-noobs-adding-features-to-the-leaderboard-dem ...

  6. 跨平台的 .NET 运行环境 Mono 3.2 新特性

    Mono 3.2 发布了,对 Mono 3.0 和 2.10 版本的支持不再继续,而且这两个分支也不再提供 bug 修复更新. Mono 3.2 主要新特性: LLVM 更新到 3.2 版本,带来更多 ...

  7. Atitit opencv版本新特性attilax总结

    Atitit opencv版本新特性attilax总结 1.1. :OpenCV 3.0 发布,史上功能最全,速度最快的版1 1.2. 应用领域2 1.3. OPENCV2.4.3改进 2.4.2就有 ...

  8. es6 新特性2

    es6其他几个非常有用的新特性. import export 这两个家伙对应的就是es6自己的module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成 ...

  9. ES6 新特性

    ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015. 也就是说,ES6就是ES2015. ...

随机推荐

  1. 【转】 C#中Finally的一个不太常见的用法

    原文地址:http://www.cnblogs.com/listhome/p/3664300.html 最近在看.net BCL 传送门 的源码. 在 System.Collections.Concu ...

  2. ASP.NET Web API Model-ModelMetadata

    ASP.NET Web API Model-ModelMetadata 前言 前面的几个篇幅主要围绕控制器的执行过程,奈何执行过程中包含的知识点太庞大了,只能一部分一部分的去讲解,在上两篇中我们看到在 ...

  3. .NET 基础一步步一幕幕[面向对象前言]

    面向对象前言 2017年的第一篇博文,好久不写博文了,赶紧补上,感觉在以前的<.NET 基础一步步一幕幕>系列博客中,简短的小知识点已经介绍的差不多的(PS:如果还有别的基础知识点我没有介 ...

  4. 说说面向服务的体系架构SOA

    序言 在.Net的世界中,一提及SOA,大家想到的应该是Web Service,WCF,还有人或许也会在.NET MVC中的Web API上做上标记,然后泛泛其谈! 的确,微软的这些技术也确实推动着面 ...

  5. NLB网路负载均衡管理器详解

    序言 在上一篇配置iis负载均衡中我们使用啦微软的ARR,我在那篇文章也中提到了网站的高可用性,但是ARR只能做请求入口的消息分发服务,这样如果我们的消息分发服务器给down掉啦,那么做再多的应用服务 ...

  6. 聊聊ASP.NET Core默认提供的这个跨平台的服务器——KestrelServer

    跨平台是ASP.NET Core一个显著的特性,而KestrelServer是目前微软推出了唯一一个能够真正跨平台的Server.KestrelServer利用一个名为KestrelEngine的网络 ...

  7. xDebug + webgrind 对 php 程序进行性能分析

    环境 macOs Sierra php 7.0.8 MAMP Pro 集成环境 背景 最近有一个需要在微信朋友圈上线的 h5,本人做了一个抽奖的接口,也没多想,直接上 php ci(CodeIgnit ...

  8. Python爬虫小白入门(三)BeautifulSoup库

    # 一.前言 *** 上一篇演示了如何使用requests模块向网站发送http请求,获取到网页的HTML数据.这篇来演示如何使用BeautifulSoup模块来从HTML文本中提取我们想要的数据. ...

  9. 安卓v7支持包下的ListView替代品————RecyclerView

    RecyclerView这个控件也出来很久了,相信大家也学习的差不多了,如果还没学习的,或许我可以带领大家体验一把这个艺术般的控件. 项目已经同步至github:https://github.com/ ...

  10. C#6新特性,让你的代码更干净

    前言 前几天看一个朋友的博客时,看他用到了C#6的特性,而6出来这么长时间还没有正儿八经看过它,今儿专门看了下新特性,说白了也不过是语法糖而已.但是用起来确实能让你的代码更加干净些.Let's try ...