# Failed to create Vulkan window surface on macOS

**URL:** <https://discourse.glfw.org/t/failed-to-create-vulkan-window-surface-on-macos/1626>\
**Category:** support\
**Created:** [August 5, 2020, 7:01am UTC](https://discourse.glfw.org/t/failed-to-create-vulkan-window-surface-on-macos/1626 "2020-08-05T07:01:39Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![carbon12](https://avatars.discourse-cdn.com/v4/letter/c/3ec8ea/32.png) [@carbon12](https://discourse.glfw.org/u/carbon12)\
**Post date:** [August 5, 2020, 7:01am UTC](https://discourse.glfw.org/t/failed-to-create-vulkan-window-surface-on-macos/1626/1 "2020-08-05T07:01:39Z")

</div>

I’ve been making my way through the Vulkan tutorials, but I’m running into trouble trying to create a window surface as per [this step](https://vulkan-tutorial.com/Drawing_a_triangle/Presentation/Window_surface). I’ve essentially copied and pasted the example code, so I’m mostly confident that it’s not a transcription issue on my part. I’m running macOS Catalina on a 2016 15’ MBP with an AMD GPU, and the latest stable Vulkan SDK version 1.2.148.0. Here is the code that throws the error:

```auto
    if (glfwCreateWindowSurface(instance, window, nullptr, &surface) != VK_SUCCESS) {
        throw std::runtime_error("failed to create window surface!");
    }

```

Here is the terminal output:

```auto
2020-08-05 14:46:54.336613+0800 Server[25129:848558] Metal API Validation Enabled
2020-08-05 14:46:54.381875+0800 Server[25129:848972] flock failed to lock maps file: errno = 35
2020-08-05 14:46:54.383147+0800 Server[25129:848972] flock failed to lock maps file: errno = 35
validation layer: ReadDataFilesInSearchPaths: Searching the following paths for manifest files: /Users/myusername/Library/Developer/Xcode/DerivedData/mygame-aqamkhipllkgvfbgrniquerbvgsw/Build/Products/Debug/vulkan/implicit_layer.d:/etc/xdg/vulkan/implicit_layer.d:/tmp/macos-sdk-build/Vulkan-Loader/build/install/etc/vulkan/implicit_layer.d:/etc/vulkan/implicit_layer.d:/usr/local/share/vulkan/implicit_layer.d:/usr/share/vulkan/implicit_layer.d:/Users/myusername/.local/share/vulkan/implicit_layer.d

validation layer: ReadDataFilesInSearchPaths: Searching the following paths for manifest files: /Users/myusername/Library/Developer/Xcode/DerivedData/mygame-aqamkhipllkgvfbgrniquerbvgsw/Build/Products/Debug/vulkan/explicit_layer.d:/etc/xdg/vulkan/explicit_layer.d:/tmp/macos-sdk-build/Vulkan-Loader/build/install/etc/vulkan/explicit_layer.d:/etc/vulkan/explicit_layer.d:/usr/local/share/vulkan/explicit_layer.d:/usr/share/vulkan/explicit_layer.d:/Users/myusername/.local/share/vulkan/explicit_layer.d

validation layer: ReadDataFilesInSearchPaths: Searching the following paths for manifest files: /Users/myusername/Library/Developer/Xcode/DerivedData/mygame-aqamkhipllkgvfbgrniquerbvgsw/Build/Products/Debug/vulkan/icd.d:/etc/xdg/vulkan/icd.d:/tmp/macos-sdk-build/Vulkan-Loader/build/install/etc/vulkan/icd.d:/etc/vulkan/icd.d:/usr/local/share/vulkan/icd.d:/usr/share/vulkan/icd.d:/Users/myusername/.local/share/vulkan/icd.d

validation layer: Searching for ICD drivers named ../../../lib/libMoltenVK.dylib
validation layer: Build ICD instance extension list
validation layer: Instance Extension: VK_KHR_device_group_creation (/usr/local/share/vulkan/icd.d/../../../lib/libMoltenVK.dylib) version 0.0.1
validation layer: Instance Extension: VK_KHR_external_memory_capabilities (/usr/local/share/vulkan/icd.d/../../../lib/libMoltenVK.dylib) version 0.0.1
validation layer: Instance Extension: VK_KHR_get_physical_device_properties2 (/usr/local/share/vulkan/icd.d/../../../lib/libMoltenVK.dylib) version 0.0.2
validation layer: Instance Extension: VK_KHR_get_surface_capabilities2 (/usr/local/share/vulkan/icd.d/../../../lib/libMoltenVK.dylib) version 0.0.1
validation layer: Instance Extension: VK_KHR_surface (/usr/local/share/vulkan/icd.d/../../../lib/libMoltenVK.dylib) version 0.0.25
validation layer: Instance Extension: VK_EXT_debug_report (/usr/local/share/vulkan/icd.d/../../../lib/libMoltenVK.dylib) version 0.0.9
validation layer: Instance Extension: VK_EXT_debug_utils (/usr/local/share/vulkan/icd.d/../../../lib/libMoltenVK.dylib) version 0.0.2
validation layer: Instance Extension: VK_EXT_metal_surface (/usr/local/share/vulkan/icd.d/../../../lib/libMoltenVK.dylib) version 0.0.1
validation layer: Instance Extension: VK_EXT_swapchain_colorspace (/usr/local/share/vulkan/icd.d/../../../lib/libMoltenVK.dylib) version 0.0.4
validation layer: Instance Extension: VK_MVK_macos_surface (/usr/local/share/vulkan/icd.d/../../../lib/libMoltenVK.dylib) version 0.0.2
validation layer: Instance Extension: VK_MVK_moltenvk (/usr/local/share/vulkan/icd.d/../../../lib/libMoltenVK.dylib) version 0.0.27
validation layer: Loading layer library /usr/local/share/vulkan/explicit_layer.d/../../../lib/libVkLayer_khronos_validation.dylib
validation layer: Build ICD instance extension list
validation layer: Instance Extension: VK_KHR_device_group_creation (/usr/local/share/vulkan/icd.d/../../../lib/libMoltenVK.dylib) version 0.0.1
validation layer: Instance Extension: VK_KHR_external_memory_capabilities (/usr/local/share/vulkan/icd.d/../../../lib/libMoltenVK.dylib) version 0.0.1
validation layer: Instance Extension: VK_KHR_get_physical_device_properties2 (/usr/local/share/vulkan/icd.d/../../../lib/libMoltenVK.dylib) version 0.0.2
validation layer: Instance Extension: VK_KHR_get_surface_capabilities2 (/usr/local/share/vulkan/icd.d/../../../lib/libMoltenVK.dylib) version 0.0.1
validation layer: Instance Extension: VK_KHR_surface (/usr/local/share/vulkan/icd.d/../../../lib/libMoltenVK.dylib) version 0.0.25
validation layer: Instance Extension: VK_EXT_debug_report (/usr/local/share/vulkan/icd.d/../../../lib/libMoltenVK.dylib) version 0.0.9
validation layer: Instance Extension: VK_EXT_debug_utils (/usr/local/share/vulkan/icd.d/../../../lib/libMoltenVK.dylib) version 0.0.2
validation layer: Instance Extension: VK_EXT_metal_surface (/usr/local/share/vulkan/icd.d/../../../lib/libMoltenVK.dylib) version 0.0.1
validation layer: Instance Extension: VK_EXT_swapchain_colorspace (/usr/local/share/vulkan/icd.d/../../../lib/libMoltenVK.dylib) version 0.0.4
validation layer: Instance Extension: VK_MVK_macos_surface (/usr/local/share/vulkan/icd.d/../../../lib/libMoltenVK.dylib) version 0.0.2
validation layer: Instance Extension: VK_MVK_moltenvk (/usr/local/share/vulkan/icd.d/../../../lib/libMoltenVK.dylib) version 0.0.27
libc++abi.dylib: terminating with uncaught exception of type std::runtime_error: failed to create window surface!
Program ended with exit code: 9

```

---

<div class="post-metadata">

**Author:** ![dougbinks](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.glfw.org/dougbinks/32/39_2.png) [@dougbinks](https://discourse.glfw.org/u/dougbinks)\
**Post date:** [August 5, 2020, 9:33am UTC](https://discourse.glfw.org/t/failed-to-create-vulkan-window-surface-on-macos/1626/2 "2020-08-05T09:33:20Z")

</div>

Have you tried building and running the GLFW triangle-vulkan.c test?

> <https://github.com/glfw/glfw/blob/master/tests/triangle-vulkan.c>

This might help to narrow down your issue. If you build GFLW from source with cmake this should be built by default.

---

<div class="post-metadata">

**Author:** ![carbon12](https://avatars.discourse-cdn.com/v4/letter/c/3ec8ea/32.png) [@carbon12](https://discourse.glfw.org/u/carbon12)\
**Post date:** [August 6, 2020, 5:38am UTC](https://discourse.glfw.org/t/failed-to-create-vulkan-window-surface-on-macos/1626/3 "2020-08-06T05:38:39Z")

</div>

Thanks dougbinks, looking at triangle-vulkan.c helped me fix the problem. I guessed it has some way of finding libvulkan.1.2.148.dylib on my system and linking to that. I was using vulkan.framework before, so I tried linking to libvulkan.1.2.148.dylib instead and my code is now working.

I’m not sure why vulkan.framwork doesn’t work for me. [This person](https://github.com/glfw/glfw/issues/1446) had the same experience. I should also probably mention that the VkResult returned by glfwCreateWindowSurface is VK\_ERROR\_EXTENSION\_NOT\_PRESENT.

Anyway, if anybody else has this problem, try using libvulkan.1.2.148.dylib or libvulkan.1.dylib (an alias for the latest libvulkan.1.x.xxx.dylib) instead. For me they were installed under /usr/local/bin.
