diff options
author | Yiwei Zhang <zzyiwei@chromium.org> | 2022-01-21 21:53:16 +0000 |
---|---|---|
committer | Marge Bot <emma+marge@anholt.net> | 2022-01-28 19:15:52 +0000 |
commit | 5ba9309c29622b9778f8a015c0b6cc94c6dd07b4 (patch) | |
tree | 0be692fded151fb283a5fbbdf8a7d7a88bdd3cf0 | |
parent | 088ea93a59e538b1ebce11f74d15ea0cf4b6beca (diff) |
venus: track whether a fence is external
Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org>
Reviewed-by: Chia-I Wu <olvaffe@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14657>
-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, |