| 33 | #endif |
| 34 | |
| 35 | int InitVulkan(void) { |
| 36 | #if defined(__APPLE__) |
| 37 | void* libvulkan = dlopen("libvulkan.dylib", RTLD_NOW | RTLD_LOCAL); |
| 38 | if (!libvulkan) { |
| 39 | libvulkan = dlopen("libvulkan.1.dylib", RTLD_NOW | RTLD_LOCAL); |
| 40 | } |
| 41 | if (!libvulkan) { |
| 42 | libvulkan = dlopen("libMoltenVK.dylib", RTLD_NOW | RTLD_LOCAL); |
| 43 | } |
| 44 | #elif defined( _WIN32 ) |
| 45 | HMODULE libvulkan = LoadLibraryA("vulkan-1.dll"); |
| 46 | auto dlsym = [](HMODULE h, char const * name) { return GetProcAddress(h, name); }; |
| 47 | #else |
| 48 | void* libvulkan = dlopen("libvulkan.so.1", RTLD_NOW | RTLD_LOCAL); |
| 49 | if (!libvulkan) { |
| 50 | libvulkan = dlopen("libvulkan.so", RTLD_NOW | RTLD_LOCAL); |
| 51 | } |
| 52 | #endif |
| 53 | if (!libvulkan) return 0; |
| 54 | |
| 55 | // Vulkan supported, set function addresses |
| 56 | vkCreateInstance = reinterpret_cast<PFN_vkCreateInstance>(dlsym(libvulkan, "vkCreateInstance")); |
| 57 | vkDestroyInstance = reinterpret_cast<PFN_vkDestroyInstance>(dlsym(libvulkan, "vkDestroyInstance")); |
| 58 | vkEnumeratePhysicalDevices = reinterpret_cast<PFN_vkEnumeratePhysicalDevices>(dlsym(libvulkan, "vkEnumeratePhysicalDevices")); |
| 59 | vkGetPhysicalDeviceFeatures = |
| 60 | reinterpret_cast<PFN_vkGetPhysicalDeviceFeatures>(dlsym(libvulkan, "vkGetPhysicalDeviceFeatures")); |
| 61 | vkGetPhysicalDeviceFormatProperties = |
| 62 | reinterpret_cast<PFN_vkGetPhysicalDeviceFormatProperties>(dlsym(libvulkan, "vkGetPhysicalDeviceFormatProperties")); |
| 63 | vkGetPhysicalDeviceImageFormatProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceImageFormatProperties>( |
| 64 | dlsym(libvulkan, "vkGetPhysicalDeviceImageFormatProperties")); |
| 65 | vkGetPhysicalDeviceProperties = |
| 66 | reinterpret_cast<PFN_vkGetPhysicalDeviceProperties>(dlsym(libvulkan, "vkGetPhysicalDeviceProperties")); |
| 67 | vkGetPhysicalDeviceQueueFamilyProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceQueueFamilyProperties>( |
| 68 | dlsym(libvulkan, "vkGetPhysicalDeviceQueueFamilyProperties")); |
| 69 | vkGetPhysicalDeviceMemoryProperties = |
| 70 | reinterpret_cast<PFN_vkGetPhysicalDeviceMemoryProperties>(dlsym(libvulkan, "vkGetPhysicalDeviceMemoryProperties")); |
| 71 | vkGetInstanceProcAddr = reinterpret_cast<PFN_vkGetInstanceProcAddr>(dlsym(libvulkan, "vkGetInstanceProcAddr")); |
| 72 | vkGetDeviceProcAddr = reinterpret_cast<PFN_vkGetDeviceProcAddr>(dlsym(libvulkan, "vkGetDeviceProcAddr")); |
| 73 | vkCreateDevice = reinterpret_cast<PFN_vkCreateDevice>(dlsym(libvulkan, "vkCreateDevice")); |
| 74 | vkDestroyDevice = reinterpret_cast<PFN_vkDestroyDevice>(dlsym(libvulkan, "vkDestroyDevice")); |
| 75 | vkEnumerateInstanceExtensionProperties = |
| 76 | reinterpret_cast<PFN_vkEnumerateInstanceExtensionProperties>(dlsym(libvulkan, "vkEnumerateInstanceExtensionProperties")); |
| 77 | vkEnumerateDeviceExtensionProperties = |
| 78 | reinterpret_cast<PFN_vkEnumerateDeviceExtensionProperties>(dlsym(libvulkan, "vkEnumerateDeviceExtensionProperties")); |
| 79 | vkEnumerateInstanceLayerProperties = |
| 80 | reinterpret_cast<PFN_vkEnumerateInstanceLayerProperties>(dlsym(libvulkan, "vkEnumerateInstanceLayerProperties")); |
| 81 | vkEnumerateDeviceLayerProperties = |
| 82 | reinterpret_cast<PFN_vkEnumerateDeviceLayerProperties>(dlsym(libvulkan, "vkEnumerateDeviceLayerProperties")); |
| 83 | vkGetDeviceQueue = reinterpret_cast<PFN_vkGetDeviceQueue>(dlsym(libvulkan, "vkGetDeviceQueue")); |
| 84 | vkQueueSubmit = reinterpret_cast<PFN_vkQueueSubmit>(dlsym(libvulkan, "vkQueueSubmit")); |
| 85 | vkQueueWaitIdle = reinterpret_cast<PFN_vkQueueWaitIdle>(dlsym(libvulkan, "vkQueueWaitIdle")); |
| 86 | vkDeviceWaitIdle = reinterpret_cast<PFN_vkDeviceWaitIdle>(dlsym(libvulkan, "vkDeviceWaitIdle")); |
| 87 | vkAllocateMemory = reinterpret_cast<PFN_vkAllocateMemory>(dlsym(libvulkan, "vkAllocateMemory")); |
| 88 | vkFreeMemory = reinterpret_cast<PFN_vkFreeMemory>(dlsym(libvulkan, "vkFreeMemory")); |
| 89 | vkMapMemory = reinterpret_cast<PFN_vkMapMemory>(dlsym(libvulkan, "vkMapMemory")); |
| 90 | vkUnmapMemory = reinterpret_cast<PFN_vkUnmapMemory>(dlsym(libvulkan, "vkUnmapMemory")); |
| 91 | vkFlushMappedMemoryRanges = reinterpret_cast<PFN_vkFlushMappedMemoryRanges>(dlsym(libvulkan, "vkFlushMappedMemoryRanges")); |
| 92 | vkInvalidateMappedMemoryRanges = |
no outgoing calls
no test coverage detected