【问题标题】:What is the relationship of RenderPass and Pipeline in Vulkan?Vulkan中RenderPass和Pipeline是什么关系?
【发布时间】:2019-09-23 05:44:58
【问题描述】:

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

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

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

RenderPass 和 Pipeline 是否依赖于感觉?例如,每个 Pipeline 都属于一个 Subpass。或者依赖关系,例如 Pipeline 的最后一个输出,由 RenderPass 处理。还是别的什么?

【问题讨论】:

标签: vulkan


【解决方案1】:

归根结底,Vulkan 是一个不错的现代式 OO API。 Vulkan 中的所有对象实际上只是它们采用的参数。只是为了方便你的学习。您可以查看 vkCreateX 并大致了解 VkX 在 Vulkan 中的作用。

VkPipeline 是一个 GPU 上下文。将 GPU 视为 FPGA(它不是,但请耐心等待)。执行vkCmdBindPipeline 会将 GPU 设置为给定的门配置。 Exept GPU 不是 FPGA——在我们的例子中,它将 GPU 设置为可以执行 VkPipeline 定义的着色器程序和固定功能管道阶段的状态。

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

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

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

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

【讨论】:

  • 非常感谢,但是我的英语很差。我是中国人,如果你也是,那我官方太幸运了,再次感谢。
猜你喜欢
  • 2018-11-30
  • 2014-03-14
  • 2013-06-14
  • 2018-02-16
  • 2020-05-04
  • 2020-01-08
  • 2015-01-13
  • 2017-11-06
  • 2015-07-09
相关资源
最近更新 更多