【发布时间】:2017-08-15 02:56:53
【问题描述】:
从Vulkan barriers explained 来看,似乎每个vkCmdPipelineBarrier 都在两个后续管道“运行”之间引入了依赖关系。对于写入图像的着色器 A 和对同一图像进行采样的着色器 B 的典型场景,它可能如下所示:
- 调度着色器写入图像 A
vkCmdPipelineBarrier(cmd, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, ...);- 从图像 A 读取的调度着色器
这定义了从第一个着色器执行的颜色附加阶段到第二个着色器执行的片段阶段的依赖关系。但是如果我想在两者之间运行独立的命令怎么办?例如
- 调度着色器写入图像 A
- 调度不涉及图像 A 的不相关着色器
vkCmdPipelineBarrier(cmd, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, ...);- 从图像 A 读取的调度着色器
这仍然有效,但效率低下:因为片段着色器阶段现在必须等待前一个不相关着色器的颜色附件输出阶段。如何在 before 之前指定对着色器的依赖关系?
【问题讨论】:
标签: vulkan