I further debug this using gdb, I got the back trace, it looks like sometimes, the surface is not ready(still null) when referencing it whille create the surface object, which results in seg fault. I submitted a ticket for help from gpu driver engineer.
When segmentation fault,
It fails at gcoSURF_ReferenceSurface(Surface->renderTarget) in
gc_egl_surface.c
0603 Surface->renderTarget =
Surface->renderListCurr->surface;
0604
gcmERR_BREAK(gcoSURF_ReferenceSurface(Surface->renderTarget));
For some reason, the renderListCurr->surface is still
null, increasing the referece number
results in segmentation fault.
What would you think can result in null surface, looks like a
timing issue, cannot gurantee surface is ready.
(gdb) bt
#0
gcoSURF_ReferenceSurface (Surface=0x0) at gc_hal_user_surface.c:12505
#1 0x75886cc8 in
_CreateSurfaceObjects (Thread=Thread@entry=0x4a794,
Surface=Surface@entry=0x13c8bc,
ResolveFormat=ResolveFormat@entry=gcvSURF_R5G6B5)
at gc_egl_surface.c:604
#2 0x758877d0 in
veglResizeSurface (Surface=0x13c8bc,
Surface@entry=0x7efff5cc, Width=1024, Height=720,
ResolveFormat=gcvSURF_R5G6B5, BitsPerPixel=16) at gc_egl_surface.c:1389
#3 0x7588334c in
veglMakeCurrent (Dpy=Dpy@entry=0x126a5c,
Draw=Draw@entry=0x13c8bc, Read=Read@entry=0x13c8bc,
Ctx=Ctx@entry=0x1295e4)
at
gc_egl_context.c:2508
#4 0x75883d44 in
eglMakeCurrent (Dpy=0x126a5c, Draw=Draw@entry=0x13c8bc,
Read=Read@entry=0x13c8bc,
Ctx=0x1295e4) at gc_egl_context.c:2633
#5 0x757287cc in
QVgQpaContext::makeCurrent (this=0x129458,
surface=surface@entry=0x13c8bc) at qvgqpacontext.cpp:91
#6 0x75725b60 in
QVgQpaBackingStore::beginPaint (this=0x13df08, region=...)
at
qvgqpabackingstore.cpp:2359
#7 0x76bb40dc in ?? ()
from /usr/lib/libQt5Widgets.so.5