See commits. The scary one is the first, the second makes Vulkan handle scaling like GL does (as two separate variables), the third one might be slightly controversial.