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>
This commit is contained in:
parent
088ea93a59
commit
5ba9309c29
|
@ -479,13 +479,6 @@ vn_CreateFence(VkDevice device,
|
||||||
const VkAllocationCallbacks *alloc =
|
const VkAllocationCallbacks *alloc =
|
||||||
pAllocator ? pAllocator : &dev->base.base.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,
|
struct vn_fence *fence = vk_zalloc(alloc, sizeof(*fence), VN_DEFAULT_ALIGN,
|
||||||
VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
|
VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
|
||||||
if (!fence)
|
if (!fence)
|
||||||
|
@ -493,6 +486,17 @@ vn_CreateFence(VkDevice device,
|
||||||
|
|
||||||
vn_object_base_init(&fence->base, VK_OBJECT_TYPE_FENCE, &dev->base);
|
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(
|
VkResult result = vn_fence_init_payloads(
|
||||||
dev, fence, pCreateInfo->flags & VK_FENCE_CREATE_SIGNALED_BIT, alloc);
|
dev, fence, pCreateInfo->flags & VK_FENCE_CREATE_SIGNALED_BIT, alloc);
|
||||||
if (result != VK_SUCCESS) {
|
if (result != VK_SUCCESS) {
|
||||||
|
@ -711,6 +715,7 @@ vn_ImportFenceFdKHR(VkDevice device,
|
||||||
VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT;
|
VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT;
|
||||||
const int fd = pImportFenceFdInfo->fd;
|
const int fd = pImportFenceFdInfo->fd;
|
||||||
|
|
||||||
|
/* TODO update fence->is_external after we support opaque fd import */
|
||||||
assert(dev->instance->experimental.globalFencing);
|
assert(dev->instance->experimental.globalFencing);
|
||||||
assert(sync_file);
|
assert(sync_file);
|
||||||
if (fd >= 0) {
|
if (fd >= 0) {
|
||||||
|
|
|
@ -47,6 +47,8 @@ struct vn_fence {
|
||||||
|
|
||||||
struct vn_sync_payload permanent;
|
struct vn_sync_payload permanent;
|
||||||
struct vn_sync_payload temporary;
|
struct vn_sync_payload temporary;
|
||||||
|
|
||||||
|
bool is_external;
|
||||||
};
|
};
|
||||||
VK_DEFINE_NONDISP_HANDLE_CASTS(vn_fence,
|
VK_DEFINE_NONDISP_HANDLE_CASTS(vn_fence,
|
||||||
base.base,
|
base.base,
|
||||||
|
|
Loading…
Reference in New Issue