From 198004233b111334df7ca82954fe61a2a1ad3bd5 Mon Sep 17 00:00:00 2001 From: ladevieq Date: Fri, 25 Dec 2020 00:55:10 +0100 Subject: Setup vulkan and vulkan loader --- src/vulkan-loader.cpp | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 src/vulkan-loader.cpp (limited to 'src/vulkan-loader.cpp') diff --git a/src/vulkan-loader.cpp b/src/vulkan-loader.cpp new file mode 100644 index 0000000..32aa49b --- /dev/null +++ b/src/vulkan-loader.cpp @@ -0,0 +1,90 @@ +#include "vulkan-loader.hpp" + +#include + +#if defined(WINDOWS) +HMODULE vulkanLibrary = LoadLibrary("vulkan-1.dll"); + +#define LoadProcAddress GetProcAddress + +#elif defined(__linux__) +#include + +void *vulkanLibrary = dlopen( "libvulkan.so.1", RTLD_NOW ); + +#define LoadProcAddress dlsym +#endif + +#define X(name) PFN_##name name; + VULKAN_EXPORTED_FUNCTIONS + VULKAN_APPLICATION_FUNCTIONS + VULKAN_INSTANCE_FUNCTIONS + PLATFORM_VULKAN_INSTANCE_FUNCTIONS + VULKAN_DEVICE_FUNCTIONS +#undef X + +#define X(name) \ +void Load_##name() \ +{ \ + name = reinterpret_cast(LoadProcAddress(vulkanLibrary, #name)); \ + if (!name) { \ + std::cout << "Cannot load vulkan function " << #name << std::endl; \ + } \ +} +VULKAN_EXPORTED_FUNCTIONS +#undef X + +#define X(name) \ +void Load_##name() \ +{ \ + name = reinterpret_cast(vkGetInstanceProcAddr(nullptr, #name)); \ + if (!name) { \ + std::cout << "Cannot load vulkan function " << #name << std::endl; \ + } \ +} +VULKAN_APPLICATION_FUNCTIONS +#undef X + +#define X(name) \ +void Load_##name(VkInstance _instance) \ +{ \ + name = reinterpret_cast(vkGetInstanceProcAddr(_instance, #name)); \ + if (!name) { \ + std::cout << "Cannot load vulkan function " << #name << std::endl; \ + } \ +} +VULKAN_INSTANCE_FUNCTIONS +PLATFORM_VULKAN_INSTANCE_FUNCTIONS +#undef X + +#define X(name) \ +void Load_##name(VkDevice _device) \ +{ \ + name = reinterpret_cast(vkGetDeviceProcAddr(_device, #name)); \ + if (!name) { \ + std::cout << "Cannot load vulkan function " << #name << std::endl; \ + } \ +} +VULKAN_DEVICE_FUNCTIONS +#undef X + +void load_vulkan() +{ +#define X(name) Load_##name(); + VULKAN_EXPORTED_FUNCTIONS + VULKAN_APPLICATION_FUNCTIONS +#undef X +}; + +void load_instance_functions(VkInstance instance) { +#define X(name) Load_##name(instance); + VULKAN_INSTANCE_FUNCTIONS + PLATFORM_VULKAN_INSTANCE_FUNCTIONS +#undef X +} + +void load_device_functions(VkDevice device) { +#define X(name) void Load_##name(VkDevice _device); + VULKAN_DEVICE_FUNCTIONS +#undef X +} -- cgit v1.3