Vulkan:序列化物理设备
Vulkan: serializing physical devices
假设我有更多支持 Vulkan 的物理设备(专用 + 集成 GPU,或 2 个专用,或其他可能性)。用户可以在选项屏幕中选择要使用的设备。我需要能够将他的选择保存在磁盘上。
我可以使用哪个字段来唯一标识不同执行中的物理设备?
vendorID
+ deviceID
是不够的:我可以连接 2 个相同的 GPU
deviceName
由于同样的原因 不够
deviceLUID
不保证存在,可能和deviceUUID
(下) 有同样的问题
deviceUUID
看起来是正确的选择,但规范说:
While VkPhysicalDeviceIDPropertiesKHR::deviceUUID
is specified to remain consistent across driver versions and system reboots, it is not intended to be usable as a serializable persistent identifier for a device. It may change when a device is physically added to, removed from, or moved to a different connector in a system while that system is powered down.
那么...我应该使用什么?
deviceUUID
是最好的。
这样想。如果 deviceUUID
匹配缓存副本,那么您确定 这是同一台设备。如果缓存的 ID 与 任何 现有设备不匹配,那么要么该硬件已被删除,要么发生了一些激进的事情。无论哪种方式,您都需要再次弹出该对话框,让用户决定要做什么。
假设我有更多支持 Vulkan 的物理设备(专用 + 集成 GPU,或 2 个专用,或其他可能性)。用户可以在选项屏幕中选择要使用的设备。我需要能够将他的选择保存在磁盘上。
我可以使用哪个字段来唯一标识不同执行中的物理设备?
vendorID
+deviceID
是不够的:我可以连接 2 个相同的 GPUdeviceName
由于同样的原因 不够
deviceLUID
不保证存在,可能和deviceUUID
(下) 有同样的问题
deviceUUID
看起来是正确的选择,但规范说:While
VkPhysicalDeviceIDPropertiesKHR::deviceUUID
is specified to remain consistent across driver versions and system reboots, it is not intended to be usable as a serializable persistent identifier for a device. It may change when a device is physically added to, removed from, or moved to a different connector in a system while that system is powered down.
那么...我应该使用什么?
deviceUUID
是最好的。
这样想。如果 deviceUUID
匹配缓存副本,那么您确定 这是同一台设备。如果缓存的 ID 与 任何 现有设备不匹配,那么要么该硬件已被删除,要么发生了一些激进的事情。无论哪种方式,您都需要再次弹出该对话框,让用户决定要做什么。