Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /**************************************************************************
  2.  *
  3.  * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
  4.  * Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
  5.  * Copyright 2010-2011 LunarG, Inc.
  6.  * All Rights Reserved.
  7.  *
  8.  * Permission is hereby granted, free of charge, to any person obtaining a
  9.  * copy of this software and associated documentation files (the
  10.  * "Software"), to deal in the Software without restriction, including
  11.  * without limitation the rights to use, copy, modify, merge, publish,
  12.  * distribute, sub license, and/or sell copies of the Software, and to
  13.  * permit persons to whom the Software is furnished to do so, subject to
  14.  * the following conditions:
  15.  *
  16.  * The above copyright notice and this permission notice (including the
  17.  * next paragraph) shall be included in all copies or substantial portions
  18.  * of the Software.
  19.  *
  20.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  21.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  22.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  23.  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  24.  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  25.  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  26.  * DEALINGS IN THE SOFTWARE.
  27.  *
  28.  **************************************************************************/
  29.  
  30.  
  31. #ifndef EGLCONFIG_INCLUDED
  32. #define EGLCONFIG_INCLUDED
  33.  
  34.  
  35. #include <assert.h>
  36. #include <stddef.h>
  37. #include "egltypedefs.h"
  38.  
  39.  
  40. /* update _eglValidationTable and _eglOffsetOfConfig before updating this
  41.  * struct */
  42. struct _egl_config
  43. {
  44.    _EGLDisplay *Display;
  45.  
  46.    /* core */
  47.    EGLint BufferSize;
  48.    EGLint AlphaSize;
  49.    EGLint BlueSize;
  50.    EGLint GreenSize;
  51.    EGLint RedSize;
  52.    EGLint DepthSize;
  53.    EGLint StencilSize;
  54.    EGLint ConfigCaveat;
  55.    EGLint ConfigID;
  56.    EGLint Level;
  57.    EGLint MaxPbufferHeight;
  58.    EGLint MaxPbufferPixels;
  59.    EGLint MaxPbufferWidth;
  60.    EGLint NativeRenderable;
  61.    EGLint NativeVisualID;
  62.    EGLint NativeVisualType;
  63.    EGLint Samples;
  64.    EGLint SampleBuffers;
  65.    EGLint SurfaceType;
  66.    EGLint TransparentType;
  67.    EGLint TransparentBlueValue;
  68.    EGLint TransparentGreenValue;
  69.    EGLint TransparentRedValue;
  70.    EGLint BindToTextureRGB;
  71.    EGLint BindToTextureRGBA;
  72.    EGLint MinSwapInterval;
  73.    EGLint MaxSwapInterval;
  74.    EGLint LuminanceSize;
  75.    EGLint AlphaMaskSize;
  76.    EGLint ColorBufferType;
  77.    EGLint RenderableType;
  78.    EGLint MatchNativePixmap;
  79.    EGLint Conformant;
  80.  
  81.    /* extensions */
  82.    EGLint YInvertedNOK;
  83. };
  84.  
  85.  
  86. /**
  87.  * Map an EGL attribute enum to the offset of the member in _EGLConfig.
  88.  */
  89. static INLINE EGLint
  90. _eglOffsetOfConfig(EGLint attr)
  91. {
  92.    switch (attr) {
  93. #define ATTRIB_MAP(attr, memb) case attr: return offsetof(_EGLConfig, memb)
  94.    /* core */
  95.    ATTRIB_MAP(EGL_BUFFER_SIZE,               BufferSize);
  96.    ATTRIB_MAP(EGL_ALPHA_SIZE,                AlphaSize);
  97.    ATTRIB_MAP(EGL_BLUE_SIZE,                 BlueSize);
  98.    ATTRIB_MAP(EGL_GREEN_SIZE,                GreenSize);
  99.    ATTRIB_MAP(EGL_RED_SIZE,                  RedSize);
  100.    ATTRIB_MAP(EGL_DEPTH_SIZE,                DepthSize);
  101.    ATTRIB_MAP(EGL_STENCIL_SIZE,              StencilSize);
  102.    ATTRIB_MAP(EGL_CONFIG_CAVEAT,             ConfigCaveat);
  103.    ATTRIB_MAP(EGL_CONFIG_ID,                 ConfigID);
  104.    ATTRIB_MAP(EGL_LEVEL,                     Level);
  105.    ATTRIB_MAP(EGL_MAX_PBUFFER_HEIGHT,        MaxPbufferHeight);
  106.    ATTRIB_MAP(EGL_MAX_PBUFFER_PIXELS,        MaxPbufferPixels);
  107.    ATTRIB_MAP(EGL_MAX_PBUFFER_WIDTH,         MaxPbufferWidth);
  108.    ATTRIB_MAP(EGL_NATIVE_RENDERABLE,         NativeRenderable);
  109.    ATTRIB_MAP(EGL_NATIVE_VISUAL_ID,          NativeVisualID);
  110.    ATTRIB_MAP(EGL_NATIVE_VISUAL_TYPE,        NativeVisualType);
  111.    ATTRIB_MAP(EGL_SAMPLES,                   Samples);
  112.    ATTRIB_MAP(EGL_SAMPLE_BUFFERS,            SampleBuffers);
  113.    ATTRIB_MAP(EGL_SURFACE_TYPE,              SurfaceType);
  114.    ATTRIB_MAP(EGL_TRANSPARENT_TYPE,          TransparentType);
  115.    ATTRIB_MAP(EGL_TRANSPARENT_BLUE_VALUE,    TransparentBlueValue);
  116.    ATTRIB_MAP(EGL_TRANSPARENT_GREEN_VALUE,   TransparentGreenValue);
  117.    ATTRIB_MAP(EGL_TRANSPARENT_RED_VALUE,     TransparentRedValue);
  118.    ATTRIB_MAP(EGL_BIND_TO_TEXTURE_RGB,       BindToTextureRGB);
  119.    ATTRIB_MAP(EGL_BIND_TO_TEXTURE_RGBA,      BindToTextureRGBA);
  120.    ATTRIB_MAP(EGL_MIN_SWAP_INTERVAL,         MinSwapInterval);
  121.    ATTRIB_MAP(EGL_MAX_SWAP_INTERVAL,         MaxSwapInterval);
  122.    ATTRIB_MAP(EGL_LUMINANCE_SIZE,            LuminanceSize);
  123.    ATTRIB_MAP(EGL_ALPHA_MASK_SIZE,           AlphaMaskSize);
  124.    ATTRIB_MAP(EGL_COLOR_BUFFER_TYPE,         ColorBufferType);
  125.    ATTRIB_MAP(EGL_RENDERABLE_TYPE,           RenderableType);
  126.    ATTRIB_MAP(EGL_MATCH_NATIVE_PIXMAP,       MatchNativePixmap);
  127.    ATTRIB_MAP(EGL_CONFORMANT,                Conformant);
  128.    /* extensions */
  129.    ATTRIB_MAP(EGL_Y_INVERTED_NOK,            YInvertedNOK);
  130. #undef ATTRIB_MAP
  131.    default:
  132.       return -1;
  133.    }
  134. }
  135.  
  136.  
  137. /**
  138.  * Update a config for a given key.
  139.  *
  140.  * Note that a valid key is not necessarily a valid attribute.  There are gaps
  141.  * in the attribute enums.  The separation is to catch application errors.
  142.  * Drivers should never set a key that is an invalid attribute.
  143.  */
  144. static INLINE void
  145. _eglSetConfigKey(_EGLConfig *conf, EGLint key, EGLint val)
  146. {
  147.    EGLint offset = _eglOffsetOfConfig(key);
  148.    assert(offset >= 0);
  149.    *((EGLint *) ((char *) conf + offset)) = val;
  150. }
  151.  
  152.  
  153. /**
  154.  * Return the value for a given key.
  155.  */
  156. static INLINE EGLint
  157. _eglGetConfigKey(const _EGLConfig *conf, EGLint key)
  158. {
  159.    EGLint offset = _eglOffsetOfConfig(key);
  160.    assert(offset >= 0);
  161.    return *((EGLint *) ((char *) conf + offset));
  162. }
  163.  
  164.  
  165. PUBLIC void
  166. _eglInitConfig(_EGLConfig *config, _EGLDisplay *dpy, EGLint id);
  167.  
  168.  
  169. PUBLIC EGLConfig
  170. _eglLinkConfig(_EGLConfig *conf);
  171.  
  172.  
  173. extern _EGLConfig *
  174. _eglLookupConfig(EGLConfig config, _EGLDisplay *dpy);
  175.  
  176.  
  177. /**
  178.  * Return the handle of a linked config.
  179.  */
  180. static INLINE EGLConfig
  181. _eglGetConfigHandle(_EGLConfig *conf)
  182. {
  183.    return (EGLConfig) conf;
  184. }
  185.  
  186.  
  187. PUBLIC EGLBoolean
  188. _eglValidateConfig(const _EGLConfig *conf, EGLBoolean for_matching);
  189.  
  190.  
  191. PUBLIC EGLBoolean
  192. _eglMatchConfig(const _EGLConfig *conf, const _EGLConfig *criteria);
  193.  
  194.  
  195. PUBLIC EGLBoolean
  196. _eglParseConfigAttribList(_EGLConfig *conf, _EGLDisplay *dpy,
  197.                           const EGLint *attrib_list);
  198.  
  199.  
  200. PUBLIC EGLint
  201. _eglCompareConfigs(const _EGLConfig *conf1, const _EGLConfig *conf2,
  202.                    const _EGLConfig *criteria, EGLBoolean compare_id);
  203.  
  204.  
  205. PUBLIC EGLBoolean
  206. _eglFilterConfigArray(_EGLArray *array, EGLConfig *configs,
  207.                       EGLint config_size, EGLint *num_configs,
  208.                       EGLBoolean (*match)(const _EGLConfig *, void *),
  209.                       EGLint (*compare)(const _EGLConfig *, const _EGLConfig *,
  210.                                         void *),
  211.                       void *filter_data);
  212.  
  213.  
  214. extern EGLBoolean
  215. _eglChooseConfig(_EGLDriver *drv, _EGLDisplay *dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config);
  216.  
  217.  
  218. extern EGLBoolean
  219. _eglGetConfigAttrib(_EGLDriver *drv, _EGLDisplay *dpy, _EGLConfig *conf, EGLint attribute, EGLint *value);
  220.  
  221.  
  222. extern EGLBoolean
  223. _eglGetConfigs(_EGLDriver *drv, _EGLDisplay *dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config);
  224.  
  225.  
  226. #endif /* EGLCONFIG_INCLUDED */
  227.