Vulkan中单个颜色附件映射到两个不同subpass输入附件是否合法?
Vulkan RenderPass配置合法性解答

首先明确结论:该配置完全符合Vulkan规范要求,单个Color Attachment被多个不同Subpass作为Input Attachment引用是合法的常用用法,仅需要满足以下两个必要约束即可正常运行:
- Attachment的布局配置正确:
所有引用该Attachment作为Input Attachment的Subpass,指定的布局都统一设置为VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,同时该Attachment在VkAttachmentDescription中配置的生命周期布局(initialLayout、finalLayout)和Subpass的输出/输入布局切换逻辑自洽即可。 - Subpass依赖配置正确:
需要在写入该Attachment的Subpass(即你场景里的Subpass0)和两个读取它的Subpass(T0、T1)之间配置正确的Subpass Dependency,明确同步规则:
源阶段掩码设置为VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,源访问掩码设置为VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT
目标阶段掩码设置为VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,目标访问掩码设置为VK_ACCESS_INPUT_ATTACHMENT_READ_BIT
即可避免写后读的内存冒险,保证Subpass0的写入完成后才会被后续两个Subpass读取。
注意:Vulkan仅禁止在同一个Subpass内,未开启反馈循环特性的前提下,同时将同一个Attachment作为可写的Color/Depth Attachment和可读的Input Attachment使用,跨Subpass的多次读取没有次数限制。
内容的提问来源于stack exchange,提问作者Vulkanoid
相关产品推荐
相关产品推荐

