package gpu_core import "core:dynlib" import "core:log" import vk "vendor:vulkan" @(private) vulkan_lib: dynlib.Library // Load the Vulkan shared library and initialize global proc addresses load_vulkan :: proc() -> bool { when ODIN_OS == .Linux { lib, ok := dynlib.load_library("libvulkan.so.1") if !ok { lib, ok = dynlib.load_library("libvulkan.so") if !ok { log.error("gpu/core: failed to load libvulkan.so") return false } } vulkan_lib = lib } else when ODIN_OS == .Windows { lib, ok := dynlib.load_library("vulkan-1.dll") if !ok { log.error("gpu/core: failed to load vulkan-1.dll") return false } vulkan_lib = lib } else { log.error("gpu/core: unsupported platform for Vulkan loading") return false } get_instance_proc_addr, found := dynlib.symbol_address(vulkan_lib, "vkGetInstanceProcAddr") if !found || get_instance_proc_addr == nil { log.error("gpu/core: failed to find vkGetInstanceProcAddr") unload_vulkan() return false } // Initialize all global Vulkan procedure addresses vk.load_proc_addresses_global(get_instance_proc_addr) return true } unload_vulkan :: proc() { if vulkan_lib != nil { dynlib.unload_library(vulkan_lib) vulkan_lib = nil } }