• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
38 struct _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    /* EGL_WL_bind_wayland_display */
55    EGLint PlaneWL;
56 };
57 
58 /**
59  * "Base" class for device driver images.
60  */
61 struct _egl_image
62 {
63    /* An image is a display resource */
64    _EGLResource Resource;
65 };
66 
67 
68 PUBLIC EGLint
69 _eglParseImageAttribList(_EGLImageAttribs *attrs, _EGLDisplay *dpy,
70                          const EGLint *attrib_list);
71 
72 
73 PUBLIC EGLBoolean
74 _eglInitImage(_EGLImage *img, _EGLDisplay *dpy);
75 
76 
77 /**
78  * Increment reference count for the image.
79  */
80 static INLINE _EGLImage *
_eglGetImage(_EGLImage * img)81 _eglGetImage(_EGLImage *img)
82 {
83    if (img)
84       _eglGetResource(&img->Resource);
85    return img;
86 }
87 
88 
89 /**
90  * Decrement reference count for the image.
91  */
92 static INLINE EGLBoolean
_eglPutImage(_EGLImage * img)93 _eglPutImage(_EGLImage *img)
94 {
95    return (img) ? _eglPutResource(&img->Resource) : EGL_FALSE;
96 }
97 
98 
99 /**
100  * Link an image to its display and return the handle of the link.
101  * The handle can be passed to client directly.
102  */
103 static INLINE EGLImageKHR
_eglLinkImage(_EGLImage * img)104 _eglLinkImage(_EGLImage *img)
105 {
106    _eglLinkResource(&img->Resource, _EGL_RESOURCE_IMAGE);
107    return (EGLImageKHR) img;
108 }
109 
110 
111 /**
112  * Unlink a linked image from its display.
113  * Accessing an unlinked image should generate EGL_BAD_PARAMETER error.
114  */
115 static INLINE void
_eglUnlinkImage(_EGLImage * img)116 _eglUnlinkImage(_EGLImage *img)
117 {
118    _eglUnlinkResource(&img->Resource, _EGL_RESOURCE_IMAGE);
119 }
120 
121 
122 /**
123  * Lookup a handle to find the linked image.
124  * Return NULL if the handle has no corresponding linked image.
125  */
126 static INLINE _EGLImage *
_eglLookupImage(EGLImageKHR image,_EGLDisplay * dpy)127 _eglLookupImage(EGLImageKHR image, _EGLDisplay *dpy)
128 {
129    _EGLImage *img = (_EGLImage *) image;
130    if (!dpy || !_eglCheckResource((void *) img, _EGL_RESOURCE_IMAGE, dpy))
131       img = NULL;
132    return img;
133 }
134 
135 
136 /**
137  * Return the handle of a linked image, or EGL_NO_IMAGE_KHR.
138  */
139 static INLINE EGLImageKHR
_eglGetImageHandle(_EGLImage * img)140 _eglGetImageHandle(_EGLImage *img)
141 {
142    _EGLResource *res = (_EGLResource *) img;
143    return (res && _eglIsResourceLinked(res)) ?
144       (EGLImageKHR) img : EGL_NO_IMAGE_KHR;
145 }
146 
147 
148 #endif /* EGLIMAGE_INCLUDED */
149