vk_free2(&instance->alloc, pAllocator, surface);
}
+void
+wsi_device_setup_syncobj_fd(struct wsi_device *wsi_device,
+ int fd)
+{
+#ifdef VK_USE_PLATFORM_DISPLAY_KHR
+ wsi_display_setup_syncobj_fd(wsi_device, fd);
+#endif
+}
+
VkResult
wsi_swapchain_init(const struct wsi_device *wsi,
struct wsi_swapchain *chain,
wsi_device_finish(struct wsi_device *wsi,
const VkAllocationCallbacks *alloc);
+/* Setup file descriptor to be used with imported sync_fd's in wsi fences. */
+void
+wsi_device_setup_syncobj_fd(struct wsi_device *wsi_device,
+ int fd);
+
#define ICD_DEFINE_NONDISP_HANDLE_CASTS(__VkIcdType, __VkType) \
\
static inline __VkIcdType * \
int fd;
+ /* Used with syncobj imported from driver side. */
+ int syncobj_fd;
+
pthread_mutex_t wait_mutex;
pthread_cond_t wait_cond;
pthread_t wait_thread;
(struct wsi_display *) fence->base.wsi_device->wsi[VK_ICD_WSI_PLATFORM_DISPLAY];
if (fence->syncobj) {
- (void) drmSyncobjSignal(wsi->fd, &fence->syncobj, 1);
- (void) drmSyncobjDestroy(wsi->fd, fence->syncobj);
+ (void) drmSyncobjSignal(wsi->syncobj_fd, &fence->syncobj, 1);
+ (void) drmSyncobjDestroy(wsi->syncobj_fd, fence->syncobj);
}
fence->event_received = true;
return NULL;
if (sync_fd >= 0) {
- int ret = drmSyncobjFDToHandle(wsi->fd, sync_fd, &fence->syncobj);
+ int ret = drmSyncobjFDToHandle(wsi->syncobj_fd, sync_fd, &fence->syncobj);
+
if (ret) {
vk_free2(wsi->alloc, allocator, fence);
return NULL;
if (wsi->fd != -1 && !local_drmIsMaster(wsi->fd))
wsi->fd = -1;
+ wsi->syncobj_fd = wsi->fd;
+
wsi->alloc = alloc;
list_inithead(&wsi->connectors);
fence->base.destroy(&fence->base);
} else if (fence != NULL) {
if (fence->syncobj)
- drmSyncobjDestroy(wsi->fd, fence->syncobj);
+ drmSyncobjDestroy(wsi->syncobj_fd, fence->syncobj);
vk_free2(wsi->alloc, allocator, fence);
}
unreachable("Not enough common infrastructure to implement this yet");
}
+void
+wsi_display_setup_syncobj_fd(struct wsi_device *wsi_device,
+ int fd)
+{
+ struct wsi_display *wsi =
+ (struct wsi_display *) wsi_device->wsi[VK_ICD_WSI_PLATFORM_DISPLAY];
+ wsi->syncobj_fd = fd;
+}
+
VKAPI_ATTR VkResult VKAPI_CALL
wsi_GetSwapchainCounterEXT(VkDevice _device,
VkSwapchainKHR _swapchain,
wsi_display_finish_wsi(struct wsi_device *wsi_device,
const VkAllocationCallbacks *alloc);
+void
+wsi_display_setup_syncobj_fd(struct wsi_device *wsi_device,
+ int fd);
+
VK_DEFINE_NONDISP_HANDLE_CASTS(wsi_swapchain, base, VkSwapchainKHR,
VK_OBJECT_TYPE_SWAPCHAIN_KHR)