1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2020 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 // EGLDisplayLuidTest.cpp:
7*8975f5c5SAndroid Build Coastguard Worker // Tests for the EGL_ANGLE_platform_angle_d3d_luid extension.
8*8975f5c5SAndroid Build Coastguard Worker //
9*8975f5c5SAndroid Build Coastguard Worker
10*8975f5c5SAndroid Build Coastguard Worker #include "test_utils/ANGLETest.h"
11*8975f5c5SAndroid Build Coastguard Worker
12*8975f5c5SAndroid Build Coastguard Worker using namespace angle;
13*8975f5c5SAndroid Build Coastguard Worker
14*8975f5c5SAndroid Build Coastguard Worker class EGLDisplayLuidTest : public ANGLETest<>
15*8975f5c5SAndroid Build Coastguard Worker {
16*8975f5c5SAndroid Build Coastguard Worker protected:
EGLDisplayLuidTest()17*8975f5c5SAndroid Build Coastguard Worker EGLDisplayLuidTest() : mDisplay(EGL_NO_DISPLAY) {}
18*8975f5c5SAndroid Build Coastguard Worker
testTearDown()19*8975f5c5SAndroid Build Coastguard Worker void testTearDown() override
20*8975f5c5SAndroid Build Coastguard Worker {
21*8975f5c5SAndroid Build Coastguard Worker if (mDisplay != EGL_NO_DISPLAY)
22*8975f5c5SAndroid Build Coastguard Worker {
23*8975f5c5SAndroid Build Coastguard Worker EXPECT_EGL_TRUE(eglTerminate(mDisplay));
24*8975f5c5SAndroid Build Coastguard Worker EXPECT_EGL_SUCCESS();
25*8975f5c5SAndroid Build Coastguard Worker }
26*8975f5c5SAndroid Build Coastguard Worker }
27*8975f5c5SAndroid Build Coastguard Worker
testInvalidAttribs(const EGLint displayAttribs[])28*8975f5c5SAndroid Build Coastguard Worker void testInvalidAttribs(const EGLint displayAttribs[])
29*8975f5c5SAndroid Build Coastguard Worker {
30*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ(
31*8975f5c5SAndroid Build Coastguard Worker eglGetPlatformDisplayEXT(EGL_PLATFORM_ANGLE_ANGLE, EGL_DEFAULT_DISPLAY, displayAttribs),
32*8975f5c5SAndroid Build Coastguard Worker EGL_NO_DISPLAY);
33*8975f5c5SAndroid Build Coastguard Worker EXPECT_EGL_ERROR(EGL_BAD_ATTRIBUTE);
34*8975f5c5SAndroid Build Coastguard Worker }
35*8975f5c5SAndroid Build Coastguard Worker
testValidAttribs(const EGLint displayAttribs[])36*8975f5c5SAndroid Build Coastguard Worker void testValidAttribs(const EGLint displayAttribs[])
37*8975f5c5SAndroid Build Coastguard Worker {
38*8975f5c5SAndroid Build Coastguard Worker mDisplay =
39*8975f5c5SAndroid Build Coastguard Worker eglGetPlatformDisplayEXT(EGL_PLATFORM_ANGLE_ANGLE, EGL_DEFAULT_DISPLAY, displayAttribs);
40*8975f5c5SAndroid Build Coastguard Worker
41*8975f5c5SAndroid Build Coastguard Worker EXPECT_EGL_SUCCESS();
42*8975f5c5SAndroid Build Coastguard Worker EXPECT_NE(mDisplay, EGL_NO_DISPLAY);
43*8975f5c5SAndroid Build Coastguard Worker
44*8975f5c5SAndroid Build Coastguard Worker // eglInitialize should succeed even if the LUID doesn't match an actual
45*8975f5c5SAndroid Build Coastguard Worker // adapter on the system. The behavior in this case is that the default
46*8975f5c5SAndroid Build Coastguard Worker // adapter is used.
47*8975f5c5SAndroid Build Coastguard Worker EXPECT_EGL_TRUE(eglInitialize(mDisplay, nullptr, nullptr));
48*8975f5c5SAndroid Build Coastguard Worker EXPECT_EGL_SUCCESS();
49*8975f5c5SAndroid Build Coastguard Worker }
50*8975f5c5SAndroid Build Coastguard Worker
51*8975f5c5SAndroid Build Coastguard Worker private:
52*8975f5c5SAndroid Build Coastguard Worker EGLDisplay mDisplay;
53*8975f5c5SAndroid Build Coastguard Worker };
54*8975f5c5SAndroid Build Coastguard Worker
55*8975f5c5SAndroid Build Coastguard Worker // EGL_ANGLE_platform_angle_d3d_luid is only supported on D3D11. Verify failure
56*8975f5c5SAndroid Build Coastguard Worker // if D3D9 is specified in the attributes.
TEST_P(EGLDisplayLuidTest,D3D9Failure)57*8975f5c5SAndroid Build Coastguard Worker TEST_P(EGLDisplayLuidTest, D3D9Failure)
58*8975f5c5SAndroid Build Coastguard Worker {
59*8975f5c5SAndroid Build Coastguard Worker EGLint displayAttribs[] = {EGL_PLATFORM_ANGLE_TYPE_ANGLE, EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE,
60*8975f5c5SAndroid Build Coastguard Worker EGL_PLATFORM_ANGLE_D3D_LUID_HIGH_ANGLE, 1, EGL_NONE};
61*8975f5c5SAndroid Build Coastguard Worker testInvalidAttribs(displayAttribs);
62*8975f5c5SAndroid Build Coastguard Worker }
63*8975f5c5SAndroid Build Coastguard Worker
64*8975f5c5SAndroid Build Coastguard Worker // Verify failure if the specified LUID is zero.
TEST_P(EGLDisplayLuidTest,ZeroLuidFailure)65*8975f5c5SAndroid Build Coastguard Worker TEST_P(EGLDisplayLuidTest, ZeroLuidFailure)
66*8975f5c5SAndroid Build Coastguard Worker {
67*8975f5c5SAndroid Build Coastguard Worker EGLint displayAttribs[] = {EGL_PLATFORM_ANGLE_TYPE_ANGLE,
68*8975f5c5SAndroid Build Coastguard Worker EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE,
69*8975f5c5SAndroid Build Coastguard Worker EGL_PLATFORM_ANGLE_D3D_LUID_HIGH_ANGLE,
70*8975f5c5SAndroid Build Coastguard Worker 0,
71*8975f5c5SAndroid Build Coastguard Worker EGL_PLATFORM_ANGLE_D3D_LUID_LOW_ANGLE,
72*8975f5c5SAndroid Build Coastguard Worker 0,
73*8975f5c5SAndroid Build Coastguard Worker EGL_NONE};
74*8975f5c5SAndroid Build Coastguard Worker testInvalidAttribs(displayAttribs);
75*8975f5c5SAndroid Build Coastguard Worker }
76*8975f5c5SAndroid Build Coastguard Worker
TEST_P(EGLDisplayLuidTest,D3D11)77*8975f5c5SAndroid Build Coastguard Worker TEST_P(EGLDisplayLuidTest, D3D11)
78*8975f5c5SAndroid Build Coastguard Worker {
79*8975f5c5SAndroid Build Coastguard Worker EGLint displayAttribs[] = {EGL_PLATFORM_ANGLE_TYPE_ANGLE, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE,
80*8975f5c5SAndroid Build Coastguard Worker EGL_PLATFORM_ANGLE_D3D_LUID_HIGH_ANGLE, 1, EGL_NONE};
81*8975f5c5SAndroid Build Coastguard Worker testValidAttribs(displayAttribs);
82*8975f5c5SAndroid Build Coastguard Worker }
83*8975f5c5SAndroid Build Coastguard Worker
84*8975f5c5SAndroid Build Coastguard Worker ANGLE_INSTANTIATE_TEST(EGLDisplayLuidTest, WithNoFixture(ES2_D3D9()), WithNoFixture(ES2_D3D11()));
85