小编haa*_*asn的帖子

跨多个着色器的管道障碍?

解释Vulkan 障碍来看,似乎每个障碍vkCmdPipelineBarrier在两个后续管道“运行”之间引入了依赖关系。对于写入图像的着色器 A 和对同一图像进行采样的着色器 B 的典型场景,它可能如下所示:

  1. 调度写入图像 A 的着色器
  2. vkCmdPipelineBarrier(cmd, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, ...);
  3. 从图像 A 读取的调度着色器

这定义了从第一个着色器执行的颜色附加阶段到第二个着色器执行的片段阶段的依赖关系。但是如果我想在两者之间运行独立的命令怎么办?例如

  1. 调度写入图像 A 的着色器
  2. 调度不接触图像 A 的无关着色器
  3. vkCmdPipelineBarrier(cmd, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, ...);
  4. 从图像 A 读取的调度着色器

这仍然有效,但效率低下:因为片段着色器阶段现在必须等待前一个无关着色器的颜色附件输出阶段。如何之前指定对着色器的依赖?

vulkan

5
推荐指数
1
解决办法
409
查看次数

标签 统计

vulkan ×1