eglimage.h revision 3464ebd5
1/************************************************************************** 2 * 3 * Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com> 4 * Copyright 2010-2011 LunarG, Inc. 5 * All Rights Reserved. 6 * 7 * Permission is hereby granted, free of charge, to any person obtaining a 8 * copy of this software and associated documentation files (the 9 * "Software"), to deal in the Software without restriction, including 10 * without limitation the rights to use, copy, modify, merge, publish, 11 * distribute, sub license, and/or sell copies of the Software, and to 12 * permit persons to whom the Software is furnished to do so, subject to 13 * the following conditions: 14 * 15 * The above copyright notice and this permission notice (including the 16 * next paragraph) shall be included in all copies or substantial portions 17 * of the Software. 18 * 19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 22 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 24 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 25 * DEALINGS IN THE SOFTWARE. 26 * 27 **************************************************************************/ 28 29 30#ifndef EGLIMAGE_INCLUDED 31#define EGLIMAGE_INCLUDED 32 33 34#include "egltypedefs.h" 35#include "egldisplay.h" 36 37 38struct _egl_image_attribs 39{ 40 /* EGL_KHR_image_base */ 41 EGLBoolean ImagePreserved; 42 43 /* EGL_KHR_gl_image */ 44 EGLint GLTextureLevel; 45 EGLint GLTextureZOffset; 46 47 /* EGL_MESA_drm_image */ 48 EGLint Width; 49 EGLint Height; 50 EGLint DRMBufferFormatMESA; 51 EGLint DRMBufferUseMESA; 52 EGLint DRMBufferStrideMESA; 53}; 54 55/** 56 * "Base" class for device driver images. 57 */ 58struct _egl_image 59{ 60 /* An image is a display resource */ 61 _EGLResource Resource; 62}; 63 64 65PUBLIC EGLint 66_eglParseImageAttribList(_EGLImageAttribs *attrs, _EGLDisplay *dpy, 67 const EGLint *attrib_list); 68 69 70PUBLIC EGLBoolean 71_eglInitImage(_EGLImage *img, _EGLDisplay *dpy); 72 73 74/** 75 * Increment reference count for the image. 76 */ 77static INLINE _EGLImage * 78_eglGetImage(_EGLImage *img) 79{ 80 if (img) 81 _eglGetResource(&img->Resource); 82 return img; 83} 84 85 86/** 87 * Decrement reference count for the image. 88 */ 89static INLINE EGLBoolean 90_eglPutImage(_EGLImage *img) 91{ 92 return (img) ? _eglPutResource(&img->Resource) : EGL_FALSE; 93} 94 95 96/** 97 * Link an image to its display and return the handle of the link. 98 * The handle can be passed to client directly. 99 */ 100static INLINE EGLImageKHR 101_eglLinkImage(_EGLImage *img) 102{ 103 _eglLinkResource(&img->Resource, _EGL_RESOURCE_IMAGE); 104 return (EGLImageKHR) img; 105} 106 107 108/** 109 * Unlink a linked image from its display. 110 * Accessing an unlinked image should generate EGL_BAD_PARAMETER error. 111 */ 112static INLINE void 113_eglUnlinkImage(_EGLImage *img) 114{ 115 _eglUnlinkResource(&img->Resource, _EGL_RESOURCE_IMAGE); 116} 117 118 119/** 120 * Lookup a handle to find the linked image. 121 * Return NULL if the handle has no corresponding linked image. 122 */ 123static INLINE _EGLImage * 124_eglLookupImage(EGLImageKHR image, _EGLDisplay *dpy) 125{ 126 _EGLImage *img = (_EGLImage *) image; 127 if (!dpy || !_eglCheckResource((void *) img, _EGL_RESOURCE_IMAGE, dpy)) 128 img = NULL; 129 return img; 130} 131 132 133/** 134 * Return the handle of a linked image, or EGL_NO_IMAGE_KHR. 135 */ 136static INLINE EGLImageKHR 137_eglGetImageHandle(_EGLImage *img) 138{ 139 _EGLResource *res = (_EGLResource *) img; 140 return (res && _eglIsResourceLinked(res)) ? 141 (EGLImageKHR) img : EGL_NO_IMAGE_KHR; 142} 143 144 145#endif /* EGLIMAGE_INCLUDED */ 146