2017-09-12 27 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

因爲它被稱爲「普遍獨特」,那麼它應該是「普遍獨一無二的」。 –