我可以同时使用多个线程中的VkDevice吗?

时间:2018-07-25 22:29:27

标签: vulkan

特别是,我可以同时创建管道,分配设备内存以及从同一VkDevice创建图像和缓冲区吗?

在规格中指定了什么?

2 个答案:

答案 0 :(得分:2)

Vulkan规范中的形式为“对X的主机访问必须在外部同步”,这意味着您不能在调用具有此要求的函数的同时导致对X的访问。如果函数的规范说关于特定参数,则可以从多个线程访问该参数。当然,只要可以同时访问它的所有功能都没有此规范。

请注意,各种功能的“有效使用情况”部分可能会有其他并发要求。

答案 1 :(得分:2)

在规范中,我们可以阅读:

  

Vulkan旨在在多个主机线程上使用时提供可扩展的性能。所有命令都支持从多个线程并发调用,但是某些参数或参数组件被定义为外部同步。这意味着调用方必须保证在给定的时间使用该参数的线程不超过一个。

然后是不同Vulkan函数的参数列表,在这些参数中必须对它们进行外部同步(这意味着它们不能同时从多个线程中访问)。在state对象的情况下,我们只能发现VkDevice。因此,vkDestroyDevice()对象的所有其他用法都可以在多个线程上发生。

并且该列表中实际上没有VkDevice函数(只有3个与交换链相关的函数)。这意味着您可以同时从多个线程创建对象。