vulkan 中的 renderpass、图形管道和绘制调用之间是什么关系?

What is the relationship between renderpass, graphics pipeline and draw call in vulkan?

我对 vulkan 和计算图形有基本的了解。我还阅读了 https://vulkan-tutorial.com/ 中的 vulkan 教程。但是,我对渲染通道、图形管线和绘制调用之间的关系感到困惑。

从 vulkan API 开始,图形管线只能容纳一个渲染通道。这是否意味着 multi-renderpass 需要创建多个图形管道?

Draw call命令记录在一个renderpass中,它不指定任何渲染目标,尽管一个renderpass可能包含多个渲染目标。这是否意味着 renderpass 只需要绘制调用?但我经常听到有关绘制调用限制的消息。似乎多次绘制调用可能发生在渲染过程中。为什么需要多次绘制调用?

图形管道根本不“保留”渲染过程。它是根据渲染通道创建的:

renderPass is a handle to a render pass object describing the environment in which the pipeline will be used; the pipeline must only be used with an instance of any render pass compatible with the one provided.

具体来说,它是针对渲染通道的子通道(也是 VkGraphicsPipelineCreateInfo 的一个字段)创建的。当与 renderPass 兼容的渲染通道实例处于活动状态时,您只能使用图形管道 当该渲染通道的给定子通道处于活动状态时。

子通道确定任何渲染操作将渲染到哪个渲染通道附件。因此,片段着色器输出被路由到活动附件,如该子通道的 render pass's subpass data 中指定的那样。

绘图发生在当前的任何图形管道上,并渲染到图形管道输出指定的附件,并路由到当前渲染通道实例的当前子通道的附件。