Vulkan与OpenGL对比——Vulkan的全新渲染架构

OpenGL是Khronos Group组织发布的跨平台图像渲染引擎。在这里科普一下Khronos组织,由Intel、Nvidia等公司共同创立,致力于创建开放标准的应用程序API。大名鼎鼎的OpenGL、OpenGL ES、WebGL、Vulkan都是来自Khronos。而vulkan称为“下一版本的OpenGL”,旨在提供更低的CPU开销和更多GPU控制。Android API 24以后支持vulkan,iOS在WWDC2014也推出Metal图像渲染。本文主要探讨Vulkan的全新渲染架构。

目录

一、OpenGL与Vulkan渲染架构

1、OpenGL渲染架构

2、Vulkan渲染架构

3、OpenGL与Vulkan互操作

二、Vulkan Components

三、Graphics Pipeline

四、Memory & Objects

1、Memory

2、Objects

五、Shaders

1、SPIR-V结构

2、GLSL转换SPIR-V

六、Image & ImageView

七、Buffer & Command-Buffer

1、Buffer

2、Command-Buffer

八、Synchronization & Descriptor-Set

1、Synchronization

2、Descriptor-Set

九、Resource Management

十、Multi-Thread & Thread Safety

1、Multi-Thread

2、Thread Safety


一、OpenGL与Vulkan渲染架构

1、OpenGL渲染架构

OpenGL架构分为三层:应用层、驱动层、GPU层。OpenGL命令从应用层经过驱动层,再到GPU层处理;OpenGL资源从应用层经过驱动层(由图像管线状态机管理),再到GPU层的内存。OpenGL具体架构如下图所示:

Vulkan与OpenGL对比——Vulkan的全新渲染架构

3、OpenGL与Vulkan互操作

OpenGL与Vulkan互操作包括如下步骤,如下图所示:

  • 可供替代的WSI;
  • 创建OpenGL上下文和通用操作;
  • 创建Vulkan设备;
  • 在OpenGL与Vulkan之间循环渲染;
  • OpenGL与Vulkan混合渲染;

Vulkan与OpenGL对比——Vulkan的全新渲染架构

从Image到ImageView,再到FrameBuffer,最终到达Render-Pass。其中FrameBuffer比OpenGL更简单、不需要为资源定义角色,Render-Pass真正为FrameBuffer定义角色、可以有多个Sub-Pass。具体示意图如下:

Vulkan与OpenGL对比——Vulkan的全新渲染架构

此外,图像管线必须与着色器一致、没有内省。如下图所示:

Vulkan与OpenGL对比——Vulkan的全新渲染架构

2、Objects

Objects对象包括以下特点,如下图所示:

  • 引用数据缓冲区的Vulkan对象需要绑定内存;
  • Vulkan设备暴露不同的内存堆;
  • 这些堆有不同的内存类型;

Vulkan与OpenGL对比——Vulkan的全新渲染架构

2、Vulkan读取GLSL

着色器具有如下图特点:

  • Vulkan使用SPIR-V直接传递到驱动层;
  • NVIDIA允许直接编译GLSL;

Vulkan读取GLSL过程如下图所示,可以通过VK_NV_glsl_shader直接读取GLSL,也可以经过glslang读取再转换为SPIR-V,最终到达Vulkan。

Vulkan与OpenGL对比——Vulkan的全新渲染架构

七、Buffer & Command-Buffer

1、Buffer

Buffer缓冲区具有如下特点,如下图所示:

  • 用于不同场景,包括:索引/顶点缓存,统一缓存;
  • Vulkan对象必须绑定到设备内存,可以被CPU访问与缓存,被GPU访问;

Vulkan与OpenGL对比——Vulkan的全新渲染架构

八、Synchronization & Descriptor-Set

1、Synchronization

同步方式有三种,如下图所示:

  • 信号量;
  • 事件和屏障;
  • 栅栏;

Vulkan与OpenGL对比——Vulkan的全新渲染架构

九、Resource Management

Vulkan与OpenGL对比——Vulkan的全新渲染架构

2、Thread Safety

命令缓存池是线程安全的,提供fence栅栏进行隔离,具体以下特点,如下图所示:

  • 不能回收用于重写的命令缓冲区,直到它不再被使用;
  • 不能刷新队列的每个帧;
  • VkFences可以提供队列等待,当命令缓冲区准备被回收时;

Vulkan与OpenGL对比——Vulkan的全新渲染架构 2022Java互联网架构师P7视频资料 Vulkan与OpenGL对比——Vulkan的全新渲染架构 微信名片 Vulkan与OpenGL对比——Vulkan的全新渲染架构

来源:普通网友

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年6月26日
下一篇 2022年6月26日

相关推荐