DirectX 12僅適用于Windows 10,這個(gè)微軟重新打造的圖形界面擁有更強(qiáng)大的性能,并且能夠在一定程度上兼容舊的顯示卡。
現(xiàn)如今隨處可見(jiàn)使用智能手機(jī)玩游戲的用戶,許多家庭用戶則傾向于選擇連接電視機(jī)使用的游戲機(jī),但是對(duì)于真正的游戲玩家而言,電腦仍然是首選。以德國(guó)為例,根據(jù)YouGov的調(diào)查顯示,約有55%的游戲玩家仍然使用桌面電腦玩游戲,另有約42%的用戶使用筆記本電腦。為此,微軟在發(fā)布Windows 10時(shí),重新打造了新的DirectX圖形庫(kù)(12版)。在該版本的DirectX上微軟公司特別增強(qiáng)了其性能,而且不同于以往的DirectX版本,用戶不必等待新的顯示卡就能獲得DirectX 12帶來(lái)的性能增強(qiáng)效果,因?yàn)镈irectX 12基本上是一個(gè)軟件的優(yōu)化,近5年的硬件都可以從中獲得增益,但前提是用戶必須使用Windows 10,全新的DirectX只能運(yùn)行在Windows 10上。
DirectX 12修正了舊版DirectX的一個(gè)致命弱點(diǎn):代碼沒(méi)有針對(duì)多核心處理器進(jìn)行優(yōu)化。顯示卡并不是自己完成所有任務(wù),它需要通過(guò)CPU負(fù)擔(dān)一部分的任務(wù),而DirectX此前的版本只能夠通過(guò)一個(gè)核心或線程執(zhí)行任務(wù)。對(duì)于多核心處理器來(lái)說(shuō),這明顯是一種浪費(fèi)。AMD已經(jīng)解決了這一問(wèn)題,該公司推出的圖形界面Mantle可以支持多核心處理器,通過(guò)2~4個(gè)核心進(jìn)行工作。Mantle可以兼容各種游戲引擎,但是它只能夠用于AMD顯示卡,這導(dǎo)致其沒(méi)有被廣泛接受。不過(guò),盡管Mantle不是很成功,但AMD的努力卻也已經(jīng)迫使微軟對(duì)DirectX進(jìn)行優(yōu)化。
微軟新的Windows顯示驅(qū)動(dòng)程序模型2.0(WDDM2.0)降低了驅(qū)動(dòng)程序的作用,讓游戲開(kāi)發(fā)者可以像游戲機(jī)一樣更好地利用電腦的硬件資源。因此,當(dāng)游戲正在運(yùn)行的時(shí)候,驅(qū)動(dòng)程序?qū)⒃谟脩裟J较逻\(yùn)行,盡可能地減少對(duì)游戲引擎的阻礙。這使得游戲引擎可以更直接訪問(wèn)硬件,可以更好地調(diào)整CPU、內(nèi)存和顯示卡的工作方式與工作量。在資源管理方面,WDDM 2.0設(shè)置了一個(gè)統(tǒng)一的虛擬空間來(lái)存儲(chǔ)地址,虛擬存儲(chǔ)空間覆蓋顯示卡的存儲(chǔ)器和電腦的內(nèi)存,因此,GPU可以不必經(jīng)由顯示卡驅(qū)動(dòng)傳輸數(shù)據(jù)到速度較慢的電腦內(nèi)存上。
DirectX的游戲引擎也承擔(dān)統(tǒng)一調(diào)配所有CPU內(nèi)核的責(zé)任:決定如何處理命令緩沖區(qū)。命令緩沖區(qū)是由CPU創(chuàng)建,用于掛起待處理任務(wù)的存儲(chǔ)區(qū)域。在DirectX 11中該區(qū)域由驅(qū)動(dòng)程序接管,但是它不允許分配任務(wù)到多個(gè)內(nèi)核或線程的緩沖區(qū),現(xiàn)在,DirectX 12已經(jīng)被允許這樣做。這些由CPU發(fā)送到GPU的繪圖指令包含GPU要?jiǎng)?chuàng)建的對(duì)象顏色、大小和位置的信息。通過(guò)分配多個(gè)線程緩存,現(xiàn)在DirectX 12處理最大數(shù)量的繪圖指令。對(duì)于游戲來(lái)說(shuō)這是一件好事,可以渲染每一幀的多個(gè)對(duì)象。在這方面,甚至舊的顯示卡也可以在DirectX 12的支持下獲得性能的提升。然而,這并不適用于現(xiàn)有的游戲:因?yàn)檫@些游戲的游戲引擎還未能夠兼容DirectX 12。
DirectX12另一項(xiàng)新功能是加快單個(gè)幀的渲染速度,DirectX中通過(guò)多級(jí)流水線計(jì)算對(duì)象,包括一個(gè)對(duì)象的光照、紋理和位置。在11版本的DirectX,流水線必須對(duì)各幀和對(duì)象重新設(shè)置。第12版的DirectX保存了所有進(jìn)入流水線的對(duì)象,如果該對(duì)象在下一幀沒(méi)有什么變化,那么就沒(méi)有重新計(jì)算的必要,可以直接將對(duì)象顯示出來(lái)。如果只有一級(jí)流水線出現(xiàn)變化,那么只重新計(jì)算該流水線即可。
DirectX 12的多適配器模式允許整合電腦上所有可用的圖形資源,例如多個(gè)顯示卡。現(xiàn)在顯示卡可以自己完成大多數(shù)幀的處理工作,并將其余的事情留給CPU的圖形單元。由于專業(yè)的游戲玩家可能配備多個(gè)顯示卡,所以多適配器模式可以提供極大的增益。以往,多個(gè)顯示卡只能夠交替地呈現(xiàn)幀,這種工作方式并不總是能夠順利進(jìn)行,顯示卡存儲(chǔ)器也無(wú)法得到充分利用,而現(xiàn)在所有的存儲(chǔ)器都可以被利用,多個(gè)顯示卡甚至可以以瓜分單個(gè)幀的方式來(lái)協(xié)同工作。
雖然舊的顯示卡也可以從DirectX 12中獲益,但是它們并不能支持所有DirectX 12的功能級(jí)別。這些級(jí)別涉及一些渲染功能,可以顯示更多的細(xì)節(jié)或更快的執(zhí)行效果。功能級(jí)別11.0和11.1在DirectX 11中已經(jīng)出現(xiàn),它們代表顯示卡對(duì)于DirectX 12最起碼的支持。新的功能級(jí)別12.0和12.1主要包含可以使游戲看起來(lái)更漂亮的功能,例如“保守光柵第1層(Tier 1)”功能將可以更精確地呈現(xiàn)陰影。第一個(gè)DirectX 12游戲預(yù)計(jì)將在今年年底發(fā)布,除了支持DirectX 12的新一代顯示卡之外,在DirectX 12的支持下,老顯示卡也可以有很多潛力可以挖掘,但如何讓老顯示卡可以在新系統(tǒng)上更好地工作取決于程序開(kāi)發(fā)人員。