From a0f618311a259fbafce9002be4b4d6c2262f9cb6 Mon Sep 17 00:00:00 2001 From: Magnus Norddahl Date: Thu, 11 Apr 2019 04:52:57 +0200 Subject: [PATCH] - change SubmitCommands to handle all parts of the present --- .../vulkan/system/vk_framebuffer.cpp | 64 +++++++++---------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/src/rendering/vulkan/system/vk_framebuffer.cpp b/src/rendering/vulkan/system/vk_framebuffer.cpp index 47181b06bf..daabbf10ad 100644 --- a/src/rendering/vulkan/system/vk_framebuffer.cpp +++ b/src/rendering/vulkan/system/vk_framebuffer.cpp @@ -160,8 +160,6 @@ void VulkanFrameBuffer::Update() Flush3D.Clock(); - presentImageIndex = swapChain->AcquireImage(GetClientWidth(), GetClientHeight(), mSwapChainImageAvailableSemaphore.get()); - GetPostprocess()->SetActiveRenderTarget(); Draw2D(); @@ -170,29 +168,9 @@ void VulkanFrameBuffer::Update() mRenderState->EndRenderPass(); mRenderState->EndFrame(); - if (presentImageIndex != 0xffffffff) - mPostprocess->DrawPresentTexture(mOutputLetterbox, true, true); - - SubmitCommands(true); - Flush3D.Unclock(); - FPSLimit(); - - Finish.Reset(); - Finish.Clock(); - - if (presentImageIndex != 0xffffffff) - swapChain->QueuePresent(presentImageIndex, mRenderFinishedSemaphore.get()); - - vkWaitForFences(device->device, 1, &mRenderFinishedFence->fence, VK_TRUE, std::numeric_limits::max()); - vkResetFences(device->device, 1, &mRenderFinishedFence->fence); - - mDrawCommands.reset(); - mTransferCommands.reset(); - DeleteFrameObjects(); - - Finish.Unclock(); + SubmitCommands(true); Super::Update(); } @@ -207,6 +185,16 @@ void VulkanFrameBuffer::DeleteFrameObjects() void VulkanFrameBuffer::SubmitCommands(bool finish) { + if (finish) + { + Finish.Reset(); + Finish.Clock(); + + presentImageIndex = swapChain->AcquireImage(GetClientWidth(), GetClientHeight(), mSwapChainImageAvailableSemaphore.get()); + if (presentImageIndex != 0xffffffff) + mPostprocess->DrawPresentTexture(mOutputLetterbox, true, true); + } + if (mTransferCommands) { mTransferCommands->end(); @@ -217,10 +205,12 @@ void VulkanFrameBuffer::SubmitCommands(bool finish) submit.execute(device, device->graphicsQueue); } - mDrawCommands->end(); - QueueSubmit submit; - submit.addCommandBuffer(mDrawCommands.get()); + if (mDrawCommands) + { + mDrawCommands->end(); + submit.addCommandBuffer(mDrawCommands.get()); + } if (mTransferCommands) { submit.addWait(VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, mTransferSemaphore.get()); @@ -232,13 +222,23 @@ void VulkanFrameBuffer::SubmitCommands(bool finish) } submit.execute(device, device->graphicsQueue, mRenderFinishedFence.get()); - if (!finish) + if (finish) { - vkWaitForFences(device->device, 1, &mRenderFinishedFence->fence, VK_TRUE, std::numeric_limits::max()); - vkResetFences(device->device, 1, &mRenderFinishedFence->fence); - mDrawCommands.reset(); - mTransferCommands.reset(); - DeleteFrameObjects(); + FPSLimit(); + + if (presentImageIndex != 0xffffffff) + swapChain->QueuePresent(presentImageIndex, mRenderFinishedSemaphore.get()); + } + + vkWaitForFences(device->device, 1, &mRenderFinishedFence->fence, VK_TRUE, std::numeric_limits::max()); + vkResetFences(device->device, 1, &mRenderFinishedFence->fence); + mDrawCommands.reset(); + mTransferCommands.reset(); + DeleteFrameObjects(); + + if (finish) + { + Finish.Unclock(); } }