From 1e79e054e7dff0c45538fff1257e1f81a206d7c9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Tue, 12 May 2015 18:14:31 +0200 Subject: [PATCH] egl: add eglGetSyncAttrib (v2) v2: - don't modify "value" in eglGetSyncAttribKHR after an error - rename _egl_api::GetSyncAttribKHR -> GetSyncAttrib - rename GetSyncAttribKHR_t -> GetSyncAttrib_t - rename _eglGetSyncAttribKHR to _eglGetSyncAttrib Reviewed-by: Chad Versace --- src/egl/main/eglapi.c | 25 ++++++++++++++++++++++--- src/egl/main/eglapi.h | 4 ++-- src/egl/main/eglfallbacks.c | 2 +- src/egl/main/eglsync.c | 4 ++-- src/egl/main/eglsync.h | 4 ++-- 5 files changed, 29 insertions(+), 10 deletions(-) diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c index 03a55f11c07..96968694ac5 100644 --- a/src/egl/main/eglapi.c +++ b/src/egl/main/eglapi.c @@ -1427,8 +1427,8 @@ eglSignalSyncKHR(EGLDisplay dpy, EGLSync sync, EGLenum mode) } -static EGLBoolean EGLAPIENTRY -eglGetSyncAttribKHR(EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLint *value) +EGLBoolean EGLAPIENTRY +eglGetSyncAttrib(EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLAttrib *value) { _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLSync *s = _eglLookupSync(sync, disp); @@ -1438,12 +1438,30 @@ eglGetSyncAttribKHR(EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLint *valu _EGL_CHECK_SYNC(disp, s, EGL_FALSE, drv); assert(disp->Extensions.KHR_reusable_sync || disp->Extensions.KHR_fence_sync); - ret = drv->API.GetSyncAttribKHR(drv, disp, s, attribute, value); + ret = drv->API.GetSyncAttrib(drv, disp, s, attribute, value); RETURN_EGL_EVAL(disp, ret); } +static EGLBoolean EGLAPIENTRY +eglGetSyncAttribKHR(EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLint *value) +{ + EGLAttrib attrib = *value; + EGLBoolean result = eglGetSyncAttrib(dpy, sync, attribute, &attrib); + + /* The EGL_KHR_fence_sync spec says this about eglGetSyncAttribKHR: + * + * If any error occurs, <*value> is not modified. + */ + if (result == EGL_FALSE) + return result; + + *value = attrib; + return result; +} + + #ifdef EGL_NOK_swap_region static EGLBoolean EGLAPIENTRY @@ -1731,6 +1749,7 @@ eglGetProcAddress(const char *procname) { "eglCreateSync", (_EGLProc) eglCreateSync }, { "eglDestroySync", (_EGLProc) eglDestroySync }, { "eglClientWaitSync", (_EGLProc) eglClientWaitSync }, + { "eglGetSyncAttrib", (_EGLProc) eglGetSyncAttrib }, { "eglWaitSync", (_EGLProc) eglWaitSync }, { "eglDestroyImage", (_EGLProc) eglDestroyImage }, #ifdef EGL_MESA_drm_display diff --git a/src/egl/main/eglapi.h b/src/egl/main/eglapi.h index d2b2eb7b264..4e0378d0d5f 100644 --- a/src/egl/main/eglapi.h +++ b/src/egl/main/eglapi.h @@ -96,7 +96,7 @@ typedef EGLBoolean (*DestroySyncKHR_t)(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSy typedef EGLint (*ClientWaitSyncKHR_t)(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSync *sync, EGLint flags, EGLTime timeout); typedef EGLint (*WaitSyncKHR_t)(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSync *sync); typedef EGLBoolean (*SignalSyncKHR_t)(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSync *sync, EGLenum mode); -typedef EGLBoolean (*GetSyncAttribKHR_t)(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSync *sync, EGLint attribute, EGLint *value); +typedef EGLBoolean (*GetSyncAttrib_t)(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSync *sync, EGLint attribute, EGLAttrib *value); #ifdef EGL_NOK_swap_region @@ -178,7 +178,7 @@ struct _egl_api ClientWaitSyncKHR_t ClientWaitSyncKHR; WaitSyncKHR_t WaitSyncKHR; SignalSyncKHR_t SignalSyncKHR; - GetSyncAttribKHR_t GetSyncAttribKHR; + GetSyncAttrib_t GetSyncAttrib; #ifdef EGL_NOK_swap_region SwapBuffersRegionNOK_t SwapBuffersRegionNOK; diff --git a/src/egl/main/eglfallbacks.c b/src/egl/main/eglfallbacks.c index c44ec6cc835..3c3701f4ae9 100644 --- a/src/egl/main/eglfallbacks.c +++ b/src/egl/main/eglfallbacks.c @@ -91,7 +91,7 @@ _eglInitDriverFallbacks(_EGLDriver *drv) drv->API.ClientWaitSyncKHR = NULL; drv->API.WaitSyncKHR = NULL; drv->API.SignalSyncKHR = NULL; - drv->API.GetSyncAttribKHR = _eglGetSyncAttribKHR; + drv->API.GetSyncAttrib = _eglGetSyncAttrib; #ifdef EGL_MESA_drm_image drv->API.CreateDRMImageMESA = NULL; diff --git a/src/egl/main/eglsync.c b/src/egl/main/eglsync.c index 205cdc04581..3019e6e9333 100644 --- a/src/egl/main/eglsync.c +++ b/src/egl/main/eglsync.c @@ -141,8 +141,8 @@ _eglInitSync(_EGLSync *sync, _EGLDisplay *dpy, EGLenum type, EGLBoolean -_eglGetSyncAttribKHR(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSync *sync, - EGLint attribute, EGLint *value) +_eglGetSyncAttrib(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSync *sync, + EGLint attribute, EGLAttrib *value) { if (!value) return _eglError(EGL_BAD_PARAMETER, "eglGetSyncAttribKHR"); diff --git a/src/egl/main/eglsync.h b/src/egl/main/eglsync.h index 4959cf07482..9b2aac8828b 100644 --- a/src/egl/main/eglsync.h +++ b/src/egl/main/eglsync.h @@ -57,8 +57,8 @@ _eglInitSync(_EGLSync *sync, _EGLDisplay *dpy, EGLenum type, extern EGLBoolean -_eglGetSyncAttribKHR(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSync *sync, - EGLint attribute, EGLint *value); +_eglGetSyncAttrib(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSync *sync, + EGLint attribute, EGLAttrib *value); /** -- 2.30.2