Unsolved Qt 5.9.4 OpenGL examples crash
-
Update on this issue: It looks like some OpenGL examples are running fine.
When I run contextinfo with stereo buffers enabled, it works with Qt 5.3.2 but it does not work with Qt 5.9.4 and Depth buffer size is listed as 0 under Context information. Any idea what can cause this?
# working 5.3.2: Depth buffer size: 24 Stencil buffer size: 8 # failing 5.9.4: Depth buffer size: 0 Stencil buffer size: 0
List of OpenGL examples status under 5.9.4:
RUNNING: legacy/framebufferobject2 legacy/grabber legacy/hellogl legacy/overpainting legacy/pbuffers legacy/samplebuffers hellowindow paintedwindow qopenglwindow: creates a window with black background and no decorations CRASHING: 2dpainting cube hellogl2 hellogles3 qopenglwidget textures
This is the output of computegles31:
# computegles31 pci id for fd 6: 8086:8108, driver (null) Support for GL 2.0 noprof yes Support for GL 2.0 core no Support for GL 2.0 compat no Support for GL 2.1 noprof yes Support for GL 2.1 core no Support for GL 2.1 compat no Support for GL 3.0 noprof no Support for GL 3.0 core no Support for GL 3.0 compat no Support for GL 3.1 noprof no Support for GL 3.1 core no Support for GL 3.1 compat no Support for GL 3.2 core no Support for GL 3.2 compat no Support for GL 3.3 core no Support for GL 3.3 compat no Support for GL 4.0 core no Support for GL 4.0 compat no Support for GL 4.1 core no Support for GL 4.1 compat no Support for GL 4.2 core no Support for GL 4.2 compat no Support for GL 4.3 core no Support for GL 4.3 compat no Support for GL 4.4 core no Support for GL 4.4 compat no Support for GL 4.5 core no Support for GL 4.5 compat no Support for GLES 2.0 no Support for GLES 3.0 no Support for GLES 3.1 no Support for GLES 3.2 no Error: This system does not support OpenGL Compute Shaders! Exiting.
-
Hi,
Not a direct answer to your problem but you could try to run qtdiag (in the bin folder of your Qt version) to see if you can get some more information.
-
There is a partial output in the first message of the thread, copied below. I think there isn't something particularly problematic there.
# qtdiag-qt5 pci id for fd 6: 8086:8108, driver (null) Qt 5.9.4 (i386-little_endian-ilp32 shared (dynamic) debug build; by GCC 4.9.1) on "xcb" OS: Arch Linux [linux version 3.4.108-rt136_pixy] ... Screens: 1, High DPI scaling: inactive # 0 "default" Depth: 24 Primary: yes Manufacturer: Model: Serial number: Geometry: 1024x768+0+0 Available: 1024x768+0+0 Physical size: 271x203 mm Refresh: 85 Hz Power state: 0 Physical DPI: 95.9764,96.0946 Logical DPI: 95.9764,96.0946 Subpixel_None DevicePixelRatio: 1 Pixel density: 1 Primary orientation: 2 Orientation: 2 Native orientation: 0 OrientationUpdateMask: 0 LibGL Vendor: Intel Corporation Renderer: EMGD on PowerVR SGX535 Version: 2.1 Shading language: 1.20 Format: Version: 2.1 Profile: 0 Swap behavior: 0 Buffer size (RGBA):
-
Did you compare the sources of this example in both versions of Qt ? Is it he same code ?
-
The source code for qtbase/examples/opengl/contextinfo are very similar in 5.3.2 and 5.9.4. The latter has some command line arguments, and minor fixes.
Can the issue be related to existence of /usr/include/drm directory during compilation?
I am asking, because I have seen that, while packaging ArchLinux linux-api-headers , /usr/include/drm is removed:# use headers from libdrm rm -r "$pkgdir/usr/include/drm"
During the compilation of contextinfo example, 5.9.4 has an extra /usr/include/libdrm include path, while 5.3.2 does not.
Here is the sorted output of ldd contextinfo for 5.9.4 on the left and 5.3.2 on the right (both link libdrm):
-
Do you mean that the cross-compiling environment changed between your 5.3 and 5.9 builds ?
-
yes. well, 5.3.2 package is taken off the official site, so, it is most likely not cross-compiled. 5.9.4 is cross-built by me.
-
Official 5.3.2 are in Qt archive: https://download.qt.io/archive/qt/5.3/5.3.2/
-
sorry. i meant Qt 5.3.2 package comes from Arch Linux official site, so, it is built and prepared by someone else using respective tools on a i686 development system or chroot environment.
I downloaded Qt 5.9.4 from download.qt.io, and cross-compiled it myself.
-
I wonder whether these are relevant:
https://bugreports.qt.io/browse/QTBUG-64587
https://bugreports.qt.io/browse/QTBUG-59636 -
The first one is not implemented and the second is fixed for 5.9.5. You can already test that by building from git.
-
Update on this issue:
- Qt 5.3.2 built on the 32-bit system : opengl examples run successfully.
- Qt 5.9.3 built on the 32-bit system : legacy opengl examples run successfully. cube/hellogl2/texture crashes.
- Qt 5.9.4 cross-compiled for the 32-bit system : legacy opengl examples run successfully. cube/hellogl2/texture crashes.
- Qt 5.10.1 cross-compiled for the 32-bit system : legacy opengl examples run successfully. cube/hellogl2/texture crashes.
I haven't managed to cross-compile 5.3.2 yet, to confirm that cross-compilation works properly.
Here is the stack trace from the crashed cube example application for Qt 5.9.4:(gdb) run Starting program: /home/root/opengl/cube/cube warning: Could not load shared library symbols for linux-gate.so.1. Do you need "set solib-search-path" or "set sysroot"? [Thread debugging using libthread_db enabled] Using host libthread_db library "/usr/lib/libthread_db.so.1". [New Thread 0xb46bab40 (LWP 585)] pci id for fd 6: 8086:8108, driver (null) Program received signal SIGSEGV, Segmentation fault. 0xb38ce7df in ?? () from /lib/libEMGDOGL.so (gdb) thread apply all backtrace Thread 2 (Thread 0xb46bab40 (LWP 585)): #0 0xb7ffd428 in __kernel_vsyscall () #1 0xb6a963fb in poll () from /usr/lib/libc.so.6 #2 0xb4df8f1d in ?? () from /usr/lib/libxcb.so.1 #3 0xb4dfaf6b in xcb_wait_for_event () from /usr/lib/libxcb.so.1 #4 0xb4993703 in ?? () from /usr/lib/libQt5XcbQpa.so.5 #5 0xb6ddcfb1 in ?? () from /usr/lib/libQt5Core.so.5 #6 0xb6cd61a6 in start_thread () from /usr/lib/libpthread.so.0 #7 0xb6aa0e9e in clone () from /usr/lib/libc.so.6 Thread 1 (Thread 0xb4c4c740 (LWP 581)): #0 0xb38ce7df in ?? () from /lib/libEMGDOGL.so #1 0xb38cee9f in ?? () from /lib/libEMGDOGL.so #2 0xb38cdbf1 in ?? () from /lib/libEMGDOGL.so #3 0xb38cf44b in ?? () from /lib/libEMGDOGL.so #4 0xb38cf9d8 in ?? () from /lib/libEMGDOGL.so #5 0xb38d04e8 in ?? () from /lib/libEMGDOGL.so #6 0xb385cc81 in ?? () from /lib/libEMGDOGL.so #7 0xb38e7b76 in pvroglDrawArrays () from /lib/libEMGDOGL.so #8 0xb76ad8b7 in ?? () from /usr/lib/libQt5Gui.so.5 #9 0xb764d379 in ?? () from /usr/lib/libQt5Gui.so.5 #10 0xb764dadc in QPlatformBackingStore::composeAndFlush(QWindow*, QRegion const&, QPoint const&, QPlatformTextureList*, QOpenGLContext*, bool) () from /usr/lib/libQt5Gui.so.5 #11 0xb49b0686 in ?? () from /usr/lib/libQt5XcbQpa.so.5 #12 0xb79ae3c7 in ?? () from /usr/lib/libQt5Widgets.so.5 #13 0xb79afa09 in ?? () from /usr/lib/libQt5Widgets.so.5 #14 0xb79b104d in ?? () from /usr/lib/libQt5Widgets.so.5 #15 0xb79b17f2 in ?? () from /usr/lib/libQt5Widgets.so.5 #16 0xb79cbd37 in QWidgetPrivate::syncBackingStore(QRegion const&) () from /usr/lib/libQt5Widgets.so.5 #17 0xb7a012ea in ?? () from /usr/lib/libQt5Widgets.so.5 #18 0xb7a01e1a in ?? () from /usr/lib/libQt5Widgets.so.5 #19 0xb79a0f4a in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5 #20 0xb79a8d2c in QApplication::notify(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5 #21 0xb6fa396c in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib/libQt5Core.so.5 #22 0xb73690e2 in QGuiApplicationPrivate::processExposeEvent(QWindowSystemInterfacePrivate::ExposeEvent*) () from /usr/lib/libQt5Gui.so.5 #23 0xb7369df9 in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) () from /usr/lib/libQt5Gui.so.5 #24 0xb7343cec in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Gui.so.5 #25 0xb4a0298e in ?? () from /usr/lib/libQt5XcbQpa.so.5 #26 0xb5019ba4 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0 #27 0xb5019ec9 in ?? () from /usr/lib/libglib-2.0.so.0 #28 0xb5019f96 in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0 #29 0xb6ff64b4 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Core.so.5 #30 0xb4a02b61 in ?? () from /usr/lib/libQt5XcbQpa.so.5 #31 0xb6fa13a6 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Core.so.5 #32 0xb6fa17fa in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Core.so.5 #33 0xb6faa796 in QCoreApplication::exec() () from /usr/lib/libQt5Core.so.5 #34 0xb735f1f1 in QGuiApplication::exec() () from /usr/lib/libQt5Gui.so.5 #35 0xb79a0ea4 in QApplication::exec() () from /usr/lib/libQt5Widgets.so.5 #36 0x0804ad69 in main () (gdb) continue Continuing. [Thread 0xb46bab40 (LWP 585) exited] Program terminated with signal SIGSEGV, Segmentation fault. The program no longer exists. (gdb)
-
Do you also have that with 5.9.5/5.11 Beta ?
-
I haven't tested with 5.9.5 and 5.11, checked only the official releases under https://download.qt.io.
-
My bad, I'm a bit early for the 5.9.5 release which should happen during March.
The beta can be downloaded from the development_releases subfolder.
-
I tried building 5.11.0-beta1, but it fails (I guess, since I have an older mesa-libgl):
qeglfskmsgbmwindow.cpp: In member function ‘virtual void QEglFSKmsGbmWindow::resetSurface()’: qeglfskmsgbmwindow.cpp:58:5: error: ‘PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC’ was not declared in this scope PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC createPlatformWindowSurface = nullptr; ^ qeglfskmsgbmwindow.cpp:61:9: error: ‘createPlatformWindowSurface’ was not declared in this scope createPlatformWindowSurface = reinterpret_cast<PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC>( ^ qeglfskmsgbmwindow.cpp:61:56: error: ‘PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC’ does not name a type createPlatformWindowSurface = reinterpret_cast<PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC>( ^ qeglfskmsgbmwindow.cpp:65:9: error: ‘createPlatformWindowSurface’ was not declared in this scope if (createPlatformWindowSurface) { ^ Makefile:2994: recipe for target '.obj/qeglfskmsgbmwindow.o' failed make[2]: *** [.obj/qeglfskmsgbmwindow.o] Error 1
-
well, it looks like this is an EMGD<=>mesa<=>Qt issue.
- EMGD + mesa 10.1.0 + Qt 5.3.2: OK
- EMGD + mesa 10.1.0 + Qt 5.9.4: openGL examples cube/hellogl2/textures crash
- EMGD + mesa 10.3.0 + Qt 5.9.4: openGL examples cube/hellogl2/textures run, but EMGD hardware acceleration fails:
libGL: OpenDriver: trying /usr/lib/xorg/modules/dri/tls/emgd_dri.so libGL: OpenDriver: trying /usr/lib/xorg/modules/dri/emgd_dri.so libGL: dlopen /usr/lib/xorg/modules/dri/emgd_dri.so failed (/usr/lib/xorg/modules/dri/emgd_dri.so: undefined symbol: _glapi_Dispatch) libGL error: unable to load driver: emgd_dri.so libGL error: driver pointer missing libGL error: failed to load driver: emgd libGL: OpenDriver: trying /usr/lib/xorg/modules/dri/tls/swrast_dri.so libGL: OpenDriver: trying /usr/lib/xorg/modules/dri/swrast_dri.so libGL: Can't open configuration file /root/.drirc: No such file or directory. libGL: Can't open configuration file /root/.drirc: No such file or directory.
Any idea on how to get EMGD working with mesa 10.3.0?
# ldd -r /usr/lib/xorg/modules/dri/emgd_dri.so ldd: warning: you do not have execution permission for `/usr/lib/xorg/modules/dri/emgd_dri.so' linux-gate.so.1 (0xb775f000) libm.so.6 => /lib/libm.so.6 (0xb74d1000) libpthread.so.0 => /lib/libpthread.so.0 (0xb74b5000) libexpat.so.1 => /lib/libexpat.so.1 (0xb748c000) libdl.so.2 => /lib/libdl.so.2 (0xb7487000) libdrm.so.2 => /lib/libdrm.so.2 (0xb7478000) libEMGDOGL.so => /lib/libEMGDOGL.so (0xb71c7000) libEMGD2d.so => /lib/libEMGD2d.so (0xb71bf000) libstdc++.so.6 => /lib/libstdc++.so.6 (0xb70c9000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb70ac000) libc.so.6 => /lib/libc.so.6 (0xb6ef4000) /usr/lib/ld-linux.so.2 (0xb7760000) libemgdsrv_um.so => /lib/libemgdsrv_um.so (0xb6ed1000) undefined symbol: _glapi_Dispatch (/usr/lib/xorg/modules/dri/emgd_dri.so) undefined symbol: _glapi_Context (/usr/lib/xorg/modules/dri/emgd_dri.so) undefined symbol: _glapi_get_dispatch_table_size (/usr/lib/xorg/modules/dri/emgd_dri.so) undefined symbol: _glapi_get_dispatch (/usr/lib/xorg/modules/dri/emgd_dri.so) undefined symbol: _glapi_get_context (/usr/lib/xorg/modules/dri/emgd_dri.so) undefined symbol: _glapi_add_dispatch (/usr/lib/xorg/modules/dri/emgd_dri.so) undefined symbol: _glapi_set_context (/usr/lib/xorg/modules/dri/emgd_dri.so) undefined symbol: _glapi_set_dispatch (/usr/lib/xorg/modules/dri/emgd_dri.so)
# strings -a /usr/lib/libglapi.so | grep _glapi_Dispatch _glapi_Dispatch
-
so, any suggestions on how to make EMGD + mesa 10.1.0 + Qt 5.9.4 work?
Qt 5.3.2 works with the same combination.
When Qt 5.3.2 qtbase/examples/opengl is built against Qt 5.9.4, they work as well, except 'stereo buffers' in contextinfo example.
When Qt 5.9.4 qtbase/examples/opengl is built against Qt 5.9.4, examples such as cube, textures crash, and 'stereo buffers' in contextinfo fails as well.