Bug 324533 - SceneOpenGL::copyPixels can crash if framebufferblit is not supported
Summary: SceneOpenGL::copyPixels can crash if framebufferblit is not supported
Status: RESOLVED INTENTIONAL
Alias: None
Product: kwin
Classification: Plasma
Component: scene-opengl (show other bugs)
Version: unspecified
Platform: Compiled Sources Linux
: NOR crash
Target Milestone: ---
Assignee: KWin default assignee
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2013-09-05 09:34 UTC by Martin Flöser
Modified: 2015-01-09 08:33 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Martin Flöser 2013-09-05 09:34:49 UTC
I just did the mistake to try running KWin5 in Xephyr with OpenGL (1) enabled. It rightly crashes as it's an indirect context which doesn't support framebuffer blit.

I think that the same problem is also present in 4.11 and that's why I open the crash report.

Program received signal SIGSEGV, Segmentation fault.
0x0000000000000000 in ?? ()
(gdb) bt
#0  0x0000000000000000 in ?? ()
#1  0x00007ffff7af1b69 in KWin::SceneOpenGL::copyPixels (region=...) at /home/martin/src/kf5/kde-workspace/kwin/scene_opengl.cpp:287
#2  0x00007ffff7aff8da in KWin::GlxBackend::present (this=0x8a25a0) at /home/martin/src/kf5/kde-workspace/kwin/glxbackend.cpp:464
#3  0x00007ffff7afec59 in KWin::GlxBackend::endRenderingFrame (this=0x8a25a0, damage=...) at /home/martin/src/kf5/kde-workspace/kwin/glxbackend.cpp:502
#4  0x00007ffff7af8a08 in KWin::SceneOpenGL::paint (this=this@entry=0x857b10, damage=..., toplevels=...) at /home/martin/src/kf5/kde-workspace/kwin/scene_opengl.cpp:371
#5  0x00007ffff7af8bef in KWin::SceneOpenGL1::paint (this=0x857b10, damage=..., windows=...) at /home/martin/src/kf5/kde-workspace/kwin/scene_opengl.cpp:820
#6  0x00007ffff7adbeb7 in KWin::Compositor::performCompositing (this=0x8217b0) at /home/martin/src/kf5/kde-workspace/kwin/composite.cpp:605
#7  0x00007fffee2998b6 in QObject::event (this=0x8217b0, e=0x7fffffffd7b0) at kernel/qobject.cpp:1059
#8  0x00007fffef06c1c6 in QApplicationPrivate::notify_helper (this=0x61ef40, receiver=0x8217b0, e=0x7fffffffd7b0) at kernel/qapplication.cpp:3467
#9  0x00007fffef0696a7 in QApplication::notify (this=0x7fffffffdd20, receiver=0x8217b0, e=0x7fffffffd7b0) at kernel/qapplication.cpp:2888
#10 0x00007fffee25d1e8 in QCoreApplication::notifyInternal (this=0x7fffffffdd20, receiver=0x8217b0, event=0x7fffffffd7b0) at kernel/qcoreapplication.cpp:867
#11 0x00007fffee260ec5 in QCoreApplication::sendEvent (receiver=0x8217b0, event=0x7fffffffd7b0) at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:232
#12 0x00007fffee2d2948 in QTimerInfoList::activateTimers (this=0x626458) at kernel/qtimerinfo_unix.cpp:643
#13 0x00007fffee2d060b in QEventDispatcherUNIX::activateTimers (this=0x622150) at kernel/qeventdispatcher_unix.cpp:557
#14 0x00007fffee2d096d in QEventDispatcherUNIX::processEvents (this=0x622150, flags=...) at kernel/qeventdispatcher_unix.cpp:619
#15 0x00007fffe33ed753 in QUnixEventDispatcherQPA::processEvents (this=0x622150, flags=...) at eventdispatchers/qunixeventdispatcher.cpp:72
#16 0x00007fffee259de6 in QEventLoop::processEvents (this=0x7fffffffd9f0, flags=...) at kernel/qeventloop.cpp:136
#17 0x00007fffee25a0d3 in QEventLoop::exec (this=0x7fffffffd9f0, flags=...) at kernel/qeventloop.cpp:212
#18 0x00007fffee25d8c0 in QCoreApplication::exec () at kernel/qcoreapplication.cpp:1120
#19 0x00007fffee847bfc in QGuiApplication::exec () at kernel/qguiapplication.cpp:1325
#20 0x00007fffef068f55 in QApplication::exec () at kernel/qapplication.cpp:2692
#21 0x00007ffff7a88606 in kdemain (argc=2, argv=<optimized out>) at /home/martin/src/kf5/kde-workspace/kwin/main.cpp:521
#22 0x00007ffff6e73995 in __libc_start_main (main=0x4006d0 <main(int, char**)>, argc=2, ubp_av=0x7fffffffde78, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffde68) at libc-start.c:260
#23 0x00000000004006fe in _start ()

Support info:
OpenGL vendor string:                   VMware, Inc.
OpenGL renderer string:                 Gallium 0.4 on llvmpipe (LLVM 3.2, 256 bits)
OpenGL version string:                  1.4 (2.1 Mesa 9.1.6)
OpenGL shading language version string: 
Driver:                                 LLVMpipe
GPU class:                              Unknown
OpenGL version:                         1.4
GLSL version:                           0.0
Mesa version:                           9.1.6
X server version:                       1.12.4
Linux kernel version:                   3.10
Direct rendering:                       no
Requires strict binding:                yes
GLSL shaders:                           yes
Texture NPOT support:                   yes
Virtual Machine:                        no
kwin(4086)/(default) [31m[34mKWin::GlxBackend::init[0m: Direct rendering: false
Comment 1 Thomas Lübking 2013-09-05 10:37:54 UTC
commit ec059f95a1a8785ffe53d1357a52cd97056e92b6
Author: Fredrik Höglund <fredrik@kde.org>
Date:   Wed Mar 13 18:38:56 2013 +0100

    kwin/glx: Use glBlitFramebuffer() instead of glCopyPixels()
    
    glCopyPixels(), glRasterPos() and glBitmap() are not available
    in a core context.

Either
- we introduce a branch/virtual here, or
- declare" no glBlitFramebuffer and no glXCopySubBuffer" unsupported, or
- enforce full scene repaints
Comment 2 Thomas Lübking 2013-10-20 13:11:26 UTC
*** Bug 326321 has been marked as a duplicate of this bug. ***
Comment 3 Martin Flöser 2015-01-09 08:33:14 UTC
sceneOpengl1 is dead