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