@@ -1533,29 +1533,26 @@ void GPUDisplayBackendVulkan::prepareDraw(const hmm_mat4& proj, const hmm_mat4&
15331533 };
15341534
15351535 vk::Result retVal = vk::Result::eSuccess;
1536- bool mustUpdateRendering = mMustUpdateSwapChain ;
1537- if (mDisplay ->updateRenderPipeline () || (requestScreenshot && !mSwapchainImageReadable ) || (toMixBuffer && !mMixingSupported ) || mDownsampleFactor != getDownsampleFactor (requestScreenshot)) {
1538- mustUpdateRendering = true ;
1539- } else if (!mMustUpdateSwapChain ) {
1536+ bool mustUpdateSwapChain = mMustUpdateSwapChain || mDisplay ->updateRenderPipeline () || (requestScreenshot && !mSwapchainImageReadable ) || (toMixBuffer && !mMixingSupported ) || mDownsampleFactor != getDownsampleFactor (requestScreenshot);
1537+ if (!mustUpdateSwapChain) {
15401538 retVal = getImage ();
1541- }
1542- if (mMustUpdateSwapChain || mustUpdateRendering || retVal == vk::Result::eErrorOutOfDateKHR || retVal == vk::Result::eSuboptimalKHR) {
1543- if (!mustUpdateRendering) {
1544- GPUInfo (" Pipeline out of data / suboptimal, recreating" );
1539+ if (retVal == vk::Result::eErrorOutOfDateKHR) {
1540+ mustUpdateSwapChain = mMustUpdateSwapChain = true ;
15451541 }
1542+ }
1543+ if (mustUpdateSwapChain) {
15461544 recreateRendering (requestScreenshot, toMixBuffer);
15471545 retVal = getImage ();
15481546 }
1547+ mMustUpdateSwapChain = retVal == vk::Result::eSuboptimalKHR;
15491548 CHKERR (retVal);
15501549 if (mImageFence [mCurrentImageIndex ]) {
15511550 CHKERR (mDevice .waitForFences (1 , &mImageFence [mCurrentImageIndex ], true , UINT64_MAX ));
15521551 }
15531552 mImageFence [mCurrentImageIndex ] = mInFlightFence [mCurrentFrame ];
15541553 CHKERR (mDevice .resetFences (1 , &mInFlightFence [mCurrentFrame ]));
15551554
1556- mMustUpdateSwapChain = false ;
15571555 mHasDrawnText = false ;
1558-
15591556 const hmm_mat4 modelViewProj = proj * view;
15601557 writeToBuffer (mUniformBuffersMat [0 ][mCurrentImageIndex ], sizeof (modelViewProj), &modelViewProj);
15611558 }
@@ -1651,7 +1648,7 @@ void GPUDisplayBackendVulkan::finishFrame(bool doScreenshot, bool toMixBuffer, f
16511648 presentInfo.pImageIndices = &mCurrentImageIndex ;
16521649 presentInfo.pResults = nullptr ;
16531650 vk::Result retVal = mGraphicsQueue .presentKHR (&presentInfo);
1654- if (retVal == vk::Result::eErrorOutOfDateKHR) {
1651+ if (retVal == vk::Result::eErrorOutOfDateKHR || retVal == vk::Result::eSuboptimalKHR ) {
16551652 mMustUpdateSwapChain = true ;
16561653 } else {
16571654 CHKERR (retVal);
0 commit comments