Vulkan-我们什么时候需要使用多个逻辑设备(只有一个物理设备时)?

时间:2019-06-03 20:21:44

标签: multithreading device vulkan

在OpenGL中,每个线程需要一个设备,以便并行执行多个操作。

在Vulkan中,我们可以为每个线程使用队列和命令池,以并行执行多个操作-但是它们都可以从一个逻辑设备创建。

那么,如果我们只有一个物理设备,那么何时需要一个以上的逻辑设备?

1 个答案:

答案 0 :(得分:3)

逻辑设备的概念需要与物理设备不同,因为您需要能够注册扩展,功能,队列计数和其他初始化时间构造。您需要询问物理设备的功能是什么,然后才能构造使用它们的指定子集的事物。

考虑到分离是有用的...为什么要添加一个任意限制,即单个应用程序只能从单个VkDevice创建单个VkPhysicalDevice

毕竟,物理设备已经需要能够服务多个应用程序。每个应用程序都必须能够分配GPU资源,并且这些资源必须彼此不同。它们都必须能够并行执行彼此不干扰的命令(除了占用计算资源之外)。因此,该实现必须已经能够服务于许多主机,包括OS。

因此,没有理由为什么一个实现不允许单个应用程序具有该实现的多个接口。因此,这不是“需要”的问题。实际上已经必须要实现的实现,因此强迫他们去做已经要做的事情几乎不是负担。

但是,如果您想举一个可能有用的示例,请考虑一个具有基于DLL / SO的插件体系结构的程序。该程序出于某些目的使用Vulkan。但是其中一个插件可能想要出于某些目的使用Vulkan。它们都是同一过程的一部分,但是由于它们不试图渲染到彼此的表面中,因此无需彼此交谈或知道另一个VkDevice甚至存在。