Vulkan
Android 7.0 添加了對 Vulkan 的支持,一個高性能 3D 圖形的低開銷跨平臺 API。像 OpenGL ES 一樣,Vulkan 提供了在應用中創建高質量,實時圖形的工具。Vulkan 的優勢包括 CPU 開銷降低及支持 SPIR-V Binary Intermediate 語言。
片上系統生產商(SoCs)比如 GPU 獨立硬件供應商(IHVs)可以為 Android 編寫 Vulkan 驅動;OEMs 簡單地需要為特定的硬件集成這些驅動。關于 Vulkan 驅動如何與系統交互,GPU 特有工具應該如何安裝,以及 Android 特有的要求的細節,請參考 實現 Vulkan。
應用程序開發人員可以利用 Vulkan 來創建在 GPU 上執行命令并大大減少開銷的應用程序。Vulkan 還提供了一個更直觀的到當前圖形硬件中發現的功能的映射,最大限度地減少驅動程序錯誤的可能性,并減少開發人員的測試時間(例如更少的時間來排除 Vulkan
錯誤)。
關于 Vulkan 的一般信息,請參考 Vulkan 概述 或查看下面的 資源 列表。
Vulkan 組件
Vulkan 支持包含如下組件:
圖 1: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 命令,并與內核層的圖形驅動交互。
修改的組件
Android 7.0 修改了下列已有的圖形組件來支持 Vulkan:
-
BufferQueue。Vulkan 運行時通過現有的 ANativeWindow 接口與現有的 BufferQueue 組件交互。包括對 ANativeWindow 和 BufferQueue 最小的改動(新的枚舉值和新的方法),但沒有架構級的改動。
-
Gralloc HAL。包含一個新的,可選的接口來發現一個給定的格式是否可被用于特定的生產者/消費者結合而無需實際的分配緩沖區。
關于這些組件的更詳細信息,請參考 BufferQueue 和 gralloc (關于 ANativeWindow 的細節,請參考 EGLSurface 和 OpenGL ES)。
Vulkan API
Android 平臺包含一個來自于 Khronos Group 的 Vulkan API 規范 的 Android 特定實現 。Android 應用必須使用 Window System Integration (WSI) 擴展 輸出它們的渲染。
資源
使用如下的資源來學習更多關于 Vulkan 的東西:
-
Vulkan Loader (libvulkan.so) 位于 platform/frameworks/native/vulkan。包含 Android 的 Vulkan 加載器,以及一些對平臺開發者非常有用的 Vulkan 有關的工具。
-
Vulkan 實現者指南。旨在幫助 GPU IHV 為 Android 編寫 Vulkan 驅動程序及 OEM 為特定設備集成那些驅動程序。它描述了 Vulkan 驅動如何與系統交互,特定于 GPU 的工具應該如何安裝,以及 Android 特有的要求。
-
Vulkan 圖形 API 指南。包含關于在應用中使用 Vulkan 的入門的信息,關于Android 平臺上 Vulkan 設計指南的詳情,如何使用 Vulkan 的 shader 編譯器,以及如何使用驗證層來幫助確保使用 Vulkan 的應用的穩定性。
-
Vulkan 新聞。包含事件,補丁,指南,和更多與 Vulkan 有關的新聞文章。
原文
總結
- 上一篇: EGLSurfaces 和 OpenGL
- 下一篇: SurfaceView 和 GLSurf