diff options
-rw-r--r-- | src/virtio/vulkan/vn_queue.c | 19 | ||||
-rw-r--r-- | src/virtio/vulkan/vn_queue.h | 2 |
2 files changed, 14 insertions, 7 deletions
diff --git a/src/virtio/vulkan/vn_queue.c b/src/virtio/vulkan/vn_queue.c index 2f9930f1cbc..d381d7231b5 100644 --- a/src/virtio/vulkan/vn_queue.c +++ b/src/virtio/vulkan/vn_queue.c @@ -479,13 +479,6 @@ vn_CreateFence(VkDevice device, const VkAllocationCallbacks *alloc = pAllocator ? pAllocator : &dev->base.base.alloc; - VkFenceCreateInfo local_create_info; - if (vk_find_struct_const(pCreateInfo->pNext, EXPORT_FENCE_CREATE_INFO)) { - local_create_info = *pCreateInfo; - local_create_info.pNext = NULL; - pCreateInfo = &local_create_info; - } - struct vn_fence *fence = vk_zalloc(alloc, sizeof(*fence), VN_DEFAULT_ALIGN, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); if (!fence) @@ -493,6 +486,17 @@ vn_CreateFence(VkDevice device, vn_object_base_init(&fence->base, VK_OBJECT_TYPE_FENCE, &dev->base); + const struct VkExportFenceCreateInfo *export_info = + vk_find_struct_const(pCreateInfo->pNext, EXPORT_FENCE_CREATE_INFO); + VkFenceCreateInfo local_create_info; + if (export_info) { + local_create_info = *pCreateInfo; + local_create_info.pNext = NULL; + pCreateInfo = &local_create_info; + + fence->is_external = !!export_info->handleTypes; + } + VkResult result = vn_fence_init_payloads( dev, fence, pCreateInfo->flags & VK_FENCE_CREATE_SIGNALED_BIT, alloc); if (result != VK_SUCCESS) { @@ -711,6 +715,7 @@ vn_ImportFenceFdKHR(VkDevice device, VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT; const int fd = pImportFenceFdInfo->fd; + /* TODO update fence->is_external after we support opaque fd import */ assert(dev->instance->experimental.globalFencing); assert(sync_file); if (fd >= 0) { diff --git a/src/virtio/vulkan/vn_queue.h b/src/virtio/vulkan/vn_queue.h index 74e22817fb2..c692a434ea0 100644 --- a/src/virtio/vulkan/vn_queue.h +++ b/src/virtio/vulkan/vn_queue.h @@ -47,6 +47,8 @@ struct vn_fence { struct vn_sync_payload permanent; struct vn_sync_payload temporary; + + bool is_external; }; VK_DEFINE_NONDISP_HANDLE_CASTS(vn_fence, base.base, |