Vulkan 加载 "vkCreateDebugUtilsMessengerEXT" 函数地址时出现问题

Vulkan has problems loading "vkCreateDebugUtilsMessengerEXT" function address

上下文:我使用的是带有最新驱动程序的 gtx 760,windows10 和最新版本的 vulkan。我目前在他们的主页(Vulkan`s)上关注这部分教程:https://vulkan-tutorial.com/en/Drawing_a_triangle/Setup/Validation_layers

本教程使用 GLFW 进行 window 创建(在我的代码中使用)和我的代码中未使用的线性代数数学库。

代码:

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 。如果您认为有必要 review/test,这是我的完整代码:https://github.com/quartuxz/VulcanDoesntWork

(是的,我知道存储库使用“vulcan”而不是“vulkan”,我的错;这就是我对它的新认识)

问题是为什么在以下情况下加载函数地址会失败:

  1. 我安装的 vulkan 通过了所有完整性和有效性测试。
  2. 我的显卡支持 vulkan(以及 运行 调试 vulkan 功能所需的所有功能)并且是最新的驱动程序。
  3. 我完成了上一步设置 VkInstanceCreateInfo.ppEnabledExtensionsNames 和 VK_EXT_DEBUG_REPORT_EXTENSION_NAME
  4. 本教程的其他步骤我都做对了,至少我希望如此。

vulkan 是否改变了它这个特定部分的工作方式?这个功能有替代品吗?为什么我加载不了这个函数的地址?

您必须设置的不是 VK_EXT_DEBUG_REPORT_EXTENSION_NAME,而是:VK_EXT_DEBUG_UTILS_EXTENSION_NAME。还要确保您的 vulkan sdk 安装状况良好,您的驱动程序也必须是最新的。在完成我提到的最后两件事后尝试重新启动计算机 为了安全起见 .