Vulkan中RenderPass和Pipeline是什么关系?

董佳斌*_*董佳斌 9 vulkan

Vulkan中RenderPass和Pipeline的逻辑关系是什么?

如果忽略RenderPass,我对渲染过程的理解是先将应用层准备好的顶点数据,然后将纹理数据提交给驱动,然后通过各个阶段的管道,写入Framebuffer后,就可以完成一次渲染。

那么RenderPass的职责是什么?它是为渲染每个阶段(例如格式)提供元数据的抽象,还是有其他作用?

RenderPass 和 Pipeline 是靠感觉的吗?例如,每个流水线都属于一个子通道。或者依赖项,例如流水线的最后一个输出,由 RenderPass 处理。或者是别的什么?

krO*_*oze 8

归根结底,Vulkan 是一个不错的现代 OO API。Vulkan中的所有对象实际上只是它们采用的参数。说这些只是为了让你的学习更轻松。您可以查看vkCreateX并大致了解VkXVulkan 中的功能。

VkPipeline是一个 GPU 上下文。将 GPU 视为 FPGA(它不是,但请耐心等待)。这样做vkCmdBindPipeline会将 GPU 设置为给定的门配置。Exept GPU 不是 FPGA——在我们的例子中,它将 GPU 设置为可以执行由VkPipeline.

VkRenderPass是面向数据的东西。它是平铺架构 GPU(移动 GPU)所必需的。在桌面 GPU 上,它仍然可以充当预言机进行优化和/或允许部分平铺架构(或任何其他真正可以使用它的架构)。

平铺架构 GPU 需要将图像\缓冲区从通用 RAM“加载”到“片上内存”。完成后,他们将结果“存储”回 RAM。

VkRenderPass定义需要什么样的输入(附件)。它分别定义了它们在渲染过程实例*之前和之后如何加载和存储。它也有子通行证。它定义了它们之间的同步(替换vkCmdPipelineBarriers)。并定义给定渲染通道附件将填充的目的类型(例如,如果它是颜色缓冲区或深度缓冲区)。

* Render Pass Instance 是由 Render Pass 实例创建的东西vkCmdBeginRenderPass。是的,没有混淆,对吧。