116a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian/*
216a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian** Copyright 2010, The Android Open Source Project
316a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian**
416a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian** Licensed under the Apache License, Version 2.0 (the "License");
516a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian** you may not use this file except in compliance with the License.
616a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian** You may obtain a copy of the License at
716a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian**
816a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian**     http://www.apache.org/licenses/LICENSE-2.0
916a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian**
1016a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian** Unless required by applicable law or agreed to in writing, software
1116a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian** distributed under the License is distributed on an "AS IS" BASIS,
1216a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1316a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian** See the License for the specific language governing permissions and
1416a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian** limitations under the License.
1516a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian*/
1616a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian
1716a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian#include <stdlib.h>
1816a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian#include <stdio.h>
1916a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian
2016a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian#include <EGL/egl.h>
2116a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian
2216a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian#define ATTRIBUTE(_attr) { _attr, #_attr }
2316a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian
2416a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopianstruct Attribute {
2516a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian    EGLint attribute;
2616a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian    char const* name;
2716a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian};
2816a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian
2916a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias AgopianAttribute attributes[] = {
3016a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        ATTRIBUTE( EGL_BUFFER_SIZE ),
3116a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        ATTRIBUTE( EGL_ALPHA_SIZE ),
3216a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        ATTRIBUTE( EGL_BLUE_SIZE ),
3316a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        ATTRIBUTE( EGL_GREEN_SIZE ),
3416a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        ATTRIBUTE( EGL_RED_SIZE ),
3516a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        ATTRIBUTE( EGL_DEPTH_SIZE ),
3616a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        ATTRIBUTE( EGL_STENCIL_SIZE ),
3716a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        ATTRIBUTE( EGL_CONFIG_CAVEAT ),
3816a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        ATTRIBUTE( EGL_CONFIG_ID ),
3916a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        ATTRIBUTE( EGL_LEVEL ),
4016a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        ATTRIBUTE( EGL_MAX_PBUFFER_HEIGHT ),
4116a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        ATTRIBUTE( EGL_MAX_PBUFFER_WIDTH ),
4216a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        ATTRIBUTE( EGL_MAX_PBUFFER_PIXELS ),
4316a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        ATTRIBUTE( EGL_NATIVE_RENDERABLE ),
4416a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        ATTRIBUTE( EGL_NATIVE_VISUAL_ID ),
4516a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        ATTRIBUTE( EGL_NATIVE_VISUAL_TYPE ),
4616a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        ATTRIBUTE( EGL_SAMPLES ),
4716a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        ATTRIBUTE( EGL_SAMPLE_BUFFERS ),
4816a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        ATTRIBUTE( EGL_SURFACE_TYPE ),
4916a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        ATTRIBUTE( EGL_TRANSPARENT_TYPE ),
5016a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        ATTRIBUTE( EGL_TRANSPARENT_BLUE_VALUE ),
5116a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        ATTRIBUTE( EGL_TRANSPARENT_GREEN_VALUE ),
5216a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        ATTRIBUTE( EGL_TRANSPARENT_RED_VALUE ),
5316a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        ATTRIBUTE( EGL_BIND_TO_TEXTURE_RGB ),
5416a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        ATTRIBUTE( EGL_BIND_TO_TEXTURE_RGBA ),
5516a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        ATTRIBUTE( EGL_MIN_SWAP_INTERVAL ),
5616a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        ATTRIBUTE( EGL_MAX_SWAP_INTERVAL ),
5716a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        ATTRIBUTE( EGL_LUMINANCE_SIZE ),
5816a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        ATTRIBUTE( EGL_ALPHA_MASK_SIZE ),
5916a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        ATTRIBUTE( EGL_COLOR_BUFFER_TYPE ),
6016a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        ATTRIBUTE( EGL_RENDERABLE_TYPE ),
6116a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        ATTRIBUTE( EGL_MATCH_NATIVE_PIXMAP ),
6216a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        ATTRIBUTE( EGL_CONFORMANT ),
6316a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian};
6416a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian
6516a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian
6616a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopianint main(int argc, char** argv)
6716a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian{
6816a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian    EGLConfig* configs;
6916a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian    EGLint n;
7016a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian
7116a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian    EGLDisplay dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY);
7216a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian    eglInitialize(dpy, 0, 0);
7316a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian    eglGetConfigs(dpy, NULL, 0, &n);
7416a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian    configs = new EGLConfig[n];
7516a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian    eglGetConfigs(dpy, configs, n, &n);
7616a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian
7716a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian    for (EGLint i=0 ; i<n ; i++) {
7816a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        printf("EGLConfig[%d]\n", i);
7916a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        for (int attr = 0 ; attr<sizeof(attributes)/sizeof(Attribute) ; attr++) {
8016a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian            EGLint value;
8116a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian            eglGetConfigAttrib(dpy, configs[i], attributes[attr].attribute, &value);
8216a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian            printf("\t%-32s: %10d (0x%08x)\n", attributes[attr].name, value, value);
8316a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian        }
8416a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian    }
8516a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian
8616a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian    delete [] configs;
8716a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian    eglTerminate(dpy);
8816a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian    return 0;
8916a3e39cc007ebf7c7ee38d7464f99efed3e2574Mathias Agopian}
90