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

时间:2019-05-05 10:00:49

标签: vulkan

Vulkan中RenderPass与管道之间的逻辑关系是什么?

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

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

RenderPass和管道是否取决于感觉?例如,每个管道都属于一个子通道。或依赖项(例如管道的最后一个输出)由RenderPass处理。还是其他?

1 个答案:

答案 0 :(得分:1)

最终,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定义需要哪种输入(附件)。它定义了如何分别保存和存储它们。在渲染通道实例之后*。它也有惊奇。它定义了它们之间的同步(替换了vkCmdPipelineBarrier)。并定义给定渲染通道附件将要填充的目的类型(例如,如果是颜色缓冲区或深度缓冲区)。

*渲染通道实例是vkCmdBeginRenderPass从渲染通道实例创建的事物。是的,不要混淆,对。