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