還在使用OpenGL ES做渲染,你Out了,趕緊來擁抱Vulkan吧

互聯網技術前線 發佈 2020-01-08T00:43:44+00:00

Vulkan的優勢與OpenGL|ES相比Vulkan的優勢:1、更簡單的顯示驅動層Vulkan提供了能直接控制和訪問底層GPU的顯示驅動抽象層。顯示驅動僅僅是對硬體薄薄的封裝,這樣能夠顯著提升操作GPU硬體的效率和性能。之前OpenGL的驅動層對開發人員隱藏的非常多細節,如今都

背景介紹

Vulkan是Khronos組織制定的「下一代」開放的圖形顯示API。是與DirectX12能夠匹敵的GPU API標準。

Vulkan是基於AMD的Mantle API演化而來,眼下Vulkan 1.0標準已經完畢並正式公布。下圖是Vulkan的效果:

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

Vulkan的優勢

與OpenGL|ES相比Vulkan的優勢:

1、更簡單的顯示驅動層

Vulkan提供了能直接控制和訪問底層GPU的顯示驅動抽象層。顯示驅動僅僅是對硬體薄薄的封裝,這樣能夠顯著提升操作GPU硬體的效率和性能。之前OpenGL的驅動層對開發人員隱藏的非常多細節,如今都暴露出來。Vulkan甚至不包括執行期的錯誤檢查層。驅動層幹的事情少了,隱藏的bug也就少了。

2、支持多線程

Vulkan不再使用OpenGL的狀態機設計,內部也不保存全局狀態變量。顯示資源全然由應用層負責管理。包括內存管理、線程管理、多線程繪製命令產生、渲染隊列提交等。

應用程式能夠充分利用CPU的多核多線程的計算資源,降低CPU等待,降低延遲。帶來的問題是。線程間的同步問題也由應用程式負責,從而對開發人員的要求也更高。

3、預編譯Shaders

驅動層不提供前端shader編譯器。僅僅支持標準可移植中間表示二進位代碼(SPIR-V)。

即提高了執行Shaders的效率又添加了將來著色語言的靈活性。

所以眼下的GLSL/HLSL能夠直接通過工具轉換為SPIR-V。在Vulkan中使用。這樣就能夠使用離線的shader編譯。

另外。SPIR-V還支持OpenCL!

4、跨平台

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

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

Vulkan與多線程

OpenGL|ES不支持多線程一直被廣為詬病。Vulkan開始設計之處就考慮多線程問題,能夠說就是為了多線程而設計的。命令緩衝和和命令調度隊列是Vulkan支撐多線程的重要組成部分。相似OpenGL的上下文狀態。

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

Vulkan窗體系統集成

Vulkan把顯示設備的創建和窗體系統的創建明白分開。

顯示設備僅僅提供支持可視化的顯示隊列的接口,應用程式控制怎樣顯示繪製結果。比方前後顯示緩衝這些的都由應用程式創建和設置。

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

Android平台上的Vulkan演進

Android 7.0 添加了對Vulkan的支持。Vulkan 是用於高性能 3D 圖形的低開銷、跨平台 API。與 OpenGL ES 一樣,Vulkan 提供多種用於在應用中創建高質量的實時圖形的工具。Vulkan 的優勢包括降低 CPU 開銷以及支持SPIR-V 二進位中間語言。系統晶片 (SoC) 供應商(如 GPU 獨立硬體供應商 (IHV))可以編寫適用於 Android 的 Vulkan 驅動程序;原始設備製造商 (OEM) 只需為特定設備集成這些驅動程序即可。要詳細了解 Vulkan 驅動程序如何與系統進行交互、應如何安裝特定於 GPU 的工具以及特定於 Android 的要求,請參閱實現 Vulkan。應用開發者可以利用 Vulkan 來創建在 GPU 上執行命令的應用,大幅降低開銷。此外,Vulkan 還可以更直接地映射到當前圖形硬體中的功能,最大限度地降低驅動程序的出錯機率,並減少開發者的測試時間(例如,排查 Vulkan 錯誤所需的時間更短)。

Android Vulkan 組件

Vulkan 支持包含以下組件:

Vulkan 驗證層(在 Android NDK 中提供)。這是開發者在開發 Vulkan 應用期間使用的一組庫。圖形供應商提供的 Vulkan 運行時庫和 Vulkan 驅動程序不包含使 Vulkan 運行時保持高效的運行時錯誤檢查功能,而是使用驗證庫(僅在開發過程中)來查找應用在使用 Vulkan API 時出現的錯誤。Vulkan 驗證庫在開發過程中關聯到應用並執行此錯誤檢查。在找出所有 API 使用問題之後,該應用將不再需要包含這些庫。

Vulkan 運行時(由 Android 提供)。這是一個原生庫 ((libvulkan.so),提供稱為Vulkan的新公共原生 API。大多數功能由 GPU 供應商提供的驅動程序實現;運行時會封裝驅動程序、提供 API 攔截功能(針對調試和其他開發者工具)以及管理驅動程序與平台依賴項(如 BufferQueue)之間的交互。Vulkan 驅動程序(由 SoC 提供)。將 Vulkan API 映射到特定於硬體的 GPU 命令以及與內核圖形驅動程序的交互。已修改的組件為支持 Vulkan,Android 7.0 對以下現有圖形組件進行了修改:

BufferQueue:Vulkan 運行時通過現有ANativeWindow接口與現有的 BufferQueue 組件進行交互。對ANativeWindow和 BufferQueue 進行了細微的修改(新枚舉值和新方法),而架構沒有任何變更。

Gralloc HAL:添加了一個新的可選接口,用於了解是否可將某種指定格式用於特定生產方/消費方組合,而無需實際分配緩衝區。

Vulkan API:Android 平台包括來自 Khronos Group 的Vulkan API 規範的Android 特定實現。Android 應用必須使用Window 系統集成 (WSI) 擴展程序來輸出其呈現內容。

Fuchsia上的使用

2016年開始,Google有一群超過百人的工程師團隊秘密研發一款名為Fuchsia的新系統,該團隊很豪華,有來自Android、iPhone、WebOS、Chrome、Flutter等核心工程師,這麼多優秀的人在一起研發這個項目,的確值得期待。Fuchsia的內核採用Zircon,UI層採用Flutter框架,底層渲染Escher,支持Vulkan作為底層Graphics API。

Google表示未來幾年會大力推廣Vulkan技術,Vulkan是一種跨平台的高性能低開銷的圖形接口,在移動設備上比OpenGL ES有著更出色的表現。Vulkan將會是未來Android平台的一個發展方向,尤其是遊戲領域,比如王者榮耀Vulkan版本。

Android Q

xda大神爆料,安卓Q開始將使用vulkan進行默認的UI渲染,安卓的UI將進入純GPU渲染的階段,流暢度暴增一個數量級。

關鍵字: