// // Copyright 2020 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. // // EGLDisplayLuidTest.cpp: // Tests for the EGL_ANGLE_platform_angle_d3d_luid extension. // #include "test_utils/ANGLETest.h" using namespace angle; class EGLDisplayLuidTest : public ANGLETest<> { protected: EGLDisplayLuidTest() : mDisplay(EGL_NO_DISPLAY) {} void testTearDown() override { if (mDisplay != EGL_NO_DISPLAY) { EXPECT_EGL_TRUE(eglTerminate(mDisplay)); EXPECT_EGL_SUCCESS(); } } void testInvalidAttribs(const EGLint displayAttribs[]) { EXPECT_EQ( eglGetPlatformDisplayEXT(EGL_PLATFORM_ANGLE_ANGLE, EGL_DEFAULT_DISPLAY, displayAttribs), EGL_NO_DISPLAY); EXPECT_EGL_ERROR(EGL_BAD_ATTRIBUTE); } void testValidAttribs(const EGLint displayAttribs[]) { mDisplay = eglGetPlatformDisplayEXT(EGL_PLATFORM_ANGLE_ANGLE, EGL_DEFAULT_DISPLAY, displayAttribs); EXPECT_EGL_SUCCESS(); EXPECT_NE(mDisplay, EGL_NO_DISPLAY); // eglInitialize should succeed even if the LUID doesn't match an actual // adapter on the system. The behavior in this case is that the default // adapter is used. EXPECT_EGL_TRUE(eglInitialize(mDisplay, nullptr, nullptr)); EXPECT_EGL_SUCCESS(); } private: EGLDisplay mDisplay; }; // EGL_ANGLE_platform_angle_d3d_luid is only supported on D3D11. Verify failure // if D3D9 is specified in the attributes. TEST_P(EGLDisplayLuidTest, D3D9Failure) { EGLint displayAttribs[] = {EGL_PLATFORM_ANGLE_TYPE_ANGLE, EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE, EGL_PLATFORM_ANGLE_D3D_LUID_HIGH_ANGLE, 1, EGL_NONE}; testInvalidAttribs(displayAttribs); } // Verify failure if the specified LUID is zero. TEST_P(EGLDisplayLuidTest, ZeroLuidFailure) { EGLint displayAttribs[] = {EGL_PLATFORM_ANGLE_TYPE_ANGLE, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, EGL_PLATFORM_ANGLE_D3D_LUID_HIGH_ANGLE, 0, EGL_PLATFORM_ANGLE_D3D_LUID_LOW_ANGLE, 0, EGL_NONE}; testInvalidAttribs(displayAttribs); } TEST_P(EGLDisplayLuidTest, D3D11) { EGLint displayAttribs[] = {EGL_PLATFORM_ANGLE_TYPE_ANGLE, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, EGL_PLATFORM_ANGLE_D3D_LUID_HIGH_ANGLE, 1, EGL_NONE}; testValidAttribs(displayAttribs); } ANGLE_INSTANTIATE_TEST(EGLDisplayLuidTest, WithNoFixture(ES2_D3D9()), WithNoFixture(ES2_D3D11()));