[explicit_sync] Implemented to set acquire fence to wl_surface.
authorJoonbum Ko <joonbum.ko@samsung.com>
Thu, 9 Apr 2020 07:19:17 +0000 (16:19 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Mon, 10 Aug 2020 08:14:37 +0000 (17:14 +0900)
 - acquire_fence is set only when use_surface_sync is TPL_TRUE.
  Otherwise, wait for sync_fd to be signaled in twe_thread.

Change-Id: Ib778b5fe81710fa136ca330539e59d2085263b95
Signed-off-by: Joonbum Ko <joonbum.ko@samsung.com>
src/tpl_wayland_egl_thread.c

index de98abe5bcaad938e8b7032d89b090b64f047323..fbdc44b85f3bf7ec6bbcbefce6253a768f45b4db 100755 (executable)
@@ -2503,11 +2503,20 @@ _twe_thread_wl_surface_dispatch(GSource *source, GSourceFunc cb, gpointer data)
                        int sync_fd = surf_source->sync_info.sync_fd;
                        tbm_surface_h tbm_surface = surf_source->sync_info.tbm_surface;
 
-                       res = _twe_thread_fence_wait_source_attach(surf_source, tbm_surface, sync_fd);
-                       if (res != TPL_ERROR_NONE) {
-                               TPL_ERR("Failed to attach source with fence_fd(%d) ret(%d)",
-                                               sync_fd, res);
-                               surf_source->use_sync_fence = TPL_FALSE;
+                       if (surf_source->use_surface_sync) {
+                               zwp_linux_surface_synchronization_v1_set_acquire_fence(
+                                                       surf_source->surface_sync, sync_fd);
+                               close(sync_fd);
+                       } else {
+                               ret = _twe_thread_fence_wait_source_attach(surf_source, tbm_surface, sync_fd);
+                               if (ret != TPL_ERROR_NONE) {
+                                       TPL_ERR("Failed to attach source with fence_fd(%d) ret(%d)",
+                                                       sync_fd, ret);
+                                       surf_source->use_sync_fence = TPL_FALSE;
+                                       return ret;
+                               }
+
+                               surf_source->use_sync_fence = TPL_TRUE;
                        }
 
                        surf_source->sync_info.sync_fd = -1;