DirectX的發(fā)展推動(dòng)了圖形技術(shù)的進(jìn)步,從早期的簡(jiǎn)單3D圖形到目前幾近逼真的光影效果和細(xì)節(jié)出眾的模型,DirectX在其中扮演了最為重要的角色。每一代DirectX的發(fā)布,都會(huì)帶來圖形業(yè)界的革命。在GDC 2014(Game Developer Conference,游戲開發(fā)者大會(huì))上,微軟宣布了全新的DirectX 12,全新一代的DirectX API又將給我們帶來無限驚喜。
DirectX作為目前最主要的圖形API,存在于電腦的方方面面,也是目前3D游戲的根本技術(shù)支柱。作為DirectX技術(shù)重要模塊的Direct3D,由于快速的發(fā)展和對(duì)3D技術(shù)推動(dòng)的重要性,又被人廣泛關(guān)注,以至于一度成為了DirectX發(fā)展的代名詞。實(shí)際上,在DirectX 11于2009年發(fā)布后沒多久,人們就逐漸開始意識(shí)到DirectX 11中的Direct3D 11本身對(duì)圖形技術(shù)存在大量的約束,已經(jīng)無法滿足目前技術(shù)發(fā)展的需求,從而迫切希望有全新的技術(shù)來進(jìn)一步推動(dòng)技術(shù)的前進(jìn)。在這種情況下,雖然AMD已經(jīng)展示了自家的Mantle API并取得了不錯(cuò)的效果,但是業(yè)界還需要一個(gè)真正的統(tǒng)一標(biāo)準(zhǔn),這就是本文的主題DirectX 12。
解決效能瓶頸是目標(biāo)
從PC被發(fā)明,CPU和GPU被區(qū)分開來到現(xiàn)在,這兩者的性能發(fā)生了極為驚人的增長(zhǎng)。從目前的角度來看,CPU的單線程性能已經(jīng)很難提高,主頻也達(dá)到了一個(gè)很高的地步,繼續(xù)發(fā)展的希望不大。但是GPU由于圖形計(jì)算的并行特性,效能一直在大幅度攀升。最終結(jié)果是,GPU的性能增長(zhǎng)幅度已經(jīng)遠(yuǎn)遠(yuǎn)拋離了CPU。這本身應(yīng)該是可以理解的,但是考慮到DirectX這樣的API的話,結(jié)果就有所不同了。這是因?yàn)?,目前諸如DirectX這樣的API在為GPU準(zhǔn)備數(shù)據(jù)時(shí)的工作基本都是單線程的,由于CPU單線程性能增長(zhǎng)遇到瓶頸,因此就產(chǎn)生了差距。也正是由于這種差距的產(chǎn)品,大量的時(shí)間被浪費(fèi)在等待上,圖形性能提升難以跟上GPU的增長(zhǎng)。
相比之下,諸如游戲主機(jī)這樣的專注于底層開發(fā)的產(chǎn)品反而不存在這樣的缺陷。這是因?yàn)橛螒蛑鳈C(jī)的開發(fā)采用的是底層開發(fā),相比目前的高級(jí)API,底層開發(fā)雖然依舊需要一個(gè)主線程,依舊可能會(huì)產(chǎn)生瓶頸,但底層開發(fā)往往不使用這樣一個(gè)被CPU約束很強(qiáng)的API以及不需要為GPU預(yù)先準(zhǔn)備數(shù)據(jù)。因此底層開發(fā)更容易使用多個(gè)CPU并行處理并預(yù)防瓶頸現(xiàn)象的出現(xiàn),這也就是很多游戲機(jī)為什么使用相對(duì)弱的多核心CPU,都能實(shí)現(xiàn)比更強(qiáng)大的PC CPU更好的效能輸出的原因。
因此,現(xiàn)在DirectX需要解決的是日益強(qiáng)大的GPU和與之完全不相符的單線程CPU之間的矛盾。解決方法很簡(jiǎn)單,那就是在全新的DirectX 12中重新引入底層開發(fā),徹底解決CPU單線程性能無法提升帶來的性能瓶頸約束。
DirectX 12的全新功能
目前DirectX 12還處于開發(fā)階段,因此對(duì)其具體的內(nèi)容外界知道得并不多。但是在GDC 2014上,微軟還是公布了很多的技術(shù)資料,基本勾畫出了DirectX 12的外觀輪廓。
首先,DirectX 12的目的是大幅度降低CPU在整個(gè)CPU-GPU過程中的計(jì)算開銷。CPU目前耗費(fèi)時(shí)間最多的部分是為GPU準(zhǔn)備命令列表并存儲(chǔ)至緩沖區(qū)。在Direct3D 12上,這個(gè)任務(wù)將交給開發(fā)人員而不是CPU,也就是說開發(fā)人員將預(yù)先準(zhǔn)備好這些內(nèi)容,并將這些內(nèi)容分布在不同的CPU核心上完成,這將極大程度提升CPU的效能。在這一點(diǎn)上,目前還不清楚Direct3D 12將怎么做,但是毫無疑問的是Direct3D 12和AMD之前就發(fā)布的Mantle有一定的相似性,畢竟這兩個(gè)技術(shù)沒有理由在目標(biāo)如此接近的情況下有巨大的實(shí)現(xiàn)方法上的差異。
為了達(dá)到上述的目的,微軟推出了一些新的概念,比如Bundle,也稱“命令束”。這是一顆可重復(fù)使用的功能、命令的列表。命令束的出現(xiàn)節(jié)約了CPU資源,因?yàn)樘峤灰粋€(gè)命令束比提交大量的命令列表更直接、簡(jiǎn)單。在具體的執(zhí)行中,可以允許命令束一次提交、多次執(zhí)行,每次執(zhí)行中可以有一些細(xì)微的不同。微軟還給出了一個(gè)使用案例,其中的character drawn在兩次調(diào)用中使用了不同的紋理,這展示了命令束在使用中的靈活性。
其次,DirectX 12還引入了管線狀態(tài)對(duì)象(Pipeline State Objects,簡(jiǎn)稱PSOs),在這個(gè)新技術(shù)的幫助下,技術(shù)人員可以真正深入命令緩沖區(qū)的執(zhí)行過程,并且比較各種圖形架構(gòu)的差異。DirectX 12還將繼續(xù)解決新的功能和舊的硬件之間平衡的問題。PSOs可以繞過目前的管線限制并重新創(chuàng)建新的對(duì)象,具體細(xì)節(jié)暫時(shí)不談,其優(yōu)勢(shì)在于可以進(jìn)一步降低CPU開銷并提高效率,增加CPU的繪制調(diào)用數(shù)量,并且可以為其他任務(wù)釋放資源。
除了上述兩點(diǎn)重要的改進(jìn)外,微軟還為DirectX 12引入了諸如Descriptor Heaps等技術(shù)用于解除有關(guān)紋理綁定的問題,此外還帶來了新的資源壓縮方式,使得更高精度的紋理貼圖可以縮減體積并應(yīng)用在程序中。這些積極的改進(jìn)都將帶來DirectX 12更有效率、更為出色的應(yīng)用效能。
新一輪效能躍進(jìn)
在作出了大量改進(jìn)之后,同樣適用DirectX 12的軟件相比DirectX 11的軟件,在編寫和調(diào)試上的難度可能略微增加,但同時(shí)帶來的是大幅度增加的運(yùn)行效率??赡苡行牡淖x者已經(jīng)注意到,DirectX 12中目前并沒有出現(xiàn)對(duì)圖形進(jìn)行重大改善的革命性全新技術(shù)。這一方面是微軟尚未公布新的技術(shù),另一方面則是目前的DirectX 11等受制于性能和效率問題,本身就對(duì)圖形技術(shù)的應(yīng)用情況不甚樂觀,因此在DirectX 12改進(jìn)效率后,目前大量已經(jīng)存在的新技術(shù)可以重新加入并得到更廣泛優(yōu)化應(yīng)用,這相當(dāng)于從根本上提升了圖形質(zhì)量。
在支持DirectX 12的硬件方面,目前三大GPU廠商的產(chǎn)品都已經(jīng)宣布即將支持DirectX 12,包括NVIDIA、AMD和英特爾。英特爾方面只有Haswell內(nèi)置的高清顯卡可以支持DirectX 12,AMD方面GCN 1.0和GCN 1.1都能夠提供對(duì)DirectX 12的支持。NVIDIA旗下包括Fermi、開普勒和Maxwell在內(nèi)的產(chǎn)品都提供對(duì)Direct3D 12的支持。
為了更清晰說明DirectX 12在性能方面的優(yōu)勢(shì),微軟搭建了一個(gè)測(cè)試平臺(tái),使用內(nèi)部開發(fā)版本的DirectX 12和重新編譯的3DMARK 11,用于演示DirectX 12的性能提升情況。在整個(gè)測(cè)試中,DirectX 12能夠顯著地降低CPU單線程的負(fù)載,并且將更多的工作負(fù)載分配到不同的CPU核心上去。與此同時(shí),作為系統(tǒng)內(nèi)核的一部分,內(nèi)核模式驅(qū)動(dòng)和CPU耗用時(shí)間都被降低了。最終,DirectX 12在效能上大幅領(lǐng)先,讓我們看到了新一代DirectX API的希望。
2015年與新DX同行
目前微軟只發(fā)布了DirectX 12的部分信息,而新版API上市也需要等到2015年年初左右。在這么長(zhǎng)的時(shí)間中,微軟可以繼續(xù)對(duì)DirectX 12進(jìn)行調(diào)整并完善它的功能。而對(duì)游戲玩家來說,2015年很可能將迎來一次巨大的硬件和軟件升級(jí),電影級(jí)的游戲畫質(zhì)說不定已經(jīng)不遠(yuǎn)了。