一、Vulkan简介(/s/1O_fPMOF5TNE-nnk06IqrpA 提取码:tl9i )
Vulkan是一个低开销、跨平台的二维、三维图形与计算的应用程序接口(API),最早由科纳斯组织在2015年游戏开发者大会(GDC)上发表。与OpenGL类似,Vulkan针对全平台即时3D图形程序(如电子游戏和交互媒体)而设计,并提供高性能与更均衡的CPU与GPU占用,这也是Direct3D 12和AMD的Mantle的目标。与Direct3D(12版之前)和OpenGL的其他主要区别是,Vulkan是一个底层API,而且能执行并行任务。除此之外,Vulkan还能更好地分配多个CPU核心的使用。
相比于传统的OpenGL,Vulkan API的设计更加贴近硬件。传统API比如OpenGL内部维护一个单一全局的状态机,这就意味着需要通过一个主线程来处理所有的绘图命令,即便驱动内部能够保证渲染足够高校,但是由于外部提交指令的方式是单线程的容易导致多核CPU的利用率不高。而Vulkan从设计上就考虑了多线程编程,允许开发者在多个线程中并行执行绘图命令和资源管理操作。这样可以大幅提升渲染性能,并使应用程序更具响应性。
二、Vulkan在图形渲染中的优势
1、低开销和高性能:Vulkan通过减少驱动程序的开销和提供更直接的硬件访问,显著提升了图形渲染的效率。这使得Vulkan在处理复杂场景和高分辨率图像时表现尤为出色。
2、多线程支持:Vulkan的设计允许开发者充分利用多核处理器的优势,通过并行处理来提升渲染性能。这对于现代多核CPU来说是一个巨大的优势,可以显著提高帧率和降低延迟。
3、跨平台兼容性:Vulkan支持多种操作系统和硬件平台,包括Windows、Linux、Android等。这使得开发者可以编写一次代码,然后在多个平台上运行,极大地提高了开发效率。
4、灵活的内存管理:Vulkan提供了更灵活的内存管理机制,允许开发者更精细地控制内存分配和使用。这对于需要高效利用内存资源的应用来说是一个重要的优势。
三、Vulkan及其演化史
目前主流的图形渲染API有OpenGL、OpenGL ES、DirectX、Metal等
OpenGL的应用领域较为广泛,支持多种操作系统平台(如Windows、UNIX、Linux、macOS等)基于其开发的应用可以方便、低成本地在不同操作系统平台之间移植。既可以用于开发游戏,又可以用于开发工业、行业应用
OpenGL-ES则是OpenGL针对移动端的裁剪版本。Direct-X是微软针对Win系统下图形渲染的技术,Metal则是针对Mac/iOS系统下图形渲染技术,从占有率而言DirectX是远远超过Metal的。
那么OpenGL在和Vulkan相比,Vulkan能够更好的调动GPU的性能,OpenGL在使用GPU前需要CPU处理很多数据,而Vulkan能够提供更小的运行开销、更直接的GPU控制、和更低的CPU负载。 Vulkan的原始概念是由AMD基于他们的私有的Mantle API设计和实现的,这个API几款不同的API中体现了自己的先进特性
四、Vulkan 将设备队列按照队列组的方式进行组织,规则如下
一个队列组可以支持一个或者多个功能
一个队列组中包含一个或者多个队列
同一个队列组中的所有队列支持相同的功能
队列族之间可以有相同的功能,但两两队列之间不能有两个功能集
获取 QueueFamily 和 QueueFamilyProperty
typedef struct VkQueueFamilyProperties {
VkQueueFlags queueFlags;
uint32_t queueCount;
uint32_t timestampValidBits;
VkExtent3D minImageTransferGranularity;
} VkQueueFamilyPropertie
五、显式的GPU控制
在OpenGL驱动中,驱动会帮你做API验证,内存管理,线程管理等大部分工作。
OpenGL驱动大包大揽什么事情都管,即使应用使用API出错,也会帮忙解决处理,保证应用正常运行。开发者使用起来非常简单。
但是OpenGL为了这些事情,牺牲了大量的性能。在一些复杂的应用场景,依然会遇到无法解决的问题,很多时候经常是驱动的一厢情愿,应用并不为此买单。
Vulkan则不然。
Vulkan把API验证、内存管理、多线程管理等工作交由开发者负责。一旦API使用出错,应用就会出现crash。
没人帮应用兜底,所有事情都交由应用打理。这种方式无疑增加了API使用的复杂度和困难度,但换来的是性能上巨大的提升。单单是在驱动中去掉API验证操作,就把性能提升了9倍。
六、 图形API的选择建议
Vulkan被设计用于在现代多核CPU和GPU上实现更好的并行处理,同时还有更少的CPU开销和更好的可扩展性。此外,Vulkan还提供了更好的调试工具和更好的错误处理机制,这使得它更容易开发和调试。
OpenGL仍然是一个非常流行的图形API接口,它已经存在了很长时间并且被广泛使用。它是一个跨平台的API,可以在多种操作系统和硬件上运行。OpenGL的主要优势是它的广泛支持和成熟的生态系统,同时也有很多开发者和工具支持。然而,OpenGL的主要缺点是它的性能受到限制,因为它是一个高级API,对硬件的控制较少,而且它的执行方式也不是非常高效。
总之,Vulkan和OpenGL都有各自的优缺点,它们在不同的场景下都有自己的用武之地。
有疑问加站长微信联系(非本文作者)