Я столкнулся со странной проблемой. Я могу использовать vkEnumerateInstanceVersion
из vulkan.h
, но использование vk::enumerateInstanceVersion()
из vulkan.hpp
вызывает memory access violation
(segfault).
Я использую эту функцию для создания vk::Instance
:
static vk::Instance createInstance()
{
loadVulkanGlobalFunctions();
uint32_t version;
vkEnumerateInstanceVersion(&version); // works fine, returns version 1.2.131
version = vk::enumerateInstanceVersion(); // error 0xC0000005 memory access violation
std::cout << "Supported Vulkan Version is "
<< VK_VERSION_MAJOR(version) << '.'
<< VK_VERSION_MINOR(version) << '.'
<< VK_VERSION_PATCH(version) << '\n';
// instance creation ...
}
Я загружаю глобальные функции Vulkan, используя динамический c загрузчик по умолчанию:
static void loadVulkanGlobalFunctions()
{
vk::DynamicLoader loader;
auto vkGetInstanceProcAddr = loader.getProcAddress<PFN_vkGetInstanceProcAddr>("vkGetInstanceProcAddr");
VULKAN_HPP_DEFAULT_DISPATCHER.init(vkGetInstanceProcAddr);
}
I #define VULKAN_HPP_DISPATCH_LOADER_DYNAMIC 1
до #include <vulkan/vulkan.hpp>
, и в моем коде VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE
ровно один раз.