summaryrefslogtreecommitdiff
path: root/hk21/vulkan_loader
diff options
context:
space:
mode:
Diffstat (limited to 'hk21/vulkan_loader')
-rw-r--r--hk21/vulkan_loader/api.hpp2
-rw-r--r--hk21/vulkan_loader/fns.hpp11
-rw-r--r--hk21/vulkan_loader/loader.cpp18
3 files changed, 30 insertions, 1 deletions
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<PFN_##NAME>(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();
+}
+