Go back to the original sdl+vulkan example and check if I have made any differences to my copies of the sdl implementation and vulkan implementation classes. Confirm the following: I believe minImageCount is basically hard-coded to 2 right now. There is code to set it based on the present mode, but that only runs if the image count is set to 0 initially, so will only run when that is done and some asserts checking that the min image count is >= 2 are removed. There is also a check that caps the swapchain min image count between the min and max image count returned by the surface capabilities. Verify that I can instead run this check on g_minImageCount directly (this is true if g_minImageCount isn't used for anything else). CONCLUSION =========== Everything above has been confirmed Since the VkSurface is only ever created once, I think the min and max images for it shouldn't change, so I should be able to check those values once at the start of the program and not worry about them again. This means that I could also probably keep using the structure I had that stored the surface capabilities, surface format, and present mode.