From 921d1811ece439086aa238a6356a54d00f179e27 Mon Sep 17 00:00:00 2001 From: Steven Le Rouzic Date: Tue, 8 Apr 2025 23:18:47 +0200 Subject: Move the Vulkan loader --- hk21/game/BUILD.bazel | 2 +- hk21/game/gpu.cpp | 2 +- hk21/vulkan/BUILD.bazel | 16 ++++++++++ hk21/vulkan/loader/BUILD.bazel | 21 +++++++++++++ hk21/vulkan/loader/fns.hpp | 47 +++++++++++++++++++++++++++++ hk21/vulkan/loader/loader.cpp | 67 ++++++++++++++++++++++++++++++++++++++++++ hk21/vulkan/loader/loader.hpp | 27 +++++++++++++++++ hk21/vulkan/vulkan.hpp | 12 ++++++++ hk21/vulkan_loader/BUILD.bazel | 21 ------------- hk21/vulkan_loader/api.hpp | 31 ------------------- hk21/vulkan_loader/fns.hpp | 47 ----------------------------- hk21/vulkan_loader/loader.cpp | 67 ------------------------------------------ 12 files changed, 192 insertions(+), 168 deletions(-) create mode 100644 hk21/vulkan/BUILD.bazel create mode 100644 hk21/vulkan/loader/BUILD.bazel create mode 100644 hk21/vulkan/loader/fns.hpp create mode 100644 hk21/vulkan/loader/loader.cpp create mode 100644 hk21/vulkan/loader/loader.hpp create mode 100644 hk21/vulkan/vulkan.hpp delete mode 100644 hk21/vulkan_loader/BUILD.bazel delete mode 100644 hk21/vulkan_loader/api.hpp delete mode 100644 hk21/vulkan_loader/fns.hpp delete mode 100644 hk21/vulkan_loader/loader.cpp diff --git a/hk21/game/BUILD.bazel b/hk21/game/BUILD.bazel index d784b70..0a571f3 100644 --- a/hk21/game/BUILD.bazel +++ b/hk21/game/BUILD.bazel @@ -17,7 +17,7 @@ cc_binary( "@asl//asl/types:option", "@asl//asl/containers:buffer", "@sdl3_windows//:sdl3", - "//hk21/vulkan_loader", + "//hk21/vulkan/loader", ], applicable_licenses = ["//:license"], ) diff --git a/hk21/game/gpu.cpp b/hk21/game/gpu.cpp index 3ea0da1..b9971fe 100644 --- a/hk21/game/gpu.cpp +++ b/hk21/game/gpu.cpp @@ -13,7 +13,7 @@ #include -#include "hk21/vulkan_loader/api.hpp" +#include "hk21/vulkan/loader/loader.hpp" // @Todo Make fences recyclable // @Todo Make command pool recyclable diff --git a/hk21/vulkan/BUILD.bazel b/hk21/vulkan/BUILD.bazel new file mode 100644 index 0000000..25cc0d6 --- /dev/null +++ b/hk21/vulkan/BUILD.bazel @@ -0,0 +1,16 @@ +# Copyright 2025 Steven Le Rouzic +# +# SPDX-License-Identifier: BSD-3-Clause + +cc_library( + name = "vulkan", + hdrs = [ + "vulkan.hpp", + ], + deps = [ + "//vendor/vulkan", + "@asl//asl/base", + ], + visibility = ["//:__subpackages__"], + applicable_licenses = ["//:license"], +) diff --git a/hk21/vulkan/loader/BUILD.bazel b/hk21/vulkan/loader/BUILD.bazel new file mode 100644 index 0000000..32e8f03 --- /dev/null +++ b/hk21/vulkan/loader/BUILD.bazel @@ -0,0 +1,21 @@ +# Copyright 2025 Steven Le Rouzic +# +# SPDX-License-Identifier: BSD-3-Clause + +cc_library( + name = "loader", + hdrs = [ + "loader.hpp", + ], + srcs = [ + "loader.cpp", + "fns.hpp", + ], + deps = [ + "//hk21/vulkan", + "@asl//asl/base", + "@asl//asl/types:status", + ], + visibility = ["//:__subpackages__"], + applicable_licenses = ["//:license"], +) diff --git a/hk21/vulkan/loader/fns.hpp b/hk21/vulkan/loader/fns.hpp new file mode 100644 index 0000000..377b103 --- /dev/null +++ b/hk21/vulkan/loader/fns.hpp @@ -0,0 +1,47 @@ +// Copyright 2025 Steven Le Rouzic +// +// SPDX-License-Identifier: BSD-3-Clause + +#define VULKAN_GLOBAL_FNS \ + FN(vkEnumerateInstanceVersion) \ + FN(vkCreateInstance) + +#define VULKAN_INSTANCE_FNS \ + FN(vkDestroyInstance) \ + FN(vkDestroySurfaceKHR) \ + FN(vkEnumeratePhysicalDevices) \ + FN(vkGetPhysicalDeviceProperties) \ + FN(vkGetPhysicalDeviceQueueFamilyProperties) \ + FN(vkCreateDevice) \ + FN(vkGetDeviceProcAddr) \ + FN(vkGetPhysicalDeviceSurfaceCapabilitiesKHR) \ + FN(vkGetPhysicalDeviceSurfaceFormatsKHR) \ + FN(vkGetPhysicalDeviceSurfacePresentModesKHR) \ + FN(vkGetPhysicalDeviceFeatures2) + +#define VULKAN_DEVICE_FNS \ + FN(vkDestroyDevice) \ + FN(vkGetDeviceQueue) \ + FN(vkCreateSwapchainKHR) \ + FN(vkDestroySwapchainKHR) \ + FN(vkGetSwapchainImagesKHR) \ + FN(vkAcquireNextImageKHR) \ + FN(vkQueuePresentKHR) \ + FN(vkCreateCommandPool) \ + FN(vkDestroyCommandPool) \ + FN(vkResetCommandPool) \ + FN(vkDeviceWaitIdle) \ + FN(vkAllocateCommandBuffers) \ + FN(vkResetCommandBuffer) \ + FN(vkFreeCommandBuffers) \ + FN(vkBeginCommandBuffer) \ + FN(vkEndCommandBuffer) \ + FN(vkQueueSubmit2) \ + FN(vkCreateSemaphore) \ + FN(vkDestroySemaphore) \ + FN(vkCmdPipelineBarrier2) \ + FN(vkCmdClearColorImage) \ + FN(vkCreateFence) \ + FN(vkDestroyFence) \ + FN(vkGetFenceStatus) + diff --git a/hk21/vulkan/loader/loader.cpp b/hk21/vulkan/loader/loader.cpp new file mode 100644 index 0000000..e5e73d0 --- /dev/null +++ b/hk21/vulkan/loader/loader.cpp @@ -0,0 +1,67 @@ +// Copyright 2025 Steven Le Rouzic +// +// SPDX-License-Identifier: BSD-3-Clause + +#include "hk21/vulkan/loader/loader.hpp" + +#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) +{ + (void)load_fn; + + bool has_errors = false; + +#define FN(NAME) \ + NAME = asl::bit_cast(load_fn(VK_NULL_HANDLE, #NAME)); \ + if (NAME == nullptr) \ + { \ + ASL_ASSERT(NAME != nullptr); \ + has_errors = true; \ + } +VULKAN_GLOBAL_FNS +#undef FN + + return has_errors ? asl::runtime_error("Couldn't load Vulkan global functions") : 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("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(); +} + diff --git a/hk21/vulkan/loader/loader.hpp b/hk21/vulkan/loader/loader.hpp new file mode 100644 index 0000000..e1147f4 --- /dev/null +++ b/hk21/vulkan/loader/loader.hpp @@ -0,0 +1,27 @@ +// Copyright 2025 Steven Le Rouzic +// +// SPDX-License-Identifier: BSD-3-Clause + +#pragma once + +#include +#include + +#include "hk21/vulkan/vulkan.hpp" +#include "hk21/vulkan/loader/fns.hpp" + +#define FN(NAME) extern PFN_##NAME NAME; +VULKAN_GLOBAL_FNS +VULKAN_INSTANCE_FNS +VULKAN_DEVICE_FNS +#undef FN + +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/vulkan.hpp b/hk21/vulkan/vulkan.hpp new file mode 100644 index 0000000..0e3242b --- /dev/null +++ b/hk21/vulkan/vulkan.hpp @@ -0,0 +1,12 @@ +// Copyright 2025 Steven Le Rouzic +// +// SPDX-License-Identifier: BSD-3-Clause + +#pragma once + +#include + +#define VK_NO_STDDEF_H +#define VK_NO_STDINT_H +#define VK_NO_PROTOTYPES +#include diff --git a/hk21/vulkan_loader/BUILD.bazel b/hk21/vulkan_loader/BUILD.bazel deleted file mode 100644 index 30a8770..0000000 --- a/hk21/vulkan_loader/BUILD.bazel +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright 2025 Steven Le Rouzic -# -# SPDX-License-Identifier: BSD-3-Clause - -cc_library( - name = "vulkan_loader", - hdrs = [ - "api.hpp", - ], - srcs = [ - "loader.cpp", - "fns.hpp", - ], - deps = [ - "//vendor/vulkan", - "@asl//asl/base", - "@asl//asl/types:status", - ], - visibility = ["//:__subpackages__"], - applicable_licenses = ["//:license"], -) diff --git a/hk21/vulkan_loader/api.hpp b/hk21/vulkan_loader/api.hpp deleted file mode 100644 index 00382e4..0000000 --- a/hk21/vulkan_loader/api.hpp +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2025 Steven Le Rouzic -// -// SPDX-License-Identifier: BSD-3-Clause - -#pragma once - -#include -#include - -#define VK_NO_STDDEF_H -#define VK_NO_STDINT_H -#define VK_NO_PROTOTYPES -#include - -#include "hk21/vulkan_loader/fns.hpp" - -#define FN(NAME) extern PFN_##NAME NAME; -VULKAN_GLOBAL_FNS -VULKAN_INSTANCE_FNS -VULKAN_DEVICE_FNS -#undef FN - -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 deleted file mode 100644 index 377b103..0000000 --- a/hk21/vulkan_loader/fns.hpp +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2025 Steven Le Rouzic -// -// SPDX-License-Identifier: BSD-3-Clause - -#define VULKAN_GLOBAL_FNS \ - FN(vkEnumerateInstanceVersion) \ - FN(vkCreateInstance) - -#define VULKAN_INSTANCE_FNS \ - FN(vkDestroyInstance) \ - FN(vkDestroySurfaceKHR) \ - FN(vkEnumeratePhysicalDevices) \ - FN(vkGetPhysicalDeviceProperties) \ - FN(vkGetPhysicalDeviceQueueFamilyProperties) \ - FN(vkCreateDevice) \ - FN(vkGetDeviceProcAddr) \ - FN(vkGetPhysicalDeviceSurfaceCapabilitiesKHR) \ - FN(vkGetPhysicalDeviceSurfaceFormatsKHR) \ - FN(vkGetPhysicalDeviceSurfacePresentModesKHR) \ - FN(vkGetPhysicalDeviceFeatures2) - -#define VULKAN_DEVICE_FNS \ - FN(vkDestroyDevice) \ - FN(vkGetDeviceQueue) \ - FN(vkCreateSwapchainKHR) \ - FN(vkDestroySwapchainKHR) \ - FN(vkGetSwapchainImagesKHR) \ - FN(vkAcquireNextImageKHR) \ - FN(vkQueuePresentKHR) \ - FN(vkCreateCommandPool) \ - FN(vkDestroyCommandPool) \ - FN(vkResetCommandPool) \ - FN(vkDeviceWaitIdle) \ - FN(vkAllocateCommandBuffers) \ - FN(vkResetCommandBuffer) \ - FN(vkFreeCommandBuffers) \ - FN(vkBeginCommandBuffer) \ - FN(vkEndCommandBuffer) \ - FN(vkQueueSubmit2) \ - FN(vkCreateSemaphore) \ - FN(vkDestroySemaphore) \ - FN(vkCmdPipelineBarrier2) \ - FN(vkCmdClearColorImage) \ - FN(vkCreateFence) \ - FN(vkDestroyFence) \ - FN(vkGetFenceStatus) - diff --git a/hk21/vulkan_loader/loader.cpp b/hk21/vulkan_loader/loader.cpp deleted file mode 100644 index 7b24979..0000000 --- a/hk21/vulkan_loader/loader.cpp +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2025 Steven Le Rouzic -// -// SPDX-License-Identifier: BSD-3-Clause - -#include "hk21/vulkan_loader/api.hpp" - -#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) -{ - (void)load_fn; - - bool has_errors = false; - -#define FN(NAME) \ - NAME = asl::bit_cast(load_fn(VK_NULL_HANDLE, #NAME)); \ - if (NAME == nullptr) \ - { \ - ASL_ASSERT(NAME != nullptr); \ - has_errors = true; \ - } -VULKAN_GLOBAL_FNS -#undef FN - - return has_errors ? asl::runtime_error("Couldn't load Vulkan global functions") : 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("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