• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright 2015 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 
7 #include <gtest/gtest.h>
8 
9 #include "test_utils/ANGLETest.h"
10 
11 using namespace angle;
12 
13 class EGLQueryContextTest : public ANGLETest
14 {
15   public:
testSetUp()16     void testSetUp() override
17     {
18         int clientVersion = GetParam().majorVersion;
19 
20         EGLint dispattrs[] = {EGL_PLATFORM_ANGLE_TYPE_ANGLE, GetParam().getRenderer(), EGL_NONE};
21         mDisplay           = eglGetPlatformDisplayEXT(
22             EGL_PLATFORM_ANGLE_ANGLE, reinterpret_cast<void *>(EGL_DEFAULT_DISPLAY), dispattrs);
23         EXPECT_TRUE(mDisplay != EGL_NO_DISPLAY);
24         EXPECT_TRUE(eglInitialize(mDisplay, nullptr, nullptr) != EGL_FALSE);
25 
26         EGLint ncfg;
27         EGLint cfgattrs[] = {EGL_RED_SIZE,
28                              8,
29                              EGL_GREEN_SIZE,
30                              8,
31                              EGL_BLUE_SIZE,
32                              8,
33                              EGL_RENDERABLE_TYPE,
34                              clientVersion == 3 ? EGL_OPENGL_ES3_BIT : EGL_OPENGL_ES2_BIT,
35                              EGL_SURFACE_TYPE,
36                              EGL_PBUFFER_BIT,
37                              EGL_NONE};
38         EXPECT_TRUE(eglChooseConfig(mDisplay, cfgattrs, &mConfig, 1, &ncfg) != EGL_FALSE);
39         EXPECT_TRUE(ncfg == 1);
40 
41         EGLint ctxattrs[] = {EGL_CONTEXT_CLIENT_VERSION, clientVersion, EGL_NONE};
42         mContext          = eglCreateContext(mDisplay, mConfig, nullptr, ctxattrs);
43         EXPECT_TRUE(mContext != EGL_NO_CONTEXT);
44 
45         EGLint surfattrs[] = {EGL_WIDTH, 16, EGL_HEIGHT, 16, EGL_NONE};
46         mSurface           = eglCreatePbufferSurface(mDisplay, mConfig, surfattrs);
47         EXPECT_TRUE(mSurface != EGL_NO_SURFACE);
48     }
49 
testTearDown()50     void testTearDown() override
51     {
52         if (mDisplay != EGL_NO_DISPLAY)
53         {
54             eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
55             eglDestroyContext(mDisplay, mContext);
56             eglDestroySurface(mDisplay, mSurface);
57             eglTerminate(mDisplay);
58         }
59         ASSERT_EGL_SUCCESS() << "Error during test TearDown";
60     }
61 
62     EGLDisplay mDisplay;
63     EGLConfig mConfig;
64     EGLContext mContext;
65     EGLSurface mSurface;
66 };
67 
TEST_P(EGLQueryContextTest,GetConfigID)68 TEST_P(EGLQueryContextTest, GetConfigID)
69 {
70     EGLint configId, contextConfigId;
71     EXPECT_TRUE(eglGetConfigAttrib(mDisplay, mConfig, EGL_CONFIG_ID, &configId) != EGL_FALSE);
72     EXPECT_TRUE(eglQueryContext(mDisplay, mContext, EGL_CONFIG_ID, &contextConfigId) != EGL_FALSE);
73     EXPECT_TRUE(configId == contextConfigId);
74 }
75 
TEST_P(EGLQueryContextTest,GetClientType)76 TEST_P(EGLQueryContextTest, GetClientType)
77 {
78     EGLint clientType;
79     EXPECT_TRUE(eglQueryContext(mDisplay, mContext, EGL_CONTEXT_CLIENT_TYPE, &clientType) !=
80                 EGL_FALSE);
81     EXPECT_TRUE(clientType == EGL_OPENGL_ES_API);
82 }
83 
TEST_P(EGLQueryContextTest,GetClientVersion)84 TEST_P(EGLQueryContextTest, GetClientVersion)
85 {
86     EGLint clientVersion;
87     EXPECT_TRUE(eglQueryContext(mDisplay, mContext, EGL_CONTEXT_CLIENT_VERSION, &clientVersion) !=
88                 EGL_FALSE);
89     EXPECT_GE(clientVersion, GetParam().majorVersion);
90 }
91 
TEST_P(EGLQueryContextTest,GetRenderBufferNoSurface)92 TEST_P(EGLQueryContextTest, GetRenderBufferNoSurface)
93 {
94     EGLint renderBuffer;
95     EXPECT_TRUE(eglQueryContext(mDisplay, mContext, EGL_RENDER_BUFFER, &renderBuffer) != EGL_FALSE);
96     EXPECT_TRUE(renderBuffer == EGL_NONE);
97 }
98 
TEST_P(EGLQueryContextTest,GetRenderBufferBoundSurface)99 TEST_P(EGLQueryContextTest, GetRenderBufferBoundSurface)
100 {
101     EGLint renderBuffer, contextRenderBuffer;
102     EXPECT_TRUE(eglQuerySurface(mDisplay, mSurface, EGL_RENDER_BUFFER, &renderBuffer) != EGL_FALSE);
103     EXPECT_TRUE(eglMakeCurrent(mDisplay, mSurface, mSurface, mContext) != EGL_FALSE);
104     EXPECT_TRUE(eglQueryContext(mDisplay, mContext, EGL_RENDER_BUFFER, &contextRenderBuffer) !=
105                 EGL_FALSE);
106     EXPECT_TRUE(renderBuffer == contextRenderBuffer);
107     ASSERT_EGL_SUCCESS();
108 }
109 
TEST_P(EGLQueryContextTest,BadDisplay)110 TEST_P(EGLQueryContextTest, BadDisplay)
111 {
112     EGLint val;
113     EXPECT_TRUE(eglQueryContext(EGL_NO_DISPLAY, mContext, EGL_CONTEXT_CLIENT_TYPE, &val) ==
114                 EGL_FALSE);
115     EXPECT_TRUE(eglGetError() == EGL_BAD_DISPLAY);
116 }
117 
TEST_P(EGLQueryContextTest,NotInitialized)118 TEST_P(EGLQueryContextTest, NotInitialized)
119 {
120     EGLint val;
121     testTearDown();
122     EXPECT_TRUE(eglQueryContext(mDisplay, mContext, EGL_CONTEXT_CLIENT_TYPE, &val) == EGL_FALSE);
123     EXPECT_TRUE(eglGetError() == EGL_NOT_INITIALIZED);
124 
125     mDisplay = EGL_NO_DISPLAY;
126     mSurface = EGL_NO_SURFACE;
127     mContext = EGL_NO_CONTEXT;
128 }
129 
TEST_P(EGLQueryContextTest,BadContext)130 TEST_P(EGLQueryContextTest, BadContext)
131 {
132     EGLint val;
133     EXPECT_TRUE(eglQueryContext(mDisplay, EGL_NO_CONTEXT, EGL_CONTEXT_CLIENT_TYPE, &val) ==
134                 EGL_FALSE);
135     EXPECT_TRUE(eglGetError() == EGL_BAD_CONTEXT);
136 }
137 
TEST_P(EGLQueryContextTest,BadAttribute)138 TEST_P(EGLQueryContextTest, BadAttribute)
139 {
140     EGLint val;
141     EXPECT_TRUE(eglQueryContext(mDisplay, mContext, EGL_HEIGHT, &val) == EGL_FALSE);
142     EXPECT_TRUE(eglGetError() == EGL_BAD_ATTRIBUTE);
143 }
144 
145 ANGLE_INSTANTIATE_TEST(EGLQueryContextTest,
146                        WithNoFixture(ES2_D3D9()),
147                        WithNoFixture(ES2_D3D11()),
148                        WithNoFixture(ES2_OPENGL()),
149                        WithNoFixture(ES2_VULKAN()),
150                        WithNoFixture(ES3_D3D11()),
151                        WithNoFixture(ES3_OPENGL()));
152