初識Vulkan


 

Vulkan是Khronos組織制定的“下一代”開放的圖形顯示API,是與DirectX12可以匹敵的GPU API標準。Vulkan是基於AMD的Mantle API演化而來,目前Vulkan 1.0標準已經完成並正式發佈。

上一代的OpenGL|ES並不會被遺棄,還會繼續發展,很有可能OpenGL|ES變爲Vulkan的簡化API。

 Vulkan 技術交流 QQ羣 175250233

Vulkan的優勢

與OpenGL|ES相比Vulkan的優勢:

l  更簡單的顯示驅動層

Vulkan提供了能直接控制和訪問底層GPU的顯示驅動抽象層, 顯示驅動只是對硬件薄薄的封裝,這樣能夠顯著提升操作GPU硬件的效率和性能。之前OpenGL的驅動層對開發者隱藏的很多細節,現在都暴露出來。Vulkan甚至不包含運行期的錯誤檢查層。驅動層乾的事情少了,隱藏的bug也就少了。

l  支持多線程

Vulkan不再使用OpenGL的狀態機設計,內部也不保存全局狀態變量。顯示資源完全由應用層負責管理,包括內存管理、線程管理、多線程繪製命令產生、渲染隊列提交等。應用程序可以充分利用CPU的多核多線程的計算資源,減少CPU等待,降低延遲。 帶來的問題是,線程間的同步問題也由應用程序負責,從而對開發人員的要求也更高。

l  預編譯Shaders

驅動層不提供前端shader編譯器,只支持標準可移植中間表示二進制代碼(SPIR-V)。即提高了執行Shaders的效率又增加了將來着色語言的靈活性。

所以目前的GLSL/HLSL可以直接通過工具轉換爲SPIR-V,在Vulkan中使用。這樣就可以使用離線的shader編譯。

 另外,SPIR-V還支持OpenCL!


l  跨平臺

支持桌面、移動設備、遊戲主機、嵌入式……只要需要顯示的地方,貌似都能支持。

這也是Vulkan與DirectX12相比的優勢。

 

Vulkan與多線程

OpenGL|ES不支持多線程一直被廣爲詬病。Vulkan開始設計之處就考慮多線程問題,可以說就是爲了多線程而設計的。

命令緩衝和和命令調度隊列是Vulkan支撐多線程的重要組成部分,類似OpenGL的上下文狀態。

Vulkan的命令緩衝都是獨立的互不干擾的單元,支持在多個線程中創建。這樣就可以由多個線程創建不同的繪製命令,由單獨的線程管理渲染命令隊列,統一提交給GPU繪製,如下圖所示:

 

 

Vulkan窗口系統集成

Vulkan把顯示設備的創建和窗口系統的創建明確分開。顯示設備只提供支持可視化的顯示隊列的接口,應用程序控制如何顯示繪製結果。比如前後顯示緩衝這些的都由應用程序創建和設置。

Vulkan提供標準的擴展API支持多窗口系統,如Android、Windows、X等窗口系統。

 

Vulkan SDK

Khronos並沒有提供開發Vulkan程序的SDK。要開發Vulkan應用,就需要使用由Valve資助的一個叫LunarG的公司開發的LunarG SDK。另外還需要下載最新的支持Vulkan的顯卡驅動程序。

Vulkan周邊的輔助開發工具基本都是開源的,但不幸的是LunarG的網站目前還在牆外,下載個SDK都很費勁。可以在 Vulkan 技術交流 QQ羣 175250233中下載。

 

 

Vulkan API

To be continued…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章