Edit

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

Branch :

  • Show log

    Commit

  • Author : Kenneth Russell
    Date : 2019-10-04 18:19:32
    Hash : 8e7d9d6c
    Message : Add EGL_ANGLE_device_cgl extension. Supports querying the CGLContextObj and CGLPixelFormatObj associated with ANGLE's underlying OpenGL context on macOS. Minor refactorings to implementation of device attribute queries on all platforms. Bug: angleproject:3973 Change-Id: I24341668be4cbfed0b7f2df4c1402df1effe275e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1846733 Commit-Queue: Kenneth Russell <kbr@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>

  • src/tests/egl_tests/EGLDeviceCGLTest.cpp
  • //
    // Copyright 2019 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.
    //
    //    EGLDeviceCGLTest.cpp: tests for the EGL_ANGLE_device_cgl extension.
    //
    
    #include "test_utils/ANGLETest.h"
    #include "util/EGLWindow.h"
    #include "util/OSWindow.h"
    #include "util/gles_loader_autogen.h"
    
    using namespace angle;
    
    class EGLDeviceCGLQueryTest : public ANGLETest
    {
      protected:
        EGLDeviceCGLQueryTest() {}
    
        void testSetUp() override
        {
            const char *extensionString =
                static_cast<const char *>(eglQueryString(getEGLWindow()->getDisplay(), EGL_EXTENSIONS));
    
            if (!eglQueryDeviceStringEXT)
            {
                FAIL() << "ANGLE extension EGL_EXT_device_query export eglQueryDeviceStringEXT was not "
                          "found";
            }
    
            if (!eglQueryDisplayAttribEXT)
            {
                FAIL() << "ANGLE extension EGL_EXT_device_query export eglQueryDisplayAttribEXT was "
                          "not found";
            }
    
            if (!eglQueryDeviceAttribEXT)
            {
                FAIL() << "ANGLE extension EGL_EXT_device_query export eglQueryDeviceAttribEXT was not "
                          "found";
            }
    
            EGLAttrib angleDevice = 0;
            EXPECT_EGL_TRUE(
                eglQueryDisplayAttribEXT(getEGLWindow()->getDisplay(), EGL_DEVICE_EXT, &angleDevice));
            extensionString = static_cast<const char *>(
                eglQueryDeviceStringEXT(reinterpret_cast<EGLDeviceEXT>(angleDevice), EGL_EXTENSIONS));
            if (strstr(extensionString, "EGL_ANGLE_device_cgl") == nullptr)
            {
                FAIL() << "ANGLE extension EGL_ANGLE_device_cgl was not found";
            }
        }
    };
    
    // This test attempts to query the CGLContextObj and CGLPixelFormatObj from the
    // EGLDevice associated with the display.
    TEST_P(EGLDeviceCGLQueryTest, QueryDevice)
    {
        EGLAttrib angleDevice = 0;
        EXPECT_EGL_TRUE(
            eglQueryDisplayAttribEXT(getEGLWindow()->getDisplay(), EGL_DEVICE_EXT, &angleDevice));
        EGLAttrib contextAttrib     = 0;
        EGLAttrib pixelFormatAttrib = 0;
        EXPECT_EGL_TRUE(eglQueryDeviceAttribEXT(reinterpret_cast<EGLDeviceEXT>(angleDevice),
                                                EGL_CGL_CONTEXT_ANGLE, &contextAttrib));
        EXPECT_TRUE(contextAttrib != 0);
        EXPECT_EGL_TRUE(eglQueryDeviceAttribEXT(reinterpret_cast<EGLDeviceEXT>(angleDevice),
                                                EGL_CGL_PIXEL_FORMAT_ANGLE, &pixelFormatAttrib));
        EXPECT_TRUE(pixelFormatAttrib != 0);
    }
    
    // Use this to select which configurations (e.g. which renderer, which GLES major version) these
    // tests should be run against.
    ANGLE_INSTANTIATE_TEST(EGLDeviceCGLQueryTest, ES2_OPENGL(), ES3_OPENGL());