1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2019 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 // EGLDeviceCGLTest.cpp: tests for the EGL_ANGLE_device_cgl extension.
7*8975f5c5SAndroid Build Coastguard Worker //
8*8975f5c5SAndroid Build Coastguard Worker
9*8975f5c5SAndroid Build Coastguard Worker #include "test_utils/ANGLETest.h"
10*8975f5c5SAndroid Build Coastguard Worker #include "util/EGLWindow.h"
11*8975f5c5SAndroid Build Coastguard Worker #include "util/OSWindow.h"
12*8975f5c5SAndroid Build Coastguard Worker #include "util/gles_loader_autogen.h"
13*8975f5c5SAndroid Build Coastguard Worker
14*8975f5c5SAndroid Build Coastguard Worker using namespace angle;
15*8975f5c5SAndroid Build Coastguard Worker
16*8975f5c5SAndroid Build Coastguard Worker class EGLDeviceCGLQueryTest : public ANGLETest<>
17*8975f5c5SAndroid Build Coastguard Worker {
18*8975f5c5SAndroid Build Coastguard Worker protected:
EGLDeviceCGLQueryTest()19*8975f5c5SAndroid Build Coastguard Worker EGLDeviceCGLQueryTest() {}
20*8975f5c5SAndroid Build Coastguard Worker
testSetUp()21*8975f5c5SAndroid Build Coastguard Worker void testSetUp() override
22*8975f5c5SAndroid Build Coastguard Worker {
23*8975f5c5SAndroid Build Coastguard Worker const char *extensionString =
24*8975f5c5SAndroid Build Coastguard Worker static_cast<const char *>(eglQueryString(getEGLWindow()->getDisplay(), EGL_EXTENSIONS));
25*8975f5c5SAndroid Build Coastguard Worker
26*8975f5c5SAndroid Build Coastguard Worker if (!eglQueryDeviceStringEXT)
27*8975f5c5SAndroid Build Coastguard Worker {
28*8975f5c5SAndroid Build Coastguard Worker FAIL() << "ANGLE extension EGL_EXT_device_query export eglQueryDeviceStringEXT was not "
29*8975f5c5SAndroid Build Coastguard Worker "found";
30*8975f5c5SAndroid Build Coastguard Worker }
31*8975f5c5SAndroid Build Coastguard Worker
32*8975f5c5SAndroid Build Coastguard Worker if (!eglQueryDisplayAttribEXT)
33*8975f5c5SAndroid Build Coastguard Worker {
34*8975f5c5SAndroid Build Coastguard Worker FAIL() << "ANGLE extension EGL_EXT_device_query export eglQueryDisplayAttribEXT was "
35*8975f5c5SAndroid Build Coastguard Worker "not found";
36*8975f5c5SAndroid Build Coastguard Worker }
37*8975f5c5SAndroid Build Coastguard Worker
38*8975f5c5SAndroid Build Coastguard Worker if (!eglQueryDeviceAttribEXT)
39*8975f5c5SAndroid Build Coastguard Worker {
40*8975f5c5SAndroid Build Coastguard Worker FAIL() << "ANGLE extension EGL_EXT_device_query export eglQueryDeviceAttribEXT was not "
41*8975f5c5SAndroid Build Coastguard Worker "found";
42*8975f5c5SAndroid Build Coastguard Worker }
43*8975f5c5SAndroid Build Coastguard Worker
44*8975f5c5SAndroid Build Coastguard Worker EGLAttrib angleDevice = 0;
45*8975f5c5SAndroid Build Coastguard Worker EXPECT_EGL_TRUE(
46*8975f5c5SAndroid Build Coastguard Worker eglQueryDisplayAttribEXT(getEGLWindow()->getDisplay(), EGL_DEVICE_EXT, &angleDevice));
47*8975f5c5SAndroid Build Coastguard Worker extensionString = static_cast<const char *>(
48*8975f5c5SAndroid Build Coastguard Worker eglQueryDeviceStringEXT(reinterpret_cast<EGLDeviceEXT>(angleDevice), EGL_EXTENSIONS));
49*8975f5c5SAndroid Build Coastguard Worker if (strstr(extensionString, "EGL_ANGLE_device_cgl") == nullptr)
50*8975f5c5SAndroid Build Coastguard Worker {
51*8975f5c5SAndroid Build Coastguard Worker FAIL() << "ANGLE extension EGL_ANGLE_device_cgl was not found";
52*8975f5c5SAndroid Build Coastguard Worker }
53*8975f5c5SAndroid Build Coastguard Worker }
54*8975f5c5SAndroid Build Coastguard Worker };
55*8975f5c5SAndroid Build Coastguard Worker
56*8975f5c5SAndroid Build Coastguard Worker // This test attempts to query the CGLContextObj and CGLPixelFormatObj from the
57*8975f5c5SAndroid Build Coastguard Worker // EGLDevice associated with the display.
TEST_P(EGLDeviceCGLQueryTest,QueryDevice)58*8975f5c5SAndroid Build Coastguard Worker TEST_P(EGLDeviceCGLQueryTest, QueryDevice)
59*8975f5c5SAndroid Build Coastguard Worker {
60*8975f5c5SAndroid Build Coastguard Worker EGLAttrib angleDevice = 0;
61*8975f5c5SAndroid Build Coastguard Worker EXPECT_EGL_TRUE(
62*8975f5c5SAndroid Build Coastguard Worker eglQueryDisplayAttribEXT(getEGLWindow()->getDisplay(), EGL_DEVICE_EXT, &angleDevice));
63*8975f5c5SAndroid Build Coastguard Worker EGLAttrib contextAttrib = 0;
64*8975f5c5SAndroid Build Coastguard Worker EGLAttrib pixelFormatAttrib = 0;
65*8975f5c5SAndroid Build Coastguard Worker EXPECT_EGL_TRUE(eglQueryDeviceAttribEXT(reinterpret_cast<EGLDeviceEXT>(angleDevice),
66*8975f5c5SAndroid Build Coastguard Worker EGL_CGL_CONTEXT_ANGLE, &contextAttrib));
67*8975f5c5SAndroid Build Coastguard Worker EXPECT_TRUE(contextAttrib != 0);
68*8975f5c5SAndroid Build Coastguard Worker EXPECT_EGL_TRUE(eglQueryDeviceAttribEXT(reinterpret_cast<EGLDeviceEXT>(angleDevice),
69*8975f5c5SAndroid Build Coastguard Worker EGL_CGL_PIXEL_FORMAT_ANGLE, &pixelFormatAttrib));
70*8975f5c5SAndroid Build Coastguard Worker EXPECT_TRUE(pixelFormatAttrib != 0);
71*8975f5c5SAndroid Build Coastguard Worker }
72*8975f5c5SAndroid Build Coastguard Worker
73*8975f5c5SAndroid Build Coastguard Worker // Use this to select which configurations (e.g. which renderer, which GLES major version) these
74*8975f5c5SAndroid Build Coastguard Worker // tests should be run against.
75*8975f5c5SAndroid Build Coastguard Worker ANGLE_INSTANTIATE_TEST(EGLDeviceCGLQueryTest, ES2_OPENGL(), ES3_OPENGL());
76