diff options
author | Sarah Sharp <sarah.a.sharp@linux.intel.com> | 2014-05-06 12:10:57 -0700 |
---|---|---|
committer | Chad Versace <chad.versace@linux.intel.com> | 2014-05-20 15:19:48 -0700 |
commit | c524f3ef9155caba6cd4f9fc72485426b1da76fd (patch) | |
tree | 38b7c54d136949079e9c82477b2aa1d374ab7b99 /src/egl/drivers/dri2/platform_x11.c | |
parent | f6e50994e12f1135748a51bf6380dc04bd5f4907 (diff) | |
download | external_mesa3d-c524f3ef9155caba6cd4f9fc72485426b1da76fd.zip external_mesa3d-c524f3ef9155caba6cd4f9fc72485426b1da76fd.tar.gz external_mesa3d-c524f3ef9155caba6cd4f9fc72485426b1da76fd.tar.bz2 |
egl: Add EGL_CHROMIUM_sync_control extension.
Chromium defined a new GL extension (that isn't registered with Khronos).
We need to add an EGL extension for it, so we can migrate ChromeOS on
Intel systems to use EGL instead of GLX.
http://git.chromium.org/gitweb/?p=chromium/src/third_party/khronos.git;a=commitdiff;h=27cbfdab35c601f70aa150581ad1448d0401f447
The EGL_CHROMIUM_sync_control extension is similar to the GLX extension
OML_sync_control, but only defines one function,
eglGetSyncValuesCHROMIUM, which is equivalent to glXGetSyncValuesOML.
http://www.opengl.org/registry/specs/OML/glx_sync_control.txt
Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Reviewed-by: Chad Versace <chad.versace@linux.intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
Cc: Jamey Sharp <jamey@minilop.net>
Cc: Ian Romanick <idr@freedesktop.org>
Cc: Stéphane Marchesin <stephane.marchesin@gmail.com>
Diffstat (limited to 'src/egl/drivers/dri2/platform_x11.c')
-rw-r--r-- | src/egl/drivers/dri2/platform_x11.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/egl/drivers/dri2/platform_x11.c b/src/egl/drivers/dri2/platform_x11.c index 7b585a2..874bcc4 100644 --- a/src/egl/drivers/dri2/platform_x11.c +++ b/src/egl/drivers/dri2/platform_x11.c @@ -1008,6 +1008,32 @@ dri2_x11_swrast_create_image_khr(_EGLDriver *drv, _EGLDisplay *disp, return NULL; } +static EGLBoolean +dri2_x11_get_sync_values(_EGLDisplay *display, _EGLSurface *surface, + EGLuint64KHR *ust, EGLuint64KHR *msc, + EGLuint64KHR *sbc) +{ + struct dri2_egl_display *dri2_dpy = dri2_egl_display(display); + struct dri2_egl_surface *dri2_surf = dri2_egl_surface(surface); + xcb_dri2_get_msc_cookie_t cookie; + xcb_dri2_get_msc_reply_t *reply; + + cookie = xcb_dri2_get_msc(dri2_dpy->conn, dri2_surf->drawable); + reply = xcb_dri2_get_msc_reply(dri2_dpy->conn, cookie, NULL); + + if (!reply) { + _eglError(EGL_BAD_ACCESS, __func__); + return EGL_FALSE; + } + + *ust = ((EGLuint64KHR) reply->ust_hi << 32) | reply->ust_lo; + *msc = ((EGLuint64KHR) reply->msc_hi << 32) | reply->msc_lo; + *sbc = ((EGLuint64KHR) reply->sbc_hi << 32) | reply->sbc_lo; + free(reply); + + return EGL_TRUE; +} + static struct dri2_egl_display_vtbl dri2_x11_swrast_display_vtbl = { .authenticate = NULL, .create_window_surface = dri2_x11_create_window_surface, @@ -1022,6 +1048,7 @@ static struct dri2_egl_display_vtbl dri2_x11_swrast_display_vtbl = { .copy_buffers = dri2_x11_copy_buffers, .query_buffer_age = dri2_fallback_query_buffer_age, .create_wayland_buffer_from_image = dri2_fallback_create_wayland_buffer_from_image, + .get_sync_values = dri2_fallback_get_sync_values, }; static struct dri2_egl_display_vtbl dri2_x11_display_vtbl = { @@ -1039,6 +1066,7 @@ static struct dri2_egl_display_vtbl dri2_x11_display_vtbl = { .copy_buffers = dri2_x11_copy_buffers, .query_buffer_age = dri2_fallback_query_buffer_age, .create_wayland_buffer_from_image = dri2_fallback_create_wayland_buffer_from_image, + .get_sync_values = dri2_x11_get_sync_values, }; static EGLBoolean @@ -1243,6 +1271,7 @@ dri2_initialize_x11_dri2(_EGLDriver *drv, _EGLDisplay *disp) disp->Extensions.NOK_swap_region = EGL_TRUE; disp->Extensions.NOK_texture_from_pixmap = EGL_TRUE; disp->Extensions.NV_post_sub_buffer = EGL_TRUE; + disp->Extensions.CHROMIUM_sync_control = EGL_TRUE; #ifdef HAVE_WAYLAND_PLATFORM disp->Extensions.WL_bind_wayland_display = EGL_TRUE; |