Edit

kc3-lang/angle/src/tests/egl_tests/EGLQueryContextTest.cpp

Branch :

  • Show log

    Commit

  • Author : Yuly Novikov
    Date : 2021-02-20 16:14:37
    Hash : c03a4235
    Message : Suppress UNINSTANTIATED_PARAMETERIZED_TEST failures on Nexus 5X GTest complains that we don't run some tests on GLES backend. Bug: chromium:1180570 Change-Id: I9427ac25c3b6f06f3c042caa3c0afc7000cf1599 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2710783 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>

  • src/tests/egl_tests/EGLQueryContextTest.cpp
  • //
    // Copyright 2015 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.
    //
    
    #include <gtest/gtest.h>
    
    #include "test_utils/ANGLETest.h"
    
    using namespace angle;
    
    class EGLQueryContextTest : public ANGLETest
    {
      public:
        void testSetUp() override
        {
            int clientVersion = GetParam().majorVersion;
    
            EGLint dispattrs[] = {EGL_PLATFORM_ANGLE_TYPE_ANGLE, GetParam().getRenderer(), EGL_NONE};
            mDisplay           = eglGetPlatformDisplayEXT(
                EGL_PLATFORM_ANGLE_ANGLE, reinterpret_cast<void *>(EGL_DEFAULT_DISPLAY), dispattrs);
            EXPECT_TRUE(mDisplay != EGL_NO_DISPLAY);
            EXPECT_TRUE(eglInitialize(mDisplay, nullptr, nullptr) != EGL_FALSE);
    
            EGLint ncfg;
            EGLint cfgattrs[] = {EGL_RED_SIZE,
                                 8,
                                 EGL_GREEN_SIZE,
                                 8,
                                 EGL_BLUE_SIZE,
                                 8,
                                 EGL_RENDERABLE_TYPE,
                                 clientVersion == 3 ? EGL_OPENGL_ES3_BIT : EGL_OPENGL_ES2_BIT,
                                 EGL_NONE};
            EXPECT_TRUE(eglChooseConfig(mDisplay, cfgattrs, &mConfig, 1, &ncfg) != EGL_FALSE);
            EXPECT_TRUE(ncfg == 1);
    
            EGLint ctxattrs[] = {EGL_CONTEXT_CLIENT_VERSION, clientVersion, EGL_NONE};
            mContext          = eglCreateContext(mDisplay, mConfig, nullptr, ctxattrs);
            EXPECT_TRUE(mContext != EGL_NO_CONTEXT);
    
            EGLint surfaceType = EGL_NONE;
            eglGetConfigAttrib(mDisplay, mConfig, EGL_SURFACE_TYPE, &surfaceType);
            if (surfaceType & EGL_PBUFFER_BIT)
            {
                EGLint surfattrs[] = {EGL_WIDTH, 16, EGL_HEIGHT, 16, EGL_NONE};
                mSurface           = eglCreatePbufferSurface(mDisplay, mConfig, surfattrs);
                EXPECT_TRUE(mSurface != EGL_NO_SURFACE);
            }
        }
    
        void testTearDown() override
        {
            if (mDisplay != EGL_NO_DISPLAY)
            {
                eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
                eglDestroyContext(mDisplay, mContext);
                if (mSurface)
                {
                    eglDestroySurface(mDisplay, mSurface);
                }
                eglTerminate(mDisplay);
            }
            ASSERT_EGL_SUCCESS() << "Error during test TearDown";
        }
    
        EGLDisplay mDisplay = EGL_NO_DISPLAY;
        EGLConfig mConfig   = EGL_NO_CONFIG_KHR;
        EGLContext mContext = EGL_NO_CONTEXT;
        EGLSurface mSurface = EGL_NO_SURFACE;
    };
    
    TEST_P(EGLQueryContextTest, GetConfigID)
    {
        EGLint configId, contextConfigId;
        EXPECT_TRUE(eglGetConfigAttrib(mDisplay, mConfig, EGL_CONFIG_ID, &configId) != EGL_FALSE);
        EXPECT_TRUE(eglQueryContext(mDisplay, mContext, EGL_CONFIG_ID, &contextConfigId) != EGL_FALSE);
        EXPECT_TRUE(configId == contextConfigId);
    }
    
    TEST_P(EGLQueryContextTest, GetClientType)
    {
        EGLint clientType;
        EXPECT_TRUE(eglQueryContext(mDisplay, mContext, EGL_CONTEXT_CLIENT_TYPE, &clientType) !=
                    EGL_FALSE);
        EXPECT_TRUE(clientType == EGL_OPENGL_ES_API);
    }
    
    TEST_P(EGLQueryContextTest, GetClientVersion)
    {
        EGLint clientVersion;
        EXPECT_TRUE(eglQueryContext(mDisplay, mContext, EGL_CONTEXT_CLIENT_VERSION, &clientVersion) !=
                    EGL_FALSE);
        EXPECT_GE(clientVersion, GetParam().majorVersion);
    }
    
    TEST_P(EGLQueryContextTest, GetRenderBufferNoSurface)
    {
        EGLint renderBuffer;
        EXPECT_TRUE(eglQueryContext(mDisplay, mContext, EGL_RENDER_BUFFER, &renderBuffer) != EGL_FALSE);
        EXPECT_TRUE(renderBuffer == EGL_NONE);
    }
    
    TEST_P(EGLQueryContextTest, GetRenderBufferBoundSurface)
    {
        ANGLE_SKIP_TEST_IF(!mSurface);
    
        EGLint renderBuffer, contextRenderBuffer;
        EXPECT_TRUE(eglQuerySurface(mDisplay, mSurface, EGL_RENDER_BUFFER, &renderBuffer) != EGL_FALSE);
        EXPECT_TRUE(eglMakeCurrent(mDisplay, mSurface, mSurface, mContext) != EGL_FALSE);
        EXPECT_TRUE(eglQueryContext(mDisplay, mContext, EGL_RENDER_BUFFER, &contextRenderBuffer) !=
                    EGL_FALSE);
        EXPECT_TRUE(renderBuffer == contextRenderBuffer);
        ASSERT_EGL_SUCCESS();
    }
    
    TEST_P(EGLQueryContextTest, BadDisplay)
    {
        EGLint val;
        EXPECT_TRUE(eglQueryContext(EGL_NO_DISPLAY, mContext, EGL_CONTEXT_CLIENT_TYPE, &val) ==
                    EGL_FALSE);
        EXPECT_TRUE(eglGetError() == EGL_BAD_DISPLAY);
    }
    
    TEST_P(EGLQueryContextTest, NotInitialized)
    {
        EGLint val;
        testTearDown();
        EXPECT_TRUE(eglQueryContext(mDisplay, mContext, EGL_CONTEXT_CLIENT_TYPE, &val) == EGL_FALSE);
        EXPECT_TRUE(eglGetError() == EGL_NOT_INITIALIZED);
    
        mDisplay = EGL_NO_DISPLAY;
        mSurface = EGL_NO_SURFACE;
        mContext = EGL_NO_CONTEXT;
    }
    
    TEST_P(EGLQueryContextTest, BadContext)
    {
        EGLint val;
        EXPECT_TRUE(eglQueryContext(mDisplay, EGL_NO_CONTEXT, EGL_CONTEXT_CLIENT_TYPE, &val) ==
                    EGL_FALSE);
        EXPECT_TRUE(eglGetError() == EGL_BAD_CONTEXT);
    }
    
    TEST_P(EGLQueryContextTest, BadAttribute)
    {
        EGLint val;
        EXPECT_TRUE(eglQueryContext(mDisplay, mContext, EGL_HEIGHT, &val) == EGL_FALSE);
        EXPECT_TRUE(eglGetError() == EGL_BAD_ATTRIBUTE);
    }
    
    GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(EGLQueryContextTest);
    ANGLE_INSTANTIATE_TEST(EGLQueryContextTest,
                           WithNoFixture(ES2_D3D9()),
                           WithNoFixture(ES2_D3D11()),
                           WithNoFixture(ES2_OPENGL()),
                           WithNoFixture(ES2_VULKAN()),
                           WithNoFixture(ES3_D3D11()),
                           WithNoFixture(ES3_OPENGL()));