Vulkan_(API)

**Vulkan** 是一個低開銷、跨平台的二維、三維圖形與計算的應用程式介面（API），最早由科納斯組織在 2015 年遊戲開發者大會（GDC）上發表。與 OpenGL 類似，Vulkan 針對全平台即時 3D 圖形程式（如電子遊戲和互動媒體）而設計，並提供高效能與更均衡的 CPU 與 GPU 占用，這也是 Direct3D 12 和 AMD 的 Mantle 的目標。與 Direct3D（12 版之前）和 OpenGL 的其他主要區別是，Vulkan 是一個底層 API，而且能執行並列任務。除此之外，Vulkan 還能更好地分配多個 CPU 核心的使用。

科納斯最先把 Vulkan API 稱為「次世代 OpenGL 行動」（next generation OpenGL initiative）或「**glNext**」，但在正式宣佈 Vulkan 之後這些名字就沒有再使用了。Vulkan 基於 Mantle 構建，AMD 將其 Mantle API 捐贈給科納斯組織，給予該組織開發底層 API 的基礎，使其像 OpenGL 一樣成為行業標準。

## 特性

Vulkan 旨在提供更低的 CPU 開銷與更直接的 GPU 控制，其理念大致與 Direct3D 12 和 Mantle 類似。

以下是 Vulkan 相對於上一代 API 的優勢：

* Vulkan API 適用於從高效能電腦到移動低功耗裝置的顯示卡（OpenGL 具有名為 OpenGL ES 的行動裝置 API 子集，它仍是支援 Vulkan 裝置的備選 API）。
* 相比於 Direct3D 12，Vulkan 與前身 OpenGL 類似，受多種作業系統支援。Vulkan 已經能在 Windows 7、Windows 8、Windows 10、Tizen、Linux 與 Android 上執行（iOS 和 macOS 有第三方支援）。
* 通過批次處理（Batching）減少 CPU 負載，使 CPU 可以執行更多其他的計算或彩現任務。
* 在多核心 CPU 上，Vulkan 能對核心與執行緒進行最佳化。Direct3D 11 與 OpenGL 4 最初為單核心 CPU 設計，儘管後來出現了針對多核心 CPU 最佳化的擴充，不過與 Vulkan 相比，最佳化仍不是很好。
* 減少了驅動程式的開銷與維護工作。OpenGL 使用進階著色語言 GLSL 編寫著色器，不同的驅動在程式執行時需要執行自身的 GLSL 編譯器，將程式的著色器轉換為 GPU 可執行的機器碼。而 Vulkan 驅動將著色器語言預先轉化為 SPIR-V（Standard Portable Intermediate Representation）的中間二進位格式，其行為類似於 Direct3D 的 HLSL 著色器。通過著色器預編譯，應用程式載入速度更快，並且 3D 場景可以使用更多種著色器。Vulkan 驅動只需對 GPU 進行最佳化並生成代碼，這使得驅動程式更容易維護，驅動程式包更小（目前 GPU 供應商仍需在驅動程式中提供 OpenGL 與 OpenCL 的支援）。
* 計算與圖形處理的統一管理，因此 Vulkan 無需與單獨的計算 API 配合使用。

輝達在 2016 年時指出，由於 OpenGL 的複雜度和維護難度比 Vulkan 低很多，在多數情況下也能提供理想的整體效能，現階段 OpenGL 仍是個很好的選擇。AMD 表示，Vulkan 支援 Close-To-Metal 控制的獨特能力可加快跨 Windows 和 Linux 的效能並且提高影像品質。現今無其他圖形 API 提供如此強大的作業系統相容性、成像功能和硬體效率組合 。 例如，CPU 中包含的整合 GPU 可與高端專用 GPU 結合使用，以略微提高效能。

### Vulkan 1.1

科納斯在 SIGGRAPH2016 上宣布 Vulkan 將支援自動多 GPU 功能，類似於 Direct3D 12 所提供的功能，顯示驅動程式不再需要處理多個 GPU 的使用，相反，兩個或更多完全不同的 GPU 之間可以智慧型地分配工作負載。

科納斯於 2018 年 3 月 7 日發布了 Vulkan 1.1 。它擴展了幾個核心功能，包括子集操作，例如多視圖、裝置組、高級彩現和編輯操作程式跨流程 API 互動操作。這些核心功能還包括 16 位元記憶體獲取高級計算，HLSL 記憶體分佈支援，影片流的顯示，處理和編程，通過許多影片編輯解碼器生成的 YCbcRr 顏色格式化紋理的直接抽樣。同時，它還帶來了與 DirectX 12 的更好相容性，顯式支援多 GPU，光線跟蹤支援，為下一代 GPU 奠定了基礎。

### vulkan 1.2

2020 年 1 月 15 日，科納斯組織發布了 Vulkan 1.2，將 23 個已經通過驗證的擴展整合到基本 Vulkan 標準中，大部份用來幫助提升 Vulkan 與其他圖形 API 之間的相容層效能。

### Vulkan 1.3

2022 年 1 月 25 日，科納斯組織發布了 Vulkan 1.3。 這次更新將另外 23 個常用的成熟的 Vulkan 擴充整合到基本的 Vulkan 標準中。

### 計劃中的功能

科納斯在 SIGGRAPH 2016 上宣布，Vulkan 將提供類似於 Direct3D 12 的多卡互聯功能。通過 Vulkan，不同型號的顯示卡也能協同工作，而無需 NVIDIA SLI 或 AMD Crossfire 的支援。Vulkan 多卡互聯功能允許 API 在多個不同的顯示卡之間智慧型分配負載，例如，CPU 上的整合顯示卡與高端獨立顯示卡協同工作，能夠略微提升顯示效能。

