【发布时间】:2020-07-25 09:12:14
【问题描述】:
上下文:我使用的是带有最新驱动程序、Windows 10 和最新版本 vulkan 的 gtx 760。我目前在他们的主页(Vulkan`s)上关注这部分教程:https://vulkan-tutorial.com/en/Drawing_a_triangle/Setup/Validation_layers
本教程使用 GLFW 来创建窗口(在我的代码中使用)和我的代码中未使用的线性代数数学库。
代码:
VkResult CreateDebugUtilsMessengerEXT(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT*
pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugUtilsMessengerEXT* pDebugMessenger) {
auto func = (PFN_vkCreateDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance, "vkCreateDebugUtilsMessengerEXT");
if (func != nullptr) {
return func(instance, pCreateInfo, pAllocator, pDebugMessenger);
}
else {
std::cerr << "error extension not present"<<std::endl;
return VK_ERROR_EXTENSION_NOT_PRESENT;
}
}
我得到打印“错误扩展不存在”的 else 分支。我确实在 VkInstanceCreateInfo.ppEnabledExtensionsNames 中设置了 VK_EXT_DEBUG_REPORT_EXTENSION_NAME 。如果您认为有必要对其进行审查/测试,这是我的完整代码:https://github.com/quartuxz/VulcanDoesntWork
(是的,我知道存储库使用“vulcan”而不是“vulkan”,我的错;这就是我对它的新认识)
那么问题是为什么在以下情况下函数地址的加载会失败:
- 我安装的 vulkan 通过了所有完整性和有效性测试。
- 我的显卡支持 vulkan(以及运行调试 vulkan 功能所需的所有功能)并且驱动程序是最新的。
- 我使用 VK_EXT_DEBUG_REPORT_EXTENSION_NAME 完成了设置 VkInstanceCreateInfo.ppEnabledExtensionsNames 的上一步
- 本教程的所有其他步骤我都做对了,至少我希望是这样。
vulkan 是否改变了它的这个特定部分的工作方式?这个功能有替代品吗?为什么加载不了这个函数的地址?
【问题讨论】: