首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MoltenVK驱动程序为某些Vulkan函数调用调用了错误的函数

MoltenVK驱动程序为某些Vulkan函数调用调用了错误的函数
EN

Stack Overflow用户
提问于 2018-07-29 10:07:34
回答 1查看 309关注 0票数 2

我正在尝试在MacOS上使用Vulkan,最终的目标是制作一个跨平台的程序。当我静态链接MoltenVK (复制了vulkan头文件)时,我的程序就可以工作了。

我当前的设置是静态链接vulkan.framework,并使用ICD加载libMoltenVK.dylib。这最初似乎是有效的:在日志中,我可以看到"INFO: Found ICD manifest file expected to my manifest file“。我期望的所有扩展名都会被找到并列出,包括VK_KHR_surface。我在创建VkInstance时启用了它。

我可以成功地调用各种vulkan函数,包括vkCreateMacOSSurfaceMVK。然而,当我尝试调用vkGetPhysicalDeviceSurfaceCapabilitiesKHR时,我的程序崩溃了。

由于没有验证层,vulkan似乎加载了错误的函数:调用堆栈中的下一个符号是vkCreateQueryPool,而不是预期的vkGetPhysicalDeviceSurfaceCapabilitiesKHR,MoltenVK打印[***MoltenVK ERROR***] VK_ERROR_INITIALIZATION_FAILED: vkCreateQueryPool: Unsupported query pool type: -1094795586。程序在下一个vulkan调用时崩溃,这个调用碰巧是vkGetPhysicalDeviceSurfaceFormatsKHR,但实际上是调用MVKDevice::destoryQueryPool

打开验证层后,程序会在试图调用0x0vkGetPhysicalDeviceSurfaceCapabilitiesKHR上崩溃。对于它们中的任何一个,都没有打印验证失败的错误。

我尝试在Xcode的方案编辑器中启用Dynamic Linker API usage/ Dynamic Library loads,但我发现它们提供的信息没有帮助。

为什么vulkan/dyld不能正确地连接一些函数?我如何调试它呢?

EN

回答 1

Stack Overflow用户

发布于 2018-07-31 00:57:33

您实际上使用的是Vulkan Loader,而不是"ICD",来加载libMoltenVK.dylib。libMoltenVK.dylib本身被认为是可安装的客户端驱动程序(ICD)。

您是否正在使用vkGetInstanceProcAddr()获取vkGetPhysicalDeviceSurfaceCapabilitiesKHR()的函数地址?Vulkan Loader仅导出核心(和一些WSI)函数。您需要使用vkGetInstanceProcAddr()获取其他扩展函数的地址。

有关使用GIPA的示例,请参阅此code。搜索"vkGetPhysicalDeviceSurfaceCapabilitiesKHR“。vulkaninfo在MacOS上成功调用此扩展。

我怀疑MoltenVK库直接导出了这个扩展函数,这就是为什么在静态链接MoltenVK时它可以工作的原因。此外,在使用Vulkan加载器时,不应该将MoltenVK库链接到您的应用程序。Vulkan装载器会为你装载它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51576674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档