xref: /aosp_15_r20/external/angle/src/tests/gl_tests/RequestExtensionTest.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2018 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 // RequestExtensionTest:
7*8975f5c5SAndroid Build Coastguard Worker //   Tests that extensions can be requested and are disabled by default when using
8*8975f5c5SAndroid Build Coastguard Worker //   EGL_ANGLE_request_extension
9*8975f5c5SAndroid Build Coastguard Worker //
10*8975f5c5SAndroid Build Coastguard Worker 
11*8975f5c5SAndroid Build Coastguard Worker #include "test_utils/ANGLETest.h"
12*8975f5c5SAndroid Build Coastguard Worker 
13*8975f5c5SAndroid Build Coastguard Worker #include "util/EGLWindow.h"
14*8975f5c5SAndroid Build Coastguard Worker 
15*8975f5c5SAndroid Build Coastguard Worker namespace angle
16*8975f5c5SAndroid Build Coastguard Worker {
17*8975f5c5SAndroid Build Coastguard Worker 
18*8975f5c5SAndroid Build Coastguard Worker class RequestExtensionTest : public ANGLETest<>
19*8975f5c5SAndroid Build Coastguard Worker {
20*8975f5c5SAndroid Build Coastguard Worker   protected:
RequestExtensionTest()21*8975f5c5SAndroid Build Coastguard Worker     RequestExtensionTest() { setExtensionsEnabled(false); }
22*8975f5c5SAndroid Build Coastguard Worker };
23*8975f5c5SAndroid Build Coastguard Worker 
24*8975f5c5SAndroid Build Coastguard Worker // Test that a known requestable extension is disabled by default and make sure it can be requested
25*8975f5c5SAndroid Build Coastguard Worker // if possible
TEST_P(RequestExtensionTest,ExtensionsDisabledByDefault)26*8975f5c5SAndroid Build Coastguard Worker TEST_P(RequestExtensionTest, ExtensionsDisabledByDefault)
27*8975f5c5SAndroid Build Coastguard Worker {
28*8975f5c5SAndroid Build Coastguard Worker     EXPECT_TRUE(IsEGLDisplayExtensionEnabled(getEGLWindow()->getDisplay(),
29*8975f5c5SAndroid Build Coastguard Worker                                              "EGL_ANGLE_create_context_extensions_enabled"));
30*8975f5c5SAndroid Build Coastguard Worker     EXPECT_FALSE(IsGLExtensionEnabled("GL_OES_rgb8_rgba8"));
31*8975f5c5SAndroid Build Coastguard Worker 
32*8975f5c5SAndroid Build Coastguard Worker     if (IsGLExtensionRequestable("GL_OES_rgb8_rgba8"))
33*8975f5c5SAndroid Build Coastguard Worker     {
34*8975f5c5SAndroid Build Coastguard Worker         glRequestExtensionANGLE("GL_OES_rgb8_rgba8");
35*8975f5c5SAndroid Build Coastguard Worker         EXPECT_TRUE(IsGLExtensionEnabled("GL_OES_rgb8_rgba8"));
36*8975f5c5SAndroid Build Coastguard Worker     }
37*8975f5c5SAndroid Build Coastguard Worker }
38*8975f5c5SAndroid Build Coastguard Worker 
39*8975f5c5SAndroid Build Coastguard Worker // Test the queries for the requestable extension strings
TEST_P(RequestExtensionTest,Queries)40*8975f5c5SAndroid Build Coastguard Worker TEST_P(RequestExtensionTest, Queries)
41*8975f5c5SAndroid Build Coastguard Worker {
42*8975f5c5SAndroid Build Coastguard Worker     ANGLE_SKIP_TEST_IF(!IsGLExtensionEnabled("GL_ANGLE_request_extension"));
43*8975f5c5SAndroid Build Coastguard Worker 
44*8975f5c5SAndroid Build Coastguard Worker     const GLubyte *requestableExtString = glGetString(GL_REQUESTABLE_EXTENSIONS_ANGLE);
45*8975f5c5SAndroid Build Coastguard Worker     EXPECT_GL_NO_ERROR();
46*8975f5c5SAndroid Build Coastguard Worker     EXPECT_NE(nullptr, requestableExtString);
47*8975f5c5SAndroid Build Coastguard Worker 
48*8975f5c5SAndroid Build Coastguard Worker     if (getClientMajorVersion() >= 3)
49*8975f5c5SAndroid Build Coastguard Worker     {
50*8975f5c5SAndroid Build Coastguard Worker         GLint numExtensions = 0;
51*8975f5c5SAndroid Build Coastguard Worker         glGetIntegerv(GL_NUM_REQUESTABLE_EXTENSIONS_ANGLE, &numExtensions);
52*8975f5c5SAndroid Build Coastguard Worker         EXPECT_GL_NO_ERROR();
53*8975f5c5SAndroid Build Coastguard Worker 
54*8975f5c5SAndroid Build Coastguard Worker         for (GLint extIdx = 0; extIdx < numExtensions; extIdx++)
55*8975f5c5SAndroid Build Coastguard Worker         {
56*8975f5c5SAndroid Build Coastguard Worker             const GLubyte *requestableExtIndexedString =
57*8975f5c5SAndroid Build Coastguard Worker                 glGetStringi(GL_REQUESTABLE_EXTENSIONS_ANGLE, extIdx);
58*8975f5c5SAndroid Build Coastguard Worker             EXPECT_GL_NO_ERROR();
59*8975f5c5SAndroid Build Coastguard Worker             EXPECT_NE(nullptr, requestableExtIndexedString);
60*8975f5c5SAndroid Build Coastguard Worker         }
61*8975f5c5SAndroid Build Coastguard Worker 
62*8975f5c5SAndroid Build Coastguard Worker         // Request beyond the end of the array
63*8975f5c5SAndroid Build Coastguard Worker         const GLubyte *requestableExtIndexedString =
64*8975f5c5SAndroid Build Coastguard Worker             glGetStringi(GL_REQUESTABLE_EXTENSIONS_ANGLE, numExtensions);
65*8975f5c5SAndroid Build Coastguard Worker         EXPECT_GL_ERROR(GL_INVALID_VALUE);
66*8975f5c5SAndroid Build Coastguard Worker         EXPECT_EQ(nullptr, requestableExtIndexedString);
67*8975f5c5SAndroid Build Coastguard Worker     }
68*8975f5c5SAndroid Build Coastguard Worker }
69*8975f5c5SAndroid Build Coastguard Worker 
70*8975f5c5SAndroid Build Coastguard Worker // Use this to select which configurations (e.g. which renderer, which GLES major version) these
71*8975f5c5SAndroid Build Coastguard Worker // tests should be run against.
72*8975f5c5SAndroid Build Coastguard Worker ANGLE_INSTANTIATE_TEST_ES2_AND_ES3(RequestExtensionTest);
73*8975f5c5SAndroid Build Coastguard Worker 
74*8975f5c5SAndroid Build Coastguard Worker }  // namespace angle
75