屏障和图像过渡
Barrier and image transition
我想知道为什么我们通常(来自 Vulkan 教程和 Sascha Willems 示例)管道顶部的屏障。
如果我像生产者和消费者一样推理(例如创建 mipmap),我在 src 和 dst 阶段都有 "flag" "TRANSFER_BIT"。
所以,如果我对 src 和 dst 使用相同的阶段,障碍应该立即发生,如果我使用 TOP_OF_PIPE flag?
也是一样的情况
我说得对吗?
我不确定我是否理解这个问题,但希望我能解释障碍。
src=TOP_OF_PIPE
或 dst=BOTTOM_OF_PIPE
构成非阻塞屏障(实际上只是内存依赖的一半,没有执行依赖)。这就是你所说的 "immediatelly happening" 障碍吗?
dst=TOP_OF_PIPE
或 src=BOTTOM_OF_PIPE
应该是全阻塞屏障(至少我经常在示例和教程中看到它)。我不太清楚规范中的这一点(特别是如果内存依赖性也需要存在的话)并且 ALL_COMMANDS
(或 |
ing 特定阶段)似乎是更好的替代品。
(顺便说一句,我已经用 API 设计写了关于 my peeve 的文章。)
一般来说,对于执行依赖性,障碍所做的是:它们确保在障碍完成之前记录的所有命令 srcStage
在障碍开始后记录的任何命令的 dstStage
之前.
(以上特殊情况也应该和那个描述一致。)
因此,话虽这么说,TOP_OF_PIPE
似乎并不是 TRANSFER
的合适替代品。它要么根本无法执行其预期功能,要么效率低下(根据上述描述)。
srcStage==dstStage
没有特殊意义。在这种情况下使用 TRANSFER
意味着 TRANSFER
之前记录的命令阶段在屏障之后记录的 TRANSFER
阶段命令之前完成。
我想知道为什么我们通常(来自 Vulkan 教程和 Sascha Willems 示例)管道顶部的屏障。
如果我像生产者和消费者一样推理(例如创建 mipmap),我在 src 和 dst 阶段都有 "flag" "TRANSFER_BIT"。 所以,如果我对 src 和 dst 使用相同的阶段,障碍应该立即发生,如果我使用 TOP_OF_PIPE flag?
也是一样的情况我说得对吗?
我不确定我是否理解这个问题,但希望我能解释障碍。
src=TOP_OF_PIPE
或 dst=BOTTOM_OF_PIPE
构成非阻塞屏障(实际上只是内存依赖的一半,没有执行依赖)。这就是你所说的 "immediatelly happening" 障碍吗?
dst=TOP_OF_PIPE
或 src=BOTTOM_OF_PIPE
应该是全阻塞屏障(至少我经常在示例和教程中看到它)。我不太清楚规范中的这一点(特别是如果内存依赖性也需要存在的话)并且 ALL_COMMANDS
(或 |
ing 特定阶段)似乎是更好的替代品。
(顺便说一句,我已经用 API 设计写了关于 my peeve 的文章。)
一般来说,对于执行依赖性,障碍所做的是:它们确保在障碍完成之前记录的所有命令 srcStage
在障碍开始后记录的任何命令的 dstStage
之前.
(以上特殊情况也应该和那个描述一致。)
因此,话虽这么说,TOP_OF_PIPE
似乎并不是 TRANSFER
的合适替代品。它要么根本无法执行其预期功能,要么效率低下(根据上述描述)。
srcStage==dstStage
没有特殊意义。在这种情况下使用 TRANSFER
意味着 TRANSFER
之前记录的命令阶段在屏障之后记录的 TRANSFER
阶段命令之前完成。