diff options
Diffstat (limited to 'src/egl/main/eglimage.c')
-rw-r--r-- | src/egl/main/eglimage.c | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/src/egl/main/eglimage.c b/src/egl/main/eglimage.c new file mode 100644 index 0000000000..dc1c728320 --- /dev/null +++ b/src/egl/main/eglimage.c @@ -0,0 +1,104 @@ +#include <assert.h> + +#include "eglimage.h" +#include "egldisplay.h" + +EGLBoolean +_eglInitImage(_EGLDriver *drv, _EGLImage *img, const EGLint *attrib_list) +{ + EGLint i; + + img->Preserved = EGL_FALSE; + + for (i = 0; attrib_list && attrib_list[i] != EGL_NONE; i++) { + switch (attrib_list[i]) { + case EGL_IMAGE_PRESERVED_KHR: + i++; + img->Preserved = attrib_list[i]; + break; + default: + /* not an error */ + break; + } + } + + return EGL_TRUE; +} + + +_EGLImage * +_eglCreateImageKHR(_EGLDriver *drv, _EGLDisplay *dpy, _EGLContext *ctx, + EGLenum target, EGLClientBuffer buffer, const EGLint *attr_list) +{ + /* driver should override this function */ + return NULL; +} + + +EGLBoolean +_eglDestroyImageKHR(_EGLDriver *drv, _EGLDisplay *dpy, _EGLImage *image) +{ + /* driver should override this function */ + return EGL_FALSE; +} + + +EGLImageKHR +_eglLinkImage(_EGLImage *img, _EGLDisplay *dpy) +{ + img->Display = dpy; + img->Next = dpy->ImageList; + dpy->ImageList = img; + return (EGLImageKHR) img; +} + + +void +_eglUnlinkImage(_EGLImage *img) +{ + _EGLImage *prev; + + prev = img->Display->ImageList; + if (prev != img) { + while (prev) { + if (prev->Next == img) + break; + prev = prev->Next; + } + assert(prev); + prev->Next = img->Next; + } + else { + img->Display->ImageList = img->Next; + } + + img->Next = NULL; + img->Display = NULL; +} + + +#ifndef _EGL_SKIP_HANDLE_CHECK + + +/** + * Return EGL_TRUE if the given handle is a valid handle to an image. + */ +EGLBoolean +_eglCheckImageHandle(EGLImageKHR img, _EGLDisplay *dpy) +{ + _EGLImage *cur = NULL; + + if (dpy) + cur = dpy->ImageList; + while (cur) { + if (cur == (_EGLImage *) img) { + assert(cur->Display == dpy); + break; + } + cur = cur->Next; + } + return (cur != NULL); +} + + +#endif /* _EGL_SKIP_HANDLE_CHECK */ |