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

如果您忽略RenderPass,我对渲染过程的理解是,首先是由应用程序层准备的顶点数据,然后可以将纹理数据提交给驱动程序,然后再通过流水线的各个阶段,再写入帧缓冲区,您可以完成渲染。

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

RenderPass和Pipeline是否取决于感觉?例如,每个管道都属于一个子 channel 。或依赖项(例如管道的最后一个输出)由RenderPass处理。或者是别的什么?

最佳答案

归根结底,Vulkan是一个不错的现代OO API。 Vulkan 中的所有对象实际上都是,只有它们采用什么参数。只是说这可以简化您的学习。您可以查看vkCreateX并大致了解VkX在Vulkan中的作用。
VkPipeline是GPU上下文。将GPU视为FPGA(不是,但请耐心等待)。进行vkCmdBindPipeline会将GPU设置为给定的门配置。出色的GPU并非FPGA-在我们的案例中,它会将GPU设置为可以执行着色程序和VkPipeline定义的固定功能管线阶段的状态。
VkRenderPass是面向数据的东西。平铺式架构GPU(移动GPU)需要它。在台式机GPU上,它仍然可以充当Oracle的角色来进行优化和/或允许使用部分平铺的架构(或其他任何可以使用此架构的架构)。

平铺式架构GPU需要将图像\缓冲区从通用RAM“加载”到“片上存储器”。完成后,它们会将结果“存储”回RAM。
VkRenderPass定义需要哪种输入(附件)。它定义了如何分别在渲染 channel 实例*之前和之后加载和存储它们。它还具有子 channel 。它定义了它们之间的同步(替换了vkCmdPipelineBarrier)。并定义给定渲染 channel 附件将要填充的目的类型(例如,如果是颜色缓冲区或深度缓冲区)。

* Render Pass Instance是通过vkCmdBeginRenderPass从Render Pass实例创建的东西。是的,不要混淆,对。

关于vulkan - Vulkan中的RenderPass和Pipeline是什么关系?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55990802/

10-12 17:07