mirror of https://git.ffmpeg.org/ffmpeg.git
vulkan: minor indent fix, add support for synchronous submission/waiting
This commit is contained in:
parent
d386988c39
commit
f3fb1b50bb
|
@ -564,7 +564,7 @@ int ff_vk_create_exec_ctx(FFVulkanContext *s, FFVkExecContext **ctx,
|
|||
|
||||
/* Create command pool */
|
||||
ret = vk->CreateCommandPool(s->hwctx->act_dev, &cqueue_create,
|
||||
s->hwctx->alloc, &e->pool);
|
||||
s->hwctx->alloc, &e->pool);
|
||||
if (ret != VK_SUCCESS) {
|
||||
av_log(s, AV_LOG_ERROR, "Command pool creation failure: %s\n",
|
||||
ff_vk_ret2str(ret));
|
||||
|
@ -631,11 +631,13 @@ int ff_vk_start_exec_recording(FFVulkanContext *s, FFVkExecContext *e)
|
|||
ff_vk_ret2str(ret));
|
||||
return AVERROR_EXTERNAL;
|
||||
}
|
||||
} else {
|
||||
} else if (!q->synchronous) {
|
||||
vk->WaitForFences(s->hwctx->act_dev, 1, &q->fence, VK_TRUE, UINT64_MAX);
|
||||
vk->ResetFences(s->hwctx->act_dev, 1, &q->fence);
|
||||
}
|
||||
|
||||
q->synchronous = 0;
|
||||
|
||||
/* Discard queue dependencies */
|
||||
ff_vk_discard_exec_deps(e);
|
||||
|
||||
|
@ -788,9 +790,23 @@ int ff_vk_submit_exec_queue(FFVulkanContext *s, FFVkExecContext *e)
|
|||
for (int i = 0; i < e->sem_sig_cnt; i++)
|
||||
*e->sem_sig_val_dst[i] += 1;
|
||||
|
||||
q->submitted = 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ff_vk_wait_on_exec_ctx(FFVulkanContext *s, FFVkExecContext *e)
|
||||
{
|
||||
FFVulkanFunctions *vk = &s->vkfn;
|
||||
FFVkQueueCtx *q = &e->queues[e->qf->cur_queue];
|
||||
if (!q->submitted)
|
||||
return;
|
||||
|
||||
vk->WaitForFences(s->hwctx->act_dev, 1, &q->fence, VK_TRUE, UINT64_MAX);
|
||||
vk->ResetFences(s->hwctx->act_dev, 1, &q->fence);
|
||||
q->synchronous = 1;
|
||||
}
|
||||
|
||||
int ff_vk_add_dep_exec_ctx(FFVulkanContext *s, FFVkExecContext *e,
|
||||
AVBufferRef **deps, int nb_deps)
|
||||
{
|
||||
|
|
|
@ -147,6 +147,9 @@ typedef struct FFVkQueueCtx {
|
|||
VkFence fence;
|
||||
VkQueue queue;
|
||||
|
||||
int synchronous;
|
||||
int submitted;
|
||||
|
||||
/* Buffer dependencies */
|
||||
AVBufferRef **buf_deps;
|
||||
int nb_buf_deps;
|
||||
|
@ -417,6 +420,12 @@ int ff_vk_add_exec_dep(FFVulkanContext *s, FFVkExecContext *e, AVFrame *frame,
|
|||
*/
|
||||
int ff_vk_submit_exec_queue(FFVulkanContext *s, FFVkExecContext *e);
|
||||
|
||||
/**
|
||||
* Wait on a command buffer's execution. Mainly useful for debugging and
|
||||
* development.
|
||||
*/
|
||||
void ff_vk_wait_on_exec_ctx(FFVulkanContext *s, FFVkExecContext *e);
|
||||
|
||||
/**
|
||||
* Create a VkBuffer with the specified parameters.
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue