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