eglimage.h revision 848b8605
1848b8605Smrg/************************************************************************** 2848b8605Smrg * 3848b8605Smrg * Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com> 4848b8605Smrg * Copyright 2010-2011 LunarG, Inc. 5848b8605Smrg * All Rights Reserved. 6848b8605Smrg * 7848b8605Smrg * Permission is hereby granted, free of charge, to any person obtaining a 8848b8605Smrg * copy of this software and associated documentation files (the 9848b8605Smrg * "Software"), to deal in the Software without restriction, including 10848b8605Smrg * without limitation the rights to use, copy, modify, merge, publish, 11848b8605Smrg * distribute, sub license, and/or sell copies of the Software, and to 12848b8605Smrg * permit persons to whom the Software is furnished to do so, subject to 13848b8605Smrg * the following conditions: 14848b8605Smrg * 15848b8605Smrg * The above copyright notice and this permission notice (including the 16848b8605Smrg * next paragraph) shall be included in all copies or substantial portions 17848b8605Smrg * of the Software. 18848b8605Smrg * 19848b8605Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20848b8605Smrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21848b8605Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 22848b8605Smrg * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23848b8605Smrg * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 24848b8605Smrg * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 25848b8605Smrg * DEALINGS IN THE SOFTWARE. 26848b8605Smrg * 27848b8605Smrg **************************************************************************/ 28848b8605Smrg 29848b8605Smrg 30848b8605Smrg#ifndef EGLIMAGE_INCLUDED 31848b8605Smrg#define EGLIMAGE_INCLUDED 32848b8605Smrg 33848b8605Smrg 34848b8605Smrg#include "egltypedefs.h" 35848b8605Smrg#include "egldisplay.h" 36848b8605Smrg 37848b8605Smrgstruct _egl_image_attrib_int 38848b8605Smrg{ 39848b8605Smrg EGLint Value; 40848b8605Smrg EGLBoolean IsPresent; 41848b8605Smrg}; 42848b8605Smrg 43848b8605Smrgstruct _egl_image_attribs 44848b8605Smrg{ 45848b8605Smrg /* EGL_KHR_image_base */ 46848b8605Smrg EGLBoolean ImagePreserved; 47848b8605Smrg 48848b8605Smrg /* EGL_KHR_gl_image */ 49848b8605Smrg EGLint GLTextureLevel; 50848b8605Smrg EGLint GLTextureZOffset; 51848b8605Smrg 52848b8605Smrg /* EGL_MESA_drm_image */ 53848b8605Smrg EGLint Width; 54848b8605Smrg EGLint Height; 55848b8605Smrg EGLint DRMBufferFormatMESA; 56848b8605Smrg EGLint DRMBufferUseMESA; 57848b8605Smrg EGLint DRMBufferStrideMESA; 58848b8605Smrg 59848b8605Smrg /* EGL_WL_bind_wayland_display */ 60848b8605Smrg EGLint PlaneWL; 61848b8605Smrg 62848b8605Smrg /* EGL_EXT_image_dma_buf_import */ 63848b8605Smrg struct _egl_image_attrib_int DMABufFourCC; 64848b8605Smrg struct _egl_image_attrib_int DMABufPlaneFds[3]; 65848b8605Smrg struct _egl_image_attrib_int DMABufPlaneOffsets[3]; 66848b8605Smrg struct _egl_image_attrib_int DMABufPlanePitches[3]; 67848b8605Smrg struct _egl_image_attrib_int DMABufYuvColorSpaceHint; 68848b8605Smrg struct _egl_image_attrib_int DMABufSampleRangeHint; 69848b8605Smrg struct _egl_image_attrib_int DMABufChromaHorizontalSiting; 70848b8605Smrg struct _egl_image_attrib_int DMABufChromaVerticalSiting; 71848b8605Smrg}; 72848b8605Smrg 73848b8605Smrg/** 74848b8605Smrg * "Base" class for device driver images. 75848b8605Smrg */ 76848b8605Smrgstruct _egl_image 77848b8605Smrg{ 78848b8605Smrg /* An image is a display resource */ 79848b8605Smrg _EGLResource Resource; 80848b8605Smrg}; 81848b8605Smrg 82848b8605Smrg 83848b8605SmrgPUBLIC EGLint 84848b8605Smrg_eglParseImageAttribList(_EGLImageAttribs *attrs, _EGLDisplay *dpy, 85848b8605Smrg const EGLint *attrib_list); 86848b8605Smrg 87848b8605Smrg 88848b8605SmrgPUBLIC EGLBoolean 89848b8605Smrg_eglInitImage(_EGLImage *img, _EGLDisplay *dpy); 90848b8605Smrg 91848b8605Smrg 92848b8605Smrg/** 93848b8605Smrg * Increment reference count for the image. 94848b8605Smrg */ 95848b8605Smrgstatic INLINE _EGLImage * 96848b8605Smrg_eglGetImage(_EGLImage *img) 97848b8605Smrg{ 98848b8605Smrg if (img) 99848b8605Smrg _eglGetResource(&img->Resource); 100848b8605Smrg return img; 101848b8605Smrg} 102848b8605Smrg 103848b8605Smrg 104848b8605Smrg/** 105848b8605Smrg * Decrement reference count for the image. 106848b8605Smrg */ 107848b8605Smrgstatic INLINE EGLBoolean 108848b8605Smrg_eglPutImage(_EGLImage *img) 109848b8605Smrg{ 110848b8605Smrg return (img) ? _eglPutResource(&img->Resource) : EGL_FALSE; 111848b8605Smrg} 112848b8605Smrg 113848b8605Smrg 114848b8605Smrg/** 115848b8605Smrg * Link an image to its display and return the handle of the link. 116848b8605Smrg * The handle can be passed to client directly. 117848b8605Smrg */ 118848b8605Smrgstatic INLINE EGLImageKHR 119848b8605Smrg_eglLinkImage(_EGLImage *img) 120848b8605Smrg{ 121848b8605Smrg _eglLinkResource(&img->Resource, _EGL_RESOURCE_IMAGE); 122848b8605Smrg return (EGLImageKHR) img; 123848b8605Smrg} 124848b8605Smrg 125848b8605Smrg 126848b8605Smrg/** 127848b8605Smrg * Unlink a linked image from its display. 128848b8605Smrg * Accessing an unlinked image should generate EGL_BAD_PARAMETER error. 129848b8605Smrg */ 130848b8605Smrgstatic INLINE void 131848b8605Smrg_eglUnlinkImage(_EGLImage *img) 132848b8605Smrg{ 133848b8605Smrg _eglUnlinkResource(&img->Resource, _EGL_RESOURCE_IMAGE); 134848b8605Smrg} 135848b8605Smrg 136848b8605Smrg 137848b8605Smrg/** 138848b8605Smrg * Lookup a handle to find the linked image. 139848b8605Smrg * Return NULL if the handle has no corresponding linked image. 140848b8605Smrg */ 141848b8605Smrgstatic INLINE _EGLImage * 142848b8605Smrg_eglLookupImage(EGLImageKHR image, _EGLDisplay *dpy) 143848b8605Smrg{ 144848b8605Smrg _EGLImage *img = (_EGLImage *) image; 145848b8605Smrg if (!dpy || !_eglCheckResource((void *) img, _EGL_RESOURCE_IMAGE, dpy)) 146848b8605Smrg img = NULL; 147848b8605Smrg return img; 148848b8605Smrg} 149848b8605Smrg 150848b8605Smrg 151848b8605Smrg/** 152848b8605Smrg * Return the handle of a linked image, or EGL_NO_IMAGE_KHR. 153848b8605Smrg */ 154848b8605Smrgstatic INLINE EGLImageKHR 155848b8605Smrg_eglGetImageHandle(_EGLImage *img) 156848b8605Smrg{ 157848b8605Smrg _EGLResource *res = (_EGLResource *) img; 158848b8605Smrg return (res && _eglIsResourceLinked(res)) ? 159848b8605Smrg (EGLImageKHR) img : EGL_NO_IMAGE_KHR; 160848b8605Smrg} 161848b8605Smrg 162848b8605Smrg 163848b8605Smrg#endif /* EGLIMAGE_INCLUDED */ 164