Public bug reported:
Say you have 2 threads A/B.
Thread A:
Starts running application, does an eglBindAPI(OPENGL), so the threads API
index is 2
eglMakeCurrent(context) <--- The contexts API is 2
<renders stuff>
<start to swtich over to thread B>
eglMakeCurrent(EGL_NO_CONTEXT, EGL_NO_SURFACE) ... etc.
Thread B:
New thread created. Defaults the API index to OPENGL_ES. So the threads API
index is 0.
eglcurrent.c:149: t->CurrentAPIIndex =
_eglConvertApiToIndex(EGL_OPENGL_ES_API);
eglMakeCurrent(context) <--- The contexts API index is 2
--The Problem--
When it gets down to _eglBindContextToThread, it uses the contexts API index.
So it binds the context to index 2, and returns TRUE.
On the next eglSwapBuffers, it does an _eglGetCurrentContext(), which uses the
threads API index, which is 0. This returns an EGL_NO_CONTEXT (0x0), causing
EGL_BAD_SURFACE, causing lots of other fun problems after. Mainly, after this
happens, no rendering is possible.
_eglBindContextToThread:459 uses:
apiIndex = (ctx) ?
_eglConvertApiToIndex(ctx->ClientAPI) : t->CurrentAPIIndex;
To get the api index.
_eglGetCurrentContext:
return t->CurrentContexts[t->CurrentAPIIndex];
So possibly, when a context is bound to a thread it should check if the threads
api index != context api index, if so then set the threads api index to the
contexts api index.
** Affects: mesa (Ubuntu)
Importance: Undecided
Assignee: Chris Halse Rogers (raof)
Status: New
** Changed in: mesa (Ubuntu)
Assignee: (unassigned) => Chris Halse Rogers (raof)
--
You received this bug notification because you are a member of Desktop
Packages, which is subscribed to mesa in Ubuntu.
https://bugs.launchpad.net/bugs/1258579
Title:
New threads API index different then context after an eglMakeCurrent.
Status in “mesa” package in Ubuntu:
New
Bug description:
Say you have 2 threads A/B.
Thread A:
Starts running application, does an eglBindAPI(OPENGL), so the threads API
index is 2
eglMakeCurrent(context) <--- The contexts API is 2
<renders stuff>
<start to swtich over to thread B>
eglMakeCurrent(EGL_NO_CONTEXT, EGL_NO_SURFACE) ... etc.
Thread B:
New thread created. Defaults the API index to OPENGL_ES. So the threads API
index is 0.
eglcurrent.c:149: t->CurrentAPIIndex =
_eglConvertApiToIndex(EGL_OPENGL_ES_API);
eglMakeCurrent(context) <--- The contexts API index is 2
--The Problem--
When it gets down to _eglBindContextToThread, it uses the contexts API index.
So it binds the context to index 2, and returns TRUE.
On the next eglSwapBuffers, it does an _eglGetCurrentContext(), which uses
the threads API index, which is 0. This returns an EGL_NO_CONTEXT (0x0),
causing EGL_BAD_SURFACE, causing lots of other fun problems after. Mainly,
after this happens, no rendering is possible.
_eglBindContextToThread:459 uses:
apiIndex = (ctx) ?
_eglConvertApiToIndex(ctx->ClientAPI) : t->CurrentAPIIndex;
To get the api index.
_eglGetCurrentContext:
return t->CurrentContexts[t->CurrentAPIIndex];
So possibly, when a context is bound to a thread it should check if the
threads api index != context api index, if so then set the threads api index to
the contexts api index.
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/mesa/+bug/1258579/+subscriptions
--
Mailing list: https://launchpad.net/~desktop-packages
Post to : [email protected]
Unsubscribe : https://launchpad.net/~desktop-packages
More help : https://help.launchpad.net/ListHelp