繁体   English   中英

Vulkan 在加载“vkCreateDebugUtilsMessengerEXT”function 地址时出现问题

[英]Vulkan has problems loading “vkCreateDebugUtilsMessengerEXT” function address

上下文:我使用带有最新驱动程序的 gtx 760、windows 10 和最新版本的 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。 如果您认为有必要对其进行审查/测试,这是我的完整代码: https://github.com/quartuxz/VulcanDoesntWork

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM