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