【发布时间】:2020-07-11 16:00:30
【问题描述】:
我遇到了一个奇怪的问题。我可以使用来自vulkan.h 的vkEnumerateInstanceVersion,但使用来自vulkan.hpp 的vk::enumerateInstanceVersion() 会导致memory access violation(段错误)。
我使用这个函数来创建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 函数:
static void loadVulkanGlobalFunctions()
{
vk::DynamicLoader loader;
auto vkGetInstanceProcAddr = loader.getProcAddress<PFN_vkGetInstanceProcAddr>("vkGetInstanceProcAddr");
VULKAN_HPP_DEFAULT_DISPATCHER.init(vkGetInstanceProcAddr);
}
我在#include <vulkan/vulkan.hpp> 之前是#define VULKAN_HPP_DISPATCH_LOADER_DYNAMIC 1,而我的代码中只有一次VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE。
【问题讨论】:
标签: c++ graphics 3d segmentation-fault vulkan