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