On 07/07/2016 09:44 AM, Matt Turner wrote: > On Wed, Jun 29, 2016 at 2:16 PM, Ian Romanick <i...@freedesktop.org> wrote: >> On 06/29/2016 02:04 AM, Colin McDonald wrote: >>> I'm not familiar with the code, other than diving in to fix these >>> indirect multi-texture problems, so you will know much more about it >>> than me. >>> >>> But, my understanding is that __glXInitVertexArrayState needs info >>> from the server, obtained by calls to _indirect_glGetString & >>> __indirect_glGetIntegerv. Those routines need the current context >>> from __glXGetCurrentContext, so __glXSetCurrentContext(gc) must have >>> been called first. >>> >>> I see your point about a "layering violation". I think that to avoid >>> that would require a more substantial restructuring, so that the >>> indirect layer can run some initialisation code (ie >>> __glXInitVertexArrayState or similar) separate from the bind >>> callback, once a usable context has been setup. >> >> Maybe... *If* __glXGetCurrentContext is the only problem, then I think >> a small refactor of __indirect_glGetString could also solve the problem. >> Just make a new function >> >> const GLubyte *do_GetString(Display *dpy, struct glx_context *gc, >> GLenum name); >> >> that both __indirect_glGetString and indirect_bind_context call. It >> might even be worth folding the contents of __glXGetString into the new >> function... though that's probably a follow-up patch. > > I tried that (see attached p.patch)... and I get another segfault.
I think it should be possible to elide the __glXFlushRenderBuffer call. Since the context is being made current, its buffer of rendering commands must be empty. Does the attached patch help? > (gdb) bt > #0 0x00007ffff4a97700 in XGetXCBConnection () from /usr/lib64/libX11-xcb.so.1 > #1 0x00007ffff7664a3d in __glXFlushRenderBuffer (ctx=0x662080, > pc=0x7ffff7f76010 "") at ../../../mesa/src/glx/glxext.c:987 > #2 0x00007ffff769b429 in do_GetString (dpy=0x64fc60, gc=0x662080, > name=7939) at ../../../mesa/src/glx/single2.c:678 > #3 0x00007ffff7688d55 in indirect_bind_context (gc=0x662080, > old=0x7ffff78cf6c0 <dummyContext>, draw=27262978, read=27262978) at > ../../../mesa/src/glx/indirect_glx.c:158 > #4 0x00007ffff766278a in MakeContextCurrent (dpy=0x64fc60, > draw=27262978, read=27262978, gc_user=0x662080) at > ../../../mesa/src/glx/glxcurrent.c:228 > #5 0x00007ffff70c1af0 in fgPlatformOpenWindow () from /usr/lib64/libglut.so.3 > #6 0x00007ffff70bbb06 in fgOpenWindow () from /usr/lib64/libglut.so.3 > #7 0x00007ffff70ba42b in fgCreateWindow () from /usr/lib64/libglut.so.3 > #8 0x00007ffff70bbc00 in glutCreateWindow () from /usr/lib64/libglut.so.3 > #9 0x00000000004022c8 in main (argc=1, argv=0x7fffffffe0f8) at > arbvparray.c:294 > > gc->currentDpy is NULL. Sigh. I don't know what any of this code is doing.
move-XGetXCBConnection-call.patch
Description: application/pgp-keys
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev