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. ...
随机推荐
- IOC框架
一. IOC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图1:软件系统中耦合的对象 如果我们打开机 ...
- ★Kali信息收集~4.DNS系列
★.1host:DNS信息 参数: 一般情况下,host查找的是A,AAAA,和MX的记录 案例: DNS服务器查询 host -t ns 域名 A记录和MX记录查询 host 域名(host - ...
- [PostgreSQL] 图解安装 PostgreSQL
图解安装 PostgreSQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5894462.html 序 园友的一篇<Asp.Net Cor ...
- 如何通过官方渠道为Windows 10 添加具有中国特色的字体
Windows 10的变化细节上个人认为要比Windows 8多很多,而且很多功能找到之后还是小惊喜,就是挺多好用的地方居然都不正经宣传一下,微软真是搞得悄悄地干活? 今天为大家介绍一下通过官方途径添 ...
- 9.JAVA之GUI编程列出指定目录内容
代码如下: /*列出指定目录内容*/ import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; import ...
- .net汉字转字母
目前手上有一个需要实现:将用户输入的姓名转换成汉语拼音. 使用枚举,既麻烦又易出错,发现有一个微软拼音转换工具类ChnCharInfo.dll,在此记录下: 首先需要引入此dll, 链接: http: ...
- 前端开发:Javascript中的数组,常用方法解析
前端开发:Javascript中的数组,常用方法解析 前言 Array是Javascript构成的一个重要的部分,它可以用来存储字符串.对象.函数.Number,它是非常强大的.因此深入了解Array ...
- C# webform上传图片并生成缩略图
其实里面写的很乱,包括修改文件名什么的都没有仔细去写,主要是想记录下缩略图生成的几种方式 ,大家明白就好! void UpImgs() { if (FileUpload1.HasFile) { str ...
- ASP.NET五步打包下载Zip文件
本文版权归博客园和作者吴双共同所有,转载和爬虫请注明原文地址:www.cnblogs.com/tdws 首先分享几个振奋人心的新闻: 1.谷歌已经宣布加入.NET基金会 2.微软加入Linux基金会, ...
- 学习Redis你必须了解的数据结构——JS实现集合和ECMA6集合
集合类似于数组,但是集合中的元素是唯一的,没有重复值的.就像你学高中数学的概念一样,集合还可以做很多比如,并集,交集,差集的计算.在ECMA6之前,JavaScript没有提供原生的Set类,所以只能 ...