| // | |
| // Copyright 2018 The ANGLE Project Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| // | |
| // RequestExtensionTest: | |
| // Tests that extensions can be requested and are disabled by default when using | |
| // EGL_ANGLE_request_extension | |
| // | |
| #include "test_utils/ANGLETest.h" | |
| #include "util/EGLWindow.h" | |
| namespace angle | |
| { | |
| class RequestExtensionTest : public ANGLETest | |
| { | |
| protected: | |
| RequestExtensionTest() { setExtensionsEnabled(false); } | |
| }; | |
| // Test that a known requestable extension is disabled by default and make sure it can be requested | |
| // if possible | |
| TEST_P(RequestExtensionTest, ExtensionsDisabledByDefault) | |
| { | |
| EXPECT_TRUE(IsEGLDisplayExtensionEnabled(getEGLWindow()->getDisplay(), | |
| "EGL_ANGLE_create_context_extensions_enabled")); | |
| EXPECT_FALSE(IsGLExtensionEnabled("GL_OES_rgb8_rgba8")); | |
| if (IsGLExtensionRequestable("GL_OES_rgb8_rgba8")) | |
| { | |
| glRequestExtensionANGLE("GL_OES_rgb8_rgba8"); | |
| EXPECT_TRUE(IsGLExtensionEnabled("GL_OES_rgb8_rgba8")); | |
| } | |
| } | |
| // Test the queries for the requestable extension strings | |
| TEST_P(RequestExtensionTest, Queries) | |
| { | |
| ANGLE_SKIP_TEST_IF(!IsGLExtensionEnabled("GL_ANGLE_request_extension")); | |
| const GLubyte *requestableExtString = glGetString(GL_REQUESTABLE_EXTENSIONS_ANGLE); | |
| EXPECT_GL_NO_ERROR(); | |
| EXPECT_NE(nullptr, requestableExtString); | |
| if (getClientMajorVersion() >= 3) | |
| { | |
| GLint numExtensions = 0; | |
| glGetIntegerv(GL_NUM_REQUESTABLE_EXTENSIONS_ANGLE, &numExtensions); | |
| EXPECT_GL_NO_ERROR(); | |
| for (GLint extIdx = 0; extIdx < numExtensions; extIdx++) | |
| { | |
| const GLubyte *requestableExtIndexedString = | |
| glGetStringi(GL_REQUESTABLE_EXTENSIONS_ANGLE, extIdx); | |
| EXPECT_GL_NO_ERROR(); | |
| EXPECT_NE(nullptr, requestableExtIndexedString); | |
| } | |
| // Request beyond the end of the array | |
| const GLubyte *requestableExtIndexedString = | |
| glGetStringi(GL_REQUESTABLE_EXTENSIONS_ANGLE, numExtensions); | |
| EXPECT_GL_ERROR(GL_INVALID_VALUE); | |
| EXPECT_EQ(nullptr, requestableExtIndexedString); | |
| } | |
| } | |
| // Use this to select which configurations (e.g. which renderer, which GLES major version) these | |
| // tests should be run against. | |
| ANGLE_INSTANTIATE_TEST_ES2_AND_ES3(RequestExtensionTest); | |
| } // namespace angle |