return 值 vkEnumeratePhysicalDevices 在不同的 VkInstances 之间是否一致?
Are the return values vkEnumeratePhysicalDevices consistent between different VkInstances?
情况:
我有一个函数可以确定是否有 Vulkan 支持的设备,如果找到,return 就会确定该设备。如果未找到此类设备,它将 return 空值并使用旧代码路径。
问题在于,由于需要在应用程序使用 Vulkan 代码路径之前调用此函数,因此它必须创建自己的临时文件VkInstance
。函数调用vkEnumeratePhysicalDevices
得到VkPhysicalDevice
,用vkGetPhysicalDeviceProperties
判断是否有合适的设备
VkPhysicalDevice
本身不能被 return 编辑,因为它绑定到 VkInstance
(它是临时的,将在函数 returns 之前被销毁),所以相反,函数 return 是数组中设备的索引,假设 vkEnumeratePhysicalDevices
在不同的 VkInstance
上第二次调用时将 return 相同的数组。
问题:
当使用两个不同的 VkInstances
调用时,vkEnumeratePhysicalDevices
是否保证 return 相同的值?这是假设同一台机器和同一应用程序实例。
规范不提供此类保证。所以你的想法根本不能保证有效。
您最好保留 VkInstance
,而不是仅仅为了设备枚举而创建一个。因此,您不仅存储索引,还存储 VkPhysicalDevice
和实例。如果它们为空,则 Vulkan 不可用。
尝试使用 pipelineCacheUUID
也不起作用,因为规范不要求它唯一标识设备:
used to identify a compatible device and driver combination to use when serializing and de-serializing pipeline state.
不能保证它不会在实例之间发生变化。但是,如果您有权访问扩展 VK_KHR_get_physical_device_properties2 和 VK_KHX_external_memory_capabilities,则可以从设备查询 VkPhysicalDeviceIDPropertiesKHX
。其中包括 deviceUUID
明确要求唯一标识特定设备,"across API and driver boundaries"。
情况:
我有一个函数可以确定是否有 Vulkan 支持的设备,如果找到,return 就会确定该设备。如果未找到此类设备,它将 return 空值并使用旧代码路径。
问题在于,由于需要在应用程序使用 Vulkan 代码路径之前调用此函数,因此它必须创建自己的临时文件VkInstance
。函数调用vkEnumeratePhysicalDevices
得到VkPhysicalDevice
,用vkGetPhysicalDeviceProperties
判断是否有合适的设备
VkPhysicalDevice
本身不能被 return 编辑,因为它绑定到 VkInstance
(它是临时的,将在函数 returns 之前被销毁),所以相反,函数 return 是数组中设备的索引,假设 vkEnumeratePhysicalDevices
在不同的 VkInstance
上第二次调用时将 return 相同的数组。
问题:
当使用两个不同的 VkInstances
调用时,vkEnumeratePhysicalDevices
是否保证 return 相同的值?这是假设同一台机器和同一应用程序实例。
规范不提供此类保证。所以你的想法根本不能保证有效。
您最好保留 VkInstance
,而不是仅仅为了设备枚举而创建一个。因此,您不仅存储索引,还存储 VkPhysicalDevice
和实例。如果它们为空,则 Vulkan 不可用。
尝试使用 pipelineCacheUUID
也不起作用,因为规范不要求它唯一标识设备:
used to identify a compatible device and driver combination to use when serializing and de-serializing pipeline state.
不能保证它不会在实例之间发生变化。但是,如果您有权访问扩展 VK_KHR_get_physical_device_properties2 和 VK_KHX_external_memory_capabilities,则可以从设备查询 VkPhysicalDeviceIDPropertiesKHX
。其中包括 deviceUUID
明确要求唯一标识特定设备,"across API and driver boundaries"。