When vkAcquireNextImage() returns VK_SUBOPTIMAL_KHR it means that a valid
usable image was still acquired and that means that the
acquire_samaphore is pending and signalled as normal.
This means we cannot just recreate the swapchain and reuse it to acquire
an image from the new swapchain as VulkanDisplay::display_queued_image()
was doing, because the spec states that the semaphore must be unsignaled
and not pending.
The fix here is to render and display the suboptimal image as normal and
set a flag to immediately return swapchain_image_out_of_date to trigger
a swapchain recreation on the next frame.
Currently, discrete GPU is always chosen if available but when display
is connected through a different GPU and the discrete card is NVIDIA,
colors are swapped as in #274. Detecting GPU with connected display is
not trivial and requires VK_KHR_display, which is not widely supported
by graphic drivers.
This is a small usability change that helps to workaround the problem by
allowing `:gpu=integrated` instead of passing the numeric index of the
card.