Crash in glDrawArrays on Intel iris
System information
Ubuntu 20.04:
System:
Host: voyager Kernel: 5.4.0-51-generic x86_64 bits: 64 compiler: gcc
v: 9.3.0 Desktop: Gnome 3.36.4 wm: gnome-shell dm: GDM3
Distro: Ubuntu 20.04.1 LTS (Focal Fossa)
CPU:
Topology: Dual Core model: Intel Core i5-5300U bits: 64 type: MT MCP
arch: Broadwell rev: 4 L2 cache: 3072 KiB
flags: avx avx2 lm nx pae sse sse2 sse3 sse4_1 sse4_2 ssse3 vmx
bogomips: 18357
Speed: 916 MHz min/max: 500/2900 MHz Core speeds (MHz): 1: 1439 2: 1382
3: 1458 4: 1440
Graphics:
Device-1: Intel HD Graphics 5500 vendor: Lenovo driver: i915 v: kernel
bus ID: 00:02.0 chip ID: 8086:1616
Display: wayland server: X.Org 1.20.8 driver: modesetting
unloaded: fbdev,vesa compositor: gnome-shell resolution: 1366x768~60Hz
OpenGL: renderer: Mesa Intel HD Graphics 5500 (BDW GT2) v: 4.6 Mesa 20.0.8
direct render: Yes
Fedora 33:
System:
Host: localhost-live Kernel: 5.8.6-301.fc33.x86_64 x86_64 bits: 64
compiler: gcc v: 2.35-10.fc33) Desktop: GNOME 3.38.0 tk: GTK 3.24.23
wm: gnome-shell dm: GDM Distro: Fedora release 33 (Thirty Three)
CPU:
Info: Dual Core model: Intel Core i5-5300U bits: 64 type: MT MCP
arch: Broadwell rev: 4 L2 cache: 3072 KiB
flags: avx avx2 lm nx pae sse sse2 sse3 sse4_1 sse4_2 ssse3 vmx
bogomips: 18357
Speed: 798 MHz min/max: 500/2900 MHz Core speeds (MHz): 1: 812 2: 855
3: 880 4: 852
Graphics:
Device-1: Intel HD Graphics 5500 vendor: Lenovo driver: i915 v: kernel
bus ID: 00:02.0 chip ID: 8086:1616
Device-2: Lite-On Integrated Camera type: USB driver: uvcvideo
bus ID: 2-8:5 chip ID: 04ca:703c
Display: wayland server: Fedora Project X.org 1.20.8
compositor: gnome-shell driver: i915
note: display driver n/a - try sudo/root resolution: 1366x768~60Hz
s-dpi: 96
OpenGL: renderer: Mesa Intel HD Graphics 5500 (BDW GT2)
v: 4.6 Mesa 20.2.0-rc2 direct render: Yes
Describe the issue
With the iris
driver MeshLab crashes at glDrawArrays(GL_TRIANGLES, 0, ...);
.
Reproduce:
- Download/install
meshlab
. I can reproduce this on Ubuntu 20.04 and Fedora 33 with the standard version in the repo and the precompiled binaries from the official website. - run
meshlab airplane.ply
with airplane.ply or any other mesh file - right-click anywhere in the 3D view
- ... program crashes
According to the original MeshLab issue at https://github.com/cnr-isti-vclab/meshlab/issues/686, this also happens with the AMD driver.
Regression
This worked with the older i965
driver, e.g. MESA_LOADER_DRIVER_OVERRIDE=i965 meshlab airplane.ply
+ right-click does not cause a crash. This also works with the newest proprietary nvidia
driver.
Log files as attachment
The relevant section in dmesg:
[Okt17 22:17] meshlab[62299]: segfault at 7f2430c381b5 ip 00007f2420367b32 sp 00007ffd34ed9fb0 error 7 in libLLVM-10.so.1[7f241f96c000+3fcb000]
[ +0,000012] Code: 85 db 0f 84 9f 00 00 00 48 8b 43 08 48 83 c3 08 49 89 46 f0 48 85 c0 74 15 4c 89 f1 48 83 c1 f0 48 8b 50 10 83 e2 03 48 09 ca <48> 89 50 10 49 8b 46 f8 83 e0 03 48 09 d8 49 89 46 f8 4c 89 23 eb
Backtrace with standard meshlab package in the Ubuntu 20.04 repo:
#0 setPointer () at /build/llvm-toolchain-10-yegZYJ/llvm-toolchain-10-10.0.0/llvm/include/llvm/ADT/PointerIntPair.h:64
#1 setPrev () at /build/llvm-toolchain-10-yegZYJ/llvm-toolchain-10-10.0.0/llvm/include/llvm/IR/Use.h:145
#2 addToList () at /build/llvm-toolchain-10-yegZYJ/llvm-toolchain-10-10.0.0/llvm/include/llvm/IR/Use.h:150
#3 addUse () at /build/llvm-toolchain-10-yegZYJ/llvm-toolchain-10-10.0.0/llvm/include/llvm/IR/Value.h:457
#4 set () at /build/llvm-toolchain-10-yegZYJ/llvm-toolchain-10-10.0.0/llvm/include/llvm/IR/Value.h:733
#5 operator= () at /build/llvm-toolchain-10-yegZYJ/llvm-toolchain-10-10.0.0/llvm/include/llvm/IR/Value.h:737
#6 UnaryConstantExpr () at /build/llvm-toolchain-10-yegZYJ/llvm-toolchain-10-10.0.0/llvm/lib/IR/ConstantsContext.h:49
#7 create() () at /build/llvm-toolchain-10-yegZYJ/llvm-toolchain-10-10.0.0/llvm/lib/IR/ConstantsContext.h:536
#8 0x00007fffcc35f2b9 in create () at /build/llvm-toolchain-10-yegZYJ/llvm-toolchain-10-10.0.0/llvm/lib/IR/ConstantsContext.h:638
#9 getOrCreate() () at /build/llvm-toolchain-10-yegZYJ/llvm-toolchain-10-10.0.0/llvm/lib/IR/ConstantsContext.h:657
#10 0x00007fffcc35d370 in getCast() () at /build/llvm-toolchain-10-yegZYJ/llvm-toolchain-10-10.0.0/llvm/lib/IR/Constants.cpp:1626
#11 0x00007fffcc373fda in CreateCast () at /build/llvm-toolchain-10-yegZYJ/llvm-toolchain-10-10.0.0/llvm/include/llvm/IR/ConstantFolder.h:186
#12 CreateCast () at /build/llvm-toolchain-10-yegZYJ/llvm-toolchain-10-10.0.0/llvm/include/llvm/IR/IRBuilder.h:2143
#13 CreateBitCast () at /build/llvm-toolchain-10-yegZYJ/llvm-toolchain-10-10.0.0/llvm/include/llvm/IR/IRBuilder.h:2103
#14 LLVMBuildBitCast() () at /build/llvm-toolchain-10-yegZYJ/llvm-toolchain-10-10.0.0/llvm/lib/IR/Core.cpp:3762
#15 0x00007fffd70762bc in emit_b2f (bld_base=bld_base@entry=0x7fffffff6320, src0=0x7fffffff5f90, bitsize=bitsize@entry=32) at ../src/gallium/auxiliary/gallivm/lp_bld_nir.c:300
#16 0x00007fffd707b587 in do_alu_action (src=0x7fffffff5fd0, src_bit_size=0x7fffffff5e90, op=<optimized out>, bld_base=0x7fffffff6320)
at ../src/gallium/auxiliary/gallivm/lp_bld_nir.c:439
#17 visit_alu (bld_base=bld_base@entry=0x7fffffff6320, instr=instr@entry=0x55555675a0c0) at ../src/gallium/auxiliary/gallivm/lp_bld_nir.c:852
#18 0x00007fffd707c4bb in visit_block (block=0x5555558a78c0, bld_base=0x7fffffff6320) at ../src/compiler/nir/nir.h:2157
#19 visit_cf_list (bld_base=bld_base@entry=0x7fffffff6320, list=<optimized out>) at ../src/gallium/auxiliary/gallivm/lp_bld_nir.c:1769
#20 0x00007fffd707c6c0 in lp_build_nir_llvm (bld_base=bld_base@entry=0x7fffffff6320, nir=nir@entry=0x555556dfb4c0) at ../src/gallium/auxiliary/gallivm/lp_bld_nir.c:1846
#21 0x00007fffd7055060 in lp_build_nir_soa (gallivm=<optimized out>, shader=0x555556dfb4c0, params=params@entry=0x7fffffff6ec0, outputs=outputs@entry=0x7fffffff7770)
at ../src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c:1596
#22 0x00007fffd7012532 in generate_vs
(bld_mask=0x7fffffff6cf0, clamp_vertex_color=0 '\000', draw_image=0x55555588ea40, draw_sampler=0x555556ddbbf0, context_ptr=0x555556dcded0, system_values=0x7fffffff6e30, inputs=0x7fffffff8170, outputs=0x7fffffff7770, vs_type=..., builder=0x555556dddd50, variant=0x555556ddea90) at ../src/gallium/auxiliary/draw/draw_llvm.c:721
#23 draw_llvm_generate (llvm=llvm@entry=0x555556e03530, variant=variant@entry=0x555556ddea90) at ../src/gallium/auxiliary/draw/draw_llvm.c:2011
#24 0x00007fffd70132b7 in draw_llvm_create_variant (llvm=llvm@entry=0x555556e03530, num_inputs=num_inputs@entry=2, key=key@entry=0x7fffffff8cc0)
at ../src/gallium/auxiliary/draw/draw_llvm.c:661
#25 0x00007fffd7014bdd in llvm_middle_end_prepare (middle=<optimized out>, in_prim=<optimized out>, opt=<optimized out>, max_vertices=<optimized out>)
at ../src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c:256
#26 0x00007fffd6fc6066 in vsplit_prepare (frontend=0x555556e003b0, in_prim=<optimized out>, middle=<optimized out>, opt=<optimized out>)
at ../src/gallium/auxiliary/draw/draw_pt_vsplit.c:229
#27 0x00007fffd6fbfa1a in draw_pt_arrays (draw=draw@entry=0x555556e305f0, prim=4, start=0, count=7356) at ../src/gallium/auxiliary/draw/draw_pt.c:135
#28 0x00007fffd6fbff88 in draw_vbo (draw=draw@entry=0x555556e305f0, info=0x7fffffff95a0, info@entry=0x7fffffff9710) at ../src/gallium/auxiliary/draw/draw_pt.c:568
#29 0x00007fffd6ac84d3 in st_feedback_draw_vbo
(ctx=<optimized out>, prims=0x7fffffffb640, nr_prims=1, ib=0x0, index_bounds_valid=<optimized out>, min_index=<optimized out>, max_index=<optimized out>, tfb_vertcount=0x0, stream=0, indirect=0x0) at ../src/mesa/state_tracker/st_draw_feedback.c:441
#30 0x00007fffd6cec48d in _mesa_draw_arrays
(drawID=0, baseInstance=<optimized out>, numInstances=<optimized out>, count=<optimized out>, start=<optimized out>, mode=<optimized out>, ctx=<optimized out>)
at ../src/mesa/main/draw.c:374
#31 _mesa_draw_arrays (ctx=<optimized out>, mode=<optimized out>, start=<optimized out>, count=<optimized out>, numInstances=<optimized out>, baseInstance=<optimized out>, drawID=0)
at ../src/mesa/main/draw.c:351
#32 0x00007fffd6cec547 in _mesa_DrawArrays (mode=4, start=0, count=7356) at ../src/mesa/main/draw.c:531
#33 0x00007ffff7f62a03 in vcg::NotThreadSafeGLMeshAttributesMultiViewerBOManager<CMeshO, QGLContext*, MLPerViewGLOptions>::drawTrianglesBO(vcg::GLMeshAttributesInfo::InternalRendAtts const&, std::vector<unsigned int, std::allocator<unsigned int> > const&) const (this=this@entry=0x555556694530, req=..., textureindex=std::vector of length 1, capacity 1 = {...})
at ./vcglib/wrap/gl/gl_mesh_attributes_info.h:335
#34 0x00007ffff7f63455 in vcg::NotThreadSafeGLMeshAttributesMultiViewerBOManager<CMeshO, QGLContext*, MLPerViewGLOptions>::drawFilledTriangles(vcg::GLMeshAttributesInfo::InternalRendAtts const&, MLPerViewGLOptions const*, std::vector<unsigned int, std::allocator<unsigned int> > const&) const
(glopts=<optimized out>, textureindex=std::vector of length 1, capacity 1 = {...}, req=..., this=0x555556694530)
at ./vcglib/wrap/gl/gl_mesh_attributes_multi_viewer_bo_manager.h:1374
#35 vcg::NotThreadSafeGLMeshAttributesMultiViewerBOManager<CMeshO, QGLContext*, MLPerViewGLOptions>::drawFilledTriangles(vcg::GLMeshAttributesInfo::InternalRendAtts const&, MLPerViewGLOptions const*, std::vector<unsigned int, std::allocator<unsigned int> > const&) const
(textureindex=std::vector of length 1, capacity 1 = {...}, glopts=<optimized out>, req=..., this=0x555556694530)
at ./vcglib/wrap/gl/gl_mesh_attributes_multi_viewer_bo_manager.h:1374
#36 vcg::NotThreadSafeGLMeshAttributesMultiViewerBOManager<CMeshO, QGLContext*, MLPerViewGLOptions>::drawFun(vcg::PerViewData<MLPerViewGLOptions> const&, std::vector<unsigned int, std::allocator<unsigned int> > const&) const (this=this@entry=0x555556694530, dt=..., textid=std::vector of length 1, capacity 1 = {...})
at ./vcglib/wrap/gl/gl_mesh_attributes_multi_viewer_bo_manager.h:1328
#37 0x00007ffff7f599a3 in vcg::NotThreadSafeGLMeshAttributesMultiViewerBOManager<CMeshO, QGLContext*, MLPerViewGLOptions>::draw(QGLContext*, std::vector<unsigned int, std::allocator<unsigned int> > const&) const (textid=..., viewid=0x55555656f2b0, this=0x555556694530) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qreadwritelock.h:113
#38 vcg::QtThreadSafeGLMeshAttributesMultiViewerBOManager<CMeshO, QGLContext*, MLPerViewGLOptions>::draw(QGLContext*) const (viewid=0x55555656f2b0, this=0x555556694530)
at ./vcglib/wrap/qt/qt_thread_safe_mesh_attributes_multi_viewer_bo_manager.h:80
#39 MLSceneGLSharedDataContext::draw(int, QGLContext*) const (this=this@entry=0x5555564b8560, mmid=<optimized out>, viewid=0x55555656f2b0) at ./src/common/ml_shared_data_context.cpp:239
#40 0x0000555555617d6c in GLArea::RenderForSelection(int, int) (this=0x55555656cf20, pickX=<optimized out>, pickY=<optimized out>) at ./src/common/meshmodel.h:173
#41 0x000055555561ab7f in GLArea::paintEvent(QPaintEvent*) (this=0x55555656cf20) at ./src/meshlab/glarea.cpp:502
#42 0x00007ffff76512b6 in QWidget::event(QEvent*) () at /usr/bin/../lib/x86_64-linux-gnu/libQt5Widgets.so.5
#43 0x00007ffff760ea66 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/bin/../lib/x86_64-linux-gnu/libQt5Widgets.so.5
#44 0x00007ffff76180f0 in QApplication::notify(QObject*, QEvent*) () at /usr/bin/../lib/x86_64-linux-gnu/libQt5Widgets.so.5
#45 0x00007ffff7f668de in MeshLabApplication::notify(QObject*, QEvent*) (this=<optimized out>, rec=<optimized out>, ev=<optimized out>) at ./src/common/mlapplication.cpp:8
#46 0x00007ffff660293a in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /usr/bin/../lib/x86_64-linux-gnu/libQt5Core.so.5
#47 0x00007ffff7649f4a in QWidgetPrivate::sendPaintEvent(QRegion const&) () at /usr/bin/../lib/x86_64-linux-gnu/libQt5Widgets.so.5
#48 0x00007ffff764a799 in QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, int, QPainter*, QWidgetBackingStore*) ()
at /usr/bin/../lib/x86_64-linux-gnu/libQt5Widgets.so.5
#49 0x00007ffff761f09d in QWidgetPrivate::repaint_sys(QRegion const&) () at /usr/bin/../lib/x86_64-linux-gnu/libQt5Widgets.so.5
#50 0x00007ffff7639318 in QWidgetPrivate::syncBackingStore() () at /usr/bin/../lib/x86_64-linux-gnu/libQt5Widgets.so.5
#51 0x00007ffff7651cac in QWidget::event(QEvent*) () at /usr/bin/../lib/x86_64-linux-gnu/libQt5Widgets.so.5
#52 0x00007ffff760ea66 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/bin/../lib/x86_64-linux-gnu/libQt5Widgets.so.5
#53 0x00007ffff76180f0 in QApplication::notify(QObject*, QEvent*) () at /usr/bin/../lib/x86_64-linux-gnu/libQt5Widgets.so.5
#54 0x00007ffff7f668de in MeshLabApplication::notify(QObject*, QEvent*) (this=<optimized out>, rec=<optimized out>, ev=<optimized out>) at ./src/common/mlapplication.cpp:8
#55 0x00007ffff660293a in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /usr/bin/../lib/x86_64-linux-gnu/libQt5Core.so.5
#56 0x00007ffff66055b8 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () at /usr/bin/../lib/x86_64-linux-gnu/libQt5Core.so.5
#57 0x00007ffff665af67 in () at /usr/bin/../lib/x86_64-linux-gnu/libQt5Core.so.5
#58 0x00007ffff547cfbd in g_main_context_dispatch () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#59 0x00007ffff547d240 in () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#60 0x00007ffff547d2e3 in g_main_context_iteration () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#61 0x00007ffff665a565 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/bin/../lib/x86_64-linux-gnu/libQt5Core.so.5
#62 0x00007ffff66014db in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/bin/../lib/x86_64-linux-gnu/libQt5Core.so.5
#63 0x00007ffff6609246 in QCoreApplication::exec() () at /usr/bin/../lib/x86_64-linux-gnu/libQt5Core.so.5
#64 0x00005555555d2afc in main(int, char**) (argc=<optimized out>, argv=0x7fffffffddf8) at ./src/meshlab/main.cpp:90