EGL_test.cpp revision 2adaf04fab35cf47c824d74d901b54094e01ccd3
1/*
2 * Copyright (C) 2011 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#include <gtest/gtest.h>
18
19#include <utils/String8.h>
20
21#include <EGL/egl.h>
22#include <gui/SurfaceTextureClient.h>
23#include <gui/DummyConsumer.h>
24
25
26namespace android {
27
28class EGLTest : public ::testing::Test {
29protected:
30    EGLDisplay mEglDisplay;
31
32protected:
33    EGLTest() :
34            mEglDisplay(EGL_NO_DISPLAY) {
35    }
36
37    virtual void SetUp() {
38        mEglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
39        ASSERT_NE(EGL_NO_DISPLAY, mEglDisplay);
40        ASSERT_EQ(EGL_SUCCESS, eglGetError());
41
42        EGLint majorVersion;
43        EGLint minorVersion;
44        EXPECT_TRUE(eglInitialize(mEglDisplay, &majorVersion, &minorVersion));
45        ASSERT_EQ(EGL_SUCCESS, eglGetError());
46        RecordProperty("EglVersionMajor", majorVersion);
47        RecordProperty("EglVersionMajor", minorVersion);
48    }
49
50    virtual void TearDown() {
51        EGLBoolean success = eglTerminate(mEglDisplay);
52        ASSERT_EQ(EGL_TRUE, success);
53        ASSERT_EQ(EGL_SUCCESS, eglGetError());
54    }
55};
56
57TEST_F(EGLTest, DISABLED_EGLConfigEightBitFirst) {
58
59    EGLint numConfigs;
60    EGLConfig config;
61    EGLBoolean success;
62    EGLint attrs[] = {
63            EGL_SURFACE_TYPE,       EGL_WINDOW_BIT,
64            EGL_RENDERABLE_TYPE,    EGL_OPENGL_ES2_BIT,
65            EGL_NONE
66    };
67
68    success = eglChooseConfig(mEglDisplay, attrs, &config, 1, &numConfigs);
69    ASSERT_EQ(EGL_TRUE, success);
70    ASSERT_EQ(EGL_SUCCESS, eglGetError());
71    ASSERT_GE(numConfigs, 1);
72
73    EGLint components[3];
74
75    success = eglGetConfigAttrib(mEglDisplay, config, EGL_RED_SIZE, &components[0]);
76    ASSERT_EQ(EGL_TRUE, success);
77    ASSERT_EQ(EGL_SUCCESS, eglGetError());
78    success = eglGetConfigAttrib(mEglDisplay, config, EGL_GREEN_SIZE, &components[1]);
79    ASSERT_EQ(EGL_TRUE, success);
80    ASSERT_EQ(EGL_SUCCESS, eglGetError());
81    success = eglGetConfigAttrib(mEglDisplay, config, EGL_BLUE_SIZE, &components[2]);
82    ASSERT_EQ(EGL_TRUE, success);
83    ASSERT_EQ(EGL_SUCCESS, eglGetError());
84
85    EXPECT_GE(components[0], 8);
86    EXPECT_GE(components[1], 8);
87    EXPECT_GE(components[2], 8);
88}
89
90TEST_F(EGLTest, EGLTerminateSucceedsWithRemainingObjects) {
91    EGLint numConfigs;
92    EGLConfig config;
93    EGLint attrs[] = {
94        EGL_SURFACE_TYPE,       EGL_WINDOW_BIT,
95        EGL_RENDERABLE_TYPE,    EGL_OPENGL_ES2_BIT,
96        EGL_RED_SIZE,           8,
97        EGL_GREEN_SIZE,         8,
98        EGL_BLUE_SIZE,          8,
99        EGL_ALPHA_SIZE,         8,
100        EGL_NONE
101    };
102    EXPECT_TRUE(eglChooseConfig(mEglDisplay, attrs, &config, 1, &numConfigs));
103
104    // Create a EGLSurface
105    sp<BufferQueue> bq = new BufferQueue();
106    bq->consumerConnect(new DummyConsumer());
107    sp<SurfaceTextureClient> mSTC = new SurfaceTextureClient(static_cast<sp<IGraphicBufferProducer> >( bq));
108    sp<ANativeWindow> mANW = mSTC;
109
110    EGLSurface eglSurface = eglCreateWindowSurface(mEglDisplay, config,
111                                mANW.get(), NULL);
112    ASSERT_EQ(EGL_SUCCESS, eglGetError());
113    ASSERT_NE(EGL_NO_SURFACE, eglSurface) ;
114
115    // do not destroy eglSurface
116    // eglTerminate is called in the tear down and should destroy it for us
117}
118
119TEST_F(EGLTest, EGLConfigRGBA8888First) {
120
121    EGLint numConfigs;
122    EGLConfig config;
123    EGLBoolean success;
124    EGLint attrs[] = {
125            EGL_SURFACE_TYPE,       EGL_WINDOW_BIT,
126            EGL_RENDERABLE_TYPE,    EGL_OPENGL_ES2_BIT,
127            EGL_RED_SIZE,           8,
128            EGL_GREEN_SIZE,         8,
129            EGL_BLUE_SIZE,          8,
130            EGL_ALPHA_SIZE,         8,
131            EGL_NONE
132    };
133
134    success = eglChooseConfig(mEglDisplay, attrs, &config, 1, &numConfigs);
135    ASSERT_EQ(EGL_TRUE, success);
136    ASSERT_EQ(EGL_SUCCESS, eglGetError());
137    ASSERT_GE(numConfigs, 1);
138
139    EGLint components[4];
140
141    success = eglGetConfigAttrib(mEglDisplay, config, EGL_RED_SIZE, &components[0]);
142    ASSERT_EQ(EGL_TRUE, success);
143    ASSERT_EQ(EGL_SUCCESS, eglGetError());
144    success = eglGetConfigAttrib(mEglDisplay, config, EGL_GREEN_SIZE, &components[1]);
145    ASSERT_EQ(EGL_TRUE, success);
146    ASSERT_EQ(EGL_SUCCESS, eglGetError());
147    success = eglGetConfigAttrib(mEglDisplay, config, EGL_BLUE_SIZE, &components[2]);
148    ASSERT_EQ(EGL_TRUE, success);
149    ASSERT_EQ(EGL_SUCCESS, eglGetError());
150    success = eglGetConfigAttrib(mEglDisplay, config, EGL_ALPHA_SIZE, &components[3]);
151    ASSERT_EQ(EGL_TRUE, success);
152    ASSERT_EQ(EGL_SUCCESS, eglGetError());
153
154    EXPECT_GE(components[0], 8);
155    EXPECT_GE(components[1], 8);
156    EXPECT_GE(components[2], 8);
157    EXPECT_GE(components[3], 8);
158}
159
160
161}
162