Vulkan学习(一)介绍
1、Vulkan是什么
Vulkan是一个跨平台的2D和3D绘图应用程序接口(API),最早由科纳斯组织在2015年游戏开发者大会(GDC)上发表。
它是 AMD Mantle 的后续版本,继承了前者强大的低开销架构,使软件开发人员能够全面获取 Radeon™ GPU 与多核 CPU 的性能、效率和功能。
Vulkan的官方网站是:https://www.khronos.org/vulkan/,上面有很多学习的文档。
目前资料很少,以官网资料为主。
2、Vulkan与Opengl比较
与OpenGL|ES相比Vulkan的优势:
l 更简单的显示驱动层
Vulkan提供了能直接控制和訪问底层GPU的显示驱动抽象层。 显示驱动仅仅是对硬件薄薄的封装,这样能够显著提升操作GPU硬件的效率和性能。之前OpenGL的驱动层对开发人员隐藏的非常多细节,如今都暴露出来。Vulkan甚至不包括执行期的错误检查层。驱动层干的事情少了,隐藏的bug也就少了。
l 支持多线程
Vulkan不再使用OpenGL的状态机设计,内部也不保存全局状态变量。显示资源全然由应用层负责管理。包括内存管理、线程管理、多线程绘制命令产生、渲染队列提交等。
应用程序能够充分利用CPU的多核多线程的计算资源,降低CPU等待,降低延迟。 带来的问题是。线程间的同步问题也由应用程序负责,从而对开发人员的要求也更高。
OpenGL|ES不支持多线程一直被广为诟病。Vulkan開始设计之处就考虑多线程问题,能够说就是为了多线程而设计的。
命令缓冲和和命令调度队列是Vulkan支撑多线程的重要组成部分。相似OpenGL的上下文状态。
Vulkan的命令缓冲都是独立的互不干扰的单元。支持在多个线程中创建。这样就能够由多个线程创建不同的绘制命令。由单独的线程管理渲染命令队列,统一提交给GPU绘制,例如以下图所看到的:
l 预编译Shaders
驱动层不提供前端shader编译器。仅仅支持标准可移植中间表示二进制代码(SPIR-V)。
即提高了执行Shaders的效率又添加了将来着色语言的灵活性。
所以眼下的GLSL/HLSL能够直接通过工具转换为SPIR-V。在Vulkan中使用。这样就能够使用离线的shader编译。
另外。SPIR-V还支持OpenCL!
3、如何使用Vulkan进行开发
Khronos并没有提供开发Vulkan程序的SDK。要开发Vulkan应用,就须要使用由Valve资助的一个叫LunarG的公司开发的LunarG SDK。
另外还须要下载最新的支持Vulkan的显卡驱动程序。
Vulkan周边的辅助开发工具基本都是开源的,但不幸的是LunarG的站点眼下还在墙外,下载个SDK都非常费劲。能够在 Vulkan 技术交流 QQ群 175250233中下载。