diff options
| author | ladevieq <ladevie.quentin@gmail.com> | 2020-12-25 00:55:10 +0100 |
|---|---|---|
| committer | ladevieq <ladevie.quentin@gmail.com> | 2020-12-25 00:57:56 +0100 |
| commit | 198004233b111334df7ca82954fe61a2a1ad3bd5 (patch) | |
| tree | ef677a842374e7c836acf63b685469bde2c10f34 /src/vulkan-loader.cpp | |
| parent | e35c849f1bd0ed3c3123fb253897a6e427f789ab (diff) | |
Setup vulkan and vulkan loader
Diffstat (limited to 'src/vulkan-loader.cpp')
| -rw-r--r-- | src/vulkan-loader.cpp | 90 |
1 files changed, 90 insertions, 0 deletions
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 <iostream> + +#if defined(WINDOWS) +HMODULE vulkanLibrary = LoadLibrary("vulkan-1.dll"); + +#define LoadProcAddress GetProcAddress + +#elif defined(__linux__) +#include <dlfcn.h> + +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<PFN_##name>(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<PFN_##name>(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<PFN_##name>(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<PFN_##name>(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 +} |
