使用具有多个 VkRenderPass 的相同 VkPipeline

Using same VkPipeline with more than one VkRenderPass

VkGraphicsPipelineCreateInfo 期望将 VkRenderPass 分配给 .renderPass 属性。我真的不明白为什么管道必须与渲染通道相结合。我的意思是,VkGraphicsPipelineCreateInfo 不会直接 ​​"talks" 来呈现传递相关的内容,例如 FBO 及其附件。我可能想使用具有多个渲染通道的相同管道,例如我想在不同场景中渲染同一组对象,那么我是否必须创建另一个具有完全相同设置的管道?

补充一下,使用 .renderPass = nullptr 创建 VkPipeline 失败并出现验证错误:

vkCreateGraphicsPipelines: required parameter pCreateInfos[0].renderPass specified as VK_NULL_HANDLE.Invalid VkRenderPass Object 0x0. The Vulkan spec states: renderPass must be a valid VkRenderPass handle (https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VUID-VkGraphicsPipelineCreateInfo-renderPass-parameter)

I mean VkGraphicsPipelineCreateInfo doesn't directly "talks" to render pass related content, like FBOs and their attachments.

当然可以。当片段着色器写入渲染通道的附件时,您认为它在做什么?

Do I have to create another one with exactly the same setup?

没有。根据规范:

"renderPass 是渲染通道对象的句柄,描述管道将在其中使用的环境;管道只能与任何兼容的渲染通道的实例一起使用提供的那个。有关更多信息,请参见渲染通道兼容性。

...因此管线可以与任何与用于创建它的渲染通道兼容的渲染通道一起使用。