Currently my program runs on MSVC without any problems but on MinGW glfwCreateWindowSurface(...)
strangely throws an error that it's missing the VK_KHR_win32_surface
extension.
void createSurface() {
if (glfwCreateWindowSurface(instance, window, nullptr, &surface) != VK_SUCCESS) {
throw std::runtime_error("failed to create window surface!");
}
}
vkGetInstanceProcAddr(..., "vkCreateWin32SurfaceKHR")
and glfwGetInstanceProcAddress(..., "vkCreateWin32SurfaceKHR")
: return a non-null function pointerglfwGetError(...)
: returns 65542
and Win32: Vulkan instance missing VK_KHR_win32_surface extension
vkEnumerateInstanceExtensionProperties(...)
: lists the VK_KHR_win32_surface
extensionglfwCreateWindowSurface(...)
: returns VK_ERROR_EXTENSION_NOT_PRESENT
glfwVulkanSupported()
: returns 1Fixed by using GLFW Native since it works:
#define GLFW_EXPOSE_NATIVE_WIN32
#include <GLFW/glfw3native.h>
// ...
VkWin32SurfaceCreateInfoKHR surfaceInfo {};
surfaceInfo.sType = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR;
surfaceInfo.hinstance = GetModuleHandle(nullptr);
surfaceInfo.hwnd = glfwGetWin32Window(window);
if (vkCreateWin32SurfaceKHR(instance, &surfaceInfo, nullptr, &surface) != VK_SUCCESS) {
throw std::runtime_error("failed to create window surface!");
}