--- /dev/null
+#include "vulkancontext.h"
+#include <msp/core/application.h>
+#include "vulkancontext_private.h"
+#include "display_private.h"
+#include "window_private.h"
+
+namespace Msp {
+namespace Graphics {
+
+void VulkanContext::add_platform_extensions(std::vector<const char *> &extensions) const
+{
+ extensions.push_back("VK_KHR_win32_surface");
+}
+
+void VulkanContext::init_platform_functions()
+{
+ VulkanFunctions &f = priv->functions;
+
+ f.vkCreateWin32Surface = get_function<PFN_vkCreateWin32SurfaceKHR>("vkCreateWin32SurfaceKHR");
+}
+
+void VulkanContext::init_surface()
+{
+ const VulkanFunctions &f = priv->functions;
+
+ VkWin32SurfaceCreateInfoKHR surface_create_info = { };
+ surface_create_info.sType = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR;
+ surface_create_info.hinstance = static_cast<HINSTANCE>(Application::get_data());
+ surface_create_info.hwnd = window.get_private().window;
+
+ VkResult result = f.vkCreateWin32Surface(priv->instance, &surface_create_info, nullptr, &priv->surface);
+ if(result!=VK_SUCCESS)
+ throw vulkan_error(result, "vkCreateWin32Surface");
+}
+
+} // namespace Graphics
+} // namespace Msp
--- /dev/null
+#ifndef MSP_GRAPHICS_VULKANCONTEXT_PLATFORM_H_
+#define MSP_GRAPHICS_VULKANCONTEXT_PLATFORM_H_
+
+#define VK_USE_PLATFORM_WIN32_KHR
+#define WIN32_LEAN_AND_MEAN
+#define NOMINMAX
+#include <vulkan/vulkan.h>
+
+namespace Msp {
+namespace Graphics {
+
+struct VulkanPlatformFunctions
+{
+ PFN_vkCreateWin32SurfaceKHR vkCreateWin32Surface = nullptr;
+};
+
+} // namespace Graphics
+} // namespace Msp
+
+#endif