[Mesa-dev] EGL: Question about deferred context and surface destroy

Tapani Pälli tapani.palli at intel.com
Thu Apr 27 06:37:09 UTC 2017



On 04/26/2017 05:08 PM, Mike Gorchak wrote:
> Hi Tapani,
> 
> Sure, I can share them, but they are QNX based. And as far as I remember 
> it was an issue in the past :)

I thought to ask because there are some multithread dEQP EGL tests 
around this and they are passing at the moment.

Surface and context reference counts are incremented in _eglBindContext 
that gets called during makecurrent. Surface count decrements via 
_eglPutSurface and _eglPutContext calls. AFAIK everything looks OK.


> I think the simplest way for you is to add following calls to function 
> eglutCreateWindow():
> 
> https://cgit.freedesktop.org/mesa/demos/tree/src/egl/eglut/eglut.c#n321
> 
> |if (!eglMakeCurrent(_eglut->dpy, win->surface, win->surface, 
> win->context)) _eglutFatal("failed to make window current");|
> 
> to
> 
> |if (!eglMakeCurrent(_eglut->dpy, win->surface, win->surface, 
> win->context)) _eglutFatal("failed to make window current");
> |
> 
> |||eglDestroySurface(|||_eglut->dpy, ||||win->surface|);|
> 
> |eglDestroyContext||(||||_eglut->dpy, ||||win->context||);|
> 
> And then run GLES 1.x gears for example. According to EGL specification, 
> these Destroy calls should be delayed till surface and context is not 
> current in any thread. Perhaps I understand specification too literally, 
> that's why I'm asking rather than reporting it as a bug.
> 
> Thank you!
> 
> 
> On Wed, Apr 26, 2017 at 2:09 AM, Tapani Pälli <tapani.palli at intel.com 
> <mailto:tapani.palli at intel.com>> wrote:
> 
>     On 04/25/2017 10:20 PM, Mike Gorchak wrote:
>>     Hi all,
>>
>>     During a quick tests of latest Mesa3D versions at different
>>     branches 12.x, 13.x, 17.x we have found that deferred context and
>>     surface destroy doesn't work properly.
>>
> 
>     What kind of test case are you using, could you share this?
> 
>>     According to docs:
>>     https://www.khronos.org/registry/EGL/sdk/docs/man/html/eglDestroySurface.xhtml
>>     <https://www.khronos.org/registry/EGL/sdk/docs/man/html/eglDestroySurface.xhtml>
>>
>>     Description
>>     If the EGL surface is not current to any thread, eglDestroySurface
>>     destroys it immediately. Otherwise, surface is destroyed when it
>>     becomes not current to any thread. Furthermore, resources
>>     associated with a pbuffer surface are not released until all color
>>     buffers of that pbuffer bound to a texture object have been released.
>>
>>     Same for context destroy:
>>     https://www.khronos.org/registry/EGL/sdk/docs/man/html/eglDestroyContext.xhtml
>>     <https://www.khronos.org/registry/EGL/sdk/docs/man/html/eglDestroyContext.xhtml>
>>
>>     Description
>>     If the EGL rendering context is not current to any thread,
>>     eglDestroyContext destroys it immediately. Otherwise, context is
>>     destroyed when it becomes not current to any thread.
>>
>>     Should this behavior be handled at EGL common DRI2 level or DRI2
>>     platform driver level or it should be handled by EGL itself? I can
>>     see some refcounts implemented for EGL surfaces, buteglMakeCurrent
>>     seems don't increment them for surfaces and contexts.
>>
>>     Thanks!
>>
>>
>>
>>     _______________________________________________
>>     mesa-dev mailing list
>>     mesa-dev at lists.freedesktop.org <mailto:mesa-dev at lists.freedesktop.org>
>>     https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>>     <https://lists.freedesktop.org/mailman/listinfo/mesa-dev>
> 
> 
> 


More information about the mesa-dev mailing list