Mesa (main): venus: track whether a fence is external

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Jan 28 19:25:48 UTC 2022


Module: Mesa
Branch: main
Commit: 5ba9309c29622b9778f8a015c0b6cc94c6dd07b4
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=5ba9309c29622b9778f8a015c0b6cc94c6dd07b4

Author: Yiwei Zhang <zzyiwei at chromium.org>
Date:   Fri Jan 21 21:53:16 2022 +0000

venus: track whether a fence is external

Signed-off-by: Yiwei Zhang <zzyiwei at chromium.org>
Reviewed-by: Chia-I Wu <olvaffe at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14657>

---

 src/virtio/vulkan/vn_queue.c | 19 ++++++++++++-------
 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,



More information about the mesa-commit mailing list