Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4358 Serge 1
/**************************************************************************
2
 *
3
 * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
4
 * Copyright 2009-2010 Chia-I Wu 
5
 * Copyright 2010-2011 LunarG, Inc.
6
 * All Rights Reserved.
7
 *
8
 * Permission is hereby granted, free of charge, to any person obtaining a
9
 * copy of this software and associated documentation files (the
10
 * "Software"), to deal in the Software without restriction, including
11
 * without limitation the rights to use, copy, modify, merge, publish,
12
 * distribute, sub license, and/or sell copies of the Software, and to
13
 * permit persons to whom the Software is furnished to do so, subject to
14
 * the following conditions:
15
 *
16
 * The above copyright notice and this permission notice (including the
17
 * next paragraph) shall be included in all copies or substantial portions
18
 * of the Software.
19
 *
20
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
23
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
25
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
26
 * DEALINGS IN THE SOFTWARE.
27
 *
28
 **************************************************************************/
29
 
30
 
31
#ifndef EGLCONFIG_INCLUDED
32
#define EGLCONFIG_INCLUDED
33
 
34
 
35
#include 
36
#include 
37
#include "egltypedefs.h"
38
 
39
 
40
/* update _eglValidationTable and _eglOffsetOfConfig before updating this
41
 * struct */
42
struct _egl_config
43
{
44
   _EGLDisplay *Display;
45
 
46
   /* core */
47
   EGLint BufferSize;
48
   EGLint AlphaSize;
49
   EGLint BlueSize;
50
   EGLint GreenSize;
51
   EGLint RedSize;
52
   EGLint DepthSize;
53
   EGLint StencilSize;
54
   EGLint ConfigCaveat;
55
   EGLint ConfigID;
56
   EGLint Level;
57
   EGLint MaxPbufferHeight;
58
   EGLint MaxPbufferPixels;
59
   EGLint MaxPbufferWidth;
60
   EGLint NativeRenderable;
61
   EGLint NativeVisualID;
62
   EGLint NativeVisualType;
63
   EGLint Samples;
64
   EGLint SampleBuffers;
65
   EGLint SurfaceType;
66
   EGLint TransparentType;
67
   EGLint TransparentBlueValue;
68
   EGLint TransparentGreenValue;
69
   EGLint TransparentRedValue;
70
   EGLint BindToTextureRGB;
71
   EGLint BindToTextureRGBA;
72
   EGLint MinSwapInterval;
73
   EGLint MaxSwapInterval;
74
   EGLint LuminanceSize;
75
   EGLint AlphaMaskSize;
76
   EGLint ColorBufferType;
77
   EGLint RenderableType;
78
   EGLint MatchNativePixmap;
79
   EGLint Conformant;
80
 
81
   /* extensions */
82
   EGLint YInvertedNOK;
83
};
84
 
85
 
86
/**
87
 * Map an EGL attribute enum to the offset of the member in _EGLConfig.
88
 */
89
static INLINE EGLint
90
_eglOffsetOfConfig(EGLint attr)
91
{
92
   switch (attr) {
93
#define ATTRIB_MAP(attr, memb) case attr: return offsetof(_EGLConfig, memb)
94
   /* core */
95
   ATTRIB_MAP(EGL_BUFFER_SIZE,               BufferSize);
96
   ATTRIB_MAP(EGL_ALPHA_SIZE,                AlphaSize);
97
   ATTRIB_MAP(EGL_BLUE_SIZE,                 BlueSize);
98
   ATTRIB_MAP(EGL_GREEN_SIZE,                GreenSize);
99
   ATTRIB_MAP(EGL_RED_SIZE,                  RedSize);
100
   ATTRIB_MAP(EGL_DEPTH_SIZE,                DepthSize);
101
   ATTRIB_MAP(EGL_STENCIL_SIZE,              StencilSize);
102
   ATTRIB_MAP(EGL_CONFIG_CAVEAT,             ConfigCaveat);
103
   ATTRIB_MAP(EGL_CONFIG_ID,                 ConfigID);
104
   ATTRIB_MAP(EGL_LEVEL,                     Level);
105
   ATTRIB_MAP(EGL_MAX_PBUFFER_HEIGHT,        MaxPbufferHeight);
106
   ATTRIB_MAP(EGL_MAX_PBUFFER_PIXELS,        MaxPbufferPixels);
107
   ATTRIB_MAP(EGL_MAX_PBUFFER_WIDTH,         MaxPbufferWidth);
108
   ATTRIB_MAP(EGL_NATIVE_RENDERABLE,         NativeRenderable);
109
   ATTRIB_MAP(EGL_NATIVE_VISUAL_ID,          NativeVisualID);
110
   ATTRIB_MAP(EGL_NATIVE_VISUAL_TYPE,        NativeVisualType);
111
   ATTRIB_MAP(EGL_SAMPLES,                   Samples);
112
   ATTRIB_MAP(EGL_SAMPLE_BUFFERS,            SampleBuffers);
113
   ATTRIB_MAP(EGL_SURFACE_TYPE,              SurfaceType);
114
   ATTRIB_MAP(EGL_TRANSPARENT_TYPE,          TransparentType);
115
   ATTRIB_MAP(EGL_TRANSPARENT_BLUE_VALUE,    TransparentBlueValue);
116
   ATTRIB_MAP(EGL_TRANSPARENT_GREEN_VALUE,   TransparentGreenValue);
117
   ATTRIB_MAP(EGL_TRANSPARENT_RED_VALUE,     TransparentRedValue);
118
   ATTRIB_MAP(EGL_BIND_TO_TEXTURE_RGB,       BindToTextureRGB);
119
   ATTRIB_MAP(EGL_BIND_TO_TEXTURE_RGBA,      BindToTextureRGBA);
120
   ATTRIB_MAP(EGL_MIN_SWAP_INTERVAL,         MinSwapInterval);
121
   ATTRIB_MAP(EGL_MAX_SWAP_INTERVAL,         MaxSwapInterval);
122
   ATTRIB_MAP(EGL_LUMINANCE_SIZE,            LuminanceSize);
123
   ATTRIB_MAP(EGL_ALPHA_MASK_SIZE,           AlphaMaskSize);
124
   ATTRIB_MAP(EGL_COLOR_BUFFER_TYPE,         ColorBufferType);
125
   ATTRIB_MAP(EGL_RENDERABLE_TYPE,           RenderableType);
126
   ATTRIB_MAP(EGL_MATCH_NATIVE_PIXMAP,       MatchNativePixmap);
127
   ATTRIB_MAP(EGL_CONFORMANT,                Conformant);
128
   /* extensions */
129
   ATTRIB_MAP(EGL_Y_INVERTED_NOK,            YInvertedNOK);
130
#undef ATTRIB_MAP
131
   default:
132
      return -1;
133
   }
134
}
135
 
