For the above we need to keep the required information in a internal `wine_vk_swapchain`. That being said, we don't have to implement this through winevulkan swapchain wrapping. We could maintain a mapping between the native VkSwapchainKHR and `wine_vk_swapchain` internally in the driver and use that when needed, while passing the native VkSwapchainKHR to winevulkan unchanged. This approach adds a little bit of complexity to the driver, but it's totally reasonable (in fact the experimental branch used this). Let me know if you would prefer this route so that I can rework the upcoming part accordingly.
Yes, I think it'd be better for now. I don't think you even need to wrap swapchains in the driver either. You only need a mapping from `VkSwapchainKHR` to `wine_vk_surface` to detect invalidated surfaces. Proton winex11 does this, more or less for the same reasons.