eglconfig.h revision 95cdd697e7e72cec1d0fe79c59a8ba7b8cef8571
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{ 19adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLConfig Handle; /* the public/opaque handle which names this config */ 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 94adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulextern void 95adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul_eglInitConfig(_EGLConfig *config, EGLint id); 96adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 97adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 98721ba15bf4596b2e9589e7656005b387724875c3Brian Paulextern EGLConfig 99721ba15bf4596b2e9589e7656005b387724875c3Brian Paul_eglGetConfigHandle(_EGLConfig *config); 100721ba15bf4596b2e9589e7656005b387724875c3Brian Paul 101721ba15bf4596b2e9589e7656005b387724875c3Brian Paul 102adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulextern _EGLConfig * 1032f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglLookupConfig(EGLConfig config, _EGLDisplay *dpy); 104adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 105adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 106c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paulextern _EGLConfig * 10797035cb19aaf508aad45446651a80da9af1d0e8cBrian Paul_eglAddConfig(_EGLDisplay *display, _EGLConfig *config); 108c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul 109c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul 110adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulextern EGLBoolean 11195cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu_eglValidateConfig(const _EGLConfig *conf, EGLBoolean for_matching); 11295cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu 11395cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu 11495cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wuextern EGLBoolean 11595cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu_eglMatchConfig(const _EGLConfig *conf, const _EGLConfig *criteria); 11695cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu 11795cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu 11895cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wuextern EGLBoolean 11995cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu_eglParseConfigAttribList(_EGLConfig *conf, const EGLint *attrib_list); 12095cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu 12195cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu 12295cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wuextern EGLint 12395cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu_eglCompareConfigs(const _EGLConfig *conf1, const _EGLConfig *conf2, 12495cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu const _EGLConfig *criteria, EGLBoolean compare_id); 12595cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu 12695cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu 12795cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wuextern void 12895cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu_eglSortConfigs(const _EGLConfig **configs, EGLint count, 12995cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu EGLint (*compare)(const _EGLConfig *, const _EGLConfig *, 13095cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu void *), 13195cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu void *priv_data); 132adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 133adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 134adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulextern EGLBoolean 1352f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglChooseConfig(_EGLDriver *drv, _EGLDisplay *dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config); 136adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 137adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 138adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulextern EGLBoolean 1392f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglGetConfigAttrib(_EGLDriver *drv, _EGLDisplay *dpy, _EGLConfig *conf, EGLint attribute, EGLint *value); 140adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 141adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 142adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulextern EGLBoolean 1432f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglGetConfigs(_EGLDriver *drv, _EGLDisplay *dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config); 144adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 145adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 146adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#endif /* EGLCONFIG_INCLUDED */ 147