【问题标题】:Vulkan: ordering image memory barriers in multiple command buffersVulkan:在多个命令缓冲区中排序图像内存屏障
【发布时间】:2016-04-13 14:13:32
【问题描述】:

对于资源转换,您需要知道资源的“之前”和“之后”VkImageLayout(例如,在传递给vkCmdPipelineBarrierVkImageMemoryBarrier 中)。 Vulkan 不保证任何命令缓冲区的执行顺序,除非在 API 文档中明确说明(来自 this 答案)。但是,vkCmdPipelineBarrier 确实明确表示它在调用之前和之后的命令缓冲区中的命令之间创建了依赖关系。因此,当图像在单个命令缓冲区中转换时,可以随时“了解”图像的布局。

但是,vkQueueSumbit 不强制执行命令缓冲区的执行顺序。如果有两个命令缓冲区,每个都有vkCmdPipelineBarrier 调用将相同的图像转换到不同的布局,这两个操作之间是否存在依赖关系,或者在这种情况下需要显式同步?

【问题讨论】:

    标签: c++ synchronization vulkan


    【解决方案1】:

    第 2.2.1 节说:

    命令缓冲区边界,无论是相同或不同批次或提交的主要命令缓冲区之间,还是主要和次要命令缓冲区之间,都不会引入任何隐式排序约束。换句话说,在任何信号量或栅栏操作之间提交命令缓冲区集(可以包括执行辅助命令缓冲区)会播放记录的命令,就好像它们已全部记录到单个主命令缓冲区中一样,除了当前状态是在每个边界上重置。

    在第 6.4 节中,它指出用于同步的命令对包括:

    第一组:管道屏障之前的命令。

    第二组:同一队列中管道屏障之后的命令(可能限制在同一子通道内)。

    注意它说的是“在同一个队列中”,而不是“在同一个命令缓冲区中”。

    这两个语句都清楚地表明管道障碍会影响队列的命令执行。执行依赖不限于单个命令缓冲区的命令。

    【讨论】:

    • 我并没有完全问清楚我在开什么车,但这回答了我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多