Skip to content

Commit 1761568

Browse files
committed
GPU Vulkan Display: Fix error handling when acquiring images
1 parent 08422aa commit 1761568

1 file changed

Lines changed: 8 additions & 11 deletions

File tree

‎GPU/GPUTracking/display/backend/GPUDisplayBackendVulkan.cxx‎

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)