初识Vulkan【转】

Vulkan是Khronos组织制定的“下一代”开放的图形显示API。是与DirectX12可以匹敌的GPU API标准。前端

Vulkan是基于AMD的Mantle API演化而来,眼下Vulkan 1.0标准已经完毕并正式公布。多线程

上一代的OpenGL|ES并不会被遗弃。还会继续发展,很是有可能OpenGL|ES变为Vulkan的简化API。工具

 Vulkan 技术交流 QQ群 175250233性能

Vulkan的优点

与OpenGL|ES相比Vulkan的优点:开发工具

l  更简单的显示驱动层

Vulkan提供了能直接控制和訪问底层GPU的显示驱动抽象层。 显示驱动仅仅是对硬件薄薄的封装,这样可以显著提高操做GPU硬件的效率和性能。以前OpenGL的驱动层对开发人员隐藏的很是多细节,现在都暴露出来。Vulkan甚至不包括执行期的错误检查层。驱动层干的事情少了,隐藏的bug也就少了。线程

l  支持多线程

Vulkan再也不使用OpenGL的状态机设计,内部也不保存全局状态变量。显示资源全然由应用层负责管理。包括内存管理、线程管理、多线程绘制命令产生、渲染队列提交等。设计

应用程序可以充分利用CPU的多核多线程的计算资源,下降CPU等待,下降延迟。 带来的问题是。线程间的同步问题也由应用程序负责,从而对开发人员的要求也更高。接口

l  预编译Shaders

驱动层不提供前端shader编译器。仅仅支持标准可移植中间表示二进制代码(SPIR-V)。队列

即提升了执行Shaders的效率又添加了未来着色语言的灵活性。游戏

因此眼下的GLSL/HLSL可以直接经过工具转换为SPIR-V。在Vulkan中使用。这样就可以使用离线的shader编译。

 另外。SPIR-V还支持OpenCL!

 

l  跨平台

支持桌面、移动设备、游戏主机、嵌入式……仅仅要需要显示的地方,貌似都能支持。

这也是Vulkan与DirectX12相比的优点。

 

Vulkan与多线程

OpenGL|ES不支持多线程一直被广为诟病。Vulkan開始设计之处就考虑多线程问题,可以说就是为了多线程而设计的。

命令缓冲和和命令调度队列是Vulkan支撑多线程的重要组成部分。类似OpenGL的上下文状态。

Vulkan的命令缓冲都是独立的互不干扰的单元。支持在多个线程中建立。这样就可以由多个线程建立不一样的绘制命令。由单独的线程管理渲染命令队列,统一提交给GPU绘制,例如如下图所看到的:

 

 

Vulkan窗体系统集成

Vulkan把显示设备的建立和窗体系统的建立明白分开。

显示设备仅仅提供支持可视化的显示队列的接口,应用程序控制怎样显示绘制结果。比方先后显示缓冲这些的都由应用程序建立和设置。

Vulkan提供标准的扩展API支持多窗体系统。如Android、Windows、X等窗体系统。

 

Vulkan SDK

Khronos并无提供开发Vulkan程序的SDK。要开发Vulkan应用,就需要使用由Valve资助的一个叫LunarG的公司开发的LunarG SDK。

另外还需要下载最新的支持Vulkan的显卡驱动程序。

Vulkan周边的辅助开发工具基本都是开源的,但不幸的是LunarG的站点眼下还在墙外,下载个SDK都很是费劲。可以在 Vulkan 技术交流 QQ群 175250233中下载。

相关文章
相关标签/搜索