4 #include "eglcurrent.h"
8 #ifdef EGL_KHR_reusable_sync
12 * Parse the list of sync attributes and return the proper error code.
15 _eglParseSyncAttribList(_EGLSync
*sync
, const EGLint
*attrib_list
)
17 EGLint i
, err
= EGL_SUCCESS
;
22 for (i
= 0; attrib_list
[i
] != EGL_NONE
; i
++) {
23 EGLint attr
= attrib_list
[i
++];
24 EGLint val
= attrib_list
[i
];
29 err
= EGL_BAD_ATTRIBUTE
;
33 if (err
!= EGL_SUCCESS
) {
34 _eglLog(_EGL_DEBUG
, "bad sync attribute 0x%04x", attr
);
44 _eglInitSync(_EGLSync
*sync
, _EGLDisplay
*dpy
, EGLenum type
,
45 const EGLint
*attrib_list
)
49 if (!(type
== EGL_SYNC_REUSABLE_KHR
&& dpy
->Extensions
.KHR_reusable_sync
) &&
50 !(type
== EGL_SYNC_FENCE_KHR
&& dpy
->Extensions
.KHR_fence_sync
))
51 return _eglError(EGL_BAD_ATTRIBUTE
, "eglCreateSyncKHR");
53 memset(sync
, 0, sizeof(*sync
));
55 sync
->Resource
.Display
= dpy
;
58 sync
->SyncStatus
= EGL_UNSIGNALED_KHR
;
59 sync
->SyncCondition
= EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR
;
61 err
= _eglParseSyncAttribList(sync
, attrib_list
);
62 if (err
!= EGL_SUCCESS
)
63 return _eglError(err
, "eglCreateSyncKHR");
70 _eglCreateSyncKHR(_EGLDriver
*drv
, _EGLDisplay
*dpy
,
71 EGLenum type
, const EGLint
*attrib_list
)
78 _eglDestroySyncKHR(_EGLDriver
*drv
, _EGLDisplay
*dpy
, _EGLSync
*sync
)
85 _eglClientWaitSyncKHR(_EGLDriver
*drv
, _EGLDisplay
*dpy
, _EGLSync
*sync
,
86 EGLint flags
, EGLTimeKHR timeout
)
93 _eglSignalSyncKHR(_EGLDriver
*drv
, _EGLDisplay
*dpy
, _EGLSync
*sync
,
101 _eglGetSyncAttribKHR(_EGLDriver
*drv
, _EGLDisplay
*dpy
, _EGLSync
*sync
,
102 EGLint attribute
, EGLint
*value
)
105 return _eglError(EGL_BAD_PARAMETER
, "eglGetConfigs");
108 case EGL_SYNC_TYPE_KHR
:
111 case EGL_SYNC_STATUS_KHR
:
112 *value
= sync
->SyncStatus
;
114 case EGL_SYNC_CONDITION_KHR
:
115 if (sync
->Type
!= EGL_SYNC_FENCE_KHR
)
116 return _eglError(EGL_BAD_ATTRIBUTE
, "eglGetSyncAttribKHR");
117 *value
= sync
->SyncCondition
;
120 return _eglError(EGL_BAD_ATTRIBUTE
, "eglGetSyncAttribKHR");
128 #endif /* EGL_KHR_reusable_sync */