Quick GE debugger stepping fix, after the recent vulkan swapchain acquire change

This commit is contained in:
Henrik Rydgård committed 2022-09-18 12:10:23 +02:00
1 parent 0e6e1eb93c
commit fc84f25818
3 files changed
+11 -6

No files matched your search

+1
View File
@@ -49,6 +49,7 @@ struct FrameData {
bool hasInitCommands = false;
bool hasPresentCommands = false;
bool hasAcquired = false;
std::vector<VKRStep *> steps;
+7 -6
View File
@@ -561,15 +561,16 @@ void VulkanQueueRunner::RunSteps(FrameData &frameData) {
switch (step.stepType) {
case VKRStepType::RENDER:
if (!step.render.framebuffer) {
_dbg_assert_(!frameData.hasPresentCommands);
if (!frameData.hasPresentCommands) {
frameData.hasPresentCommands = true;
// When stepping in the GE debugger, we can end up here multiple times in a "frame".
if (!frameData.hasAcquired) {
frameData.hasAcquired = true;
frameData.AcquireNextImage(vulkan_);
SetBackbuffer(framebuffers_[frameData.curSwapchainImage], swapchainImages_[frameData.curSwapchainImage].image);
VkCommandBufferBeginInfo begin{ VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO };
begin.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT;
vkBeginCommandBuffer(frameData.presentCmd, &begin);
}
VkCommandBufferBeginInfo begin{ VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO };
begin.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT;
vkBeginCommandBuffer(frameData.presentCmd, &begin);
frameData.hasPresentCommands = true;
PerformRenderPass(step, frameData.presentCmd);
} else {
PerformRenderPass(step, frameData.mainCmd);
@@ -1385,6 +1385,8 @@ void VulkanRenderManager::EndSubmitFrame(int frame) {
present.pWaitSemaphores = &renderingCompleteSemaphore_;
present.waitSemaphoreCount = 1;
_dbg_assert_(frameData.hasAcquired);
VkResult res = vkQueuePresentKHR(vulkan_->GetGraphicsQueue(), &present);
if (res == VK_ERROR_OUT_OF_DATE_KHR) {
// We clearly didn't get this in vkAcquireNextImageKHR because of the skipSwap check above.
@@ -1398,6 +1400,7 @@ void VulkanRenderManager::EndSubmitFrame(int frame) {
// Success
outOfDateFrames_ = 0;
}
frameData.hasAcquired = false;
} else {
// We only get here if vkAcquireNextImage returned VK_ERROR_OUT_OF_DATE.
outOfDateFrames_++;