2014年3月份的GDC 2014游戏开发者大会上,微软首次公布了新一代DirectX 12。在沉寂了多年之后,AMD都忍不住提出了自己的Mantle API之后,微软终于重新振作起来,又将在游戏行业刮起“腥风血雨”。
如今,Windows 10 Build 9926预览版其实已经包含了DX12。虽然还只是个早期版本,但是API正在稳定下来,驱动程序也在不断改进,微软还与Oxide Games合作推出了第一个支持DX12的应用/测试程序:《Star Swarm》(星群)。
所以,我们终于可以谈谈DX12的性能了。能不能干掉AMD Mantle?能解决DX11上存在的CPU瓶颈问题吗?对比DX11进步能有多大?A/N卡表现有何差异?
【DX12的现状:working...】
Windows 10本身都还“残缺不全”,作为其一部分的DX12自然还很初级,我们所能了解到的技术细节也不多,因此今天做的只是一个初步预览,和最终表现肯定会相去甚远,这一点要时刻牢记。
下个月我们将迎来GDC 2015,到时候必然能看到微软及合作伙伴公布更多关于DX12的细节和进展。
历史上伴随DirectX的每一次升级,微软都会给出新的WDDM(Windows显示驱动模型),DX12就带来了全新的WDDM 2.0,这也是该技术自Windows Vista诞生以来最大的改变,将会重写整个Windows GPU生态系统。
预计WDDM 2.0会在内存管理、动态资源索引、更底层CPU效率优化等方面给我们带来惊喜。
现在使用较新显卡运行Windows 10 9926预览版,DirectX诊断程序里都会显示DirectX 12、WDDM 2.0。
WDDM 2.0的变化之大,显卡厂商正面临着严峻挑战,驱动程序一定要跟上。AMD、NVIDIA目前都在进行这项工作,结果就是不同型号显卡对DX12的支持情况会有很大差异(不管是技术上还是市场上)。
简单地说,AMD、NVIDIA的最近几代显卡都可以支持DX12,但进展各有不同。
AMD HD7000/R200系列用的是第一代GCN架构,同样没有被忘记,但目前也是问题最多的,尤其在纹理方面。
GCN 1.1 R290/260系列和GCN 1.2 R9 285的情况还好一些,基本能用。
NVIDIA 开普勒/麦克斯韦两大家族都可以支持DX12,也就是GeForce 600系列起步,进展还算顺利。
更老的费米GeForce 400/500系列也得到了NVIDIA的承诺,但暂时还未启动相关工作。
但是记住,现在说是支持DX12,并不代表在API、特性级别(Feature Level)上都是百分之百支持的,尤其是微软引入的特性级别这个概念,很容易让人眼花缭乱。
只有那些完整支持FL 12_0的,才能算是真正支持DX12,其他都是部分支持,比如FL 11_2什么的。
据说,现有显卡都只是部分支持DX12,完整支持的得等待全新产品。
更乱的是微软还搞了个DirectX 11.3,对应着FL 11_3,是一个高层API,和底层的DX12并不冲突,而是在功能特性上相通,且长期共存。
关于它的具体情况,以及显卡支持问题,GDC 2015上相信会给出一些说法。
最后操作系统支持方面,DX12将是Windows 10的专利。
这其实并不完全是出于市场方面的考虑,技术上让DX12区支持Windows 7/8/8.1也是相当困难的,因为WDDM 2.0是系统内核组件,支持老系统需要大幅度重新改写系统内核,这工作量根本不值得。
再说了,Windows 7/8.1都可以免费升级Windows 10,还要求啥呢?
另外,这也给AMD Mantle、OpenGL留下了更多发展空间,它们都可以继续吸引那些想留在Windows 7/8.1系统上的玩家。
【第一个DX12程序:《星群》】
《星群》其实是个演示DEMO,2014年初就有了,当时用来展示Oxide Nitrous游戏引擎,以及AMD Mantle,因为产生的渲染调用(draw call)规模庞大(可超过10万)而成为压榨GPU性能的利器,也非常适合测试底层API。
因为是个理想化的基准测试工具,《星群》能将DX12的性能发挥到极致,因此未来在实际游戏里看到的情况肯定会有所不同,但这至少能反映出DX12的实力。
《星群》的场景是两队AI太空舰队厮杀,随机性非常大,不过它有个RTS模式,可以基本确保每次测试的结果有可比性。
本次测试中,所用显卡驱动NVIDIA提供了349.56版本,AMD则提供了15.200版本。微软表示,现阶段的DX12环境还存在一些内存泄露、性能优化不足的问题,建议显卡显存不要少于3GB,不过实际测试中2GB也挺好的。
另外,N卡在DX11模式下还有些问题,偶尔会崩溃,所以禁用了D3D11延迟上下文功能。
参测显卡涵盖了当前具有代表性的几款:
- R9 290X (GCN 1.1)
- R9 285 (GCN 1.2)
- R9 260X (GCN 1.1)
- GTX 980 (Maxwell 2)
- GTX 750 Ti (Maxwell 1)
- GTX 680 (Kepler)
CPU选择了一颗Core i7-4960X,但除了六核心十二线程4.2GHz的原始状态,还屏蔽部分核心与频率,模拟了四核心四线程Core i5-4670K 3.8GHz,双核心四线程Core i3-4370 3.8GHz(三级缓存没法控制但影响不大),看看不同核心数量的差异。
测试平台还用了芝奇RipjawZ DDR3-1866 8GB×4内存、三星SSD 840 EVO 750GB固态硬盘等。
好了,接下来就看看DX12是否如宣传得那样神奇!(A卡顺便测了Mantle)
【CPU测试:不同核心数量影响多大?】
DX11的一大局限就是在多核心上效率不足,存在很大瓶颈,换言之就是多线程支持不到位,这也是DX12的重点改进方向之一。
《星群》的批量提交(batch submission)在DX11上就基本是单线程的。
DX11到DX12的性能堪称飞跃,是数倍的提升,也消除了核心数量限制,双核、四核都有着不错的提升,但是超过四核之后CPU不再是瓶颈,也就看不到什么再提升了。
但是GTX 980、R9 290X的差异有点大,DX12之下前者快了一半多,DX11之下更是三倍的差异。虽说两款卡本身就有差别,但这也有点离奇。
Mantle倒是亮了,足以媲美甚至超过DX12。
在不同显卡上考察双核、四核的差异,可以充分反应DX12的效率之高,只有GTX 980这样的顶级显卡才让双核心有点跟不上。换言之,除非你用的是超高端显卡,未来的DX12游戏里双核就足够了!
四核心上的批量提交时间,DX12同样表现非凡,只需要几个毫秒。
A/N差异同样值得玩味,DX11 A卡都超过了110毫秒,N卡则只有30毫秒左右,不过AMD Mantle再次亮了,开启后能基本接近DX12的水平了!
再来看看CPU占用率:
R9 290X DX11
R9 290X DX12
R9 290X Mantle
GTX 980 DX11
GTX 980 DX12
不出所料,DX11下的CPU负载很不均衡,只有一两个核心在努力工作,DX12下就基本可以用到全部四个核心了,Mantle也不错。
【GPU测试:不同显卡有何差别?】
这个对游戏玩家来说影响就更大了,毕竟玩游戏,大家首先看的还是显卡。
搭配四核心时,NVIDIA强势领先,GTX 980超过了R9 290X 50%之多,GTX 680也能领先R9 285 25%。
虽然说系统、驱动、API、应用都在开发之中,出现这种情况也不意外,得看能不能保持到最后,但是再看看DX11下,就知道A卡确实惨了点。
由于DX11性能落后,A卡切换到DX12时进步倒是惊人的,R9 290X就提升了……416%!
另外,它们还有Mantle,开启之后每一款卡都可以干掉DX12!(稍后再谈这个话题)
换成双核心,情况也差不多,除了GTX 980 DX12下略微紧张一些之外,其他发挥都很正常。
不过注意看GTX 750 Ti,它在DX12下的提升并不大,26%的幅度元远没法和两款高端型号相比,因此如果你的N卡不怎么高端,处理器就不能太弱。
【DX12大战Mantle:AMD的春药?】
虽然今天的核心是DX12,不过考虑到AMD Mantle推出更早,效果也不赖,甚至可以说DX12都汲取了它的影响(微软和AMD谁也不谈这个),所以再来看看二者之间的对比。
四核心,Mantle完爆DX12,从高到低每一款显卡都能胜出,和初期高低不均匀的情况完全不同了。
双核心下,Mantle表现差了点,搭配低端卡还能胜过DX12,但是越高越不行了,R9 290X上落后很明显。
Mantle的本意就是发挥底层API,降低对CPU的要求,从而让自家主打中低端的产品发挥更好,但如果需要四核心才能发挥自如,那可是个问题。
从提交时间上可以看出一些端倪,DX12做得要更好。
Oxide Games对此做了一些解释,称《星群》可以向GPU发送大批量工作负载,容易导致GPU指令处理器成为瓶颈,为此AMD Mantle对小批量工作做了优化,让CPU分担一部分工作,消除了瓶颈,但也导致CPU工作加重了一些。尽管这么做效率不如DX12,但仍然比DX11好得多,不失为一个很好的解决方案。
如果我们关闭这个优化,会发现Mantle的提交时间减半,和DX12就相差无几了,甚至更好那么一点点。
但代价就是性能也下来了,损失了16%,看起来AMD还是很聪明的。
【中等画质测试:这样才够亲民】
之前的测试都将画质设到了最高,但是低于很多玩家来说,中等画质更现实一些,可以在画面、速度方面取得更好的平衡。
CPU方面,即便是降低了画质,也只有GTX 980搭配双核心的时候存在瓶颈,其他时候双核心都挺好。
GPU差异同样和最高画质时差不多,A卡要做的还很多,光有Mantle可不够。GTX 750 Ti则依然是DX12下提升最小的,双核心时仅仅14%。
【帧渲染时间测试:DX12简直完美!】
这几年大家应该都了解到了,影响游戏体验的不仅仅是最高、最低、平均帧率,还有帧渲染时间,只有它稳定如一,才能保证游戏真正流畅。
DX12在这方面是否有改进呢?
注意:本次测试中的帧渲染时间都是《星群》本身记录的,可能不是足够精确。测试在四核心、最高画质下进行。
总的来说,DX12的帧渲染时间明显更短,自然更加流畅,但是其实DX11也并不算很差,同样说得过去。在这个问题上,更需要注意的其实是显卡驱动。
另外,Mantle又一次抢镜了,完全和DX12没啥区别。
最后看看功耗:
DX12不是说更省电吗?好吧,整个环境毕竟都在开发阶段,《星群》这个DEMO也是用来发挥极限性能的。DX12(还有Mantle)都加快了系统效率,尤其是GPU根本没得空闲,多耗点电也是正常的。