diff --git a/vulkan.d b/vulkan.d index eca0997..9acf411 100644 --- a/vulkan.d +++ b/vulkan.d @@ -2719,6 +2719,20 @@ CreateSwapchain(Vulkan* vk) return success; } +void +CheckAndRecreateSwapchain(Vulkan* vk) +{ + VkResult result = vkGetSwapchainStatusKHR(vk.device, vk.swapchain); + if (result == VK_ERROR_OUT_OF_DATE_KHR) + { + RecreateSwapchain(vk); + } + else if (result != VK_SUBOPTIMAL_KHR) + { + VkCheckA("BeginFrame failure: vkAcquireNextImageKHR error", result); + } +} + void RecreateSwapchain(Vulkan* vk) { diff --git a/vulkan_funcs.d b/vulkan_funcs.d index 39de0fc..43de8e5 100644 --- a/vulkan_funcs.d +++ b/vulkan_funcs.d @@ -66,6 +66,7 @@ PFN_vkCreateImage vkCreateImage = null; PFN_vkCreateImageView vkCreateImageView = null; PFN_vkCreateBufferView vkCreateBufferView = null; PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR = null; +PFN_vkGetSwapchainStatusKHR vkGetSwapchainStatusKHR = null; PFN_vkGetDeviceQueue vkGetDeviceQueue = null; PFN_vkCreateSemaphore vkCreateSemaphore = null; PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers = null; @@ -169,6 +170,7 @@ LoadDeviceFunctions(Vulkan* vk) vkQueueSubmit2 = cast(PFN_vkQueueSubmit2KHR)vkGetDeviceProcAddr(vk.device, "vkQueueSubmit2KHR"); vkCreateBufferView = cast(PFN_vkCreateBufferView)vkGetDeviceProcAddr(vk.device, "vkCreateBufferView"); vkGetSwapchainImagesKHR = cast(PFN_vkGetSwapchainImagesKHR)vkGetDeviceProcAddr(vk.device, "vkGetSwapchainImagesKHR"); + vkGetSwapchainStatusKHR = cast(PFN_vkGetSwapchainStatusKHR)vkGetDeviceProcAddr(vk.device, "vkGetSwapchainStatusKHR"); vkGetDeviceQueue = cast(PFN_vkGetDeviceQueue)vkGetDeviceProcAddr(vk.device, "vkGetDeviceQueue"); vkCreateSemaphore = cast(PFN_vkCreateSemaphore)vkGetDeviceProcAddr(vk.device, "vkCreateSemaphore"); vkAllocateCommandBuffers = cast(PFN_vkAllocateCommandBuffers)vkGetDeviceProcAddr(vk.device, "vkAllocateCommandBuffers");