From 0b86395f31be454112f350f774d9831e79cc5342 Mon Sep 17 00:00:00 2001 From: Wonsik Jung Date: Wed, 4 Mar 2020 18:10:01 +0900 Subject: [PATCH] Fix the bug of eglSync for EvasGL eglWaitSync is called with the destoried eglSync handle, sometimes. This patch is for the case. Change-Id: Iad2f7d5332c4b635d98f7ee72152b4accb773a3c --- src/modules/evas/engines/wayland_egl/evas_engine.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/modules/evas/engines/wayland_egl/evas_engine.c b/src/modules/evas/engines/wayland_egl/evas_engine.c index e37201c..cf12b06 100755 --- a/src/modules/evas/engines/wayland_egl/evas_engine.c +++ b/src/modules/evas/engines/wayland_egl/evas_engine.c @@ -1181,15 +1181,26 @@ _native_cb_bind(void *image) { if (getenv("EVAS_GL_EGL_SYNC_ON") && glsym_eglWaitSyncKHR) { + if (ob->egl_fence == EGL_NO_SYNC) + { + if (glsym_eglCreateSyncKHR) + ob->egl_fence = glsym_eglCreateSyncKHR(ob->egl_disp, EGL_SYNC_FENCE_KHR, NULL); + + if (ob->egl_fence == EGL_NO_SYNC) + ERR("eglCreateSync failed. error:%x", GL_TH(eglGetError)); + } + wait_result = glsym_eglWaitSyncKHR(ob->egl_disp, ob->egl_fence, 0); if (!wait_result) - ERR("eglWaitSync failed"); + ERR("eglWaitSync failed %x", GL_TH(eglGetError)); if (glsym_eglDestroySyncKHR) destroy_result = glsym_eglDestroySyncKHR(ob->egl_disp, ob->egl_fence); if (!destroy_result) - ERR("eglDestroySync failed"); + ERR("eglDestroySync failed %x", GL_TH(eglGetError)); + + ob->egl_fence = EGL_NO_SYNC; } GL_TH_CALL(glEGLImageTargetTexture2DOES, glsym_glEGLImageTargetTexture2DOES, GL_TEXTURE_2D, surface); @@ -1243,7 +1254,7 @@ eng_gl_get_pixels(void *data EINA_UNUSED, Evas_Object_Image_Pixels_Get_Cb cb, vo ob->egl_fence = glsym_eglCreateSyncKHR(ob->egl_disp, EGL_SYNC_FENCE_KHR, NULL); if (ob->egl_fence == EGL_NO_SYNC) - ERR("eglCreateSync failed. error:%x", eglGetError()); + ERR("eglCreateSync failed. error:%x", EVGL_TH(eglGetError)); } } -- 2.7.4