Module: Mesa Branch: main Commit: 7662ddc42686dc2b5cadea0bcc47859766526f13 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7662ddc42686dc2b5cadea0bcc47859766526f13
Author: Mike Blumenkrantz <[email protected]> Date: Wed Aug 30 16:13:33 2023 -0400 zink: add a util for getting cached fd semaphores Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24962> --- src/gallium/drivers/zink/zink_screen.c | 27 +++++++++++++++++++++++++++ src/gallium/drivers/zink/zink_screen.h | 3 +++ 2 files changed, 30 insertions(+) diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c index 6da99be70d5..7991961f29d 100644 --- a/src/gallium/drivers/zink/zink_screen.c +++ b/src/gallium/drivers/zink/zink_screen.c @@ -2172,6 +2172,33 @@ zink_screen_init_semaphore(struct zink_screen *screen) return VKSCR(CreateSemaphore)(screen->dev, &sci, NULL, &screen->sem) == VK_SUCCESS; } +VkSemaphore +zink_create_exportable_semaphore(struct zink_screen *screen) +{ + VkExportSemaphoreCreateInfo eci = { + VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO, + NULL, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT + }; + VkSemaphoreCreateInfo sci = { + VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO, + &eci, + 0 + }; + + VkSemaphore sem = VK_NULL_HANDLE; + if (util_dynarray_contains(&screen->fd_semaphores, VkSemaphore)) { + simple_mtx_lock(&screen->semaphores_lock); + if (util_dynarray_contains(&screen->fd_semaphores, VkSemaphore)) + sem = util_dynarray_pop(&screen->fd_semaphores, VkSemaphore); + simple_mtx_unlock(&screen->semaphores_lock); + } + if (sem) + return sem; + VkResult ret = VKSCR(CreateSemaphore)(screen->dev, &sci, NULL, &sem); + return ret == VK_SUCCESS ? sem : VK_NULL_HANDLE; +} + bool zink_screen_timeline_wait(struct zink_screen *screen, uint64_t batch_id, uint64_t timeout) { diff --git a/src/gallium/drivers/zink/zink_screen.h b/src/gallium/drivers/zink/zink_screen.h index 57b63880e04..9151db43fc1 100644 --- a/src/gallium/drivers/zink/zink_screen.h +++ b/src/gallium/drivers/zink/zink_screen.h @@ -122,6 +122,9 @@ zink_screen_lock_context(struct zink_screen *screen); void zink_screen_unlock_context(struct zink_screen *screen); +VkSemaphore +zink_create_exportable_semaphore(struct zink_screen *screen); + VkFormat zink_get_format(struct zink_screen *screen, enum pipe_format format);
