intel/dri: finish proper glthread
authorSergii Romantsov <sergii.romantsov@globallogic.com>
Wed, 5 Jun 2019 11:33:58 +0000 (14:33 +0300)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 5 Sep 2019 16:04:12 +0000 (09:04 -0700)
KWin was able to get NULL-context in the call
intelUnbindContext. But a call _mesa_glthread_finish
is not resistent to such case.
Case can be catched with steps:
1. Create both glx and egl contexts
2. Make glx as current
3. Make egl as current
4. Reset glx context
5. Make egl as current

Solution adds proper finishing of glthread-context
(context will be taken from the requested dri-context
for unbinding, but not from the saved current context).

Piglit-test: https://gitlab.freedesktop.org/mesa/piglit/merge_requests/87

Cc: 19.1 19.2 <mesa-stable@lists.freedesktop.org>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=110814
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=111271
Fixes: dca36d5516d0 (i965: Implement threaded GL support)
Signed-off-by: Sergii Romantsov <sergii.romantsov@globallogic.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_context.c

index cc53f403bf2ad9c9a89f5449ad3a8842a302ae1d..6cec836da5c99ca687e263c97e7c2f5d0f7a566d 100644 (file)
@@ -1236,7 +1236,7 @@ intelDestroyContext(__DRIcontext * driContextPriv)
 GLboolean
 intelUnbindContext(__DRIcontext * driContextPriv)
 {
-   GET_CURRENT_CONTEXT(ctx);
+   struct gl_context *ctx = driContextPriv->driverPrivate;
    _mesa_glthread_finish(ctx);
 
    /* Unset current context and dispath table */