我的渲染器有一个 Vulkan 后端,它使用多个命令缓冲区 - 一些用于上传,每个光栅通道一个,每个计算通道一个,等等。
我想更多地利用 Vulkan 的
SYNCHRONIZATION_VALIDATION
扩展。来自synchronization_usage 文档的当前功能集部分:
对相同命令缓冲区中的命令的内存使用情况进行危险检测。
因此,我更改了渲染器和引擎,以允许我(可选地,在调试期间)从单个线程按顺序将所有命令发送到单个命令缓冲区中。希望我可以让该层以这种方式检测更多问题。
但是,现在我正在检测我认为“隐式同步保证”涵盖的问题或当我有单独的命令缓冲区时遇到的类似问题。
是否有任何命令(例如特定的
vkCmdPipelineBarrier
或vkCmdPipelineBarrier2KHR
)或同步原语完全匹配执行/内存/可见性保证我自然会在单个队列提交中从单独的命令缓冲区获得,或者仅稍微超过他们?我可以在之前有 vkEndCommandBuffer
和 vkBeginCommandBuffer
的地方添加一些东西吗?
或者更一般地说,是否有更好的策略来提高
SYNCHRONIZATION_VALIDATION
发现问题的能力?
据我所知,没有为命令缓冲区的边界提供特别的特殊同步行为。提交命令得到一些特殊的边界处理(主要与主机内存操作有关),并且提交命令中的批次可能相对于其他批次具有一些隐式同步。
但我不知道同一批 CB 之间内发生任何形式的隐式同步。