Vulkan在Linux

时间:2018-03-26 23:44:20

标签: linux shared-libraries vulkan

我的所有Vulkan SDK路径都来自.profile,并在回显时提供以下结果:

enter image description here

我可以枚举所有图层,应用程序编译没有问题。但是,当我运行它时,我从调试报告回调中收到以下错误消息:

enter image description here

我使用的是带有387.42.05驱动程序的GTX 1060的Ubuntu 17.10,它支持Vulkan 1.1。

使用LD_DEBUG = libs运行应用程序会显示2个错误:

  

/lib/x86_64-linux-gnu/libpthread.so.0:错误:符号查找错误:未定义符号:pthread_setname_np,版本GLIBC_2.2.5(致命)

     

/home/jesta88/Vulkan/VulkanSDK/1.1.70.1/x86_64/lib/libVkLayer_parameter_validation.so:错误:符号查找错误:未定义符号:vkNegotiateLoaderLayerInterfaceVersion(致命)

我不知道如何解决这些错误。

1 个答案:

答案 0 :(得分:1)

我无法完全解释第一个错误,尽管我可以重现它。它之前是

calling init: /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.0

所以我怀疑nvidia驱动程序正在探测符号而无法找到它。虽然这被标记为"致命"但它并非真的。

对于第二个错误,我也可以看到。我通过运行SDK中的build_examples.sh脚本来复制它。然后:

cd examples/build
LD_DEBUG=libs ./cube --validate -c 300 2> log

该应用运行良好。

为了说服自己验证层已加载并正常工作,我通过注释掉对vkDestroyDescriptorPool的调用(cube.c中的第2252行)创建了验证错误,并获得了预期的验证错误。

在这种情况下,我认为Vulkan加载程序正在尝试查找驱动程序中的vkNegotiateLoaderLayerInterfaceVersion符号并且无法找到它。这不是致命的情况,因为驱动程序导出此符号是可选的。如果加载器没有找到符号,则它假定加载器和驱动程序之间的特定协议。如果符号确实存在,则加载程序调用它以获取有关驱动程序支持的加载程序< - > ICD接口的其他信息。

可以在此document中找到更多详细信息。

简而言之,我不认为这些是实际问题。

编辑:当加载程序尝试加载图层而不是ICD(驱动程序)时,vkNegotiateLoaderLayerInterfaceVersion问题确实发生,但仍然适用相同的解释。

我仍然无法解释您没有找到图层的消息。

我建议设置VK_LOADER_DEBUG=all以获取有关Vulkan加载程序在查找图层时正在执行的操作的详细消息。

另外,尝试运行我上面概述的多维数据集演示,看看该应用是否正常运行。