From c1d1c851165e90f78b4fd6b87ccce078ce0352d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Tue, 20 Sep 2022 16:52:14 +0200 Subject: [PATCH] Minor code cleanups (hasBegun is now redundant, for example) --- Common/GPU/Vulkan/VulkanFrameData.h | 1 - Common/GPU/Vulkan/VulkanRenderManager.cpp | 31 +++++------------------ Common/GPU/Vulkan/VulkanRenderManager.h | 2 -- 3 files changed, 6 insertions(+), 28 deletions(-) diff --git a/Common/GPU/Vulkan/VulkanFrameData.h b/Common/GPU/Vulkan/VulkanFrameData.h index bc503bb18a..53de1e8f44 100644 --- a/Common/GPU/Vulkan/VulkanFrameData.h +++ b/Common/GPU/Vulkan/VulkanFrameData.h @@ -73,7 +73,6 @@ struct FrameData { std::vector steps; // Swapchain. - bool hasBegun = false; uint32_t curSwapchainImage = -1; // Profiling. diff --git a/Common/GPU/Vulkan/VulkanRenderManager.cpp b/Common/GPU/Vulkan/VulkanRenderManager.cpp index 3e34c6f162..3a0dde0312 100644 --- a/Common/GPU/Vulkan/VulkanRenderManager.cpp +++ b/Common/GPU/Vulkan/VulkanRenderManager.cpp @@ -1211,8 +1211,9 @@ void VulkanRenderManager::BeginSubmitFrame(int frame) { _dbg_assert_(!frameData.hasPresentCommands); frameData.SubmitPending(vulkan_, FrameSubmitType::Pending, frameDataShared_); - if (!frameData.hasBegun) { + if (!frameData.hasMainCommands) { // Effectively resets both main and present command buffers, since they both live in this pool. + // We always record main commands first, so we don't need to reset the present command buffer separately. vkResetCommandPool(vulkan_->GetDevice(), frameData.cmdPoolMain, 0); VkCommandBufferBeginInfo begin{ VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO }; @@ -1220,26 +1221,14 @@ void VulkanRenderManager::BeginSubmitFrame(int frame) { VkResult res = vkBeginCommandBuffer(frameData.mainCmd, &begin); frameData.hasMainCommands = true; _assert_msg_(res == VK_SUCCESS, "vkBeginCommandBuffer failed! result=%s", VulkanResultToString(res)); - - frameData.hasBegun = true; } } -// Called on the render thread. -void VulkanRenderManager::Submit(int frame, FrameSubmitType submitType) { - FrameData &frameData = frameData_[frame]; - - // Submit the main and final cmdbuf, ending by signalling the fence. - // If any init commands left unsubmitted (like by a frame sync etc), they'll also tag along. - frameData.SubmitPending(vulkan_, submitType, frameDataShared_); -} - // Called on the render thread. void VulkanRenderManager::EndSubmitFrame(int frame) { FrameData &frameData = frameData_[frame]; - frameData.hasBegun = false; - Submit(frame, FrameSubmitType::Present); + frameData.SubmitPending(vulkan_, FrameSubmitType::Present, frameDataShared_); if (!frameData.skipSwap) { VkResult res = frameData.QueuePresent(vulkan_, frameDataShared_); @@ -1265,20 +1254,12 @@ void VulkanRenderManager::EndSubmitFrame(int frame) { void VulkanRenderManager::EndSyncFrame(int frame) { FrameData &frameData = frameData_[frame]; - // The submit will trigger the readbackFence, and wait. - Submit(frame, FrameSubmitType::Sync); + // The submit will trigger the readbackFence, and also do the wait for it. + frameData.SubmitPending(vulkan_, FrameSubmitType::Sync, frameDataShared_); // At this point we can resume filling the command buffers for the current frame since // we know the device is idle - and thus all previously enqueued command buffers have been processed. - // No need to switch to the next frame number. - VkCommandBufferBeginInfo begin{ - VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, - nullptr, - VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT - }; - _dbg_assert_(!frameData.hasPresentCommands); // Readbacks should happen before we try to submit any present commands. - frameData.hasBegun = false; // We're gonna record a new main command buffer. - + // No need to switch to the next frame number, would just be confusing. std::unique_lock lock(frameData.push_mutex); frameData.readyForFence = true; frameData.push_condVar.notify_all(); diff --git a/Common/GPU/Vulkan/VulkanRenderManager.h b/Common/GPU/Vulkan/VulkanRenderManager.h index 2fa7b95237..43cbbb7b86 100644 --- a/Common/GPU/Vulkan/VulkanRenderManager.h +++ b/Common/GPU/Vulkan/VulkanRenderManager.h @@ -463,8 +463,6 @@ private: void BeginSubmitFrame(int frame); void EndSubmitFrame(int frame); - void Submit(int frame, FrameSubmitType submitType); - void SubmitInitCommands(int frame); // Bad for performance but sometimes necessary for synchronous CPU readbacks (screenshots and whatnot). void FlushSync();