eglconfig.h revision 601498ae73e654c2de997ea75075613a694d604d
1adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#ifndef EGLCONFIG_INCLUDED 2adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#define EGLCONFIG_INCLUDED 3adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu#include <assert.h> 6601498ae73e654c2de997ea75075613a694d604dJosé Fonseca#include <stddef.h> 7adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "egltypedefs.h" 8adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 9adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 10282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu/* update _eglValidationTable and _eglOffsetOfConfig before updating this 11282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu * struct */ 12adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulstruct _egl_config 13adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 1456822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu _EGLDisplay *Display; 15282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu 16282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu /* core */ 17282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint BufferSize; 18282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint AlphaSize; 19282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint BlueSize; 20282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint GreenSize; 21282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint RedSize; 22282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint DepthSize; 23282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint StencilSize; 24282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint ConfigCaveat; 25282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint ConfigID; 26282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint Level; 27282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint MaxPbufferHeight; 28282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint MaxPbufferPixels; 29282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint MaxPbufferWidth; 30282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint NativeRenderable; 31282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint NativeVisualID; 32282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint NativeVisualType; 33282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint Samples; 34282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint SampleBuffers; 35282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint SurfaceType; 36282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint TransparentType; 37282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint TransparentBlueValue; 38282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint TransparentGreenValue; 39282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint TransparentRedValue; 40282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint BindToTextureRGB; 41282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint BindToTextureRGBA; 42282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint MinSwapInterval; 43282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint MaxSwapInterval; 44282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint LuminanceSize; 45282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint AlphaMaskSize; 46282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint ColorBufferType; 47282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint RenderableType; 48282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint MatchNativePixmap; 49282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint Conformant; 50282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu 51282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu /* extensions */ 52282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint YInvertedNOK; 53adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}; 54adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 55adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 56a37dc17c122ed25365b100aefe4b941df1b526c0Chia-I Wu/** 57282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu * Map an EGL attribute enum to the offset of the member in _EGLConfig. 58358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu */ 59358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wustatic INLINE EGLint 60282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu_eglOffsetOfConfig(EGLint attr) 61358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu{ 62282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu switch (attr) { 63282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu#define ATTRIB_MAP(attr, memb) case attr: return offsetof(_EGLConfig, memb) 64282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu /* core */ 65282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_BUFFER_SIZE, BufferSize); 66282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_ALPHA_SIZE, AlphaSize); 67282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_BLUE_SIZE, BlueSize); 68282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_GREEN_SIZE, GreenSize); 69282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_RED_SIZE, RedSize); 70282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_DEPTH_SIZE, DepthSize); 71282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_STENCIL_SIZE, StencilSize); 72282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_CONFIG_CAVEAT, ConfigCaveat); 73282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_CONFIG_ID, ConfigID); 74282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_LEVEL, Level); 75282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_MAX_PBUFFER_HEIGHT, MaxPbufferHeight); 76282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_MAX_PBUFFER_PIXELS, MaxPbufferPixels); 77282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_MAX_PBUFFER_WIDTH, MaxPbufferWidth); 78282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_NATIVE_RENDERABLE, NativeRenderable); 79282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_NATIVE_VISUAL_ID, NativeVisualID); 80282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_NATIVE_VISUAL_TYPE, NativeVisualType); 81282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_SAMPLES, Samples); 82282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_SAMPLE_BUFFERS, SampleBuffers); 83282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_SURFACE_TYPE, SurfaceType); 84282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_TRANSPARENT_TYPE, TransparentType); 85282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_TRANSPARENT_BLUE_VALUE, TransparentBlueValue); 86282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_TRANSPARENT_GREEN_VALUE, TransparentGreenValue); 87282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_TRANSPARENT_RED_VALUE, TransparentRedValue); 88282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_BIND_TO_TEXTURE_RGB, BindToTextureRGB); 89282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_BIND_TO_TEXTURE_RGBA, BindToTextureRGBA); 90282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_MIN_SWAP_INTERVAL, MinSwapInterval); 91282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_MAX_SWAP_INTERVAL, MaxSwapInterval); 92282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_LUMINANCE_SIZE, LuminanceSize); 93282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_ALPHA_MASK_SIZE, AlphaMaskSize); 94282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_COLOR_BUFFER_TYPE, ColorBufferType); 95282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_RENDERABLE_TYPE, RenderableType); 96282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_MATCH_NATIVE_PIXMAP, MatchNativePixmap); 97282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_CONFORMANT, Conformant); 98282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu /* extensions */ 99282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu ATTRIB_MAP(EGL_Y_INVERTED_NOK, YInvertedNOK); 100282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu#undef ATTRIB_MAP 1015dc0f49084f322dd8ff6eb585212eea8b50e3377Kristian Høgsberg default: 102358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu return -1; 1035dc0f49084f322dd8ff6eb585212eea8b50e3377Kristian Høgsberg } 104358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu} 105358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu 106358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu 107358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu/** 108358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu * Update a config for a given key. 109a37dc17c122ed25365b100aefe4b941df1b526c0Chia-I Wu * 110a37dc17c122ed25365b100aefe4b941df1b526c0Chia-I Wu * Note that a valid key is not necessarily a valid attribute. There are gaps 111a37dc17c122ed25365b100aefe4b941df1b526c0Chia-I Wu * in the attribute enums. The separation is to catch application errors. 112a37dc17c122ed25365b100aefe4b941df1b526c0Chia-I Wu * Drivers should never set a key that is an invalid attribute. 113358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu */ 114358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wustatic INLINE void 115358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu_eglSetConfigKey(_EGLConfig *conf, EGLint key, EGLint val) 116358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu{ 117282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint offset = _eglOffsetOfConfig(key); 118282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu assert(offset >= 0); 119282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu *((EGLint *) ((char *) conf + offset)) = val; 120358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu} 121358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu 122358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu 123358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu/** 124358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu * Return the value for a given key. 125358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu */ 126358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wustatic INLINE EGLint 127358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu_eglGetConfigKey(const _EGLConfig *conf, EGLint key) 128358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu{ 129282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu EGLint offset = _eglOffsetOfConfig(key); 130282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu assert(offset >= 0); 131282e514240c8f514da768af6377ae61b9f79c81fChia-I Wu return *((EGLint *) ((char *) conf + offset)); 132358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu} 133358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu 134358c5a8fd1d518930c3e87316a2c743a661ac553Chia-I Wu 135897cb8950ae14ffe7029b1daf16113ff62ce0dfeChia-I WuPUBLIC void 136216925ccd122a06505dafae425323e3ac858f80eChia-I Wu_eglInitConfig(_EGLConfig *config, _EGLDisplay *dpy, EGLint id); 137adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 138adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 139897cb8950ae14ffe7029b1daf16113ff62ce0dfeChia-I WuPUBLIC EGLConfig 1408a6bdf3979c2dda0efc6771308bf9e5c32bbdab4Chia-I Wu_eglLinkConfig(_EGLConfig *conf); 141721ba15bf4596b2e9589e7656005b387724875c3Brian Paul 142721ba15bf4596b2e9589e7656005b387724875c3Brian Paul 1438a6bdf3979c2dda0efc6771308bf9e5c32bbdab4Chia-I Wuextern _EGLConfig * 1448a6bdf3979c2dda0efc6771308bf9e5c32bbdab4Chia-I Wu_eglLookupConfig(EGLConfig config, _EGLDisplay *dpy); 14556822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu 14656822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu 14756822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu/** 1488a6bdf3979c2dda0efc6771308bf9e5c32bbdab4Chia-I Wu * Return the handle of a linked config. 14956822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu */ 15056822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wustatic INLINE EGLConfig 15156822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu_eglGetConfigHandle(_EGLConfig *conf) 15256822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu{ 1538a6bdf3979c2dda0efc6771308bf9e5c32bbdab4Chia-I Wu return (EGLConfig) conf; 15456822b0812cd500bd54bb7c4b573c54547efb657Chia-I Wu} 155c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul 156c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul 157897cb8950ae14ffe7029b1daf16113ff62ce0dfeChia-I WuPUBLIC EGLBoolean 15895cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu_eglValidateConfig(const _EGLConfig *conf, EGLBoolean for_matching); 15995cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu 16095cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu 161897cb8950ae14ffe7029b1daf16113ff62ce0dfeChia-I WuPUBLIC EGLBoolean 16295cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu_eglMatchConfig(const _EGLConfig *conf, const _EGLConfig *criteria); 16395cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu 16495cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu 165897cb8950ae14ffe7029b1daf16113ff62ce0dfeChia-I WuPUBLIC EGLBoolean 1668a6bdf3979c2dda0efc6771308bf9e5c32bbdab4Chia-I Wu_eglParseConfigAttribList(_EGLConfig *conf, _EGLDisplay *dpy, 1678a6bdf3979c2dda0efc6771308bf9e5c32bbdab4Chia-I Wu const EGLint *attrib_list); 16895cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu 16995cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu 170897cb8950ae14ffe7029b1daf16113ff62ce0dfeChia-I WuPUBLIC EGLint 17195cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu_eglCompareConfigs(const _EGLConfig *conf1, const _EGLConfig *conf2, 17295cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu const _EGLConfig *criteria, EGLBoolean compare_id); 17395cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu 17495cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu 175897cb8950ae14ffe7029b1daf16113ff62ce0dfeChia-I WuPUBLIC void 17695cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu_eglSortConfigs(const _EGLConfig **configs, EGLint count, 17795cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu EGLint (*compare)(const _EGLConfig *, const _EGLConfig *, 17895cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu void *), 17995cdd697e7e72cec1d0fe79c59a8ba7b8cef8571Chia-I Wu void *priv_data); 180adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 181adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 182adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulextern EGLBoolean 1832f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglChooseConfig(_EGLDriver *drv, _EGLDisplay *dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config); 184adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 185adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 186adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulextern EGLBoolean 1872f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglGetConfigAttrib(_EGLDriver *drv, _EGLDisplay *dpy, _EGLConfig *conf, EGLint attribute, EGLint *value); 188adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 189adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 190adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulextern EGLBoolean 1912f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglGetConfigs(_EGLDriver *drv, _EGLDisplay *dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config); 192adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 193adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 194adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#endif /* EGLCONFIG_INCLUDED */ 195