1f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu/**************************************************************************
2f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu *
3f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
4f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * Copyright 2010-2011 LunarG, Inc.
5f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * All Rights Reserved.
6f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu *
7f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * Permission is hereby granted, free of charge, to any person obtaining a
8f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * copy of this software and associated documentation files (the
9f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * "Software"), to deal in the Software without restriction, including
10f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * without limitation the rights to use, copy, modify, merge, publish,
11f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * distribute, sub license, and/or sell copies of the Software, and to
12f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * permit persons to whom the Software is furnished to do so, subject to
13f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * the following conditions:
14f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu *
15f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * The above copyright notice and this permission notice (including the
16f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * next paragraph) shall be included in all copies or substantial portions
17f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * of the Software.
18f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu *
19f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
22f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
24f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * DEALINGS IN THE SOFTWARE.
26f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu *
27f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu **************************************************************************/
28f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu
29f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu
30a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu#ifndef EGLIMAGE_INCLUDED
31a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu#define EGLIMAGE_INCLUDED
32a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu
33a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu
34a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu#include "egltypedefs.h"
35a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu#include "egldisplay.h"
36a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu
37a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu
38713c8734f45b51b3758ecc95b96cf7b5aecacec8Chia-I Wustruct _egl_image_attribs
39713c8734f45b51b3758ecc95b96cf7b5aecacec8Chia-I Wu{
40713c8734f45b51b3758ecc95b96cf7b5aecacec8Chia-I Wu   /* EGL_KHR_image_base */
41713c8734f45b51b3758ecc95b96cf7b5aecacec8Chia-I Wu   EGLBoolean ImagePreserved;
42713c8734f45b51b3758ecc95b96cf7b5aecacec8Chia-I Wu
43713c8734f45b51b3758ecc95b96cf7b5aecacec8Chia-I Wu   /* EGL_KHR_gl_image */
44713c8734f45b51b3758ecc95b96cf7b5aecacec8Chia-I Wu   EGLint GLTextureLevel;
45713c8734f45b51b3758ecc95b96cf7b5aecacec8Chia-I Wu   EGLint GLTextureZOffset;
465664a983867038de48e71b65df89e0e254085af2Chia-I Wu
475664a983867038de48e71b65df89e0e254085af2Chia-I Wu   /* EGL_MESA_drm_image */
485664a983867038de48e71b65df89e0e254085af2Chia-I Wu   EGLint Width;
495664a983867038de48e71b65df89e0e254085af2Chia-I Wu   EGLint Height;
505664a983867038de48e71b65df89e0e254085af2Chia-I Wu   EGLint DRMBufferFormatMESA;
515664a983867038de48e71b65df89e0e254085af2Chia-I Wu   EGLint DRMBufferUseMESA;
525664a983867038de48e71b65df89e0e254085af2Chia-I Wu   EGLint DRMBufferStrideMESA;
53e6a33570b73aa56c87818d7f67a122d4427b7841Kristian Høgsberg
54e6a33570b73aa56c87818d7f67a122d4427b7841Kristian Høgsberg   /* EGL_WL_bind_wayland_display */
55e6a33570b73aa56c87818d7f67a122d4427b7841Kristian Høgsberg   EGLint PlaneWL;
56713c8734f45b51b3758ecc95b96cf7b5aecacec8Chia-I Wu};
57713c8734f45b51b3758ecc95b96cf7b5aecacec8Chia-I Wu
58a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu/**
59a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu * "Base" class for device driver images.
60a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu */
61a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wustruct _egl_image
62a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu{
63a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu   /* An image is a display resource */
64a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu   _EGLResource Resource;
65a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu};
66a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu
67a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu
68713c8734f45b51b3758ecc95b96cf7b5aecacec8Chia-I WuPUBLIC EGLint
69713c8734f45b51b3758ecc95b96cf7b5aecacec8Chia-I Wu_eglParseImageAttribList(_EGLImageAttribs *attrs, _EGLDisplay *dpy,
70713c8734f45b51b3758ecc95b96cf7b5aecacec8Chia-I Wu                         const EGLint *attrib_list);
71713c8734f45b51b3758ecc95b96cf7b5aecacec8Chia-I Wu
72713c8734f45b51b3758ecc95b96cf7b5aecacec8Chia-I Wu
73a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I WuPUBLIC EGLBoolean
74713c8734f45b51b3758ecc95b96cf7b5aecacec8Chia-I Wu_eglInitImage(_EGLImage *img, _EGLDisplay *dpy);
75a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu
76a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu
77a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu/**
78dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu * Increment reference count for the image.
79dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu */
80dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wustatic INLINE _EGLImage *
81dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu_eglGetImage(_EGLImage *img)
82dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu{
83dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu   if (img)
84dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu      _eglGetResource(&img->Resource);
85dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu   return img;
86dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu}
87dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu
88dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu
89dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu/**
90dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu * Decrement reference count for the image.
91dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu */
92dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wustatic INLINE EGLBoolean
93dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu_eglPutImage(_EGLImage *img)
94dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu{
95dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu   return (img) ? _eglPutResource(&img->Resource) : EGL_FALSE;
96dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu}
97dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu
98dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu
99dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu/**
1004ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu * Link an image to its display and return the handle of the link.
101a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu * The handle can be passed to client directly.
102a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu */
103a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wustatic INLINE EGLImageKHR
1044ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu_eglLinkImage(_EGLImage *img)
105a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu{
1064ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu   _eglLinkResource(&img->Resource, _EGL_RESOURCE_IMAGE);
107a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu   return (EGLImageKHR) img;
108a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu}
109a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu
110a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu
111a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu/**
112a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu * Unlink a linked image from its display.
113a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu * Accessing an unlinked image should generate EGL_BAD_PARAMETER error.
114a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu */
115a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wustatic INLINE void
116a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu_eglUnlinkImage(_EGLImage *img)
117a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu{
118a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu   _eglUnlinkResource(&img->Resource, _EGL_RESOURCE_IMAGE);
119a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu}
120a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu
121a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu
122a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu/**
123a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu * Lookup a handle to find the linked image.
124a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu * Return NULL if the handle has no corresponding linked image.
125a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu */
126a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wustatic INLINE _EGLImage *
127a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu_eglLookupImage(EGLImageKHR image, _EGLDisplay *dpy)
128a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu{
129a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu   _EGLImage *img = (_EGLImage *) image;
130dbb866ab33862defc2749134805bafebf323fd11Chia-I Wu   if (!dpy || !_eglCheckResource((void *) img, _EGL_RESOURCE_IMAGE, dpy))
131a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu      img = NULL;
132a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu   return img;
133a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu}
134a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu
135a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu
136a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu/**
137a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu * Return the handle of a linked image, or EGL_NO_IMAGE_KHR.
138a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu */
139a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wustatic INLINE EGLImageKHR
140a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu_eglGetImageHandle(_EGLImage *img)
141a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu{
142a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu   _EGLResource *res = (_EGLResource *) img;
143a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu   return (res && _eglIsResourceLinked(res)) ?
144a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu      (EGLImageKHR) img : EGL_NO_IMAGE_KHR;
145a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu}
146a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu
147a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu
148a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu#endif /* EGLIMAGE_INCLUDED */
149