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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user