在 OpenCL 2.2 規範發布時，科納斯宣布 OpenCL 將在未來融入 Vulkan。

## 歷史

2014 年 6 月，科納斯組織開始了「次世代 OpenGL」圖形 API 的計劃，並在 Valve 公司舉行專案啟動會議。在 SIGGRAPH 2014 上，專案公之於世。2015 年 2 月 19 日，Vulkan 的商標在美國專利及商標局提交。

2015 年早些時候，LunarG（由 Valve 資助）開發並展示了一款支援 Vulkan API 的 Intel HD Graphics 4000 系列 Linux 驅動程式，不過當時的 Mesa 開源驅動並不完全相容 OpenGL 4.0。

2016 年 2 月 16 日，科納斯組織發布了 Vulkan 1.0 版規範與開源軟體開發套件（SDK）。

## 支援 Vulkan 的軟體

### 電子遊戲

* 《塔洛斯法則》—— 首個支援 Vulkan 彩現的遊戲
* 《Dota 2》——2016 年 5 月開始支援
* 《毀滅戰士》——2016 年 7 月開始支援
* 《虹彩六號：圍攻行動》——PC 公開測試中
* vkQuake——《雷神之錘》的 Vulkan 移植版，於 2016 年 7 月發布
* World War Z——《末日之戰》電影改編遊戲。由 Epic Games 出品。
* Red Dead Redemption 2——《碧血狂殺 2》。由 Rockstar Games 出品。
* X-Plane（飛行類比軟體）—— 由 Laminar Research 推出。從 X-Plane 11 開始支援，X-Plane 12 作為默認彩現方式

### 遊戲引擎

* Source 2——2015 年 3 月由 Valve 公司發布
* Serious Engine 4——2016 年 2 月，Croteam 宣布支援 Vulkan API
* 虛幻引擎 4——2016 年 2 月 Epic Games 在三星 Galaxy S7 Unpack 發布會上聲明提供 Vulkan 支援
* Torque 3D——2016 年 4 月，開發者社群宣稱將提供 Vulkan 支援
* id Tech 3 引擎 —— 在 2017 年 5 月增加了對 Vulkan 的非正式支援
* id Tech 4 引擎 —— 在 2017 年 8 月添加了非官方的 Vulkan 支援
* id Tech 6——2016 年 5 月 id Software 宣布執行於 id Tech 6 引擎的《毀滅戰士》將支援 Vulkan
* id Tech 7—— 僅在 PC 上使用 Vulkan
* Abyss Engine——2017 年 5 月 Deep Silver 在 Android 上發佈了基於 vulkan 的浴火銀河 3
* Banshee 3D—— 支援 Vulkan 的免費開放原始碼跨平台遊戲引擎
* CryEngine——Crytek 計劃提供支援
* Xenko——2016 年 7 月加入支援
* Intrinsic—— 在 GitHub 上代管的開源跨平台遊戲引擎
* Unity——2016 年 12 月，Unity Technologies 表示其 Unity 遊戲引擎 5.6 版將支援 Vulkan API；2017 年 3 月，Unity 5.6 提供正式支援
* Roblox—— 自 2017 年 3 月起，Roblox 支援 Vulkan 彩現
* Rockstar 高級遊戲引擎 —— 除 DirectX12 外，還完全支援 Vulkan
* Godot—— 在 2018 年 2 月下旬，開發人員宣布將把重點改為使用 OpenGL ES 2 和 Vulkan 的組合。
* Flax Engine—— 於 2019 年 4 月添加 Vulkan 支援
* Apex Game Engine (來自雪崩工作室)—— 狂怒煉獄 2 改用 Vulkan 進行彩現
* Messiah Game Engine—— 網易與高通合作，針對 Vulkan 優化

### 開發工具

* GPU PerfStudio 3.6，在 Windows 與 Linux 平台上支援 Vulkan
* GTK+ Scene Graph Kit，作為 GTK+ 3.90 的一個組件於 2017 年 3 月發布

### 作業系統組件

Vulkan 視窗系統介面（Window System Interface，WSI）的作用類似於 OpenGL ES 的 EGL。EGL 能使 OpenGL ES 程式跟原生視窗系統相通，並控制上下文管理、緩衝區繫結與彩現同步等。

## 相容性

初版 Vulkan 規範指出，Vulkan 能在支援 OpenGL ES 3.1 或 OpenGL 4.x 及更高版本的顯示卡上執行。但 Vulkan API 本身依賴於新版顯示卡驅動程式，而且並非所有符合 Vulkan 規範的顯示卡都能收到廠商提供的驅動程式更新。

2016 年 8 月 22 日，Google 發布的 Android Nougat（Android 7.x）提供對 Vulkan 的支援。

蘋果公司沒有對 iOS 和 macOS 提供官方 Vulkan 支援，而 Molten 公司開發的 MoltenVK 執行於蘋果 Metal API，提供 Vulkan 第三方支援。

## 參見

* OpenGL，科納斯組織的另一個圖形 API
* OpenCL，科納斯組織的一個異構計算框架
* Mantle，AMD 的底層圖形與計算 API，Vulkan 的前身
* Direct3D，Windows 和 Xbox 專有的圖形 API
* Metal，iOS 和 macOS 的一個底層圖形與計算 API

## 參考資料

## 外部連結

* Vulkan 1.0 規範 （頁面存檔備份，存於網際網路檔案館）
* Vulkan 硬體支援資料庫 （頁面存檔備份，存於網際網路檔案館）