MCPcopy Create free account
hub / github.com/FlaxEngine/FlaxEngine / volkInitialize

Function volkInitialize

Source/ThirdParty/volk/volk.cpp:71–115  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

69}
70
71VkResult volkInitialize(void)
72{
73#if defined(_WIN32)
74 HMODULE module = LoadLibraryA("vulkan-1.dll");
75 if (!module)
76 return VK_ERROR_INITIALIZATION_FAILED;
77
78 // note: function pointer is cast through void function pointer to silence cast-function-type warning on gcc8
79 vkGetInstanceProcAddr = (PFN_vkGetInstanceProcAddr)(void(*)(void))GetProcAddress(module, "vkGetInstanceProcAddr");
80#elif defined(__APPLE__)
81 void* module = dlopen("libvulkan.dylib", RTLD_NOW | RTLD_LOCAL);
82 if (!module)
83 module = dlopen("libvulkan.1.dylib", RTLD_NOW | RTLD_LOCAL);
84 if (!module)
85 module = dlopen("libMoltenVK.dylib", RTLD_NOW | RTLD_LOCAL);
86 // Add support for using Vulkan and MoltenVK in a Framework. App store rules for iOS
87 // strictly enforce no .dylib's. If they aren't found it just falls through
88 if (!module)
89 module = dlopen("vulkan.framework/vulkan", RTLD_NOW | RTLD_LOCAL);
90 if (!module)
91 module = dlopen("MoltenVK.framework/MoltenVK", RTLD_NOW | RTLD_LOCAL);
92 // modern versions of macOS don't search /usr/local/lib automatically contrary to what man dlopen says
93 // Vulkan SDK uses this as the system-wide installation location, so we're going to fallback to this if all else fails
94 if (!module && getenv("DYLD_FALLBACK_LIBRARY_PATH") == NULL)
95 module = dlopen("/usr/local/lib/libvulkan.dylib", RTLD_NOW | RTLD_LOCAL);
96 if (!module)
97 return VK_ERROR_INITIALIZATION_FAILED;
98
99 vkGetInstanceProcAddr = (PFN_vkGetInstanceProcAddr)dlsym(module, "vkGetInstanceProcAddr");
100#else
101 void* module = dlopen("libvulkan.so.1", RTLD_NOW | RTLD_LOCAL);
102 if (!module)
103 module = dlopen("libvulkan.so", RTLD_NOW | RTLD_LOCAL);
104 if (!module)
105 return VK_ERROR_INITIALIZATION_FAILED;
106 VOLK_DISABLE_GCC_PEDANTIC_WARNINGS
107 vkGetInstanceProcAddr = (PFN_vkGetInstanceProcAddr)dlsym(module, "vkGetInstanceProcAddr");
108 VOLK_RESTORE_GCC_PEDANTIC_WARNINGS
109#endif
110
111 loadedModule = module;
112 volkGenLoadLoader(NULL, vkGetInstanceProcAddrStub);
113
114 return VK_SUCCESS;
115}
116
117void volkInitializeCustom(PFN_vkGetInstanceProcAddr handler)
118{

Callers 1

CreateMethod · 0.85

Calls 1

volkGenLoadLoaderFunction · 0.85

Tested by

no test coverage detected