【问题标题】:Vulkan has problems loading "vkCreateDebugUtilsMessengerEXT" function addressVulkan 加载“vkCreateDebugUtilsMessengerEXT”函数地址有问题
【发布时间】: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”,我的错;这就是我对它的新认识)

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

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

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

【问题讨论】:

    标签: c++ graphics vulkan


    【解决方案1】:

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

    【讨论】:

    • 如果我应该删除整个问题,请告诉我,这似乎是我的一个愚蠢的错误!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    相关资源
    最近更新 更多