Vulkan:vkWaitForFences 同步对 VkDevice 的访问

Vulkan: vkWaitForFences syncrhonizing access to VkDevice

调用vkWaitForFences时是否需要同步访问设备句柄?该规范没有提到对此的任何需求,但也没有提到它是自由线程的。在某些地方,即大多数 vkCreateXXX,将此作为要求提及。鉴于规范的明确性质,我希望措辞更精确(而不是 none 在这种情况下)。

我怀疑答案是 "no",但我无法相信我对这个 API 或它背后的实现的直觉。

如果有必要保护对此函数的调用,那将很奇怪(实际上没用)。

规范使用术语 "external synchronization" 和 "host synchronization" 来讨论 objects/parameters 应用程序必须确保非并发使用。这些规则在 Section 2.5 "Threading Behavior" 和大多数命令之后的 "Host Synchronization" 块中进行了描述。任何未列出的都可以同时使用。

我不确定为什么您认为 vkCreate* 的设备参数应该是外部同步的,我在规范中找不到支持这一点的内容。设备对象几乎从不进行外部同步。

vkWaitForFences

None 参数被列为主机同步。但是传递给 vkQueueSubmitvkResetFences 的围栏是 主机同步的,所以你不能在有另一个调用时将围栏传递给其中一个调用等待栅栏的线程。但是你可以有两个线程在同一个栅栏上等待,或者一个线程调用 vkGetFenceStatus 而另一个线程正在等待它。