eglconfig.h revision 358c5a8fd1d518930c3e87316a2c743a661ac553
1#ifndef EGLCONFIG_INCLUDED 2#define EGLCONFIG_INCLUDED 3 4 5#include <assert.h> 6#include "egltypedefs.h" 7 8 9#define _EGL_CONFIG_FIRST_ATTRIB EGL_BUFFER_SIZE 10#define _EGL_CONFIG_LAST_ATTRIB EGL_CONFORMANT 11#define _EGL_CONFIG_NUM_ATTRIBS \ 12 (_EGL_CONFIG_LAST_ATTRIB - _EGL_CONFIG_FIRST_ATTRIB + 1) 13 14#define _EGL_CONFIG_STORAGE_SIZE _EGL_CONFIG_NUM_ATTRIBS 15 16 17struct _egl_config 18{ 19 EGLConfig Handle; /* the public/opaque handle which names this config */ 20 EGLint Storage[_EGL_CONFIG_STORAGE_SIZE]; 21}; 22 23 24#define SET_CONFIG_ATTRIB(CONF, ATTR, VAL) _eglSetConfigKey(CONF, ATTR, VAL) 25#define GET_CONFIG_ATTRIB(CONF, ATTR) _eglGetConfigKey(CONF, ATTR) 26 27 28/** 29 * Given a key, return an index into the storage of the config. 30 * Return -1 if the key is invalid. 31 */ 32static INLINE EGLint 33_eglIndexConfig(const _EGLConfig *conf, EGLint key) 34{ 35 (void) conf; 36 if (key >= _EGL_CONFIG_FIRST_ATTRIB && 37 key < _EGL_CONFIG_FIRST_ATTRIB + _EGL_CONFIG_NUM_ATTRIBS) 38 return key - _EGL_CONFIG_FIRST_ATTRIB; 39 else 40 return -1; 41} 42 43 44/** 45 * Reset all keys in the config to a given value. 46 */ 47static INLINE void 48_eglResetConfigKeys(_EGLConfig *conf, EGLint val) 49{ 50 EGLint i; 51 for (i = 0; i < _EGL_CONFIG_NUM_ATTRIBS; i++) 52 conf->Storage[i] = val; 53} 54 55 56/** 57 * Update a config for a given key. 58 */ 59static INLINE void 60_eglSetConfigKey(_EGLConfig *conf, EGLint key, EGLint val) 61{ 62 EGLint idx = _eglIndexConfig(conf, key); 63 assert(idx >= 0); 64 conf->Storage[idx] = val; 65} 66 67 68/** 69 * Return the value for a given key. 70 */ 71static INLINE EGLint 72_eglGetConfigKey(const _EGLConfig *conf, EGLint key) 73{ 74 EGLint idx = _eglIndexConfig(conf, key); 75 assert(idx >= 0); 76 return conf->Storage[idx]; 77} 78 79 80/** 81 * Set a given attribute. 82 * 83 * Because _eglGetConfigAttrib is already used as a fallback driver 84 * function, this function is not considered to have a good name. 85 * SET_CONFIG_ATTRIB is preferred over this function. 86 */ 87static INLINE void 88_eglSetConfigAttrib(_EGLConfig *conf, EGLint attr, EGLint val) 89{ 90 SET_CONFIG_ATTRIB(conf, attr, val); 91} 92 93 94extern void 95_eglInitConfig(_EGLConfig *config, EGLint id); 96 97 98extern EGLConfig 99_eglGetConfigHandle(_EGLConfig *config); 100 101 102extern _EGLConfig * 103_eglLookupConfig(EGLConfig config, _EGLDisplay *dpy); 104 105 106extern _EGLConfig * 107_eglAddConfig(_EGLDisplay *display, _EGLConfig *config); 108 109 110extern EGLBoolean 111_eglParseConfigAttribs(_EGLConfig *config, const EGLint *attrib_list); 112 113 114extern EGLBoolean 115_eglChooseConfig(_EGLDriver *drv, _EGLDisplay *dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config); 116 117 118extern EGLBoolean 119_eglGetConfigAttrib(_EGLDriver *drv, _EGLDisplay *dpy, _EGLConfig *conf, EGLint attribute, EGLint *value); 120 121 122extern EGLBoolean 123_eglGetConfigs(_EGLDriver *drv, _EGLDisplay *dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config); 124 125 126#endif /* EGLCONFIG_INCLUDED */ 127