2011年的9月注定是一个不平凡的9月,在这个9月里,微软为我们封上了大量惊艳的甚至是富有开拓性的新作。这其中不仅有极富突破性,甚至打破了wintel联盟的windows8,更有标志着微软正式进军移动领域,同时吹响桌面光栅化革命号角的DirectX 11.1。
DirectX在过去曾经经历过很多类似的更新,比如引入Pixel Shader1.4的DirectX 8.1;历经前后三次升级,最终成为一代经典并将影响力一直保持到今天的DirectX 9.0C;以及加入诸如光照探针等对后世影响深远的技术,但最终似乎无人问津的DirectX 10.1。
作为DirectX 11的最新子集,同时也是伴随着windows8同时出现的全新图形API,DirectX 11.1究竟给我们带来了哪些激动人心的改进?它又是否能够重现DirectX 9.0C的辉煌呢?下面,就让我们一起来看看DirectX 11.1究竟带来了怎样的改进吧。
● 整体构架更新
同以往每个版本的DirectX更新一样,本次DirectX 11.1的更新主要围绕两个方面展开,分别是Debug(除虫,意为除错)和Extended(扩展,包括功能和编译方式的拓展)。本次更新的主要项目如下:
•Shader tracing(shader追踪)
•Direct3D device sharing(D3D设备共享)
•Check support of new Direct3D 11.1 features and formats(全新D3D特性支持)
•Create larger constant buffers than a shader can access(允许创建大于shader可访问尺寸的常buffer)
•Use logical operations in a render target(对渲染目标执行逻辑操作)
•Force the sample count to create a rasterizer state(为每一个光栅化过程强制样本数)
•Process video resources with shaders(通过shader处理视频过程)
•Change subresources with new copy options(通过新的copy选项改进资源体系)
•Discard resources and resource views(放弃传统的资源管理和资源视图模式)
•Support a larger number of UAVs(支持大量的UAV[UnorderedAccessViews]操作)
•Bind a subrange of a constant buffer to a shader(为shader绑定作为子区间的常buffer)
•Retrieve the subrange of a constant buffer that is bound to a shader(检索每一个绑定常buffer作为子区间的shader的常buffer子区间)
•Clear all or part of a resource view(清除所有关于资源视图的内容)
•Map SRVs of dynamic buffers with NO_OVERWRITE(以非overwrite方式为SRVs动态buffer创建地图)
•Use UAVs at every pipeline stage(在每条渲染管线上使用UAV)
大面上来看,这些更新大多数都是针对程序员以及开发者的,像添加各种常buffer或者改进资源体系等等变动可以为编程人员提供更多编程方面的便利,但似乎与最终用户无关。其实每次DirectX的版本更新都是如此,一款面向编程者和开发人员的图形API自然会包含大量针对编程者的细节特性。而我们所要做的,就是从这些细节中发掘出有意义的亮点。
本次DirectX 11.1更新最大的亮点来自Core Structures部分,包括D3D11 Feature data double的DoublePrecisionFloatShaderOps和D3D11 Feature data arthitecture的TileBasedDeferredRenderer,也就是我们通常所说的DP Shader Ops以及TBDR。
● DP Shader Ops?准备迎接光线追踪吧!
作为DirectX 11.1在桌面部分最引人注目的更新,DP Shader Ops的引入足以引发一场革命,因为它为DP Shader的实用打开了最后一道API端的大门。
DP Shader Ops引入了诸如双精度ADD、mov等诸多指令和操作
DP shader(Double Precision Float Shader,双精度浮点shader)是微软在DirectX 11中首次引入的shader类型。与传统的常规shader相比,DP shader的最大特点在于在shader处理数据及运算过程中全面引入双精度规则,这让DP shader具备了远高于常规shader的运算精度,配合FMA的应用,DP shader可以称得上桌面应用范围内完全无损的shader类型。
遗憾的是,DirectX 11中所包含的DP shader部分仅仅是在编程及数据定义规则上进行了扩展,并为引入更多的指令及执行模式。由此可见,要想让DP shader真正走向实用,DP shader Ops的引入是必不可少的。但是,我们为什么非要引入DP shader呢?它对图形效果的处理有哪些好处呢?
在传统的光栅化过程中,全部的浮点shader数据均为单精度,就我们目前的所有应用场合来看,FP32格式的shader数据已经足以保证程序运行精度的需求,DP数据在精度上是多余的。既然单精度FP32精度现在已经够用,引入DP shader的目的何在呢?答案来自一个显赫的名字——光线追踪。光线追踪对图形进步的意义毋庸多言,其精美的效果以及重大意义几乎每天都在被无数人无数次的重复着。按照微软对未来桌面图形处理过程的规划,光线追踪的引入已经迫在眉睫。
在光线追踪处理过程中,处理光线交汇的运算部分必须仰仗双精度浮点数据来维持运算过程及结果的正确性。如果使用目前惯用的处理精度,光线在与物体交互作用2次以上之后将会发生不可忽略的数据溢出,如果按照常规处理过程要求的那样让一束光线与物体交互作用最少6~8次,甚至30~50次的话,最终结果必定已经面目全非。由此可见,要保证光线追踪能够实用化并与现阶段的shader体系有机的结合在一起,DP shader的引入是必不可少的。而DirectX 11.1中的DP Shader Ops,正是这一切能够得以实现的基础。
● 进军移动的TBDR
与为桌面光栅化发生重大变革打好了基础的DP Shader Ops不同,DirectX 11.1的另一个更新几乎与桌面图形体系完全无关,它就是TileBasedDeferredRenderer。
Tile-Based Deferred Render是Power VR独特的TBR技术的一种延伸实现手段。TBR/TBDR通过将每一帧画面划分成多个矩形区域,并对区域内的所有像素分别进行Z值检查,在任务进入渲染阶段之前就将被遮挡的不可见像素剔除掉。由于在渲染之前进行Z-culling操作,TBR/TBDR极大地削减了最终被渲染像素的数量,不仅大幅降低了系统对像素的处理压力,更极大的节约了显存带宽及空间的开销。目前广泛采用TBR/TBDR技术的GPU,主要包括Imagination为移动领域提供的SGX Series5系列。
恩,你猜对了,Tile-Based Deferred Render的前身虽然曾经参与了“上古时代”的桌面图形大战,但现在的TBDR技术已经变成了非常彻底的移动SoC领域的显示技术。它的主要目的,在于通过减少显存带宽需求,让GPU能够以更简单的结构实现更高的性能和更低的功耗。而微软自TBR从桌面市场退出之后,也便坚定地支持目前传统的大数量MC带宽/ROP数量搭配的路线,进而放弃对TBR类功能的支持了。
现在,通过DirectX 11.1的TileBasedDeferredRenderer重新对TBDR技术进行了支持,图形函数库接口的打开让希望使用TBDR技术的程序员获得了在DirectX环境下即可完成编译程序的机会,这对于平衡性能与功耗之间的关系,进而让程序员在DirectX框架下完成移动设备程序的构造有着重要的意义。
● 更新DirectX11.1,微软意欲何为
windows8 M3作为开发者预览版,其目的不仅在于为开发者提供一个能够对新操作系统特性进行预览的平台,实际上微软希望通过M3向业界及用户传递的更重要的信息,在于其重整桌面图形业界以及跨平台的未来操作系统及图形API发展趋势。而这种信息的传达,则需要借助DirectX 11.1来进一步强化和实践。
传统的光栅化处理过程从出现到今天经历了漫长的历史,它对于整个计算机视觉虚拟现实技术的发展可谓贡献良多。但由于其本身固有的诸多缺陷,比如“本没有光却硬要说这里有光”的欺骗性处理方式,传统光栅化在今天已经成了严重制约显示技术进步以及特效表达的障碍。作为桌面图形界得领导者,微软自然首当其冲的感受到了来自技术端的限制以及需求端的压力。寻找改进甚至替代传统光栅化过程的处理方式,已经成了改进目前桌面图形应用领域停滞不前现状的唯一出路。因此对拥有很大优势的光线追踪技术的追求,也便顺理成章的成了微软面前最好的选择。既然要改革图形处理过程,将光线追踪引入甚至是纳入到光栅化处理过程当中来,为这个过程逐步打下基础并创造条件显然是必要的。通过DirectX 11/11.1出现并逐步完善的DP Shader,其目的便在于此。
而对于跨平台来说,微软的决心则更加坚定。windows8 M3的发布向世人表达了微软继续称霸X86桌面操作系统的决心之外,更向所有人传达了一个明确的信号:微软将以前所未有的决心开始大举进军移动领域。伴随着移动领域极为旺盛的需求增长,微软将注意力转向该领域是理所当然的。然而移动领域不像桌面,这并不是一个微软熟悉并且说了算的地方,这里的天空依旧是属于Open GL ES的,缺乏说话的地位和分量显然是微软极为头疼的问题。如果微软想要快速介入,TBDR这一Imagination在移动领域广为使用的技术显然会是一个很好的突破口。只要将程序员成功地吸引到DirectX的旗下,攻陷移动领域,或者起码能够在该领域获得充分的话语权,进而影响该领域的发展就是迟早的事情了。因此,可以说在本次DirectX 11.1的所有更新中,最引人瞩目的就是TBDR的引入。DirectX 11.1不仅有助于帮助微软进一步在移动领域推广windows8,更能让微软进一步扩大自己的领地和影响力。
综上所述,DirectX 11.1不仅具有着诸多先进的特性,更肩负着之前几乎所有图形API都不曾承担过的重要使命——它将成为人类历史上第一个统一的能够跨平台实现多重影响力,并改变整个图形编程界发展进程的API。仅凭这一条,就足以让DirectX 11.1名留史册了。相信无论成功与否,DirectX 11.1都将为我们留下深刻的印象。至于它能不能复制甚至超越DirectX 9.0C的辉煌,这个问题就交给时间来裁定吧。