一月底的時(shí)候我在巴黎的ISART Digital(視頻游戲和3D動(dòng)畫(huà)學(xué)校)參加了一個(gè)座談?dòng)懻摃?huì):“新一代圖形API座談會(huì):關(guān)于早期的Vulkan”。這次會(huì)議是由來(lái)自Unity的Christophe Riccio組織和主持的,這次會(huì)議的主題是關(guān)于Khronos Group新一代圖形與計(jì)算API:Vulkan。
這次座談會(huì)的嘉賓有來(lái)自獨(dú)立軟件供應(yīng)商(ISV)的,獨(dú)立硬件供應(yīng)商(IHV)的,以及不同應(yīng)用開(kāi)發(fā)平臺(tái)人員,他們有非常豐富的經(jīng)驗(yàn),從現(xiàn)代渲染算法到API實(shí)現(xiàn)以及驅(qū)動(dòng)實(shí)現(xiàn):
? Sébastien Lagarde (現(xiàn)任Unity渲染研究總監(jiān),以前曾任職于EA Frostbite)
? Julien Ignace (現(xiàn)任Unity R&D渲染程序員,以前曾任職于Quantic Dream)
? Jasper Bekkers (現(xiàn)任OTOY渲染工程師, 以前曾任職于EA Frostbite)
? Cyril Crassin (現(xiàn)任NVIDIA研究科學(xué)家)
? Jon Kennedy (現(xiàn)任Intel高級(jí)圖形軟件工程師)
? Adrian Bucur (現(xiàn)任Samsung SERI高級(jí)軟件工程師)
我們討論了多個(gè)話題,包括Vulkan最適合的開(kāi)發(fā)模式;將Vulkan集成進(jìn)現(xiàn)有的渲染引擎中有多難;調(diào)試工具對(duì)Vulkan的影響有多大。在這篇文章中總結(jié)了我認(rèn)為最有意思的討論點(diǎn)和挑戰(zhàn)。
解決OpenGL的一些問(wèn)題
用了將近兩年時(shí)間,Khronos的一個(gè)工作小組負(fù)責(zé)設(shè)計(jì)下一代圖形與計(jì)算API,致力于解決OpenGL最大的局限性問(wèn)題,如下:
? 設(shè)計(jì)一個(gè)通用跨平臺(tái)的API(桌面,控制臺(tái),移動(dòng)和嵌入式平臺(tái))
? 緊密貼合現(xiàn)代GPU架構(gòu)
? 提供一個(gè)控制臺(tái)友好型,低開(kāi)銷(xiāo),顯示的API
專(zhuān)家組成員被問(wèn)到是否可以從新設(shè)計(jì)一個(gè)API而不使用OpenGL的規(guī)范。OpenGL的一些先進(jìn)性,例如AZDO和GL_KHR_no_error擴(kuò)展,向我們證實(shí)到大量的API相關(guān)CPU開(kāi)銷(xiāo)是有可能避免的。設(shè)計(jì)一個(gè)全新的OpenGL并側(cè)重于這些想法會(huì)給開(kāi)發(fā)者帶來(lái)顯著的性能提升。
然而這個(gè)設(shè)計(jì)路線可能還是會(huì)有一些問(wèn)題,例如:
? 緩存分配和同步的實(shí)現(xiàn)還是不夠透明,在某些平臺(tái)上卡死和緩存重影仍然會(huì)發(fā)生。
? 狀態(tài)仍然是全局的。開(kāi)發(fā)者需要清晰的理解每個(gè)獨(dú)立硬件平臺(tái)的GPU狀態(tài)是如何設(shè)置的,以保證OpenGL的狀態(tài)能夠被有效的配置。
? 高效多線程命令提交仍然很難在OpenGL類(lèi)似型API中解決。
Vulkan vs OpenGL ES:OpenGL ES不能勝任多線程任務(wù)
經(jīng)過(guò)討論后專(zhuān)家成員認(rèn)為方向可能有些冒險(xiǎn),但是Vulkan API已經(jīng)能夠滿足所有合理幀時(shí)間(time frame)的設(shè)計(jì)目標(biāo)(盡管有一點(diǎn)點(diǎn)兒延遲)。
Vulkan對(duì)于開(kāi)發(fā)者來(lái)說(shuō)究竟有多相關(guān)?
大多數(shù)獨(dú)立硬件供應(yīng)商同意提供一個(gè)由開(kāi)發(fā)者控制內(nèi)存分配,狀態(tài)設(shè)置和調(diào)用驗(yàn)證的API會(huì)提供更高的運(yùn)行性能,同時(shí)使驅(qū)動(dòng)的跨平臺(tái)操作更加的可預(yù)測(cè),這也會(huì)降低維護(hù)花銷(xiāo)。
獨(dú)立軟件供應(yīng)商(ISV)卻有些懷疑。獨(dú)立硬件供應(yīng)商花費(fèi)了數(shù)年時(shí)間來(lái)優(yōu)化他們的OpenGL,OpenGL ES和DirectX驅(qū)動(dòng)。要想獲得同樣的或者更好的性能就會(huì)要求獨(dú)立軟件供應(yīng)商投入大量的資源來(lái)設(shè)計(jì)和優(yōu)化他們的引擎來(lái)兼容這個(gè)新的顯示API,例如高效的捕獲系統(tǒng)狀態(tài)。
除此之外,現(xiàn)有的中間件將需要繼續(xù)支持老版本的API很長(zhǎng)一段時(shí)間。對(duì)現(xiàn)在來(lái)說(shuō),Vulkan將是另一個(gè)實(shí)現(xiàn)與支持的標(biāo)準(zhǔn),這將會(huì)增加維護(hù)渲染引擎代碼的整體花銷(xiāo)。
正是影響引擎的各種限制因素創(chuàng)造了一個(gè)機(jī)遇,就是開(kāi)發(fā)更加靈活的中間件。Oxide Games公司開(kāi)發(fā)的Nitrous引擎被作為一個(gè)例子進(jìn)行的討論,它已經(jīng)能夠兼容這個(gè)圖形API的前沿技術(shù)。對(duì)于其他引擎要實(shí)現(xiàn)相同的性能還需要很長(zhǎng)時(shí)間。
ProtoStar是一個(gè)使用UE4開(kāi)發(fā)的Vulkan Demo
回到開(kāi)始的問(wèn)題這個(gè)API與誰(shuí)最相關(guān)。各種引擎肯定會(huì)支持它,但是那些不得不支持老版本API的引擎進(jìn)化得可能就比較慢了。那些最簡(jiǎn)單調(diào)用的工程將會(huì)是最早受益。2D渲染引擎多用于桌面顯示,例如谷歌的Skia,將會(huì)支持這個(gè)API來(lái)降低功耗。這個(gè)API的低開(kāi)銷(xiāo)特性可以讓開(kāi)發(fā)者在短期內(nèi)提升他們?cè)O(shè)計(jì)的系統(tǒng)性能,從而滿足設(shè)計(jì)要求。例如車(chē)內(nèi)手寫(xiě)導(dǎo)航系統(tǒng)對(duì)于CPU,GPU和內(nèi)存限制非常嚴(yán)格。
供應(yīng)商制定的代碼路徑是必需的嗎?
目前除了擴(kuò)展功能(總是要求新的代碼路徑和回調(diào))。不幸的是大多數(shù)使用OpenGL和OpenGL ES的跨平臺(tái)渲染引擎都要求各種各樣的代碼路徑以兼容供應(yīng)商制定的驅(qū)動(dòng)操作和bugs。專(zhuān)家組成員被問(wèn)到這些偏差是否將會(huì)在Vulkan渲染引擎中繼續(xù)延續(xù)。
隨著獨(dú)立軟件供應(yīng)商不斷接入到Vulkan API,很難說(shuō)有多少代碼路徑。從理論上講,不斷降低的驅(qū)動(dòng)復(fù)雜度會(huì)使各種操作變得更加透明,更少的bugs以及更少的因素去實(shí)現(xiàn)供應(yīng)商制定的代碼路徑。然而專(zhuān)家組成員同意相比OpenGL在Vulkan中對(duì)硬件架構(gòu)的理解和編程更加的重要,例如利用供應(yīng)商制定的DMA隊(duì)列優(yōu)化數(shù)據(jù)傳輸。
開(kāi)發(fā)工具會(huì)影響Vulkan API的流行嗎?
獨(dú)立軟件供應(yīng)商(ISV)贊同相比API自身因素,開(kāi)發(fā)工具對(duì)于API的成功有更大的影響。例如開(kāi)發(fā)者通常會(huì)首先采用Sony的平臺(tái)和API,因?yàn)樗鼈儞碛泄I(yè)標(biāo)準(zhǔn)最好的工具(很多人這樣認(rèn)為)。
OpenGL的開(kāi)發(fā)是比較困難的。現(xiàn)在有很多功能模塊正在被平臺(tái)開(kāi)發(fā)者,獨(dú)立軟件供應(yīng)商,獨(dú)立硬件供應(yīng)商和社區(qū)所維護(hù),但是這是經(jīng)歷了多年的發(fā)展才達(dá)到現(xiàn)在這個(gè)階段的。
隨著Vulkan的出現(xiàn),Khronos Group將更多的思考放到工具上而不是以前的標(biāo)準(zhǔn),例如加載層的設(shè)計(jì)讓開(kāi)發(fā)者能夠使用Khronos組織提供的調(diào)試工具以及第三方提供的或者自定義的解決方案。不幸的是,類(lèi)似OpenGL一樣Vulkan缺少很多調(diào)試操作的規(guī)范化實(shí)現(xiàn)方式,例如分析和復(fù)現(xiàn)調(diào)用操作。除非Khronos組織為工具開(kāi)發(fā)組織一個(gè)團(tuán)隊(duì)與API的開(kāi)發(fā)同步進(jìn)行,否則這種情況可能不會(huì)改變。
自Vulkan正式發(fā)布以來(lái),我們看到已經(jīng)有很多可用的工具,以及更多由Khronos推廣者,貢獻(xiàn)者和咨詢組織成員正在開(kāi)發(fā)的工具。不同平臺(tái)例如谷歌和Valve將會(huì)為它們的操作系統(tǒng)提供跨供應(yīng)商的工具。社區(qū)維護(hù)工具例如RenderDoc將會(huì)讓開(kāi)發(fā)者實(shí)現(xiàn)跨各種操作系統(tǒng)和GPU的調(diào)試操作。
最后對(duì)于工具的討論,以為觀眾問(wèn)到是否GPU的性能能夠通過(guò)Vulkan API暴露出來(lái)。不幸的是這個(gè)功能還沒(méi)有實(shí)現(xiàn),但是未來(lái)這個(gè)問(wèn)題可以通過(guò)擴(kuò)展來(lái)解決。
這次座談會(huì)得出一個(gè)結(jié)論就是好的工具對(duì)于Vulkan的成功是非常有必要的。現(xiàn)在有各種各樣的專(zhuān)用的和社區(qū)支持的工具可用,能夠讓開(kāi)發(fā)者快速找到符合自己需求的調(diào)試流程。
Khronos Group也開(kāi)發(fā)了一個(gè)高層次應(yīng)用摘要嗎?
在這個(gè)API的設(shè)計(jì)期間,這個(gè)組織就考慮開(kāi)發(fā)一個(gè)幫助手冊(cè)讓開(kāi)發(fā)者更容易入門(mén)Vulkan操作。經(jīng)過(guò)一些考慮后,如果開(kāi)發(fā)一個(gè)通用的使用摘要會(huì)花費(fèi)太多的精力,耽誤Vulkan API的開(kāi)發(fā)進(jìn)度。
PowerVR框架為Vulkan開(kāi)發(fā)者提供了中間調(diào)用函數(shù)
社區(qū)提供了各種庫(kù),例如PowerVR框架,這讓開(kāi)發(fā)者根據(jù)需要選擇各種通用和不同領(lǐng)域的庫(kù)。同時(shí)Khronos貢獻(xiàn)者也已經(jīng)計(jì)劃開(kāi)發(fā)這樣一個(gè)框架,專(zhuān)家組成員同意參考使用摘要會(huì)兼容Vulkan API 1.0正式版,同時(shí)不會(huì)影響Vulkan API的開(kāi)發(fā)進(jìn)度。
如果你想了解更多就來(lái)GDC2016吧
希望這篇文章讓大家對(duì)硬件與軟件供應(yīng)商關(guān)心的問(wèn)題和API的發(fā)展有一個(gè)了解。如果你想了解更多關(guān)于Vulkan的資訊,以及它是怎樣在我們的硬件上工作的。那就趕緊來(lái)GDC 2016現(xiàn)場(chǎng)吧(在鏈接下面評(píng)論或者來(lái)我們的論壇討論)。
評(píng)論
查看更多