X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fegl%2Fmain%2Feglimage.h;h=6d2e7ba8a2d3b0c812f573b62bcf95e3a4c81d07;hb=58be9d50a77c2f5d5d680b841ca1f0a16e06499b;hp=026b10307dedc4b498539d177a045c6f5ea9f183;hpb=a1c4a8a3c855d52fbfef10023b9a8f116e163a97;p=mesa.git diff --git a/src/egl/main/eglimage.h b/src/egl/main/eglimage.h index 026b10307de..6d2e7ba8a2d 100644 --- a/src/egl/main/eglimage.h +++ b/src/egl/main/eglimage.h @@ -1,11 +1,86 @@ +/************************************************************************** + * + * Copyright 2009-2010 Chia-I Wu + * Copyright 2010-2011 LunarG, Inc. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + + #ifndef EGLIMAGE_INCLUDED #define EGLIMAGE_INCLUDED +#include "c99_compat.h" #include "egltypedefs.h" #include "egldisplay.h" +#ifdef __cplusplus +extern "C" { +#endif + +struct _egl_image_attrib_int +{ + EGLint Value; + EGLBoolean IsPresent; +}; + +#define DMA_BUF_MAX_PLANES 4 + +struct _egl_image_attribs +{ + /* EGL_KHR_image_base */ + EGLBoolean ImagePreserved; + + /* EGL_KHR_gl_image */ + EGLint GLTextureLevel; + EGLint GLTextureZOffset; + + /* EGL_MESA_drm_image */ + EGLint Width; + EGLint Height; + EGLint DRMBufferFormatMESA; + EGLint DRMBufferUseMESA; + EGLint DRMBufferStrideMESA; + + /* EGL_WL_bind_wayland_display */ + EGLint PlaneWL; + + /* EGL_EXT_image_dma_buf_import and + * EGL_EXT_image_dma_buf_import_modifiers */ + struct _egl_image_attrib_int DMABufFourCC; + struct _egl_image_attrib_int DMABufPlaneFds[DMA_BUF_MAX_PLANES]; + struct _egl_image_attrib_int DMABufPlaneOffsets[DMA_BUF_MAX_PLANES]; + struct _egl_image_attrib_int DMABufPlanePitches[DMA_BUF_MAX_PLANES]; + struct _egl_image_attrib_int DMABufPlaneModifiersLo[DMA_BUF_MAX_PLANES]; + struct _egl_image_attrib_int DMABufPlaneModifiersHi[DMA_BUF_MAX_PLANES]; + struct _egl_image_attrib_int DMABufYuvColorSpaceHint; + struct _egl_image_attrib_int DMABufSampleRangeHint; + struct _egl_image_attrib_int DMABufChromaHorizontalSiting; + struct _egl_image_attrib_int DMABufChromaVerticalSiting; +}; + /** * "Base" class for device driver images. */ @@ -13,33 +88,52 @@ struct _egl_image { /* An image is a display resource */ _EGLResource Resource; - - EGLBoolean Preserved; }; -PUBLIC EGLBoolean -_eglInitImage(_EGLDriver *drv, _EGLImage *img, const EGLint *attrib_list); +EGLBoolean +_eglParseImageAttribList(_EGLImageAttribs *attrs, _EGLDisplay *disp, + const EGLint *attrib_list); -extern _EGLImage * -_eglCreateImageKHR(_EGLDriver *drv, _EGLDisplay *dpy, _EGLContext *ctx, - EGLenum target, EGLClientBuffer buffer, const EGLint *attr_list); +static inline void +_eglInitImage(_EGLImage *img, _EGLDisplay *disp) +{ + _eglInitResource(&img->Resource, sizeof(*img), disp); +} -extern EGLBoolean -_eglDestroyImageKHR(_EGLDriver *drv, _EGLDisplay *dpy, _EGLImage *image); +/** + * Increment reference count for the image. + */ +static inline _EGLImage * +_eglGetImage(_EGLImage *img) +{ + if (img) + _eglGetResource(&img->Resource); + return img; +} + + +/** + * Decrement reference count for the image. + */ +static inline EGLBoolean +_eglPutImage(_EGLImage *img) +{ + return (img) ? _eglPutResource(&img->Resource) : EGL_FALSE; +} /** - * Link an image to a display and return the handle of the link. + * Link an image to its display and return the handle of the link. * The handle can be passed to client directly. */ -static INLINE EGLImageKHR -_eglLinkImage(_EGLImage *img, _EGLDisplay *dpy) +static inline EGLImage +_eglLinkImage(_EGLImage *img) { - _eglLinkResource(&img->Resource, _EGL_RESOURCE_IMAGE, dpy); - return (EGLImageKHR) img; + _eglLinkResource(&img->Resource, _EGL_RESOURCE_IMAGE); + return (EGLImage) img; } @@ -47,7 +141,7 @@ _eglLinkImage(_EGLImage *img, _EGLDisplay *dpy) * Unlink a linked image from its display. * Accessing an unlinked image should generate EGL_BAD_PARAMETER error. */ -static INLINE void +static inline void _eglUnlinkImage(_EGLImage *img) { _eglUnlinkResource(&img->Resource, _EGL_RESOURCE_IMAGE); @@ -58,12 +152,11 @@ _eglUnlinkImage(_EGLImage *img) * Lookup a handle to find the linked image. * Return NULL if the handle has no corresponding linked image. */ -static INLINE _EGLImage * -_eglLookupImage(EGLImageKHR image, _EGLDisplay *dpy) +static inline _EGLImage * +_eglLookupImage(EGLImage image, _EGLDisplay *disp) { - _EGLResource *res = (_EGLResource *) image; _EGLImage *img = (_EGLImage *) image; - if (!res || !dpy || !_eglCheckResource(res, _EGL_RESOURCE_IMAGE, dpy)) + if (!disp || !_eglCheckResource((void *) img, _EGL_RESOURCE_IMAGE, disp)) img = NULL; return img; } @@ -72,24 +165,17 @@ _eglLookupImage(EGLImageKHR image, _EGLDisplay *dpy) /** * Return the handle of a linked image, or EGL_NO_IMAGE_KHR. */ -static INLINE EGLImageKHR +static inline EGLImage _eglGetImageHandle(_EGLImage *img) { _EGLResource *res = (_EGLResource *) img; return (res && _eglIsResourceLinked(res)) ? - (EGLImageKHR) img : EGL_NO_IMAGE_KHR; + (EGLImage) img : EGL_NO_IMAGE_KHR; } -/** - * Return true if the image is linked to a display. - */ -static INLINE EGLBoolean -_eglIsImageLinked(_EGLImage *img) -{ - _EGLResource *res = (_EGLResource *) img; - return (res && _eglIsResourceLinked(res)); +#ifdef __cplusplus } - +#endif #endif /* EGLIMAGE_INCLUDED */