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

This commit is contained in:
Henrik Rydgård 2022-09-18 12:09:56 +02:00
parent 0e6e1eb93c
commit fc84f25818
3 changed files with 11 additions and 6 deletions

View file

@ -49,6 +49,7 @@ struct FrameData {
bool hasInitCommands = false;
bool hasPresentCommands = false;
bool hasAcquired = false;
std::vector<VKRStep *> steps;

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);

View file

@ -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_++;