err = EGL_BAD_ATTRIBUTE;
}
break;
+ case EGL_SYNC_NATIVE_FENCE_FD_ANDROID:
+ if (sync->Type == EGL_SYNC_NATIVE_FENCE_ANDROID) {
+ /* we take ownership of the native fd, so no dup(): */
+ sync->SyncFd = val;
+ } else {
+ err = EGL_BAD_ATTRIBUTE;
+ }
+ break;
default:
err = EGL_BAD_ATTRIBUTE;
break;
EGLBoolean
-_eglInitSync(_EGLSync *sync, _EGLDisplay *dpy, EGLenum type,
+_eglInitSync(_EGLSync *sync, _EGLDisplay *disp, EGLenum type,
const EGLAttrib *attrib_list)
{
EGLint err;
- _eglInitResource(&sync->Resource, sizeof(*sync), dpy);
+ _eglInitResource(&sync->Resource, sizeof(*sync), disp);
sync->Type = type;
sync->SyncStatus = EGL_UNSIGNALED_KHR;
+ sync->SyncFd = EGL_NO_NATIVE_FENCE_FD_ANDROID;
err = _eglParseSyncAttribList(sync, attrib_list);
case EGL_SYNC_CL_EVENT_KHR:
sync->SyncCondition = EGL_SYNC_CL_EVENT_COMPLETE_KHR;
break;
+ case EGL_SYNC_NATIVE_FENCE_ANDROID:
+ if (sync->SyncFd == EGL_NO_NATIVE_FENCE_FD_ANDROID)
+ sync->SyncCondition = EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR;
+ else
+ sync->SyncCondition = EGL_SYNC_NATIVE_FENCE_SIGNALED_ANDROID;
+ break;
default:
sync->SyncCondition = EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR;
}
EGLBoolean
-_eglGetSyncAttrib(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSync *sync,
+_eglGetSyncAttrib(_EGLDisplay *disp, _EGLSync *sync,
EGLint attribute, EGLAttrib *value)
{
switch (attribute) {
if (sync->SyncStatus != EGL_SIGNALED_KHR &&
(sync->Type == EGL_SYNC_FENCE_KHR ||
sync->Type == EGL_SYNC_CL_EVENT_KHR ||
- sync->Type == EGL_SYNC_REUSABLE_KHR))
- drv->API.ClientWaitSyncKHR(drv, dpy, sync, 0, 0);
+ sync->Type == EGL_SYNC_REUSABLE_KHR ||
+ sync->Type == EGL_SYNC_NATIVE_FENCE_ANDROID))
+ disp->Driver->ClientWaitSyncKHR(disp, sync, 0, 0);
*value = sync->SyncStatus;
break;
case EGL_SYNC_CONDITION_KHR:
if (sync->Type != EGL_SYNC_FENCE_KHR &&
- sync->Type != EGL_SYNC_CL_EVENT_KHR)
+ sync->Type != EGL_SYNC_CL_EVENT_KHR &&
+ sync->Type != EGL_SYNC_NATIVE_FENCE_ANDROID)
return _eglError(EGL_BAD_ATTRIBUTE, "eglGetSyncAttribKHR");
*value = sync->SyncCondition;
break;
+
default:
return _eglError(EGL_BAD_ATTRIBUTE, "eglGetSyncAttribKHR");
break;