Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/angle
Path: blob/main_old/src/tests/egl_tests/EGLQueryContextTest.cpp
1693 views
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:
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_NONE};
36
EXPECT_TRUE(eglChooseConfig(mDisplay, cfgattrs, &mConfig, 1, &ncfg) != EGL_FALSE);
37
EXPECT_TRUE(ncfg == 1);
38
39
EGLint ctxattrs[] = {EGL_CONTEXT_CLIENT_VERSION, clientVersion, EGL_NONE};
40
mContext = eglCreateContext(mDisplay, mConfig, nullptr, ctxattrs);
41
EXPECT_TRUE(mContext != EGL_NO_CONTEXT);
42
43
EGLint surfaceType = EGL_NONE;
44
eglGetConfigAttrib(mDisplay, mConfig, EGL_SURFACE_TYPE, &surfaceType);
45
if (surfaceType & EGL_PBUFFER_BIT)
46
{
47
EGLint surfattrs[] = {EGL_WIDTH, 16, EGL_HEIGHT, 16, EGL_NONE};
48
mSurface = eglCreatePbufferSurface(mDisplay, mConfig, surfattrs);
49
EXPECT_TRUE(mSurface != EGL_NO_SURFACE);
50
}
51
}
52
53
void testTearDown() override
54
{
55
if (mDisplay != EGL_NO_DISPLAY)
56
{
57
eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
58
eglDestroyContext(mDisplay, mContext);
59
if (mSurface)
60
{
61
eglDestroySurface(mDisplay, mSurface);
62
}
63
eglTerminate(mDisplay);
64
}
65
ASSERT_EGL_SUCCESS() << "Error during test TearDown";
66
}
67
68
EGLDisplay mDisplay = EGL_NO_DISPLAY;
69
EGLConfig mConfig = EGL_NO_CONFIG_KHR;
70
EGLContext mContext = EGL_NO_CONTEXT;
71
EGLSurface mSurface = EGL_NO_SURFACE;
72
};
73
74
TEST_P(EGLQueryContextTest, GetConfigID)
75
{
76
EGLint configId, contextConfigId;
77
EXPECT_TRUE(eglGetConfigAttrib(mDisplay, mConfig, EGL_CONFIG_ID, &configId) != EGL_FALSE);
78
EXPECT_TRUE(eglQueryContext(mDisplay, mContext, EGL_CONFIG_ID, &contextConfigId) != EGL_FALSE);
79
EXPECT_TRUE(configId == contextConfigId);
80
}
81
82
TEST_P(EGLQueryContextTest, GetClientType)
83
{
84
EGLint clientType;
85
EXPECT_TRUE(eglQueryContext(mDisplay, mContext, EGL_CONTEXT_CLIENT_TYPE, &clientType) !=
86
EGL_FALSE);
87
EXPECT_TRUE(clientType == EGL_OPENGL_ES_API);
88
}
89
90
TEST_P(EGLQueryContextTest, GetClientVersion)
91
{
92
EGLint clientVersion;
93
EXPECT_TRUE(eglQueryContext(mDisplay, mContext, EGL_CONTEXT_CLIENT_VERSION, &clientVersion) !=
94
EGL_FALSE);
95
EXPECT_GE(clientVersion, GetParam().majorVersion);
96
}
97
98
TEST_P(EGLQueryContextTest, GetRenderBufferNoSurface)
99
{
100
EGLint renderBuffer;
101
EXPECT_TRUE(eglQueryContext(mDisplay, mContext, EGL_RENDER_BUFFER, &renderBuffer) != EGL_FALSE);
102
EXPECT_TRUE(renderBuffer == EGL_NONE);
103
}
104
105
TEST_P(EGLQueryContextTest, GetRenderBufferBoundSurface)
106
{
107
ANGLE_SKIP_TEST_IF(!mSurface);
108
109
EGLint renderBuffer, contextRenderBuffer;
110
EXPECT_TRUE(eglQuerySurface(mDisplay, mSurface, EGL_RENDER_BUFFER, &renderBuffer) != EGL_FALSE);
111
EXPECT_TRUE(eglMakeCurrent(mDisplay, mSurface, mSurface, mContext) != EGL_FALSE);
112
EXPECT_TRUE(eglQueryContext(mDisplay, mContext, EGL_RENDER_BUFFER, &contextRenderBuffer) !=
113
EGL_FALSE);
114
EXPECT_TRUE(renderBuffer == contextRenderBuffer);
115
ASSERT_EGL_SUCCESS();
116
}
117
118
TEST_P(EGLQueryContextTest, BadDisplay)
119
{
120
EGLint val;
121
EXPECT_TRUE(eglQueryContext(EGL_NO_DISPLAY, mContext, EGL_CONTEXT_CLIENT_TYPE, &val) ==
122
EGL_FALSE);
123
EXPECT_TRUE(eglGetError() == EGL_BAD_DISPLAY);
124
}
125
126
TEST_P(EGLQueryContextTest, NotInitialized)
127
{
128
EGLint val;
129
testTearDown();
130
EXPECT_TRUE(eglQueryContext(mDisplay, mContext, EGL_CONTEXT_CLIENT_TYPE, &val) == EGL_FALSE);
131
EXPECT_TRUE(eglGetError() == EGL_NOT_INITIALIZED);
132
133
mDisplay = EGL_NO_DISPLAY;
134
mSurface = EGL_NO_SURFACE;
135
mContext = EGL_NO_CONTEXT;
136
}
137
138
TEST_P(EGLQueryContextTest, BadContext)
139
{
140
EGLint val;
141
EXPECT_TRUE(eglQueryContext(mDisplay, EGL_NO_CONTEXT, EGL_CONTEXT_CLIENT_TYPE, &val) ==
142
EGL_FALSE);
143
EXPECT_TRUE(eglGetError() == EGL_BAD_CONTEXT);
144
}
145
146
TEST_P(EGLQueryContextTest, BadAttribute)
147
{
148
EGLint val;
149
EXPECT_TRUE(eglQueryContext(mDisplay, mContext, EGL_HEIGHT, &val) == EGL_FALSE);
150
EXPECT_TRUE(eglGetError() == EGL_BAD_ATTRIBUTE);
151
}
152
153
GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(EGLQueryContextTest);
154
ANGLE_INSTANTIATE_TEST(EGLQueryContextTest,
155
WithNoFixture(ES2_D3D9()),
156
WithNoFixture(ES2_D3D11()),
157
WithNoFixture(ES2_OPENGL()),
158
WithNoFixture(ES2_VULKAN()),
159
WithNoFixture(ES3_D3D11()),
160
WithNoFixture(ES3_OPENGL()));
161
162