zink: factor out fence creation function

Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36007>
This commit is contained in:
Karol Herbst 2025-07-07 13:27:26 +02:00 committed by Marge Bot
parent 64fb3c81af
commit 129f22140c

View file

@ -275,6 +275,35 @@ zink_fence_server_sync(struct pipe_context *pctx, struct pipe_fence_handle *pfen
util_dynarray_append(&ctx->bs->fences, struct zink_tc_fence*, mfence);
}
static struct zink_tc_fence*
zink_semaphore_fence_create(struct pipe_screen *pscreen, VkSemaphoreType sema_type)
{
struct zink_screen *screen = zink_screen(pscreen);
VkResult result;
struct zink_tc_fence *mfence = zink_create_tc_fence();
if (!mfence)
return NULL;
const VkSemaphoreTypeCreateInfo tci = {
VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO,
NULL,
sema_type,
};
const VkSemaphoreCreateInfo sci = {
.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO,
&tci
};
result = VKSCR(CreateSemaphore)(screen->dev, &sci, NULL, &mfence->sem);
if (result != VK_SUCCESS) {
mesa_loge("ZINK: vkCreateSemaphore failed (%s)", vk_Result_to_str(result));
FREE(mfence);
return NULL;
}
return mfence;
}
void
zink_create_fence_fd(struct pipe_context *pctx, struct pipe_fence_handle **pfence, int fd, enum pipe_fd_type type)
{
@ -287,26 +316,11 @@ zink_create_fence_fd(struct pipe_context *pctx, struct pipe_fence_handle **pfenc
};
assert(fd >= 0);
*pfence = NULL;
struct zink_tc_fence *mfence = zink_create_tc_fence();
struct zink_tc_fence *mfence = zink_semaphore_fence_create(pctx->screen, semtype[type]);
if (!mfence)
goto fail_tc_fence_create;
const VkSemaphoreTypeCreateInfo tci = {
VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO,
NULL,
semtype[type],
};
const VkSemaphoreCreateInfo sci = {
.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO,
&tci
};
result = VKSCR(CreateSemaphore)(screen->dev, &sci, NULL, &mfence->sem);
if (result != VK_SUCCESS) {
mesa_loge("ZINK: vkCreateSemaphore failed (%s)", vk_Result_to_str(result));
goto fail_sem_create;
}
return;
int dup_fd = os_dupfd_cloexec(fd);
if (dup_fd < 0)
@ -346,10 +360,6 @@ fail_sem_import:
close(dup_fd);
fail_fd_dup:
VKSCR(DestroySemaphore)(screen->dev, mfence->sem, NULL);
fail_sem_create:
FREE(mfence);
fail_tc_fence_create:
*pfence = NULL;
}
#ifdef _WIN32