From 1e49024e76d28b7aa4ad51ec4c37588921dc638c Mon Sep 17 00:00:00 2001 From: Nikita Fediuchin Date: Thu, 26 May 2022 09:27:39 +0300 Subject: [PATCH] Cocoa: Fix search path for private Vulkan loader According to both Apple and LunarG, a private copy of the macOS Vulkan loader libvulkan.1.dylib should be placed in the Frameworks directory of the bundle and not its main executable directory. This commit updates the dynamic loading path accordingly. Fixes #2113 Closes #2120 (cherry picked from commit 9b7713cf92582cf56c4f79116001c33d1e6e655f) --- src/cocoa_init.m | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/cocoa_init.m b/src/cocoa_init.m index 0d323d6b..4a8ebe9c 100644 --- a/src/cocoa_init.m +++ b/src/cocoa_init.m @@ -475,11 +475,18 @@ void* _glfwLoadLocalVulkanLoaderNS(void) if (!bundle) return NULL; - CFURLRef url = - CFBundleCopyAuxiliaryExecutableURL(bundle, CFSTR("libvulkan.1.dylib")); - if (!url) + CFURLRef frameworksUrl = CFBundleCopyPrivateFrameworksURL(bundle); + if (!frameworksUrl) return NULL; + CFURLRef url = CFURLCreateCopyAppendingPathComponent( + kCFAllocatorDefault, frameworksUrl, CFSTR("libvulkan.1.dylib"), false); + if (!url) + { + CFRelease(frameworksUrl); + return NULL; + } + char path[PATH_MAX]; void* handle = NULL; @@ -487,6 +494,7 @@ void* _glfwLoadLocalVulkanLoaderNS(void) handle = _glfw_dlopen(path); CFRelease(url); + CFRelease(frameworksUrl); return handle; }