gl-renderer: Add support for fence sync extensions
Check for the EGL_KHR_fence_sync and EGL_ANDROID_native_fence_sync extensions and get pointers to required extension functions. These extensions allow us to acquire GPU timestamp information asynchronously, and are required by the upcoming work to add rendering begin/end timepoints to the weston timeline. Signed-off-by: Alexandros Frantzis <alexandros.frantzis@collabora.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
This commit is contained in:
parent
75d38ef1ed
commit
7192b17f3e
@ -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;
|
||||
|
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user