2017-09-12 31 views
2

假设我有更多支持Vulkan(专用+集成GPU,或2个专用或其他可能性)的物理设备。用户可以选择要在选项屏幕中使用的设备。我需要能够坚持他的选择在磁盘上。Vulkan:序列化物理设备

我可以使用哪个字段来唯一标识跨越不同执行的物理设备?

  • vendorID + deviceID是不够的:我可以有2分连接
  • 相同的GPU
  • deviceName是不够的,由于同样的原因
  • deviceLUID不能保证存在,并且可以具有相同的问题,因为deviceUUID (如下图)
  • deviceUUID貌似正确的选择,但规范说:

    虽然VkPhysicalDeviceIDPropertiesKHR::deviceUUID被指定为在驱动程序版本和系统重新启动之间保持一致,但不打算用作设备的可序列化持久标识符。当系统断电时,设备物理地添加到系统中,从系统中移除或移动到系统中的其他连接器时,它可能会发生变化。

所以......我应该用什么?

回答

5

deviceUUID是最好的你会得到。

想这样。如果deviceUUID匹配一个缓存副本,那么你是某些它是同一个设备。如果缓存的ID不匹配任何现有的设备,那么该硬件被删除或发生了一些激进的事情。无论哪种方式,您需要再次弹出该对话框让用户决定要做什么。

+0

所以你说的是一个设备并没有明确地绑定到一个uuid(正如我从规范中引用的那样),而是一个uuid明确地绑定到一个设备上。也就是说,如果我改变配置,一些gpus可能会得到一个新的uuid,但其中一个的旧uuid不会被另一个uuid占用。在这种情况下,'deviceUUID'就够了。 – lodo

+0

因为它被称为“普遍独特”,那么它应该是“普遍独一无二的”。 –