DXGI 1.4的新特性
其实到写这篇文章的时候,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)。
相关话题
DXGI 1.4的新特性的更多相关文章
- SQL Server 2014 新特性——内存数据库
SQL Server 2014 新特性——内存数据库 目录 SQL Server 2014 新特性——内存数据库 简介: 设计目的和原因: 专业名词 In-Memory OLTP不同之处 内存优化表 ...
- ElasticSearch 5学习(10)——结构化查询(包括新特性)
之前我们所有的查询都属于命令行查询,但是不利于复杂的查询,而且一般在项目开发中不使用命令行查询方式,只有在调试测试时使用简单命令行查询,但是,如果想要善用搜索,我们必须使用请求体查询(request ...
- [干货来袭]C#6.0新特性
微软昨天发布了新的VS 2015 ..随之而来的还有很多很多东西... .NET新版本 ASP.NET新版本...等等..太多..实在没消化.. 分享一下也是昨天发布的新的C#6.0的部分新特性吧.. ...
- CSS3新特性应用之结构与布局
一.自适应内部元素 利用width的新特性min-content实现 width新特性值介绍: fill-available,自动填充盒子模型中剩余的宽度,包含margin.padding.borde ...
- 【译】Meteor 新手教程:在排行榜上添加新特性
原文:http://danneu.com/posts/6-meteor-tutorial-for-fellow-noobs-adding-features-to-the-leaderboard-dem ...
- 跨平台的 .NET 运行环境 Mono 3.2 新特性
Mono 3.2 发布了,对 Mono 3.0 和 2.10 版本的支持不再继续,而且这两个分支也不再提供 bug 修复更新. Mono 3.2 主要新特性: LLVM 更新到 3.2 版本,带来更多 ...
- Atitit opencv版本新特性attilax总结
Atitit opencv版本新特性attilax总结 1.1. :OpenCV 3.0 发布,史上功能最全,速度最快的版1 1.2. 应用领域2 1.3. OPENCV2.4.3改进 2.4.2就有 ...
- es6 新特性2
es6其他几个非常有用的新特性. import export 这两个家伙对应的就是es6自己的module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成 ...
- ES6 新特性
ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015. 也就是说,ES6就是ES2015. ...
随机推荐
- 《高性能javascript》一书要点和延伸(上)
前些天收到了HTML5中国送来的<高性能javascript>一书,便打算将其做为假期消遣,顺便也写篇文章记录下书中一些要点. 个人觉得本书很值得中低级别的前端朋友阅读,会有很多意想不到的 ...
- JavaScript的妙与乐(一)之 函数优化
JavaScript的妙与乐系列文章主要是展示一些JavaScript上面比较好玩一点的特性和一些有用的技巧,里面很多内容都是我曾经在项目中使用过的一些内容(当然,未必所有技巧的使用频率都很高^_^) ...
- MVVM大比拼之AngularJS源码精析
MVVM大比拼之AngularJS源码精析 简介 AngularJS的学习资源已经非常非常多了,AngularJS基础请直接看官网文档.这里推荐几个深度学习的资料: AngularJS学习笔记 作者: ...
- 2000条你应知的WPF小姿势 基础篇<63-68 Triggers和WPF类逻辑结构>
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000ThingsYou Should Know About C# 和 2,00 ...
- [Intel Edison开发板] 01、Edison开发板性能简述
Integrated Wi-Fi certified in 68 countries, Bluetooth® 4.0 support, 1GB DDR and 4GB flash memory sim ...
- 帮我做个APP,给你20万,做不做?
一.为什么要写这篇文章 前段时间,有个辞职 创业的同事(做法务的) 问我 开发一个 新闻类的APP要多少钱,产品.UI.接口.后台管理页 他们啥都没有,想全部外包. 我 并没有在外包公司做过,也没 ...
- .NET Core采用的全新配置系统[1]: 读取配置数据
提到“配置”二字,我想绝大部分.NET开发人员脑海中会立马浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化的配置定义在这两个文 ...
- webService学习之路(二):springMVC集成CXF快速发布webService
继上一篇webService入门之后,http://www.cnblogs.com/xiaochangwei/p/4969448.html ,现在我将我周六在家研究的结果公布出来 本次集成是基于之前已 ...
- SQL实用
实用的SQL语句 行列互转 create table test(id int,name varchar(20),quarter int,profile int) insert into test ...
- WebApi跨域问题
1.通过Nuget下载CORS安装包 2.在WebApiConfig.cs文件中注册CORS 3.在全局文件启用CORS支持 4.在控制器上添加头