DirectX 12发布已经有一段时间了,随着Windows 10的快速推进,DirectX 12成为很多玩家电脑上的标配。那么DirectX 12到底有哪些改进,哪些显卡才能支持Di rectX 12,目前N卡和A卡对DirectX 12的支持力度如何?今天我们就和大家一起来探讨一下这个问题。

DirectX 12新特性技术解析

微软的DirectX几乎是整个3D图形业界的基石,在3D游戏上这一点表现得更为明显。DirectX在发展中不断地解除GPU的应用限制并将GPU的功能性和应用范围推向一个全新的高度。现在,程序员和美术人员更多考虑的不是采用哪些方法来实现图形图像,而是哪些方法可以更好地呈现画面,因为DirectX的“工具库”有太多的选择,比如AO就有SSAO、HBAO、HDAO等多种计算方式。

在大量的资源面前,人们发现这样一个问题:GPU已经能做很多事情了,但是它不能很有效率地做这些事情。由于之前的技术限制等原因,DirectX在和硬件配合时,很难彻底展示出硬件的效能。于是,微软在2013年宣布,DirectX将升级到最新的版本DirectX 12,并加入大量改善底层效率的设计,不再将重点放在改善图形效果上。

xgpu新增独占游戏(原创NA之战新领地)(1)

像这样有大量顶点、需要CPU处理的场景,帧数表现往往不尽如人意。

言归正传,下面我们来看看,新的DirectX12能在图形上带来哪些特别重要的改进。

DirectX 12的核心变化全新的底层渲染改进

说起“底层渲染”,就不得不提到一个问题—多线程化。

目前的CPU都是多核心的,支持多线程运作。在DirectX中,GPU接受CPU传输过来的数据,在计算后再将这些数据返还给CPU,这个过程可看做一个“黑盒”:用户从盒子的一端输入数据,API帮用户处理完成后从盒子的另一端输出数据,这个过程只受API本身控制,图形程序、游戏引擎都无法染指。看起来这个过程比较简单明了,但关键的是:这个“黑盒”过程多线程化目前来看非常糟糕,由于存在相关性等问题,程序无法判断哪些应用在前,哪些应用无关,哪些可以并行化,因此绝大部分情况下都只能以单线程的方式运作。而随着技术发展,并行化的GPU的性能增长速度远远超过了串行化的CPU单核心性能的增长速度,这就导致很多情况下GPU受制于单线程的CPU,性能无法全部发挥。

这样一来,GPU性能在快速增长,但是其接受到的从CPU端发出的Draw Call绘制指令却一直没有爆发性、突破性的增长。这种情况对一些重GPU负载的游戏来说,还不算太难受。但是对重CPU负载的游戏来说,就变得非常难平衡——大量的负载压在CPU上,多核心的CPU只有单线程在和GPU沟通,整个CPU- GPU沟通开销非常大,典型的例子就是《魔兽世界》这样的网游,在人和物体太多的场景下,CPU根本无法做到多核心满载,庞大的计算量使得CPU少数几个线程的压力暴增,最终帧数跌落至甚至只有20fps。

问题弄清楚了,DirectX目前在CPU-GPU体系的计算开销方面出现了问题,“黑盒”模式是主要原因。这个时候就需要底层渲染出场了。什么是底层渲染呢?这个时候需要拿出游戏主机来举例。虽然主流游戏机价格只有不到3000元,配置也只是两三前的电脑配置,为何其画面质量和效果都和当期的PC游戏持平?这里面存在两个原因,其中是游戏机可以在画面上做很多“取巧”的手段,使得画面“看起来”很精美,另外,游戏机所使用的底层渲染方式,使得游戏机不太存在CPU-GPU的计算开销。程序开发人员需要在更接近硬件底层的层面来调配CPU和GPU,这里程序自动处理的部分就会少很多。这样就很明确了——所谓底层渲染,就是将“黑盒”模式放弃,将这个过程开放给程序员,使得程序员来判断任务应该如何执行,同时CPU多线程就能被很好地运作起来。

xgpu新增独占游戏(原创NA之战新领地)(2)

游戏主机由于特殊的架构和设计,往往只能使用底层渲染来完成图形工作。图为XBOX360拆解图。

xgpu新增独占游戏(原创NA之战新领地)(3)

3DMark中带来的OverheadFeature Test,就是典型的测试底层渲染效率的工具。

在目前的很多测试中,底层渲染都带来了CPU-GPU系统绘制执行几倍甚至数十倍的提升。虽然,这样的提升最终不太可能反映在游戏中,只能是纸面上的数据,但是这也从一个侧面说明DirectX 12对资源的利用效率更高了。

xgpu新增独占游戏(原创NA之战新领地)(4)

微软在很早之前就演示过,在使用了DirectX 12的底层渲染后,CPU的负载更为平衡,整体响应时间更为快速。

DirectX 12的计算改进异步计算的出现

相比之前比较难以理解的底层渲染而言,异步计算(Async Compute)算是一个比较方便理解的概念。

提起异步计算,那么肯定有所谓的“同步计算”。“同步计算”解决了GPU计算不同任务时的效率问题,不过也带来了任务的互相等待问题。因为要对不同的任务进行排序、抢占,那么一些紧急却数量较少的任务有可能难以抢到GPU资源,不得不被迫等待,降低了系统效率。在这种情况下,异步计算就做得很好。异步计算不需要排队也不需要等待,数据或者指令来了直接根据先来后到处理就好,核心原因是GPU不再需要切换数据状态或者指令状态。既然不需要切换,那么来了就处理就变得理所应当。

