Procházet zdrojové kódy

Fixed crash in the vulkan renderer when the window is minimized

There's more work to do here in other cases where we can't recreate the swap chain, but this fixes the common minimize case.

Fixes https://github.com/libsdl-org/SDL/issues/14434

(cherry picked from commit 0ae3d7b0b0e4f10ef796adcd2f2404604fe642e0)
Sam Lantinga před 3 měsíci
rodič
revize
ad5681c45b
1 změnil soubory, kde provedl 5 přidání a 3 odebrání
  1. 5 3
      src/render/vulkan/SDL_render_vulkan.c

+ 5 - 3
src/render/vulkan/SDL_render_vulkan.c

@@ -907,7 +907,7 @@ static void VULKAN_RecordPipelineImageBarrier(VULKAN_RenderData *rendererData, V
 
 
 static VkResult VULKAN_AcquireNextSwapchainImage(SDL_Renderer *renderer)
 static VkResult VULKAN_AcquireNextSwapchainImage(SDL_Renderer *renderer)
 {
 {
-    VULKAN_RenderData *rendererData = ( VULKAN_RenderData * )renderer->internal;
+    VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->internal;
 
 
     VkResult result;
     VkResult result;
 
 
@@ -915,10 +915,12 @@ static VkResult VULKAN_AcquireNextSwapchainImage(SDL_Renderer *renderer)
     result = vkAcquireNextImageKHR(rendererData->device, rendererData->swapchain, UINT64_MAX,
     result = vkAcquireNextImageKHR(rendererData->device, rendererData->swapchain, UINT64_MAX,
         rendererData->imageAvailableSemaphores[rendererData->currentCommandBufferIndex], VK_NULL_HANDLE, &rendererData->currentSwapchainImageIndex);
         rendererData->imageAvailableSemaphores[rendererData->currentCommandBufferIndex], VK_NULL_HANDLE, &rendererData->currentSwapchainImageIndex);
     if (result == VK_ERROR_OUT_OF_DATE_KHR || result == VK_ERROR_SURFACE_LOST_KHR) {
     if (result == VK_ERROR_OUT_OF_DATE_KHR || result == VK_ERROR_SURFACE_LOST_KHR) {
-        result = VULKAN_CreateWindowSizeDependentResources(renderer);
+        if (!(renderer->window->flags & SDL_WINDOW_MINIMIZED)) {
+            result = VULKAN_CreateWindowSizeDependentResources(renderer);
+        }
         return result;
         return result;
     } else if(result == VK_SUBOPTIMAL_KHR) {
     } else if(result == VK_SUBOPTIMAL_KHR) {
-        // Suboptimal, but we can contiue
+        // Suboptimal, but we can continue
     } else if (result != VK_SUCCESS) {
     } else if (result != VK_SUCCESS) {
         SET_ERROR_CODE("vkAcquireNextImageKHR()", result);
         SET_ERROR_CODE("vkAcquireNextImageKHR()", result);
         return result;
         return result;