目录
一、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具体架构如下图所示:
3、OpenGL与Vulkan互操作
OpenGL与Vulkan互操作包括如下步骤,如下图所示:
- 可供替代的WSI;
- 创建OpenGL上下文和通用操作;
- 创建Vulkan设备;
- 在OpenGL与Vulkan之间循环渲染;
- OpenGL与Vulkan混合渲染;
从Image到ImageView,再到FrameBuffer,最终到达Render-Pass。其中FrameBuffer比OpenGL更简单、不需要为资源定义角色,Render-Pass真正为FrameBuffer定义角色、可以有多个Sub-Pass。具体示意图如下:
此外,图像管线必须与着色器一致、没有内省。如下图所示:
2、Objects
Objects对象包括以下特点,如下图所示:
- 引用数据缓冲区的Vulkan对象需要绑定内存;
- Vulkan设备暴露不同的内存堆;
- 这些堆有不同的内存类型;
2、Vulkan读取GLSL
着色器具有如下图特点:
- Vulkan使用SPIR-V直接传递到驱动层;
- NVIDIA允许直接编译GLSL;
Vulkan读取GLSL过程如下图所示,可以通过VK_NV_glsl_shader直接读取GLSL,也可以经过glslang读取再转换为SPIR-V,最终到达Vulkan。
七、Buffer & Command-Buffer
1、Buffer
Buffer缓冲区具有如下特点,如下图所示:
- 用于不同场景,包括:索引/顶点缓存,统一缓存;
- Vulkan对象必须绑定到设备内存,可以被CPU访问与缓存,被GPU访问;
八、Synchronization & Descriptor-Set
1、Synchronization
同步方式有三种,如下图所示:
- 信 量;
- 事件和屏障;
- 栅栏;
九、Resource Management
2、Thread Safety
命令缓存池是线程安全的,提供fence栅栏进行隔离,具体以下特点,如下图所示:
- 不能回收用于重写的命令缓冲区,直到它不再被使用;
- 不能刷新队列的每个帧;
- VkFences可以提供队列等待,当命令缓冲区准备被回收时;
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!