summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYiwei Zhang <zzyiwei@chromium.org>2022-01-21 21:53:16 +0000
committerMarge Bot <emma+marge@anholt.net>2022-01-28 19:15:52 +0000
commit5ba9309c29622b9778f8a015c0b6cc94c6dd07b4 (patch)
tree0be692fded151fb283a5fbbdf8a7d7a88bdd3cf0
parent088ea93a59e538b1ebce11f74d15ea0cf4b6beca (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.c19
-rw-r--r--src/virtio/vulkan/vn_queue.h2
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,