屏障和图像转换

时间:2016-11-03 01:09:29

标签: vulkan

我想知道为什么我们通常(来自Vulkan教程和Sascha Willems示例)管道顶部的障碍。

如果我推理像生产者和消费者(例如创建mipmap),我在src和dst阶段都有"标记" " TRANSFER_BIT&#34 ;. 所以,如果我对src和dst使用相同的阶段,屏障应该立即发生,如果我使用TOP_OF_PIPE标志就是这种情况?

我是对的吗?

1 个答案:

答案 0 :(得分:2)

我不确定我是否理解这个问题,但希望我能用它来解释障碍。

src=TOP_OF_PIPEdst=BOTTOM_OF_PIPE构成一个非阻塞屏障(有效只是内存依赖性的一半而没有执行依赖性)。这是你的意思"立即发生"屏障?

dst=TOP_OF_PIPEsrc=BOTTOM_OF_PIPE应该是全阻挡障碍(至少我经常在示例和教程中看到它)。我从规范中不太清楚这一点(特别是如果内存依赖性也需要存在)并且ALL_COMMANDS(或|具体阶段)似乎是更好的替代品。

(顺便说一下,我已经用{API}设计了my peeve

一般来说,执行依赖关系的障碍是:它们确保在障碍完成之前记录的所有命令srcStage在障碍开始后记录的任何命令dstStage之前完成。<登记/> (上述特殊情况也应与该描述一致。)

所以,正如所说,TOP_OF_PIPE似乎不适合TRANSFER。它根本不会执行其预期的功能或效率低下(基于上面的描述)。

srcStage==dstStage没有特殊意义。在这种情况下使用TRANSFER意味着先前记录的命令的TRANSFER阶段在屏障后记录的TRANSFER阶段命令之前完成。