summaryrefslogtreecommitdiff
path: root/hk21/vulkan_loader
diff options
context:
space:
mode:
authorSteven Le Rouzic <steven.lerouzic@gmail.com>2025-01-22 23:43:09 +0100
committerSteven Le Rouzic <steven.lerouzic@gmail.com>2025-01-22 23:43:09 +0100
commit639de20a5b78c8c70f3d7dcc02e62b13f6e749f0 (patch)
tree42cce01cc415c29624855fd38ef6a5d978c7f7dc /hk21/vulkan_loader
parentdf1b3ccfba1d88d382dab2e83cc950f3dc55995d (diff)
Create Vulkan instance
Diffstat (limited to 'hk21/vulkan_loader')
-rw-r--r--hk21/vulkan_loader/api.hpp2
-rw-r--r--hk21/vulkan_loader/fns.hpp3
-rw-r--r--hk21/vulkan_loader/loader.cpp20
3 files changed, 25 insertions, 0 deletions
diff --git a/hk21/vulkan_loader/api.hpp b/hk21/vulkan_loader/api.hpp
index 08003e5..c248737 100644
--- a/hk21/vulkan_loader/api.hpp
+++ b/hk21/vulkan_loader/api.hpp
@@ -12,12 +12,14 @@
#define FN(NAME) extern PFN_##NAME NAME;
VULKAN_GLOBAL_FNS
+VULKAN_INSTANCE_FNS
#undef FN
namespace vulkan_loader
{
asl::status load_global(PFN_vkGetInstanceProcAddr load_fn);
+asl::status load_instance(PFN_vkGetInstanceProcAddr load_fn, VkInstance instance);
} // namespace vulkan_loader
diff --git a/hk21/vulkan_loader/fns.hpp b/hk21/vulkan_loader/fns.hpp
index 5e35b39..c0e8f85 100644
--- a/hk21/vulkan_loader/fns.hpp
+++ b/hk21/vulkan_loader/fns.hpp
@@ -1,3 +1,6 @@
#define VULKAN_GLOBAL_FNS \
FN(vkEnumerateInstanceVersion) \
FN(vkCreateInstance)
+
+#define VULKAN_INSTANCE_FNS \
+ FN(vkDestroyInstance)
diff --git a/hk21/vulkan_loader/loader.cpp b/hk21/vulkan_loader/loader.cpp
index 4437282..c805fb1 100644
--- a/hk21/vulkan_loader/loader.cpp
+++ b/hk21/vulkan_loader/loader.cpp
@@ -2,6 +2,7 @@
#define FN(NAME) PFN_##NAME NAME;
VULKAN_GLOBAL_FNS
+VULKAN_INSTANCE_FNS
#undef FN
asl::status vulkan_loader::load_global(PFN_vkGetInstanceProcAddr load_fn)
@@ -23,3 +24,22 @@ VULKAN_GLOBAL_FNS
return has_errors ? asl::runtime_error() : asl::ok();
}
+asl::status vulkan_loader::load_instance(PFN_vkGetInstanceProcAddr load_fn, VkInstance instance)
+{
+ (void)load_fn;
+
+ bool has_errors = false;
+
+#define FN(NAME) \
+ NAME = asl::bit_cast<PFN_##NAME>(load_fn(instance, #NAME)); \
+ if (NAME == nullptr) \
+ { \
+ ASL_ASSERT(NAME != nullptr); \
+ has_errors = true; \
+ }
+VULKAN_INSTANCE_FNS
+#undef FN
+
+ return has_errors ? asl::runtime_error() : asl::ok();
+}
+