I've been trying to write Vulkan bindings for a language and I'm a bit confused about how extensions work. On Linux I'm using libdl to load function pointers from libvulkan.so.1
, and I've noticed that some extension functions (like those from VK_KHR_swapchain
and VK_KHR_Wayland_Surface
) can be linked through libdl, but others (like the ones in VK_EXT_debug_utils
or VK_EXT_extended_dynamic_state2
) can only be found through vkGetInstanceProcAddr
or vkGetDeviceProcAddr
.
My questions are these:
VK_KHR_swapchain
extension is available, vkCreateSwapchainKHR
will definitly be found by libdl?)TFM:
Vulkan Direct Exports
The loader library on Windows, Linux, Android, and macOS will export all core Vulkan entry-points and all appropriate Window System Interface (WSI) entry-points. This is done to make it simpler to get started with Vulkan development. When an application links directly to the loader library in this way, the Vulkan calls are simple trampoline functions that jump to the appropriate dispatch table entry for the object they are given.