eglconfig.h revision 897cb8950ae14ffe7029b1daf16113ff62ce0dfe
1adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#ifndef EGLCONFIG_INCLUDED 2adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#define EGLCONFIG_INCLUDED 3adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu#include <assert.h> 6adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "egltypedefs.h" 7adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 8adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 9358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu#define _EGL_CONFIG_FIRST_ATTRIB EGL_BUFFER_SIZE 10358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu#define _EGL_CONFIG_LAST_ATTRIB EGL_CONFORMANT 11358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu#define _EGL_CONFIG_NUM_ATTRIBS \ 12358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu (_EGL_CONFIG_LAST_ATTRIB - _EGL_CONFIG_FIRST_ATTRIB + 1) 13358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu 14358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu#define _EGL_CONFIG_STORAGE_SIZE _EGL_CONFIG_NUM_ATTRIBS 15adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 16adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 17adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulstruct _egl_config 18adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 1956822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu _EGLDisplay *Display; 20358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu EGLint Storage[_EGL_CONFIG_STORAGE_SIZE]; 21adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}; 22adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 23adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 24358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu#define SET_CONFIG_ATTRIB(CONF, ATTR, VAL) _eglSetConfigKey(CONF, ATTR, VAL) 25358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu#define GET_CONFIG_ATTRIB(CONF, ATTR) _eglGetConfigKey(CONF, ATTR) 26de71e4741d8b4e3719e702431912374f1cb90034Brian Paul 27de71e4741d8b4e3719e702431912374f1cb90034Brian Paul 28358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu/** 29358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu * Given a key, return an index into the storage of the config. 30358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu * Return -1 if the key is invalid. 31358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu */ 32358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wustatic INLINE EGLint 33358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu_eglIndexConfig(const _EGLConfig *conf, EGLint key) 34358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu{ 35358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu (void) conf; 36358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu if (key >= _EGL_CONFIG_FIRST_ATTRIB && 37358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu key < _EGL_CONFIG_FIRST_ATTRIB + _EGL_CONFIG_NUM_ATTRIBS) 38358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu return key - _EGL_CONFIG_FIRST_ATTRIB; 39358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu else 40358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu return -1; 41358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu} 42358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu 43358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu 44358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu/** 45358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu * Reset all keys in the config to a given value. 46358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu */ 47358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wustatic INLINE void 48358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu_eglResetConfigKeys(_EGLConfig *conf, EGLint val) 49358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu{ 50358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu EGLint i; 51358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu for (i = 0; i < _EGL_CONFIG_NUM_ATTRIBS; i++) 52358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu conf->Storage[i] = val; 53358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu} 54358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu 55358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu 56358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu/** 57358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu * Update a config for a given key. 58358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu */ 59358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wustatic INLINE void 60358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu_eglSetConfigKey(_EGLConfig *conf, EGLint key, EGLint val) 61358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu{ 62358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu EGLint idx = _eglIndexConfig(conf, key); 63358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu assert(idx >= 0); 64358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu conf->Storage[idx] = val; 65358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu} 66358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu 67358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu 68358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu/** 69358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu * Return the value for a given key. 70358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu */ 71358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wustatic INLINE EGLint 72358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu_eglGetConfigKey(const _EGLConfig *conf, EGLint key) 73358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu{ 74358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu EGLint idx = _eglIndexConfig(conf, key); 75358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu assert(idx >= 0); 76358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu return conf->Storage[idx]; 77358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu} 78358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu 79358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu 80358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu/** 81358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu * Set a given attribute. 82358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu * 83358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu * Because _eglGetConfigAttrib is already used as a fallback driver 84358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu * function, this function is not considered to have a good name. 85358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu * SET_CONFIG_ATTRIB is preferred over this function. 86358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu */ 87358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wustatic INLINE void 88358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu_eglSetConfigAttrib(_EGLConfig *conf, EGLint attr, EGLint val) 89358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu{ 90358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu SET_CONFIG_ATTRIB(conf, attr, val); 91358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu} 92adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 93adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 94897cb8950ae14ffe7029b1daf16113ff62ce0dfeChia-I WuPUBLIC void 95adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul_eglInitConfig(_EGLConfig *config, EGLint id); 96adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 97adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 98897cb8950ae14ffe7029b1daf16113ff62ce0dfeChia-I WuPUBLIC EGLConfig 9956822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu_eglAddConfig(_EGLDisplay *dpy, _EGLConfig *conf); 100721ba15bf4596b2e9589e7656005b387724875c3Brian Paul 101721ba15bf4596b2e9589e7656005b387724875c3Brian Paul 10256822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu#ifndef _EGL_SKIP_HANDLE_CHECK 103adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 104adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 10556822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wuextern EGLBoolean 10656822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu_eglCheckConfigHandle(EGLConfig config, _EGLDisplay *dpy); 10756822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu 10856822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu 10956822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu#else 11056822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu 11156822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu 11256822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wustatic INLINE EGLBoolean 11356822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu_eglCheckConfigHandle(EGLConfig config, _EGLDisplay *dpy) 11456822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu{ 11556822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu _EGLConfig *conf = (_EGLConfig *) config; 11656822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu return (dpy && conf && conf->Display == dpy); 11756822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu} 11856822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu 11956822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu 12056822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu#endif /* _EGL_SKIP_HANDLE_CHECK */ 12156822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu 12256822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu 12356822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu/** 12456822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu * Lookup a handle to find the linked config. 12556822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu * Return NULL if the handle has no corresponding linked config. 12656822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu */ 12756822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wustatic INLINE _EGLConfig * 12856822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu_eglLookupConfig(EGLConfig config, _EGLDisplay *dpy) 12956822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu{ 13056822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu _EGLConfig *conf = (_EGLConfig *) config; 13156822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu if (!_eglCheckConfigHandle(config, dpy)) 13256822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu conf = NULL; 13356822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu return conf; 13456822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu} 13556822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu 13656822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu 13756822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu/** 13856822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu * Return the handle of a linked config, or NULL. 13956822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu */ 14056822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wustatic INLINE EGLConfig 14156822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu_eglGetConfigHandle(_EGLConfig *conf) 14256822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu{ 14356822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu return (EGLConfig) ((conf && conf->Display) ? conf : NULL); 14456822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu} 145c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul 146c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul 147897cb8950ae14ffe7029b1daf16113ff62ce0dfeChia-I WuPUBLIC EGLBoolean 14895cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu_eglValidateConfig(const _EGLConfig *conf, EGLBoolean for_matching); 14995cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu 15095cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu 151897cb8950ae14ffe7029b1daf16113ff62ce0dfeChia-I WuPUBLIC EGLBoolean 15295cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu_eglMatchConfig(const _EGLConfig *conf, const _EGLConfig *criteria); 15395cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu 15495cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu 155897cb8950ae14ffe7029b1daf16113ff62ce0dfeChia-I WuPUBLIC EGLBoolean 15695cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu_eglParseConfigAttribList(_EGLConfig *conf, const EGLint *attrib_list); 15795cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu 15895cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu 159897cb8950ae14ffe7029b1daf16113ff62ce0dfeChia-I WuPUBLIC EGLint 16095cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu_eglCompareConfigs(const _EGLConfig *conf1, const _EGLConfig *conf2, 16195cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu const _EGLConfig *criteria, EGLBoolean compare_id); 16295cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu 16395cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu 164897cb8950ae14ffe7029b1daf16113ff62ce0dfeChia-I WuPUBLIC void 16595cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu_eglSortConfigs(const _EGLConfig **configs, EGLint count, 16695cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu EGLint (*compare)(const _EGLConfig *, const _EGLConfig *, 16795cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu void *), 16895cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu void *priv_data); 169adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 170adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 171adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulextern EGLBoolean 1722f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglChooseConfig(_EGLDriver *drv, _EGLDisplay *dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config); 173adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 174adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 175adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulextern EGLBoolean 1762f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglGetConfigAttrib(_EGLDriver *drv, _EGLDisplay *dpy, _EGLConfig *conf, EGLint attribute, EGLint *value); 177adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 178adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 179adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulextern EGLBoolean 1802f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglGetConfigs(_EGLDriver *drv, _EGLDisplay *dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config); 181adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 182adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 183adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#endif /* EGLCONFIG_INCLUDED */ 184