From 093d424eb48b2fae917547b48deb2e0a45efbed3 Mon Sep 17 00:00:00 2001 From: Steven Le Rouzic Date: Sat, 1 Feb 2025 00:05:19 +0100 Subject: Vulkan device creation --- hk21/vulkan_loader/api.hpp | 2 ++ hk21/vulkan_loader/fns.hpp | 11 ++++++++++- hk21/vulkan_loader/loader.cpp | 18 ++++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) (limited to 'hk21/vulkan_loader') diff --git a/hk21/vulkan_loader/api.hpp b/hk21/vulkan_loader/api.hpp index c248737..06e447a 100644 --- a/hk21/vulkan_loader/api.hpp +++ b/hk21/vulkan_loader/api.hpp @@ -13,6 +13,7 @@ #define FN(NAME) extern PFN_##NAME NAME; VULKAN_GLOBAL_FNS VULKAN_INSTANCE_FNS +VULKAN_DEVICE_FNS #undef FN namespace vulkan_loader @@ -20,6 +21,7 @@ namespace vulkan_loader asl::status load_global(PFN_vkGetInstanceProcAddr load_fn); asl::status load_instance(PFN_vkGetInstanceProcAddr load_fn, VkInstance instance); +asl::status load_device(VkDevice device); } // namespace vulkan_loader diff --git a/hk21/vulkan_loader/fns.hpp b/hk21/vulkan_loader/fns.hpp index ceb1105..09b6926 100644 --- a/hk21/vulkan_loader/fns.hpp +++ b/hk21/vulkan_loader/fns.hpp @@ -4,4 +4,13 @@ #define VULKAN_INSTANCE_FNS \ FN(vkDestroyInstance) \ - FN(vkDestroySurfaceKHR) + FN(vkDestroySurfaceKHR) \ + FN(vkEnumeratePhysicalDevices) \ + FN(vkGetPhysicalDeviceProperties) \ + FN(vkGetPhysicalDeviceQueueFamilyProperties) \ + FN(vkCreateDevice) \ + FN(vkGetDeviceProcAddr) + +#define VULKAN_DEVICE_FNS \ + FN(vkDestroyDevice) \ + FN(vkGetDeviceQueue) diff --git a/hk21/vulkan_loader/loader.cpp b/hk21/vulkan_loader/loader.cpp index 2a58cd9..4b2b6d6 100644 --- a/hk21/vulkan_loader/loader.cpp +++ b/hk21/vulkan_loader/loader.cpp @@ -3,6 +3,7 @@ #define FN(NAME) PFN_##NAME NAME; VULKAN_GLOBAL_FNS VULKAN_INSTANCE_FNS +VULKAN_DEVICE_FNS #undef FN asl::status vulkan_loader::load_global(PFN_vkGetInstanceProcAddr load_fn) @@ -43,3 +44,20 @@ VULKAN_INSTANCE_FNS return has_errors ? asl::runtime_error("Couldn't load Vulkan instance functions") : asl::ok(); } +asl::status vulkan_loader::load_device(VkDevice device) +{ + bool has_errors = false; + +#define FN(NAME) \ + NAME = asl::bit_cast(vkGetDeviceProcAddr(device, #NAME)); \ + if (NAME == nullptr) \ + { \ + ASL_ASSERT(NAME != nullptr); \ + has_errors = true; \ + } +VULKAN_DEVICE_FNS +#undef FN + + return has_errors ? asl::runtime_error("Couldn't load Vulkan device functions") : asl::ok(); +} + -- cgit