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:
Alexandros Frantzis
2017-09-27 15:09:14 +03:00
committed by Pekka Paalanen
parent 75d38ef1ed
commit 7192b17f3e
2 changed files with 32 additions and 0 deletions
+16
View File
@@ -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;