xgpu新增独占游戏(原创NA之战新领地)(5)

xgpu新增独占游戏(原创NA之战新领地)(6)

AMD解释异步计算的两张幻灯片,非常形象地说明了这项功能的作用。

异步计算的出现,在很大程度上减轻了GPU端处理数据的延迟,使得所有数据能够基本做到“随来随走”,提高了效率。

英伟达显卡对异步计算的支持

最近有一些消息称,英伟达旗下Maxwell 架构显卡不能支持DirectX 12 中很重要的异步计算功能。

从驱动以及游戏开发角度来看,消息显示,在开发过程中Maxwell 架构并不能直接开启异步计算功能并实现完整的支持,而是建议游戏开发商使用传统模式。反观AMD,GCN 架构对异步计算支持很到位,硬件和软件都完全符合DirectX 12 规范,程序员可以直接调用。对这个问题,目前英伟达官方没有明确的回应,只是说硬件架构上Maxwell 完全支持异步计算,驱动方面尚未做好准备。也就是说驱动未来有可能通过增强或者“修复”来完整支持,只是未来的驱动何时会修复,就不得而知了。

DirectX 12的功能增强大量全新功能

底层渲染和异步计算,可以算是DirectX 12的核心改进。除此之外,DirectX还带来了大量的全新功能。

DirectX 12支持无绑定(bindless)功能。无绑定功能主要是指之前着色和纹理的绑定功能,一组着色代码只能针对128组纹理。不过在DirectX 12中,这个限定被取消了,一组着色代码可以针对任意组纹理,这就提升了可以被同时处理的纹理数据,并且降低了着色代码被重复执行的几率,也降低了CPU占用了,提升了GPU占用率。

xgpu新增独占游戏(原创NA之战新领地)(7)

英伟达早在Kepler架构时代就提出了无绑定功能,DirectX 12将其更进一步。

除了无绑定功能外,DirectX 12还加入了诸如平铺资源(Tiled Resoure)、归类UAV访问、立体平铺资源(Volume Tiled Resources)、保守光栅(ConservativeRasterization)、光栅顺序视图(Raster Order Views)等功能,这些功能主要是用于提高计算效率,降低计算瓶颈,本身并没有带来太多图形特效。此外,DirectX 12还加入了对不同GPU的并行计算支持,也是一大亮点。

xgpu新增独占游戏(原创NA之战新领地)(8)

xgpu新增独占游戏(原创NA之战新领地)(9)

DirectX 12支持不同显卡在同一个系统中并行运作,A卡和N卡终于能“和谐共处”了。不过这个功能需要游戏和驱动双重支持,目前推广起来应该还有颇多阻力。

xgpu新增独占游戏(原创NA之战新领地)(10)

DirectX 12还带来了ASTC纹理的支持。

英伟达和AMD显卡对DirectX 12的支持情况

大概了解了DirectX 12的相关技术改进后,再来看看显卡对DirectX 12的支持情况。目前DirectX 12有两个支持等级,分别是DirectX 12 Feature Level 12_1(支持全部特效)和DirectX12Feature Level 12_0(支持部分特效)。需要注意的是,每个等级中每个支持的特效又有等级之分,等级越高肯定越好。比如资源绑定有Tier 1、Tier 2和Tier 3之分,Feature Level 12_0就需要资源绑定的Tier2、平铺资源的Tier 2以及归类UAV访问的Tier1;Feature Level 12_1需要光栅的Tier 1和光栅顺序贴图的支持,后者是为VR时代所准备的。

xgpu新增独占游戏(原创NA之战新领地)(11)

英伟达宣称Maxwell 2.0架构能很好地支持Feature Level 12_1。

从显卡角度来说,由于DirectX 12核心的底层渲染只是软件架构上的改进,因此只要GPU支持DirectX 11基本上就可以完整支持,但是对一些特殊的内容则支持情况各异。实际上,大家也不必太过于在乎DirectX12显卡的功能支持问题,因为DirectX 12中很多功能内容都是可选支持,并且只是改善性项目,并非强制支持和功能性项目,无论显卡支持还是不支持,理论上来说对最终呈现的游戏画面并没有太大影响,当然,如果游戏引擎或者开发商做出了特殊的选择,那就很难预计了。

下表列出了英伟达和AMD架构对DirectX 12不同等级和功能的支持情况。可以根据显卡图形核心的分类等级来判断自己的显卡是否支持DirectX 12。

xgpu新增独占游戏(原创NA之战新领地)(12)

(戳图放大看详情)

从上表中可以看出,目前,对DirectX 12支持等级最高、最完善的显卡只有Maxwell 2.0架构的诸如GTX 980 Ti、TITAN X、GTX 960等显卡,其支持等级为DirectX 12 Feature Level 12_1,其余的显卡包括Maxwel1.0、GCN 2.0都只能支持到DirectX 12Feature Level 12_0。再老旧一些的显卡包括Fermi、Kepler、GCN 1.0等,都只能支持DirectX 12 Feature Level 11_1。不过,这些相对老旧的显卡事实上也能完整支持底层渲染,在运行DirectX 12游戏时,整体效率上会有很大提升。

由于受篇幅影响,明天我们将带来《N卡/A卡实战DX12游戏Demo《Ashes of the Singularity》,敬请关注。

,