Vulkan

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一樣成為行業標準。

## 特性

<image>

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標準中。

### Vulkan 1.4

2024年12月3日，科納斯組織發布Vulkan 1.4。

### 計劃中的功能

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

在2017年5月發行OpenCL 2.2之時，Khronos Group宣布OpenCL將儘可能的匯合於Vulkan，以確使OpenCL軟體在這兩種API上靈活部署。這已經由Adobe的Premiere Rush展示出來，它使用clspv開源編譯器，編譯了大量OpenCL C內核代碼，從而在部署於Android的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

## 基本資料

- 開發者：科納斯組織，基於AMD的Mantle開發
- 發行日期：2016年2月16日
- 狀態：活躍
- 平台：跨平台
- 類型：3D圖形與計算API
- 作業系統：Android、Linux、Tizen、Microsoft Windows