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 中指定的那样。
绘图发生在当前的任何图形管道上,并渲染到图形管道输出指定的附件,并路由到当前渲染通道实例的当前子通道的附件。
我对 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 中指定的那样。
绘图发生在当前的任何图形管道上,并渲染到图形管道输出指定的附件,并路由到当前渲染通道实例的当前子通道的附件。