diff options
author | Niklas Haas <git@haasn.xyz> | 2017-09-28 22:33:31 +0200 |
---|---|---|
committer | Martin Herkt <652892+lachs0r@users.noreply.github.com> | 2017-12-25 00:47:53 +0100 |
commit | 885497a4456256a147d9e7e30daa3170e461d7d6 (patch) | |
tree | ca0d9d08b032654aa52c326016baadebfdfe5af1 /video/out/vulkan/utils.c | |
parent | 4e34615872011f906bf653f61e7ac75d2066a06b (diff) | |
download | mpv-885497a4456256a147d9e7e30daa3170e461d7d6.tar.bz2 mpv-885497a4456256a147d9e7e30daa3170e461d7d6.tar.xz |
vo_gpu: vulkan: reorganize vk_cmd slightly
Instead of associating a single VkSemaphore with every command buffer
and allowing the user to ad-hoc wait on it during submission, make the
raw semaphores-to-signal array work like the raw semaphores-to-wait-on
array. Doesn't really provide a clear benefit yet, but it's required for
upcoming modifications.
Diffstat (limited to 'video/out/vulkan/utils.c')
-rw-r--r-- | video/out/vulkan/utils.c | 28 |
1 files changed, 11 insertions, 17 deletions
diff --git a/video/out/vulkan/utils.c b/video/out/vulkan/utils.c index ba7ff66f2b..7c8511a9d2 100644 --- a/video/out/vulkan/utils.c +++ b/video/out/vulkan/utils.c @@ -484,6 +484,7 @@ static void vk_cmd_reset(struct mpvk_ctx *vk, struct vk_cmd *cmd) cmd->num_callbacks = 0; cmd->num_deps = 0; + cmd->num_sigs = 0; // also make sure to reset vk->last_cmd in case this was the last command if (vk->last_cmd == cmd) @@ -497,7 +498,6 @@ static void vk_cmd_destroy(struct mpvk_ctx *vk, struct vk_cmd *cmd) vk_cmd_poll(vk, cmd, UINT64_MAX); vk_cmd_reset(vk, cmd); - vkDestroySemaphore(vk->dev, cmd->done, MPVK_ALLOCATOR); vkDestroyFence(vk->dev, cmd->fence, MPVK_ALLOCATOR); vkFreeCommandBuffers(vk->dev, cmd->pool->pool, 1, &cmd->buf); @@ -525,12 +525,6 @@ static struct vk_cmd *vk_cmd_create(struct mpvk_ctx *vk, struct vk_cmdpool *pool VK(vkCreateFence(vk->dev, &finfo, MPVK_ALLOCATOR, &cmd->fence)); - VkSemaphoreCreateInfo sinfo = { - .sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO, - }; - - VK(vkCreateSemaphore(vk->dev, &sinfo, MPVK_ALLOCATOR, &cmd->done)); - return cmd; error: @@ -547,14 +541,18 @@ void vk_cmd_callback(struct vk_cmd *cmd, vk_cb callback, void *p, void *arg) }); } -void vk_cmd_dep(struct vk_cmd *cmd, VkSemaphore dep, - VkPipelineStageFlags depstage) +void vk_cmd_dep(struct vk_cmd *cmd, VkSemaphore dep, VkPipelineStageFlags stage) { int idx = cmd->num_deps++; MP_TARRAY_GROW(cmd, cmd->deps, idx); MP_TARRAY_GROW(cmd, cmd->depstages, idx); cmd->deps[idx] = dep; - cmd->depstages[idx] = depstage; + cmd->depstages[idx] = stage; +} + +void vk_cmd_sig(struct vk_cmd *cmd, VkSemaphore sig) +{ + MP_TARRAY_APPEND(cmd, cmd->sigs, cmd->num_sigs, sig); } static void vk_cmdpool_destroy(struct mpvk_ctx *vk, struct vk_cmdpool *pool) @@ -667,7 +665,7 @@ error: return NULL; } -bool vk_cmd_submit(struct mpvk_ctx *vk, struct vk_cmd *cmd, VkSemaphore *done) +bool vk_cmd_submit(struct mpvk_ctx *vk, struct vk_cmd *cmd) { struct vk_cmdpool *pool = cmd->pool; @@ -680,14 +678,10 @@ bool vk_cmd_submit(struct mpvk_ctx *vk, struct vk_cmd *cmd, VkSemaphore *done) .waitSemaphoreCount = cmd->num_deps, .pWaitSemaphores = cmd->deps, .pWaitDstStageMask = cmd->depstages, + .signalSemaphoreCount = cmd->num_sigs, + .pSignalSemaphores = cmd->sigs, }; - if (done) { - sinfo.signalSemaphoreCount = 1; - sinfo.pSignalSemaphores = &cmd->done; - *done = cmd->done; - } - VK(vkResetFences(vk->dev, 1, &cmd->fence)); VK(vkQueueSubmit(cmd->queue, 1, &sinfo, cmd->fence)); MP_TRACE(vk, "Submitted command on queue %p (QF %d)\n", (void *)cmd->queue, |