/// D Bindings to Vulkan API for Gfx-d module gfx.bindings.vulkan; import gfx.bindings.core; public import gfx.bindings.vulkan.vk; import std.exception; @nogc nothrow pure { uint VK_MAKE_VERSION( uint major, uint minor, uint patch ) { return ( major << 22 ) | ( minor << 12 ) | ( patch ); } uint VK_API_VERSION_1_0() { return VK_MAKE_VERSION( 1, 0, 0 ); } uint VK_VERSION_MAJOR( uint ver ) { return ver >> 22; } uint VK_VERSION_MINOR( uint ver ) { return ( ver >> 12 ) & 0x3ff; } uint VK_VERSION_PATCH( uint ver ) { return ver & 0xfff; } } enum VK_NULL_HANDLE = null; version(X86_64) { enum VK_NULL_ND_HANDLE = null; } else { enum VK_NULL_ND_HANDLE = 0; } VkGlobalCmds loadVulkanGlobalCmds() { version( Windows ) enum libName = "vulkan-1.dll"; else version( Posix ) enum libName = "libvulkan.so.1"; else static assert (false, "Vulkan bindings not supported on this OS"); auto lib = enforce(openSharedLib(libName), "Cannot open "~libName); auto getInstanceProcAddr = enforce( cast(PFN_vkGetInstanceProcAddr)loadSharedSym(lib, "vkGetInstanceProcAddr"), "Could not load vkGetInstanceProcAddr from "~libName ); return new VkGlobalCmds(getInstanceProcAddr); }