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