初識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中下載。

相關文章
相關標籤/搜索