1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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
}
}