代码之家  ›  专栏  ›  技术社区  ›  lvella

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

  •  0
  • lvella  · 技术社区  · 6 年前

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

    规范中哪里有规定?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Jherico    6 年前

    在说明书中我们可以看到:

    Vulkan旨在在多个主机线程上使用时提供可伸缩的性能。所有命令都支持从多个线程并发调用,但某些参数或参数的组件定义为 外部同步 . 这意味着打电话的人 必须 确保在给定的时间内使用此类参数的线程不超过一个。

    然后有一个不同Vulkan函数的参数列表,其中的参数必须进行外部同步(这意味着不能从多个线程同时访问它们)。如果是 VkDevice 对象,我们只能找到 vkDestroyDevice() . 所以所有其他的用法 VkDevice公司 对象可以在多个线程上发生。

    几乎没有 vkCreate...() 列表中的函数(只有3个与swapchain相关的函数)。这意味着您可以同时从多个线程创建对象。

        2
  •  2
  •   Nicol Bolas    6 年前

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

    注意,各种函数的有效用法部分可能有额外的并发需求。