Mue*_*ito 8 c++ synchronization vulkan
对于资源转换,您需要知道资源的"之前"和"之后" VkImageLayout(例如,VkImageMemoryBarrier传递给vkCmdPipelineBarrier).Vulkan不保证任何命令缓冲区的执行顺序,除非在API文档中明确说明(从这个答案).但是,vkCmdPipelineBarrier明确地说它在调用之前和之后在命令缓冲区中创建命令之间的依赖关系.因此,当在单个命令缓冲区内转换图像时,可以在任何时刻"知道"图像的布局.
但是,vkQueueSumbit不强制执行命令缓冲区的执行顺序.如果有两个命令缓冲区,每个命令缓冲区都vkCmdPipelineBarrier调用将相同的图像转换为不同的布局,那么这两个操作之间是否存在依赖关系,还是在这种情况下需要显式同步?
第2.2.1节说:
在相同或不同批次或提交的主命令缓冲区之间以及主命令缓冲区和辅助命令缓冲区之间的命令缓冲区边界不会引入任何隐式排序约束.换句话说,在任何信号量或围栏操作之间提交命令缓冲区集(可以包括执行辅助命令缓冲区)会回放记录的命令,就好像它们都被记录到单个主命令缓冲区中一样,除了当前状态是重置每个边界.
在6.4节中,它指出用于同步的命令对包括:
第一组:管道障碍之前的命令.
第二组:在同一队列中的管道障碍之后的命令(可能限于同一子通道内).
请注意,它表示"在同一队列中",而不是"在同一命令缓冲区中".
这两个语句都清楚地表明管道障碍会影响队列的命令执行.执行依赖性不仅限于单个命令缓冲区的命令.
| 归档时间: |
|
| 查看次数: |
910 次 |
| 最近记录: |