aud*_*i02 7 multithreading device vulkan
在 OpenGL 中,我们每个线程都需要一个设备,以便并行执行多个操作。
在 Vulkan 中,我们可以使用每个线程的队列和命令池来并行执行多个操作 - 但它们都可以从一个逻辑设备创建。
那么,如果我们只有一个物理设备,我们什么时候需要不止一个逻辑设备?
逻辑设备的概念需要区别于物理设备,因为您需要能够注册扩展、功能、队列计数和其他初始化时间构造。您需要能够询问物理设备的功能是什么,然后您需要能够构建使用它们的指定子集的事物。
鉴于分离是有用的......为什么要添加任意限制,说明单个应用程序只能VkDevice
从单个VkPhysicalDevice
.
毕竟,物理设备已经需要能够为多个应用程序提供服务。每个应用程序都需要能够分配 GPU 资源,并且这些资源需要彼此不同。它们都必须能够并行执行互不干扰的命令(除了占用计算资源)。因此,该实现必须能够为许多主机服务,包括操作系统。
因此,实现不能允许单个应用程序具有多个接口到该实现是没有理由的。所以这不是“需要”的问题。已经事实上的实现必须能够做到这一点,所以强迫他们做他们已经必须做的事情几乎不是一种负担。
但是,如果您想要一个可能有用的示例,请考虑一个具有基于 DLL/SO 的插件架构的程序。该程序出于某种目的使用 Vulkan。但其中一个插件可能也想出于某种目的使用 Vulkan。它们都是同一个过程的一部分,但由于它们并不试图渲染到彼此的表面,因此它们不需要相互交谈或知道对方VkDevice
甚至存在。
归档时间: |
|
查看次数: |
1300 次 |
最近记录: |