diff --git a/libweston/gl-renderer.c b/libweston/gl-renderer.c index 5768f05a..c2e88a65 100644 --- a/libweston/gl-renderer.c +++ b/libweston/gl-renderer.c @@ -231,6 +231,11 @@ struct gl_renderer { int has_dmabuf_import_modifiers; PFNEGLQUERYDMABUFFORMATSEXTPROC query_dmabuf_formats; PFNEGLQUERYDMABUFMODIFIERSEXTPROC query_dmabuf_modifiers; + + int has_native_fence_sync; + PFNEGLCREATESYNCKHRPROC create_sync; + PFNEGLDESTROYSYNCKHRPROC destroy_sync; + PFNEGLDUPNATIVEFENCEFDANDROIDPROC dup_native_fence_fd; }; static PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display = NULL; @@ -3028,6 +3033,17 @@ gl_renderer_setup_egl_extensions(struct weston_compositor *ec) if (weston_check_egl_extension(extensions, "GL_EXT_texture_rg")) gr->has_gl_texture_rg = 1; + if (weston_check_egl_extension(extensions, "EGL_KHR_fence_sync") && + weston_check_egl_extension(extensions, "EGL_ANDROID_native_fence_sync")) { + gr->create_sync = + (void *) eglGetProcAddress("eglCreateSyncKHR"); + gr->destroy_sync = + (void *) eglGetProcAddress("eglDestroySyncKHR"); + gr->dup_native_fence_fd = + (void *) eglGetProcAddress("eglDupNativeFenceFDANDROID"); + gr->has_native_fence_sync = 1; + } + renderer_setup_egl_client_extensions(gr); return 0; diff --git a/shared/weston-egl-ext.h b/shared/weston-egl-ext.h index ffea438b..8aacbd01 100644 --- a/shared/weston-egl-ext.h +++ b/shared/weston-egl-ext.h @@ -176,6 +176,22 @@ typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMPIXMAPSURFACEEXTPROC) (EGLD #define EGL_PLATFORM_X11_KHR 0x31D5 #endif +#ifndef EGL_KHR_cl_event2 +#define EGL_KHR_cl_event2 1 +typedef void *EGLSyncKHR; +#endif /* EGL_KHR_cl_event2 */ + +#ifndef EGL_KHR_fence_sync +#define EGL_KHR_fence_sync 1 +typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNCKHRPROC) (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync); +#endif /* EGL_KHR_fence_sync */ + +#ifndef EGL_ANDROID_native_fence_sync +#define EGL_ANDROID_native_fence_sync 1 +typedef EGLint (EGLAPIENTRYP PFNEGLDUPNATIVEFENCEFDANDROIDPROC) (EGLDisplay dpy, EGLSyncKHR sync); +#endif /* EGL_ANDROID_native_fence_sync */ + #else /* ENABLE_EGL */ /* EGL platform definition are keept to allow compositor-xx.c to build */