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#include <assert.h> 31e694ccad803157b71b2de78d63ee6dacc489faabChia-I Wu#include <string.h> 32a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 33a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu#include "eglimage.h" 34e694ccad803157b71b2de78d63ee6dacc489faabChia-I Wu#include "egllog.h" 35a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 36a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 37e694ccad803157b71b2de78d63ee6dacc489faabChia-I Wu/** 38e694ccad803157b71b2de78d63ee6dacc489faabChia-I Wu * Parse the list of image attributes and return the proper error code. 39e694ccad803157b71b2de78d63ee6dacc489faabChia-I Wu */ 40713c8734f45b51b3758ecc95b96cf7b5aecacec8Chia-I WuEGLint 41713c8734f45b51b3758ecc95b96cf7b5aecacec8Chia-I Wu_eglParseImageAttribList(_EGLImageAttribs *attrs, _EGLDisplay *dpy, 42713c8734f45b51b3758ecc95b96cf7b5aecacec8Chia-I Wu const EGLint *attrib_list) 43a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu{ 44e694ccad803157b71b2de78d63ee6dacc489faabChia-I Wu EGLint i, err = EGL_SUCCESS; 45a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 46713c8734f45b51b3758ecc95b96cf7b5aecacec8Chia-I Wu (void) dpy; 47713c8734f45b51b3758ecc95b96cf7b5aecacec8Chia-I Wu 48071501a68129768c6223beb24f7363d87c6684eaDylan Noblesmith memset(attrs, 0, sizeof(*attrs)); 49713c8734f45b51b3758ecc95b96cf7b5aecacec8Chia-I Wu attrs->ImagePreserved = EGL_FALSE; 50713c8734f45b51b3758ecc95b96cf7b5aecacec8Chia-I Wu attrs->GLTextureLevel = 0; 51713c8734f45b51b3758ecc95b96cf7b5aecacec8Chia-I Wu attrs->GLTextureZOffset = 0; 52713c8734f45b51b3758ecc95b96cf7b5aecacec8Chia-I Wu 53e694ccad803157b71b2de78d63ee6dacc489faabChia-I Wu if (!attrib_list) 54713c8734f45b51b3758ecc95b96cf7b5aecacec8Chia-I Wu return err; 55a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 56e694ccad803157b71b2de78d63ee6dacc489faabChia-I Wu for (i = 0; attrib_list[i] != EGL_NONE; i++) { 57e694ccad803157b71b2de78d63ee6dacc489faabChia-I Wu EGLint attr = attrib_list[i++]; 58e694ccad803157b71b2de78d63ee6dacc489faabChia-I Wu EGLint val = attrib_list[i]; 59e694ccad803157b71b2de78d63ee6dacc489faabChia-I Wu 60e694ccad803157b71b2de78d63ee6dacc489faabChia-I Wu switch (attr) { 61713c8734f45b51b3758ecc95b96cf7b5aecacec8Chia-I Wu /* EGL_KHR_image_base */ 62a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu case EGL_IMAGE_PRESERVED_KHR: 63713c8734f45b51b3758ecc95b96cf7b5aecacec8Chia-I Wu attrs->ImagePreserved = val; 64a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu break; 65713c8734f45b51b3758ecc95b96cf7b5aecacec8Chia-I Wu 66713c8734f45b51b3758ecc95b96cf7b5aecacec8Chia-I Wu /* EGL_KHR_gl_image */ 670135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu case EGL_GL_TEXTURE_LEVEL_KHR: 68713c8734f45b51b3758ecc95b96cf7b5aecacec8Chia-I Wu attrs->GLTextureLevel = val; 690135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu break; 700135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu case EGL_GL_TEXTURE_ZOFFSET_KHR: 71713c8734f45b51b3758ecc95b96cf7b5aecacec8Chia-I Wu attrs->GLTextureZOffset = val; 720135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu break; 735664a983867038de48e71b65df89e0e254085af2Chia-I Wu 745664a983867038de48e71b65df89e0e254085af2Chia-I Wu /* EGL_MESA_drm_image */ 755664a983867038de48e71b65df89e0e254085af2Chia-I Wu case EGL_WIDTH: 765664a983867038de48e71b65df89e0e254085af2Chia-I Wu attrs->Width = val; 775664a983867038de48e71b65df89e0e254085af2Chia-I Wu break; 785664a983867038de48e71b65df89e0e254085af2Chia-I Wu case EGL_HEIGHT: 795664a983867038de48e71b65df89e0e254085af2Chia-I Wu attrs->Height = val; 805664a983867038de48e71b65df89e0e254085af2Chia-I Wu break; 815664a983867038de48e71b65df89e0e254085af2Chia-I Wu case EGL_DRM_BUFFER_FORMAT_MESA: 825664a983867038de48e71b65df89e0e254085af2Chia-I Wu attrs->DRMBufferFormatMESA = val; 835664a983867038de48e71b65df89e0e254085af2Chia-I Wu break; 845664a983867038de48e71b65df89e0e254085af2Chia-I Wu case EGL_DRM_BUFFER_USE_MESA: 855664a983867038de48e71b65df89e0e254085af2Chia-I Wu attrs->DRMBufferUseMESA = val; 865664a983867038de48e71b65df89e0e254085af2Chia-I Wu break; 875664a983867038de48e71b65df89e0e254085af2Chia-I Wu case EGL_DRM_BUFFER_STRIDE_MESA: 885664a983867038de48e71b65df89e0e254085af2Chia-I Wu attrs->DRMBufferStrideMESA = val; 895664a983867038de48e71b65df89e0e254085af2Chia-I Wu break; 905664a983867038de48e71b65df89e0e254085af2Chia-I Wu 91e6a33570b73aa56c87818d7f67a122d4427b7841Kristian Høgsberg /* EGL_WL_bind_wayland_display */ 92e6a33570b73aa56c87818d7f67a122d4427b7841Kristian Høgsberg case EGL_WAYLAND_PLANE_WL: 93e6a33570b73aa56c87818d7f67a122d4427b7841Kristian Høgsberg attrs->PlaneWL = val; 94e6a33570b73aa56c87818d7f67a122d4427b7841Kristian Høgsberg break; 95e6a33570b73aa56c87818d7f67a122d4427b7841Kristian Høgsberg 96a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu default: 970135e5d6c83add5e539492a4899504e33f3f2434Chia-I Wu /* unknown attrs are ignored */ 98e694ccad803157b71b2de78d63ee6dacc489faabChia-I Wu break; 99e694ccad803157b71b2de78d63ee6dacc489faabChia-I Wu } 100e694ccad803157b71b2de78d63ee6dacc489faabChia-I Wu 101e694ccad803157b71b2de78d63ee6dacc489faabChia-I Wu if (err != EGL_SUCCESS) { 102e694ccad803157b71b2de78d63ee6dacc489faabChia-I Wu _eglLog(_EGL_DEBUG, "bad image attribute 0x%04x", attr); 103a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu break; 104a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu } 105a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu } 106a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 107e694ccad803157b71b2de78d63ee6dacc489faabChia-I Wu return err; 108e694ccad803157b71b2de78d63ee6dacc489faabChia-I Wu} 109e694ccad803157b71b2de78d63ee6dacc489faabChia-I Wu 110e694ccad803157b71b2de78d63ee6dacc489faabChia-I Wu 111e694ccad803157b71b2de78d63ee6dacc489faabChia-I WuEGLBoolean 112713c8734f45b51b3758ecc95b96cf7b5aecacec8Chia-I Wu_eglInitImage(_EGLImage *img, _EGLDisplay *dpy) 113e694ccad803157b71b2de78d63ee6dacc489faabChia-I Wu{ 114dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu _eglInitResource(&img->Resource, sizeof(*img), dpy); 115e694ccad803157b71b2de78d63ee6dacc489faabChia-I Wu 116a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu return EGL_TRUE; 117a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu} 118