| /* |
| * Copyright 2019 Google LLC |
| * SPDX-License-Identifier: MIT |
| * |
| * based in part on anv and radv which are: |
| * Copyright © 2015 Intel Corporation |
| * Copyright © 2016 Red Hat. |
| * Copyright © 2016 Bas Nieuwenhuizen |
| */ |
| |
| #ifndef VN_QUEUE_H |
| #define VN_QUEUE_H |
| |
| #include "vn_common.h" |
| |
| #include "vn_feedback.h" |
| |
| struct vn_queue { |
| struct vn_object_base base; |
| |
| struct vn_device *device; |
| uint32_t family; |
| uint32_t index; |
| uint32_t flags; |
| |
| /* wait fence used for vn_QueueWaitIdle */ |
| VkFence wait_fence; |
| |
| /* sync fence used for Android wsi */ |
| VkFence sync_fence; |
| }; |
| VK_DEFINE_HANDLE_CASTS(vn_queue, base.base, VkQueue, VK_OBJECT_TYPE_QUEUE) |
| |
| enum vn_sync_type { |
| /* no payload */ |
| VN_SYNC_TYPE_INVALID, |
| |
| /* device object */ |
| VN_SYNC_TYPE_DEVICE_ONLY, |
| |
| /* payload is an imported sync file */ |
| VN_SYNC_TYPE_IMPORTED_SYNC_FD, |
| }; |
| |
| struct vn_sync_payload { |
| enum vn_sync_type type; |
| |
| /* If type is VN_SYNC_TYPE_IMPORTED_SYNC_FD, fd is a sync file. */ |
| int fd; |
| }; |
| |
| struct vn_fence { |
| struct vn_object_base base; |
| |
| struct vn_sync_payload *payload; |
| |
| struct vn_sync_payload permanent; |
| struct vn_sync_payload temporary; |
| |
| struct { |
| /* non-NULL if VN_PERF_NO_FENCE_FEEDBACK is disabled */ |
| struct vn_feedback_slot *slot; |
| VkCommandBuffer *commands; |
| } feedback; |
| |
| bool is_external; |
| }; |
| VK_DEFINE_NONDISP_HANDLE_CASTS(vn_fence, |
| base.base, |
| VkFence, |
| VK_OBJECT_TYPE_FENCE) |
| |
| struct vn_semaphore { |
| struct vn_object_base base; |
| |
| VkSemaphoreType type; |
| |
| struct vn_sync_payload *payload; |
| |
| struct vn_sync_payload permanent; |
| struct vn_sync_payload temporary; |
| |
| bool is_external; |
| }; |
| VK_DEFINE_NONDISP_HANDLE_CASTS(vn_semaphore, |
| base.base, |
| VkSemaphore, |
| VK_OBJECT_TYPE_SEMAPHORE) |
| |
| struct vn_event { |
| struct vn_object_base base; |
| |
| /* non-NULL if below are satisfied: |
| * - event is created without VK_EVENT_CREATE_DEVICE_ONLY_BIT |
| * - VN_PERF_NO_EVENT_FEEDBACK is disabled |
| */ |
| struct vn_feedback_slot *feedback_slot; |
| }; |
| VK_DEFINE_NONDISP_HANDLE_CASTS(vn_event, |
| base.base, |
| VkEvent, |
| VK_OBJECT_TYPE_EVENT) |
| |
| void |
| vn_fence_signal_wsi(struct vn_device *dev, struct vn_fence *fence); |
| |
| void |
| vn_semaphore_signal_wsi(struct vn_device *dev, struct vn_semaphore *sem); |
| |
| #endif /* VN_QUEUE_H */ |