【问题标题】:Using same VkPipeline with more than one VkRenderPass使用具有多个 VkRenderPass 的相同 VkPipeline
【发布时间】:2020-01-24 21:05:31
【问题描述】:

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

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

vkCreateGraphicsPipelines:必填参数 pCreateInfos[0].renderPass 指定为 VK_NULL_HANDLE.Invalid VkRenderPass 对象 0x0。 Vulkan 规范规定:renderPass 必须是 有效的 VkRenderPass 句柄 (https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VUID-VkGraphicsPipelineCreateInfo-renderPass-parameter)

【问题讨论】:

  • "我可能想使用具有多个渲染通道的相同管道,例如我想在不同场景中渲染同一组对象" 为什么会涉及使用不同的渲染通道?
  • 在我的用例中,我可能有几个场景具有不同的渲染目标、渲染目标的不同尺寸以及启用/禁用 MSAA
  • 除了样本计数之外,这些都不会影响使用的VkRenderPass 对象的结构。就多重采样而言......好吧,停止这样做。选择一个样本计数并坚持下去。
  • @NicolBolas “选择样本数量并坚持下去”是什么意思?
  • 意思是选择一个样本数并坚持下去。没有一堆具有不同样本数的不同渲染目标。我可以看到需要对主渲染过程进行多重采样,而不需要对通过渲染到纹理处理的反射进行多重采样。但这只是两个样本计数,需要两个渲染通道和两个管道。

标签: vulkan


【解决方案1】:

我的意思是VkGraphicsPipelineCreateInfo 不会直接“对话”以呈现通行证相关内容,例如 FBO 及其附件。

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

我必须用完全相同的设置创建另一个吗?

没有。根据规范:

"renderPass 是渲染通道对象的句柄,描述了使用管道的环境;管道只能用于与所提供的渲染通道兼容的任何渲染通道的实例。请参阅渲染通过兼容性了解更多信息”。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2019-12-28
    • 2014-02-11
    • 2017-06-27
    相关资源
    最近更新 更多