From 639de20a5b78c8c70f3d7dcc02e62b13f6e749f0 Mon Sep 17 00:00:00 2001 From: Steven Le Rouzic Date: Wed, 22 Jan 2025 23:43:09 +0100 Subject: Create Vulkan instance --- hk21/vulkan_loader/api.hpp | 2 ++ hk21/vulkan_loader/fns.hpp | 3 +++ hk21/vulkan_loader/loader.cpp | 20 ++++++++++++++++++++ 3 files changed, 25 insertions(+) (limited to 'hk21') 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(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(); +} + -- cgit