eglconfig.h revision 601498ae73e654c2de997ea75075613a694d604d
1#ifndef EGLCONFIG_INCLUDED 2#define EGLCONFIG_INCLUDED 3 4 5#include <assert.h> 6#include <stddef.h> 7#include "egltypedefs.h" 8 9 10/* update _eglValidationTable and _eglOffsetOfConfig before updating this 11 * struct */ 12struct _egl_config 13{ 14 _EGLDisplay *Display; 15 16 /* core */ 17 EGLint BufferSize; 18 EGLint AlphaSize; 19 EGLint BlueSize; 20 EGLint GreenSize; 21 EGLint RedSize; 22 EGLint DepthSize; 23 EGLint StencilSize; 24 EGLint ConfigCaveat; 25 EGLint ConfigID; 26 EGLint Level; 27 EGLint MaxPbufferHeight; 28 EGLint MaxPbufferPixels; 29 EGLint MaxPbufferWidth; 30 EGLint NativeRenderable; 31 EGLint NativeVisualID; 32 EGLint NativeVisualType; 33 EGLint Samples; 34 EGLint SampleBuffers; 35 EGLint SurfaceType; 36 EGLint TransparentType; 37 EGLint TransparentBlueValue; 38 EGLint TransparentGreenValue; 39 EGLint TransparentRedValue; 40 EGLint BindToTextureRGB; 41 EGLint BindToTextureRGBA; 42 EGLint MinSwapInterval; 43 EGLint MaxSwapInterval; 44 EGLint LuminanceSize; 45 EGLint AlphaMaskSize; 46 EGLint ColorBufferType; 47 EGLint RenderableType; 48 EGLint MatchNativePixmap; 49 EGLint Conformant; 50 51 /* extensions */ 52 EGLint YInvertedNOK; 53}; 54 55 56/** 57 * Map an EGL attribute enum to the offset of the member in _EGLConfig. 58 */ 59static INLINE EGLint 60_eglOffsetOfConfig(EGLint attr) 61{ 62 switch (attr) { 63#define ATTRIB_MAP(attr, memb) case attr: return offsetof(_EGLConfig, memb) 64 /* core */ 65 ATTRIB_MAP(EGL_BUFFER_SIZE, BufferSize); 66 ATTRIB_MAP(EGL_ALPHA_SIZE, AlphaSize); 67 ATTRIB_MAP(EGL_BLUE_SIZE, BlueSize); 68 ATTRIB_MAP(EGL_GREEN_SIZE, GreenSize); 69 ATTRIB_MAP(EGL_RED_SIZE, RedSize); 70 ATTRIB_MAP(EGL_DEPTH_SIZE, DepthSize); 71 ATTRIB_MAP(EGL_STENCIL_SIZE, StencilSize); 72 ATTRIB_MAP(EGL_CONFIG_CAVEAT, ConfigCaveat); 73 ATTRIB_MAP(EGL_CONFIG_ID, ConfigID); 74 ATTRIB_MAP(EGL_LEVEL, Level); 75 ATTRIB_MAP(EGL_MAX_PBUFFER_HEIGHT, MaxPbufferHeight); 76 ATTRIB_MAP(EGL_MAX_PBUFFER_PIXELS, MaxPbufferPixels); 77 ATTRIB_MAP(EGL_MAX_PBUFFER_WIDTH, MaxPbufferWidth); 78 ATTRIB_MAP(EGL_NATIVE_RENDERABLE, NativeRenderable); 79 ATTRIB_MAP(EGL_NATIVE_VISUAL_ID, NativeVisualID); 80 ATTRIB_MAP(EGL_NATIVE_VISUAL_TYPE, NativeVisualType); 81 ATTRIB_MAP(EGL_SAMPLES, Samples); 82 ATTRIB_MAP(EGL_SAMPLE_BUFFERS, SampleBuffers); 83 ATTRIB_MAP(EGL_SURFACE_TYPE, SurfaceType); 84 ATTRIB_MAP(EGL_TRANSPARENT_TYPE, TransparentType); 85 ATTRIB_MAP(EGL_TRANSPARENT_BLUE_VALUE, TransparentBlueValue); 86 ATTRIB_MAP(EGL_TRANSPARENT_GREEN_VALUE, TransparentGreenValue); 87 ATTRIB_MAP(EGL_TRANSPARENT_RED_VALUE, TransparentRedValue); 88 ATTRIB_MAP(EGL_BIND_TO_TEXTURE_RGB, BindToTextureRGB); 89 ATTRIB_MAP(EGL_BIND_TO_TEXTURE_RGBA, BindToTextureRGBA); 90 ATTRIB_MAP(EGL_MIN_SWAP_INTERVAL, MinSwapInterval); 91 ATTRIB_MAP(EGL_MAX_SWAP_INTERVAL, MaxSwapInterval); 92 ATTRIB_MAP(EGL_LUMINANCE_SIZE, LuminanceSize); 93 ATTRIB_MAP(EGL_ALPHA_MASK_SIZE, AlphaMaskSize); 94 ATTRIB_MAP(EGL_COLOR_BUFFER_TYPE, ColorBufferType); 95 ATTRIB_MAP(EGL_RENDERABLE_TYPE, RenderableType); 96 ATTRIB_MAP(EGL_MATCH_NATIVE_PIXMAP, MatchNativePixmap); 97 ATTRIB_MAP(EGL_CONFORMANT, Conformant); 98 /* extensions */ 99 ATTRIB_MAP(EGL_Y_INVERTED_NOK, YInvertedNOK); 100#undef ATTRIB_MAP 101 default: 102 return -1; 103 } 104} 105 106 107/** 108 * Update a config for a given key. 109 * 110 * Note that a valid key is not necessarily a valid attribute. There are gaps 111 * in the attribute enums. The separation is to catch application errors. 112 * Drivers should never set a key that is an invalid attribute. 113 */ 114static INLINE void 115_eglSetConfigKey(_EGLConfig *conf, EGLint key, EGLint val) 116{ 117 EGLint offset = _eglOffsetOfConfig(key); 118 assert(offset >= 0); 119 *((EGLint *) ((char *) conf + offset)) = val; 120} 121 122 123/** 124 * Return the value for a given key. 125 */ 126static INLINE EGLint 127_eglGetConfigKey(const _EGLConfig *conf, EGLint key) 128{ 129 EGLint offset = _eglOffsetOfConfig(key); 130 assert(offset >= 0); 131 return *((EGLint *) ((char *) conf + offset)); 132} 133 134 135PUBLIC void 136_eglInitConfig(_EGLConfig *config, _EGLDisplay *dpy, EGLint id); 137 138 139PUBLIC EGLConfig 140_eglLinkConfig(_EGLConfig *conf); 141 142 143extern _EGLConfig * 144_eglLookupConfig(EGLConfig config, _EGLDisplay *dpy); 145 146 147/** 148 * Return the handle of a linked config. 149 */ 150static INLINE EGLConfig 151_eglGetConfigHandle(_EGLConfig *conf) 152{ 153 return (EGLConfig) conf; 154} 155 156 157PUBLIC EGLBoolean 158_eglValidateConfig(const _EGLConfig *conf, EGLBoolean for_matching); 159 160 161PUBLIC EGLBoolean 162_eglMatchConfig(const _EGLConfig *conf, const _EGLConfig *criteria); 163 164 165PUBLIC EGLBoolean 166_eglParseConfigAttribList(_EGLConfig *conf, _EGLDisplay *dpy, 167 const EGLint *attrib_list); 168 169 170PUBLIC EGLint 171_eglCompareConfigs(const _EGLConfig *conf1, const _EGLConfig *conf2, 172 const _EGLConfig *criteria, EGLBoolean compare_id); 173 174 175PUBLIC void 176_eglSortConfigs(const _EGLConfig **configs, EGLint count, 177 EGLint (*compare)(const _EGLConfig *, const _EGLConfig *, 178 void *), 179 void *priv_data); 180 181 182extern EGLBoolean 183_eglChooseConfig(_EGLDriver *drv, _EGLDisplay *dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config); 184 185 186extern EGLBoolean 187_eglGetConfigAttrib(_EGLDriver *drv, _EGLDisplay *dpy, _EGLConfig *conf, EGLint attribute, EGLint *value); 188 189 190extern EGLBoolean 191_eglGetConfigs(_EGLDriver *drv, _EGLDisplay *dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config); 192 193 194#endif /* EGLCONFIG_INCLUDED */ 195