diff options
| author | Jean-Philippe Bruyère <jp_bruyere@hotmail.com> | 2022-01-26 22:01:48 +0100 |
|---|---|---|
| committer | Jean-Philippe Bruyère <jp_bruyere@hotmail.com> | 2022-01-26 22:01:48 +0100 |
| commit | 19abdef1af4b28e40ba6b994ea22e92b7dde1d8f (patch) | |
| tree | ffdc7f4d10e351ee1856158cc14ac0277542aa1b /src/vkvg_device_internal.c | |
| parent | 88c83b6b9b465a670f4989bbe21bd2e5f9eb2dd0 (diff) | |
test threadctxthreadctxtests
Diffstat (limited to 'src/vkvg_device_internal.c')
| -rw-r--r-- | src/vkvg_device_internal.c | 37 |
1 files changed, 28 insertions, 9 deletions
diff --git a/src/vkvg_device_internal.c b/src/vkvg_device_internal.c index d66df4c..8319630 100644 --- a/src/vkvg_device_internal.c +++ b/src/vkvg_device_internal.c @@ -423,16 +423,35 @@ void _wait_idle (VkvgDevice dev) { vkDeviceWaitIdle (dev->vkDev); } void _wait_and_reset_device_fence (VkvgDevice dev) { - vkWaitForFences (dev->vkDev, 1, &dev->fence, VK_TRUE, UINT64_MAX); - vkResetFences (dev->vkDev, 1, &dev->fence); + vkWaitForFences (dev->vkDev, 1, &dev->syncCtx.fence, VK_TRUE, UINT64_MAX); + vkResetFences (dev->vkDev, 1, &dev->syncCtx.fence); } -void _submit_cmd (VkvgDevice dev, VkCommandBuffer* cmd, VkFence fence) { - if (dev->gQBeforeSubmitGuard) - dev->gQBeforeSubmitGuard (dev->gQGuardUserData); - vkh_cmd_submit (dev->gQueue, cmd, fence); - if (dev->gQAfterSubmitGuard) - dev->gQAfterSubmitGuard (dev->gQGuardUserData); +void _submit_cmd (VkvgDevice dev, VkCommandBuffer* cmd, vkvg_sync_context* sync) { + if (dev->gQLockGuard) + dev->gQLockGuard (dev->gQGuardUserData); + + _sync_context_dbg_print("sync:", sync); + _sync_context_dbg_print("signaled:", dev->gQLastSignaledSync); + //_sync_context_dbg_print("awaited :", dev->gQLastAwaitedSync); + + if (dev->gQLastSignaledSync) + vkh_cmd_submit_with_semaphores(dev->gQueue, cmd, + dev->gQLastSignaledSync->signals[!dev->gQLastSignaledSync->nextSubmIdx], + sync->signals[sync->nextSubmIdx], sync->fence); + else + vkh_cmd_submit_with_semaphores(dev->gQueue, cmd, VK_NULL_HANDLE, sync->signals[sync->nextSubmIdx], sync->fence); + + sync->nextSubmIdx ^= true; + + if (dev->gQLastSignaledSync) { + dev->gQLastSignaledSync->awaitedBy = sync; + sync->awaiting = dev->gQLastSignaledSync; + } + dev->gQLastSignaledSync = sync; + + if (dev->gQUnlockGuard) + dev->gQUnlockGuard (dev->gQGuardUserData); } bool _init_function_pointers (VkvgDevice dev) { @@ -476,7 +495,7 @@ void _create_empty_texture (VkvgDevice dev, VkFormat format, VkImageTiling tilin VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT); vkh_cmd_end (dev->cmd); - _submit_cmd (dev, &dev->cmd, dev->fence); + _submit_cmd (dev, &dev->cmd, &dev->syncCtx); } void _check_best_image_tiling (VkvgDevice dev, VkFormat format) { |