图形 API 规范-Vulkan
2021-06-23 09:07:39 阿炯

Vulkan是OpenGL的下一代版本,和DirectX 12一样都是基于AMD私有的Mantle API,不同的是Vulkan是开源的图形API,它承诺通过给予开发者访问硬件底层的能力而大幅提升3D应用的性能。AMD同时发布了支持Vulkan API的beta版驱动,其竞争对手Nvidia也宣布将会发布新驱动支持Vulkan。采用C++开发并在ApacheV2协议下授权。


A comprehensive collection of open source C++ examples for Vulkan®, the new generation graphics and compute API from Khronos.

Vulkan等新一代图形API让开发者自己去管理显存和指令,而不是将其留给驱动程序。Vulkan是一个低开销、跨平台的二维、三维图形与计算的应用程序接口API,最早由科纳斯组织在2015年游戏开发者大会GDC上发表。与OpenGL类似,Vulkan针对全平台即时3D图形程序如电子游戏和交互媒体而设计,并提供高性能与更均衡的CPU与GPU占用,这也是Direct3D 12和AMD的Mantle的目标。与Direct3D12版之前和OpenGL的其他主要区别是,Vulkan是一个底层API,而且能执行并行任务。除此之外,Vulkan还能更好地分配多个CPU核心的使用。

科纳斯最先把Vulkan API称为“次世代OpenGL行动”next generation OpenGL initiative或“glNext”,但在正式宣布Vulkan之后这些名字就没有再使用了。Vulkan基于Mantle构建,AMD将其Mantle API捐赠给科纳斯组织,给予该组织开发底层API的基础,使其像OpenGL一样成为行业标准。


优势:
Vulkan API适用于从高性能电脑到移动低功耗设备的显卡OpenGL具有名为OpenGL ES的移动设备API子集,它仍是支持Vulkan设备的备选API。
相比于Direct3D 12,Vulkan与前身OpenGL类似,受多种操作系统支持。Vulkan已经能在Windows 7、8、10、Tizen、Linux与Android上运行iOS和macOS有第三方支持。
通过批量处理Batching减少CPU负载,使CPU可以执行更多其他的计算或渲染任务。
在多核心CPU上,Vulkan能对核心与线程进行优化。Direct3D 11与OpenGL 4最初为单核心CPU设计,尽管后来出现了针对多核心CPU优化的扩展,不过与Vulkan相比,优化仍不是很好。
减少了驱动程序的开销与维护工作。OpenGL使用高级着色语言GLSL编写着色器,不同的驱动在程序运行时需要执行自身的GLSL编译器,将程序的着色器转换为GPU可执行的机器代码。而Vulkan驱动将着色器语言预先转化为SPIR-VStandard Portable Intermediate Representation的中间二进制格式,其行为类似于Direct3D的HLSL着色器。通过着色器预编译,应用程序加载速度更快,并且3D场景可以使用更多种着色器。Vulkan驱动只需对GPU进行优化并生成代码,这使得驱动程序更容易维护,驱动程序包更小目前GPU供应商仍需在驱动程序中提供OpenGL与OpenCL的支持。
计算与图形处理的统一管理,因此Vulkan无需与单独的计算API配合使用。

开发工具
GPU PerfStudio 3.6,在Windows与Linux平台上支持Vulkan
GTK+ Scene Graph Kit,作为GTK+ 3.90的一个组件于2017年3月发布

初版Vulkan规范指出,Vulkan能在支持OpenGL ES 3.1或OpenGL 4.x及更高版本的显卡上运行。但Vulkan API本身依赖于新版显卡驱动程序,而且并非所有符合Vulkan规范的显卡都能收到厂商提供的驱动程序更新。2016年8月22日,Google发布的Android NougatAndroid 7.x提供对Vulkan的支持。苹果公司没有对iOS和macOS提供官方Vulkan支持,而Molten公司开发的MoltenVK运行于苹果Metal API,提供Vulkan第三方支持。


最新版本:1.2
2020年1月15日,科纳斯组织发布了Vulkan 1.2,将23个已经通过验证的扩展集成到基本Vulkan标准中,大部分用来帮助提升Vulkan与其他图形API之间的兼容层性能。除了各种文档修复和说明之外,该版本还增加了一些新的扩展。
VK_EXT_acquire_drm_display:这个扩展允许应用程序使用 Linux 上的直接渲染管理器DRM接口对显示器进行独占控制。这对 Wayland 合成器、VR 和其他用途非常有用。
VK_EXT_physical_device_drm:该扩展允许查询物理设备的 DRM直接渲染管理器属性。这项工作可以实现 Vulkan 物理设备与 Linux 上 DRM 节点的匹配。该扩展对于由 Vulkan 驱动的 Wayland 合成器非常有用。
VK_EXT_multi_draw:多重绘制支持,允许直接向驱动传递整个绘制序列。这个多图扩展是由 Valve、NVIDIA、Intel、Igalia、AMD、Samsung 和 Khronos 合作完成的。
VK_HUAWEI_subpass_shading:华为贡献的扩展允许应用程序在渲染通道的一个子通道中执行一个子通道着色管道。
VK_NV_ray_tracing_motion_blur:NVIDIA 贡献了这个扩展,用于光线追踪运动模糊处理和移动几何体的快速追踪。

更多详情请查看发行公告


官方主页:https://www.vulkan.org/