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

aud*_*i02 7 multithreading device vulkan

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

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

那么,如果我们只有一个物理设备,我们什么时候需要不止一个逻辑设备?

Nic*_*las 7

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

鉴于分离是有用的......为什么要添加任意限制,说明单个应用程序只能VkDevice从单个VkPhysicalDevice.

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

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

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

  • 也许OP被编辑了,但从英语的角度来看,这个答案让我感到困惑。OP 讨论了何时需要**多个**逻辑设备。这个答案一开始就好像你只能拥有 **一个** 逻辑设备,然后讨论为什么这个限制不是出于需要,[尽管这个限制不存在](https://www.khronos.org /registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkDevice)。这似乎根本没有解决OP的问题。然后好像在讲这个*限制*有什么用?您能澄清一下这个答案中的语言吗? (2认同)