Switch to a dynamic dispatch table instead of linking hard against libvulkan.
This commit is contained in:
parent
e308fb04db
commit
5b2d8236a7
7 changed files with 23 additions and 17 deletions
|
@ -158,6 +158,8 @@ else()
|
|||
find_package(fmt REQUIRED)
|
||||
endif()
|
||||
|
||||
add_compile_definitions(VULKAN_HPP_DISPATCH_LOADER_DYNAMIC=1)
|
||||
|
||||
# ####################################################
|
||||
# Preprocessor Macros
|
||||
# ####################################################
|
||||
|
|
|
@ -59,7 +59,7 @@ if(KOMPUTE_OPT_ANDROID_BUILD)
|
|||
kp_shader
|
||||
fmt::fmt-header-only)
|
||||
else()
|
||||
target_link_libraries(kompute PUBLIC Vulkan::Vulkan
|
||||
target_link_libraries(kompute PUBLIC
|
||||
kp_logger
|
||||
kp_shader
|
||||
fmt::fmt-header-only)
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
|
||||
#include "kompute/Core.hpp"
|
||||
|
||||
#if VK_USE_PLATFORM_ANDROID_KHR
|
||||
#ifndef KOMPUTE_VK_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE
|
||||
#define KOMPUTE_VK_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE
|
||||
/**
|
||||
|
@ -21,7 +20,6 @@
|
|||
**/
|
||||
VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE
|
||||
#endif // !KOMPUTE_VK_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE
|
||||
#endif // VK_USE_PLATFORM_ANDROID_KHR
|
||||
|
||||
namespace kp {
|
||||
} // namespace kp
|
||||
|
|
|
@ -223,20 +223,21 @@ Manager::createInstance()
|
|||
}
|
||||
#endif
|
||||
|
||||
#if VK_USE_PLATFORM_ANDROID_KHR
|
||||
vk::DynamicLoader dl;
|
||||
try {
|
||||
mDynamicLoader = std::make_shared<vk::DynamicLoader>();
|
||||
} catch (const std::exception & err) {
|
||||
return;
|
||||
}
|
||||
|
||||
PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr =
|
||||
dl.getProcAddress<PFN_vkGetInstanceProcAddr>("vkGetInstanceProcAddr");
|
||||
mDynamicLoader->getProcAddress<PFN_vkGetInstanceProcAddr>("vkGetInstanceProcAddr");
|
||||
VULKAN_HPP_DEFAULT_DISPATCHER.init(vkGetInstanceProcAddr);
|
||||
#endif // VK_USE_PLATFORM_ANDROID_KHR
|
||||
|
||||
this->mInstance = std::make_shared<vk::Instance>();
|
||||
vk::createInstance(
|
||||
&computeInstanceCreateInfo, nullptr, this->mInstance.get());
|
||||
|
||||
#if VK_USE_PLATFORM_ANDROID_KHR
|
||||
VULKAN_HPP_DEFAULT_DISPATCHER.init(*this->mInstance);
|
||||
#endif // VK_USE_PLATFORM_ANDROID_KHR
|
||||
|
||||
KP_LOG_DEBUG("Kompute Manager Instance Created");
|
||||
|
||||
|
|
|
@ -43,6 +43,10 @@ class Manager
|
|||
return this->mDevice.get();
|
||||
}
|
||||
|
||||
bool hasVulkan() const {
|
||||
return this->mDynamicLoader.get();
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize a device.
|
||||
*
|
||||
|
@ -240,6 +244,7 @@ class Manager
|
|||
bool mFreeInstance = false;
|
||||
std::shared_ptr<vk::PhysicalDevice> mPhysicalDevice = nullptr;
|
||||
std::shared_ptr<vk::Device> mDevice = nullptr;
|
||||
std::shared_ptr<vk::DynamicLoader> mDynamicLoader = nullptr;
|
||||
bool mFreeDevice = false;
|
||||
|
||||
// -------------- ALWAYS OWNED RESOURCES
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue