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.pa...@intel.com <mailto:tapani.pa...@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@lists.freedesktop.org <mailto:mesa-dev@lists.freedesktop.org>
    https://lists.freedesktop.org/mailman/listinfo/mesa-dev
    <https://lists.freedesktop.org/mailman/listinfo/mesa-dev>



_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to