Vulkan

义项:跨平台图形与计算API
Vulkan

Vulkan 是科纳斯组织(Khronos Group)制定并维护的跨平台图形与计算应用程序接口(API),2016 年 2 月 16 日发布 1.0 版规范。它以显式、低开销的方式让应用直接控制显卡,支持多线程并行生成渲染命令,同一套接口可运行在桌面与移动设备上,是 OpenGL 的后继设计[1]。它采用免版税开放标准,规范、一致性测试与开发工具均以开源方式发布。

目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

Vulkan 是一套面向显卡的底层应用程序接口,同时提供三维图形渲染与通用计算两类功能,由非营利行业联盟科纳斯组织负责标准化。官方规范将其描述为以 C99 语言定义的接口,强调对底层图形与计算功能的显式控制[2]。它的目标是用同一套接口覆盖桌面、移动、嵌入式乃至游戏主机等多种平台,而不必为不同平台维护互不兼容的分支[1]。与传统的OpenGL不同,它并非在旧接口上逐版增补,而是与旧标准做兼容性切割、从头设计[1]。

Vulkan 与微软的 Direct3D 12、苹果的 Metal 在思路上相近,都把大量原本由驱动代劳的工作交回应用一侧,但 Vulkan 的卖点在于完全跨平台,可同时面向 Windows、Linux 与 Android 开发[3]。这种设计使它能较充分地利用现代多核处理器与移动 GPU 的架构特点。

原理

Vulkan 的核心思路是缩小驱动的职责。传统图形接口的驱动同时承担上下文管理、内存分配、错误检查等工作,而 Vulkan 把这些任务交给应用自行完成,驱动主要保留将命令下发给硬件这一基本职能[4]。内存的分配、线程的管理与同步因此从驱动转移到应用代码中,跨厂商行为也更可预期[4]。

在命令组织上,应用可在多个线程中并行录制命令缓冲,再把它们提交到图形、计算与直接内存访问三类队列中执行,从而绕开单线程驱动带来的 CPU 瓶颈。着色器不直接以高级语言源码交给驱动,而是先由前端编译器生成标准化的中间表示 SPIR-V,再交由 Vulkan 使用;驱动程序因此不再内置高级语言编译器,复杂度和启动开销都有所降低。

该接口还采用分层架构,可在开发阶段加载校验层、调试层与性能剖析层,检查代码是否合规,而发布版本不承担这部分开销。下面的流程示意了应用、加载器、驱动与硬件之间的层次关系:


flowchart LR

A[应用程序] --> B[命令缓冲与队列提交]

A --> C[SPIR-V 着色器]

B --> D[Vulkan 加载器]

C --> D

D --> E[厂商驱动 ICD]

D -.开发期.-> F[校验层/调试层]

E --> G[GPU]

多层次设计也让各种工具可在不影响发布性能的前提下接入,用于验证、调试与优化。

发展历程

Vulkan 的直接来源是 AMD 提出的 Mantle 接口。2012 年 10 月,科纳斯内部成立工作组,讨论对 OpenGL 与 OpenGL ES 做彻底重新设计;2014 年年中,这项工作以 GLnext 为代号重启并成为优先事项,AMD 将 Mantle 作为起点贡献出来[1]。2015 年,该项目在游戏开发者大会上更名并公开[1]。

经过约 18 个月的协作,1.0 版规范于 2016 年 2 月 16 日在旧金山发布,同时推出了 Windows 与 Linux 平台的开发包,首批通过一致性测试的驱动来自多家显卡厂商。发布时,它已被 Linux、SteamOS、Tizen 与 Android 等平台采纳为本地渲染与计算接口。同年,The Talos Principle 成为较早接入该接口的作品之一,被用作概念验证[5]。

2018 年 3 月,1.1 版发布,同时提升了开发工具与一致性测试,并推动可移植性计划,使该接口能通过翻译层在苹果平台上运行[6]。2020 年 1 月,1.2 版把一批已验证的扩展并入核心标准[7]。2022 年 1 月 25 日,1.3 版发布,并入 23 项扩展,且新增功能不再设为可选,同时引入公开路线图与配置文件机制,以缓解功能碎片化[8]。

