diff options
author | Philip Langdale <philipl@overt.org> | 2018-10-19 21:48:15 -0700 |
---|---|---|
committer | sfan5 <sfan5@live.de> | 2018-10-22 21:35:48 +0200 |
commit | 621389134afd3026b7e3508dba070442c4eeefa0 (patch) | |
tree | e4ff5e5aa1e95032ba30dbf6243a52ef81200608 /video | |
parent | a782197d216b2343abe04045b9bb3076864aca80 (diff) |
vo_gpu: vulkan: Add a function to get the device UUID
We need this to do device matching for the cuda interop.
Diffstat (limited to 'video')
-rw-r--r-- | video/out/vulkan/utils.c | 22 | ||||
-rw-r--r-- | video/out/vulkan/utils.h | 3 |
2 files changed, 25 insertions, 0 deletions
diff --git a/video/out/vulkan/utils.c b/video/out/vulkan/utils.c index 4413fe70b1..1ad55d1275 100644 --- a/video/out/vulkan/utils.c +++ b/video/out/vulkan/utils.c @@ -192,6 +192,7 @@ bool mpvk_instance_init(struct mpvk_ctx *vk, struct mp_log *log, // Enable whatever extensions were compiled in. const char *extensions[] = { + VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, VK_KHR_SURFACE_EXTENSION_NAME, surf_ext_name, @@ -328,6 +329,27 @@ error: return false; } +bool mpvk_get_phys_device_uuid(struct mpvk_ctx *vk, uint8_t uuid_out[VK_UUID_SIZE]) +{ + assert(vk->physd); + + VkPhysicalDeviceIDProperties idprops = { + .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES, + }; + + VkPhysicalDeviceProperties2 props = { + .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2, + .pNext = &idprops, + }; + + VK_LOAD_PFN(vkGetPhysicalDeviceProperties2KHR); + pfn_vkGetPhysicalDeviceProperties2KHR(vk->physd, &props); + + memcpy(uuid_out, idprops.deviceUUID, VK_UUID_SIZE); + + return true; +} + bool mpvk_pick_surface_format(struct mpvk_ctx *vk) { assert(vk->physd); diff --git a/video/out/vulkan/utils.h b/video/out/vulkan/utils.h index 97d1c24489..9af59e4b50 100644 --- a/video/out/vulkan/utils.h +++ b/video/out/vulkan/utils.h @@ -56,6 +56,9 @@ bool mpvk_surface_init(struct vo *vo, struct mpvk_ctx *vk); // sw: also allow software/virtual devices bool mpvk_find_phys_device(struct mpvk_ctx *vk, const char *name, bool sw); +// Get the UUID for the selected physical device +bool mpvk_get_phys_device_uuid(struct mpvk_ctx *vk, uint8_t uuid_out[VK_UUID_SIZE]); + // Pick a suitable surface format that's supported by this physical device. bool mpvk_pick_surface_format(struct mpvk_ctx *vk); |