是否有一个 Vulkan 命令相当于同一队列提交中单独命令缓冲区的同步保证?

问题描述 投票:0回答:1

我的渲染器有一个 Vulkan 后端,它使用多个命令缓冲区 - 一些用于上传,每个光栅通道一个,每个计算通道一个,等等。

我想更多地利用 Vulkan 的

SYNCHRONIZATION_VALIDATION
扩展。来自synchronization_usage 文档的当前功能集部分

相同命令缓冲区中的命令的内存使用情况进行危险检测。

因此,我更改了渲染器和引擎,以允许我(可选地,在调试期间)从单个线程按顺序将所有命令发送到单个命令缓冲区中。希望我可以让该层以这种方式检测更多问题。

但是,现在我正在检测我认为“隐式同步保证”涵盖的问题或当我有单独的命令缓冲区时遇到的类似问题。

是否有任何命令(例如特定的

vkCmdPipelineBarrier
vkCmdPipelineBarrier2KHR
)或同步原语完全匹配执行/内存/可见性保证我自然会在单个队列提交中从单独的命令缓冲区获得,或者仅稍微超过他们?我可以在之前有
vkEndCommandBuffer
vkBeginCommandBuffer
的地方添加一些东西吗?

或者更一般地说,是否有更好的策略来提高

SYNCHRONIZATION_VALIDATION
发现问题的能力?

graphics synchronization vulkan
1个回答
0
投票

据我所知,没有为命令缓冲区的边界提供特别的特殊同步行为。提交命令得到一些特殊的边界处理(主要与主机内存操作有关),并且提交命令中的批次可能相对于其他批次具有一些隐式同步。

但我不知道同一批 CB 之间发生任何形式的隐式同步。

© www.soinside.com 2019 - 2024. All rights reserved.