Commit ea6a98ba by Jason Macnak

Move egl locking code from main.cpp to libEGL.cpp

The next change will update the locking around eglSwapBuffers. Move all the locking into libEGL.cpp to avoid duplicating getDisplayLock(). Bug: b/135742693 Test: built locally Test: presubmit Test: cts -m CtsMediaTestCases -t android.media.cts.HeifWriterTest#testInputSurface_Grid_Handler Change-Id: I1ca863b4902d1dc4e456700ac96aecc3e61424ba Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/37768 Presubmit-Ready: Jason Macnak <natsu@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by: 's avatarChris Forbes <chrisforbes@google.com> Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com> Tested-by: 's avatarJason Macnak <natsu@google.com>
parent fda994c6
......@@ -37,6 +37,11 @@ namespace egl
{
namespace
{
sw::RecursiveLock *getDisplayLock(egl::Display *display) {
if (!display) return nullptr;
return display->getLock();
}
bool validateDisplay(egl::Display *display)
{
if(display == EGL_NO_DISPLAY)
......@@ -167,6 +172,8 @@ EGLBoolean EGLAPIENTRY Initialize(EGLDisplay dpy, EGLint *major, EGLint *minor)
egl::Display *display = egl::Display::get(dpy);
RecursiveLockGuard lock(egl::getDisplayLock(display));
if(!display)
{
return error(EGL_BAD_DISPLAY, EGL_FALSE);
......@@ -194,6 +201,8 @@ EGLBoolean EGLAPIENTRY Terminate(EGLDisplay dpy)
egl::Display *display = egl::Display::get(dpy);
RecursiveLockGuard lock(egl::getDisplayLock(display));
display->terminate();
return success(EGL_TRUE);
......@@ -219,6 +228,8 @@ const char *EGLAPIENTRY QueryString(EGLDisplay dpy, EGLint name)
egl::Display *display = egl::Display::get(dpy);
RecursiveLockGuard lock(egl::getDisplayLock(display));
if(!validateDisplay(display))
{
return nullptr;
......@@ -257,6 +268,8 @@ EGLBoolean EGLAPIENTRY GetConfigs(EGLDisplay dpy, EGLConfig *configs, EGLint con
egl::Display *display = egl::Display::get(dpy);
RecursiveLockGuard lock(egl::getDisplayLock(display));
if(!validateDisplay(display))
{
return EGL_FALSE;
......@@ -285,6 +298,8 @@ EGLBoolean EGLAPIENTRY ChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, E
egl::Display *display = egl::Display::get(dpy);
RecursiveLockGuard lock(egl::getDisplayLock(display));
if(!validateDisplay(display))
{
return EGL_FALSE;
......@@ -317,6 +332,8 @@ EGLBoolean EGLAPIENTRY GetConfigAttrib(EGLDisplay dpy, EGLConfig config, EGLint
egl::Display *display = egl::Display::get(dpy);
RecursiveLockGuard lock(egl::getDisplayLock(display));
if(!validateConfig(display, config))
{
return EGL_FALSE;
......@@ -337,6 +354,8 @@ EGLSurface EGLAPIENTRY CreatePlatformWindowSurface(EGLDisplay dpy, EGLConfig con
egl::Display *display = egl::Display::get(dpy);
RecursiveLockGuard lock(egl::getDisplayLock(display));
if(!validateConfig(display, config))
{
return EGL_NO_SURFACE;
......@@ -375,6 +394,8 @@ EGLSurface EGLAPIENTRY CreatePbufferSurface(EGLDisplay dpy, EGLConfig config, co
egl::Display *display = egl::Display::get(dpy);
RecursiveLockGuard lock(egl::getDisplayLock(display));
if(!validateConfig(display, config))
{
return EGL_NO_SURFACE;
......@@ -390,6 +411,8 @@ EGLSurface EGLAPIENTRY CreatePlatformPixmapSurface(EGLDisplay dpy, EGLConfig con
egl::Display *display = egl::Display::get(dpy);
RecursiveLockGuard lock(egl::getDisplayLock(display));
if(!validateConfig(display, config))
{
return EGL_NO_SURFACE;
......@@ -425,6 +448,8 @@ EGLBoolean EGLAPIENTRY DestroySurface(EGLDisplay dpy, EGLSurface surface)
egl::Display *display = egl::Display::get(dpy);
egl::Surface *eglSurface = static_cast<egl::Surface*>(surface);
RecursiveLockGuard lock(egl::getDisplayLock(display));
if(!validateSurface(display, eglSurface))
{
return EGL_FALSE;
......@@ -448,6 +473,8 @@ EGLBoolean EGLAPIENTRY QuerySurface(EGLDisplay dpy, EGLSurface surface, EGLint a
egl::Display *display = egl::Display::get(dpy);
egl::Surface *eglSurface = (egl::Surface*)surface;
RecursiveLockGuard lock(egl::getDisplayLock(display));
if(!validateSurface(display, eglSurface))
{
return EGL_FALSE;
......@@ -595,6 +622,8 @@ EGLSurface EGLAPIENTRY CreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buf
{
egl::Display *display = egl::Display::get(dpy);
RecursiveLockGuard lock(egl::getDisplayLock(display));
if(!validateConfig(display, config))
{
return EGL_NO_SURFACE;
......@@ -618,6 +647,8 @@ EGLBoolean EGLAPIENTRY SurfaceAttrib(EGLDisplay dpy, EGLSurface surface, EGLint
egl::Display *display = egl::Display::get(dpy);
egl::Surface *eglSurface = static_cast<egl::Surface*>(surface);
RecursiveLockGuard lock(egl::getDisplayLock(display));
if(!validateSurface(display, eglSurface))
{
return EGL_FALSE;
......@@ -674,6 +705,8 @@ EGLBoolean EGLAPIENTRY BindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint b
egl::Display *display = egl::Display::get(dpy);
egl::Surface *eglSurface = static_cast<egl::Surface*>(surface);
RecursiveLockGuard lock(egl::getDisplayLock(display));
if(!validateSurface(display, eglSurface))
{
return EGL_FALSE;
......@@ -716,6 +749,8 @@ EGLBoolean EGLAPIENTRY ReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLin
egl::Display *display = egl::Display::get(dpy);
egl::Surface *eglSurface = static_cast<egl::Surface*>(surface);
RecursiveLockGuard lock(egl::getDisplayLock(display));
if(!validateSurface(display, eglSurface))
{
return EGL_FALSE;
......@@ -753,6 +788,8 @@ EGLBoolean EGLAPIENTRY SwapInterval(EGLDisplay dpy, EGLint interval)
egl::Display *display = egl::Display::get(dpy);
egl::Context *context = egl::getCurrentContext();
RecursiveLockGuard lock(egl::getDisplayLock(display));
if(!validateContext(display, context))
{
return EGL_FALSE;
......@@ -860,6 +897,8 @@ EGLContext EGLAPIENTRY CreateContext(EGLDisplay dpy, EGLConfig config, EGLContex
egl::Display *display = egl::Display::get(dpy);
egl::Context *shareContext = static_cast<egl::Context*>(share_context);
RecursiveLockGuard lock(egl::getDisplayLock(display));
if(!validateConfig(display, config))
{
return EGL_NO_CONTEXT;
......@@ -883,6 +922,8 @@ EGLBoolean EGLAPIENTRY DestroyContext(EGLDisplay dpy, EGLContext ctx)
egl::Display *display = egl::Display::get(dpy);
egl::Context *context = static_cast<egl::Context*>(ctx);
RecursiveLockGuard lock(egl::getDisplayLock(display));
if(!validateContext(display, context))
{
return EGL_FALSE;
......@@ -908,6 +949,8 @@ EGLBoolean EGLAPIENTRY MakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface r
egl::Surface *drawSurface = static_cast<egl::Surface*>(draw);
egl::Surface *readSurface = static_cast<egl::Surface*>(read);
RecursiveLockGuard lock(egl::getDisplayLock(display));
if(ctx != EGL_NO_CONTEXT || draw != EGL_NO_SURFACE || read != EGL_NO_SURFACE)
{
if(!validateDisplay(display))
......@@ -1012,6 +1055,8 @@ EGLBoolean EGLAPIENTRY QueryContext(EGLDisplay dpy, EGLContext ctx, EGLint attri
egl::Display *display = egl::Display::get(dpy);
egl::Context *context = static_cast<egl::Context*>(ctx);
RecursiveLockGuard lock(egl::getDisplayLock(display));
if(!validateContext(display, context))
{
return EGL_FALSE;
......@@ -1091,6 +1136,8 @@ EGLBoolean EGLAPIENTRY SwapBuffers(EGLDisplay dpy, EGLSurface surface)
egl::Display *display = egl::Display::get(dpy);
egl::Surface *eglSurface = (egl::Surface*)surface;
RecursiveLockGuard lock(egl::getDisplayLock(display));
if(!validateSurface(display, eglSurface))
{
return EGL_FALSE;
......@@ -1113,6 +1160,8 @@ EGLBoolean EGLAPIENTRY CopyBuffers(EGLDisplay dpy, EGLSurface surface, EGLNative
egl::Display *display = egl::Display::get(dpy);
egl::Surface *eglSurface = static_cast<egl::Surface*>(surface);
RecursiveLockGuard lock(egl::getDisplayLock(display));
if(!validateSurface(display, eglSurface))
{
return EGL_FALSE;
......@@ -1130,6 +1179,8 @@ EGLImage EGLAPIENTRY CreateImage(EGLDisplay dpy, EGLContext ctx, EGLenum target,
egl::Display *display = egl::Display::get(dpy);
egl::Context *context = static_cast<egl::Context*>(ctx);
RecursiveLockGuard lock(egl::getDisplayLock(display));
if(!validateDisplay(display))
{
return error(EGL_BAD_DISPLAY, EGL_NO_IMAGE_KHR);
......@@ -1226,6 +1277,8 @@ EGLBoolean EGLAPIENTRY DestroyImageKHR(EGLDisplay dpy, EGLImageKHR image)
egl::Display *display = egl::Display::get(dpy);
RecursiveLockGuard lock(egl::getDisplayLock(display));
if(!validateDisplay(display))
{
return error(EGL_BAD_DISPLAY, EGL_FALSE);
......@@ -1308,6 +1361,8 @@ EGLSync EGLAPIENTRY CreateSync(EGLDisplay dpy, EGLenum type, const EGLAttrib *at
egl::Display *display = egl::Display::get(dpy);
RecursiveLockGuard lock(egl::getDisplayLock(display));
if(!validateDisplay(display))
{
return error(EGL_BAD_DISPLAY, EGL_NO_SYNC_KHR);
......@@ -1350,6 +1405,8 @@ EGLBoolean EGLAPIENTRY DestroySyncKHR(EGLDisplay dpy, EGLSyncKHR sync)
egl::Display *display = egl::Display::get(dpy);
FenceSync *eglSync = static_cast<FenceSync*>(sync);
RecursiveLockGuard lock(egl::getDisplayLock(display));
if(!validateDisplay(display))
{
return error(EGL_BAD_DISPLAY, EGL_FALSE);
......@@ -1372,6 +1429,8 @@ EGLint EGLAPIENTRY ClientWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint fla
egl::Display *display = egl::Display::get(dpy);
FenceSync *eglSync = static_cast<FenceSync*>(sync);
RecursiveLockGuard lock(egl::getDisplayLock(display));
if(!validateDisplay(display))
{
return error(EGL_BAD_DISPLAY, EGL_FALSE);
......@@ -1400,6 +1459,8 @@ EGLBoolean EGLAPIENTRY GetSyncAttrib(EGLDisplay dpy, EGLSyncKHR sync, EGLint att
egl::Display *display = egl::Display::get(dpy);
FenceSync *eglSync = static_cast<FenceSync*>(sync);
RecursiveLockGuard lock(egl::getDisplayLock(display));
if(!validateDisplay(display))
{
return error(EGL_BAD_DISPLAY, EGL_FALSE);
......
......@@ -340,12 +340,6 @@ void error(EGLint errorCode)
}
}
sw::RecursiveLock *getDisplayLock(EGLDisplay dpy)
{
auto display = Display::get(dpy);
if (!display) return nullptr;
return display->getLock();
}
}
namespace egl
......@@ -415,67 +409,56 @@ EGLAPI EGLDisplay EGLAPIENTRY eglGetDisplay(EGLNativeDisplayType display_id)
EGLAPI EGLBoolean EGLAPIENTRY eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::Initialize(dpy, major, minor);
}
EGLAPI EGLBoolean EGLAPIENTRY eglTerminate(EGLDisplay dpy)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::Terminate(dpy);
}
EGLAPI const char *EGLAPIENTRY eglQueryString(EGLDisplay dpy, EGLint name)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::QueryString(dpy, name);
}
EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigs(EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::GetConfigs(dpy, configs, config_size, num_config);
}
EGLAPI EGLBoolean EGLAPIENTRY eglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::ChooseConfig(dpy, attrib_list, configs, config_size, num_config);
}
EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigAttrib(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::GetConfigAttrib(dpy, config, attribute, value);
}
EGLAPI EGLSurface EGLAPIENTRY eglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType window, const EGLint *attrib_list)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::CreateWindowSurface(dpy, config, window, attrib_list);
}
EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::CreatePbufferSurface(dpy, config, attrib_list);
}
EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurface(EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::CreatePixmapSurface(dpy, config, pixmap, attrib_list);
}
EGLAPI EGLBoolean EGLAPIENTRY eglDestroySurface(EGLDisplay dpy, EGLSurface surface)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::DestroySurface(dpy, surface);
}
EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::QuerySurface(dpy, surface, attribute, value);
}
......@@ -501,49 +484,41 @@ EGLAPI EGLBoolean EGLAPIENTRY eglReleaseThread(void)
EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::CreatePbufferFromClientBuffer(dpy, buftype, buffer, config, attrib_list);
}
EGLAPI EGLBoolean EGLAPIENTRY eglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::SurfaceAttrib(dpy, surface, attribute, value);
}
EGLAPI EGLBoolean EGLAPIENTRY eglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::BindTexImage(dpy, surface, buffer);
}
EGLAPI EGLBoolean EGLAPIENTRY eglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::ReleaseTexImage(dpy, surface, buffer);
}
EGLAPI EGLBoolean EGLAPIENTRY eglSwapInterval(EGLDisplay dpy, EGLint interval)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::SwapInterval(dpy, interval);
}
EGLAPI EGLContext EGLAPIENTRY eglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::CreateContext(dpy, config, share_context, attrib_list);
}
EGLAPI EGLBoolean EGLAPIENTRY eglDestroyContext(EGLDisplay dpy, EGLContext ctx)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::DestroyContext(dpy, ctx);
}
EGLAPI EGLBoolean EGLAPIENTRY eglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::MakeCurrent(dpy, draw, read, ctx);
}
......@@ -564,7 +539,6 @@ EGLAPI EGLDisplay EGLAPIENTRY eglGetCurrentDisplay(void)
EGLAPI EGLBoolean EGLAPIENTRY eglQueryContext(EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::QueryContext(dpy, ctx, attribute, value);
}
......@@ -580,37 +554,31 @@ EGLAPI EGLBoolean EGLAPIENTRY eglWaitNative(EGLint engine)
EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers(EGLDisplay dpy, EGLSurface surface)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::SwapBuffers(dpy, surface);
}
EGLAPI EGLBoolean EGLAPIENTRY eglCopyBuffers(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::CopyBuffers(dpy, surface, target);
}
EGLAPI EGLImageKHR EGLAPIENTRY eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::CreateImageKHR(dpy, ctx, target, buffer, attrib_list);
}
EGLAPI EGLImageKHR EGLAPIENTRY eglCreateImage(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib *attrib_list)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::CreateImage(dpy, ctx, target, buffer, attrib_list);
}
EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImageKHR(EGLDisplay dpy, EGLImageKHR image)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::DestroyImageKHR(dpy, image);
}
EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImage(EGLDisplay dpy, EGLImageKHR image)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::DestroyImageKHR(dpy, image);
}
......@@ -626,85 +594,71 @@ EGLAPI EGLDisplay EGLAPIENTRY eglGetPlatformDisplay(EGLenum platform, void *nati
EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformWindowSurfaceEXT(EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::CreatePlatformWindowSurfaceEXT(dpy, config, native_window, attrib_list);
}
EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformWindowSurface(EGLDisplay dpy, EGLConfig config, void *native_window, const EGLAttrib *attrib_list)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::CreatePlatformWindowSurface(dpy, config, native_window, attrib_list);
}
EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurfaceEXT(EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::CreatePlatformPixmapSurfaceEXT(dpy, config, native_pixmap, attrib_list);
}
EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurface(EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLAttrib *attrib_list)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::CreatePlatformPixmapSurface(dpy, config, native_pixmap, attrib_list);
}
EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSyncKHR(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::CreateSyncKHR(dpy, type, attrib_list);
}
EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSync(EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::CreateSync(dpy, type, attrib_list);
}
EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncKHR(EGLDisplay dpy, EGLSyncKHR sync)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::DestroySyncKHR(dpy, sync);
}
EGLAPI EGLBoolean EGLAPIENTRY eglDestroySync(EGLDisplay dpy, EGLSyncKHR sync)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::DestroySyncKHR(dpy, sync);
}
EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::ClientWaitSyncKHR(dpy, sync, flags, timeout);
}
EGLAPI EGLint EGLAPIENTRY eglClientWaitSync(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::ClientWaitSyncKHR(dpy, sync, flags, timeout);
}
EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::GetSyncAttribKHR(dpy, sync, attribute, value);
}
EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttrib(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLAttrib *value)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::GetSyncAttrib(dpy, sync, attribute, value);
}
EGLAPI EGLint EGLAPIENTRY eglWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::ClientWaitSyncKHR(dpy, sync, flags, EGL_FOREVER_KHR);
}
EGLAPI EGLBoolean EGLAPIENTRY eglWaitSync(EGLDisplay dpy, EGLSync sync, EGLint flags)
{
RecursiveLockGuard lock(egl::getDisplayLock(dpy));
return egl::ClientWaitSyncKHR(dpy, sync, flags, EGL_FOREVER_KHR);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment