首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QT5.14.0: QML下的Vulkan导致std::system_error::互斥锁失败

QT5.14.0: QML下的Vulkan导致std::system_error::互斥锁失败
EN

Stack Overflow用户
提问于 2020-02-29 14:55:00
回答 1查看 356关注 0票数 1

在发生以下错误之前,QML下的Vulkan示例最多运行几秒钟:

代码语言:javascript
运行
复制
libc++abi.dylib: terminating with uncaught exception of type std::__1::system_error: mutex lock failed: Invalid argument

虽然动画在操作期间看起来是正确的,但QML标签没有正确显示:

我使用macOS 1.1.130 (LunarG Vulkan )和QT5.14.0运行MoltenVK Catalina。我还尝试了MoltenVK 1.2.131,结果也是一样。在启用MoltenVK的情况下使用MVK_LOG_LEVEL_INFO时,每帧打印两次以下消息

代码语言:javascript
运行
复制
[mvk-info] vkCreateMacOSSurfaceMVK(): You are not calling this function from the main thread. NSView should only be accessed from the main thread. When using this function outside the main thread, consider passing the CAMetalLayer itself in VkMacOSSurfaceCreateInfoMVK::pView, instead of the NSView.

问题

有人知道是什么导致的吗?这是个虫子吗?有人成功地运行了这个例子吗?

MVK错误消息使Qt的Vulkan集成中断:不仅每帧调用两次vkCreateMacOSSurfaceMVK,而且它似乎也是从呈现线程(不是GUI线程/主线程)调用的。

详细信息

为了在Vulkan中使用Qt,您必须从源代码编译Qt并提供Vulkan头部。我用来编译Qt的配置调用是:

代码语言:javascript
运行
复制
../qt5/configure -developer-build -skip qtquick3d -skip qtwebengine -opensource -nomake examples -nomake tests -confirm-license -vulkan -I $VULKAN_SDK/../MoltenVK/include -L $VULKAN_SDK/lib

我的环境变量是根据LunarG文档设置的:

代码语言:javascript
运行
复制
export VULKAN_SDK="$HOME/SDK/vulkansdk-macos-1.1.130.0/macOS"
export PATH="$VULKAN_SDK/bin:$PATH"
export DYLD_LIBRARY_PATH="$VULKAN_SDK/lib:$DYLD_LIBRARY_PATH"
export VK_ICD_FILENAMES="$VULKAN_SDK/etc/vulkan/icd.d/MoltenVK_icd.json"
export VK_LAYER_PATH="$VULKAN_SDK/etc/vulkan/explicit_layer.d"
export VK_INSTANCE_LAYERS="VK_LAYER_KHRONOS_validation"

export QT_VULKAN_LIB="$VULKAN_SDK/lib/libMoltenVK.dylib"

(Qt需要QT_VULKAN_LIB来对库进行dlopen。)

11回溯:

代码语言:javascript
运行
复制
[mvk-info] vkCreateMacOSSurfaceMVK(): You are not calling this function from the main thread. NSView should only be accessed from the main thread. When using this function outside the main thread, consider passing the CAMetalLayer itself in VkMacOSSurfaceCreateInfoMVK::pView, instead of the NSView.
[mvk-info] vkCreateMacOSSurfaceMVK(): You are not calling this function from the main thread. NSView should only be accessed from the main thread. When using this function outside the main thread, consider passing the CAMetalLayer itself in VkMacOSSurfaceCreateInfoMVK::pView, instead of the NSView.
libc++abi.dylib: terminating with uncaught exception of type std::__1::system_error: mutex lock failed: Invalid argument
Process 83453 stopped
* thread #10, name = 'QSGRenderThread', stop reason = signal SIGABRT
    frame #0: 0x00007fff648c57fa libsystem_kernel.dylib`__pthread_kill + 10
libsystem_kernel.dylib`__pthread_kill:
->  0x7fff648c57fa <+10>: jae    0x7fff648c5804            ; <+20>
    0x7fff648c57fc <+12>: movq   %rax, %rdi
    0x7fff648c57ff <+15>: jmp    0x7fff648bfa89            ; cerror_nocancel
    0x7fff648c5804 <+20>: retq   
Target 0: (main) stopped.
(lldb) frame info
frame #0: 0x00007fff648c57fa libsystem_kernel.dylib`__pthread_kill + 10
(lldb) frame variable
(lldb) bt
* thread #10, name = 'QSGRenderThread', stop reason = signal SIGABRT
  * frame #0: 0x00007fff648c57fa libsystem_kernel.dylib`__pthread_kill + 10
    frame #1: 0x00007fff64982bc1 libsystem_pthread.dylib`pthread_kill + 432
    frame #2: 0x00007fff6484ca1c libsystem_c.dylib`abort + 120
    frame #3: 0x00007fff618e6be8 libc++abi.dylib`abort_message + 231
    frame #4: 0x00007fff618e6d84 libc++abi.dylib`demangling_terminate_handler() + 238
    frame #5: 0x00007fff63412792 libobjc.A.dylib`_objc_terminate() + 104
    frame #6: 0x00007fff618f3dc7 libc++abi.dylib`std::__terminate(void (*)()) + 8
    frame #7: 0x00007fff618f3d79 libc++abi.dylib`std::terminate() + 41
    frame #8: 0x0000000103942439 libQt5Core_debug.5.dylib`qTerminate() at qglobal.cpp:3333:5
    frame #9: 0x000000010341f5f8 libQt5Core_debug.5.dylib`QThreadPrivate::start(arg=0x000000011721cfb0) at qthread_unix.cpp:354:9
    frame #10: 0x00007fff64982e65 libsystem_pthread.dylib`_pthread_start + 148
    frame #11: 0x00007fff6497e83b libsystem_pthread.dylib`thread_start + 15
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-04 15:16:17

我已经报道过这个问题:QTBUG-82600

修复程序被合并到Qt5.15.0 beta2中。虽然崩溃不再发生,但文本仍然残缺不全。对此的修复将推迟到Qt6:QTBUG-83072

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

https://stackoverflow.com/questions/60466377

复制
相关文章

相似问题

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