136
 
137
/**
138
 * Update a config for a given key.
139
 *
140
 * Note that a valid key is not necessarily a valid attribute.  There are gaps
141
 * in the attribute enums.  The separation is to catch application errors.
142
 * Drivers should never set a key that is an invalid attribute.
143
 */
144
static INLINE void
145
_eglSetConfigKey(_EGLConfig *conf, EGLint key, EGLint val)
146
{
147
   EGLint offset = _eglOffsetOfConfig(key);
148
   assert(offset >= 0);
149
   *((EGLint *) ((char *) conf + offset)) = val;
150
}
151
 
152
 
153
/**
154
 * Return the value for a given key.
155
 */
156
static INLINE EGLint
157
_eglGetConfigKey(const _EGLConfig *conf, EGLint key)
158
{
159
   EGLint offset = _eglOffsetOfConfig(key);
160
   assert(offset >= 0);
161
   return *((EGLint *) ((char *) conf + offset));
162
}
163
 
164
 
165
PUBLIC void
166
_eglInitConfig(_EGLConfig *config, _EGLDisplay *dpy, EGLint id);
167
 
168
 
169
PUBLIC EGLConfig
170
_eglLinkConfig(_EGLConfig *conf);
171
 
172
 
173
extern _EGLConfig *
174
_eglLookupConfig(EGLConfig config, _EGLDisplay *dpy);
175
 
176
 
177
/**
178
 * Return the handle of a linked config.
179
 */
180
static INLINE EGLConfig
181
_eglGetConfigHandle(_EGLConfig *conf)
182
{
183
   return (EGLConfig) conf;
184
}
185
 
186
 
187
PUBLIC EGLBoolean
188
_eglValidateConfig(const _EGLConfig *conf, EGLBoolean for_matching);
189
 
190
 
191
PUBLIC EGLBoolean
192
_eglMatchConfig(const _EGLConfig *conf, const _EGLConfig *criteria);
193
 
194
 
195
PUBLIC EGLBoolean
196
_eglParseConfigAttribList(_EGLConfig *conf, _EGLDisplay *dpy,
197
                          const EGLint *attrib_list);
198
 
199
 
200
PUBLIC EGLint
201
_eglCompareConfigs(const _EGLConfig *conf1, const _EGLConfig *conf2,
202
                   const _EGLConfig *criteria, EGLBoolean compare_id);
203
 
204
 
205
PUBLIC EGLBoolean
206
_eglFilterConfigArray(_EGLArray *array, EGLConfig *configs,
207
                      EGLint config_size, EGLint *num_configs,
208
                      EGLBoolean (*match)(const _EGLConfig *, void *),
209
                      EGLint (*compare)(const _EGLConfig *, const _EGLConfig *,
210
                                        void *),
211
                      void *filter_data);
212
 
213
 
214
extern EGLBoolean
215
_eglChooseConfig(_EGLDriver *drv, _EGLDisplay *dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config);
216
 
217
 
218
extern EGLBoolean
219
_eglGetConfigAttrib(_EGLDriver *drv, _EGLDisplay *dpy, _EGLConfig *conf, EGLint attribute, EGLint *value);
220
 
221
 
222
extern EGLBoolean
223
_eglGetConfigs(_EGLDriver *drv, _EGLDisplay *dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config);
224
 
225
 
226
#endif /* EGLCONFIG_INCLUDED */