2024 年 12 月 3 日,1.4 版在东京 SIGGRAPH Asia 上发布,把 28 项原先可选的功能转为必需,并提高了 31 项硬件下限,支持最多 8 个渲染目标的 8K 渲染;对应开发包于 2025 年 1 月更新。按 2026 年公开的回顾资料,该接口在十年间经历了较大幅度的重新设计,例如渲染通道被动态渲染取代、描述符集向描述符堆演进[1]。

应用

电子游戏是最主要的应用场景。大型游戏引擎与流媒体游戏平台陆续提供支持,商业引擎可在底层调用该接口,同时向上层开发者暴露更易用的高层接口[3]。到 2022 年,已有超过 160 款支持该接口的作品在个人电脑、Linux、云游戏平台与 macOS 上发行[9]。

移动端方面,Android 自 7.0 前后起将其作为本地图形与计算接口,科纳斯公布的统计显示,2022 年约 77% 的活跃 Android 设备可用该接口[9]。云计算与游戏串流服务也将其作为渲染后端之一[9]。

计算方面,该接口与图形共用同一套队列模型,可把 GPU 用于通用并行运算,因此也被三维创作软件、计算机辅助设计与机器学习推理等负载采用;1.3 版加入的着色器整数点积指令即针对机器学习加速需求[8]。汽车仪表与车载信息娱乐系统的图形栈同样是其应用方向之一。

局限

显式控制带来更高的使用门槛。应用需要自行完成帧缓冲创建、内存管理、同步等几乎全部细节,接口因此相当冗长,驱动的辅助也明显减少;官方教程直言该接口并非为易用而设计,只适合愿意投入精力、追求高性能图形的开发者[3]。科纳斯工作组成员也承认,它不适合作为学习基础渲染知识的入门接口[10]。

苹果平台缺少原生驱动。苹果不允许在其系统上提供原生 Vulkan 驱动,只能通过 MoltenVK 之类的翻译层把调用转换为 Metal 指令,这类实现并非完全符合规范,可用功能是规范的一个子集[11]。使用这类实现时需要显式启用来声明非完全一致性的相关扩展,否则程序可能在部分功能上失败[12]。

功能碎片化长期存在。扩展是可选的,各厂商与平台是否支持并不统一,开发者难以判断某项能力在目标设备上是否可用;到 1.3 版之前,核心接口中越来越多的功能被标为可选,科纳斯为此引入路线图里程碑与配置文件机制来界定不同市场的最低能力基线[8]。此外,核心规范仍以 OpenGL ES 3.1 级硬件为加速基线,一些高要求特性在旧设备上只能通过可选扩展获得。

参见

  • OpenGL —— 历史更久的跨平台图形接口,Vulkan 被视为其后继设计。

  • 科纳斯组织 —— 负责制定与维护 Vulkan 规范的行业联盟。

  • SPIR-V —— Vulkan 使用的着色器中间表示。

  • Metal —— 苹果的底层图形与计算接口,Vulkan 在其上通过翻译层运行。

  • Direct3D —— 微软的图形接口,其 12 版与 Vulkan 在设计思路上相近。

  • MoltenVK —— 把 Vulkan 调用转换为 Metal 的开源翻译层。

参考资料

  1. Vulkan: 10 Year API and Ecosystem Retrospective [引用日期2026-10-29]
  2. Vulkan Documentation [引用日期2026-10-29]
  3. Khronos Vulkan® Tutorial [引用日期2026-10-29]
  4. KHRONOS [引用日期2026-10-29]
  5. gamedeveloper.com 上的网页 [引用日期2026-10-29]
  6. opensourceforu.com 上的网页 [引用日期2026-10-29]
  7. K H R O N O S [引用日期2026-10-29]
  8. Vulkan 1.3 and Roadmap 2022 [引用日期2026-10-29]
  9. SIGGRAPH 2022 [引用日期2026-10-29]
  10. a [引用日期2026-10-29]
  11. New Release of Vulkan SDK [引用日期2026-10-29]
  12. The State of Vulkan on Apple Devices [引用日期2026-10-29]
词条评价
词条统计

浏览次数:0 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-28T18:34:56Z

历史版本

本条目引用的词条
科纳斯组织 OpenGL SPIR-V Metal Direct3D MoltenVK