[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