Path: blob/main_old/src/tests/egl_tests/EGLCreateContextAttribsTest.cpp
1693 views
//1// Copyright 2019 The ANGLE Project Authors. All rights reserved.2// Use of this source code is governed by a BSD-style license that can be3// found in the LICENSE file.4//5// EGLCreateContectAttribsTest.cpp:6// This suite of test cases test invalid attributes passed to eglCreateContext7// Section 3.7.1 of EGL 1.5 specification provides error cases8//910#include <gtest/gtest.h>11#include <vector>1213#include "test_utils/ANGLETest.h"1415using namespace angle;1617class EGLCreateContextAttribsTest : public ANGLETest18{19public:20EGLCreateContextAttribsTest() : mDisplay(EGL_NO_DISPLAY) {}2122void testSetUp() override23{24EGLint dispattrs[] = {EGL_PLATFORM_ANGLE_TYPE_ANGLE, GetParam().getRenderer(), EGL_NONE};25mDisplay = eglGetPlatformDisplayEXT(26EGL_PLATFORM_ANGLE_ANGLE, reinterpret_cast<void *>(EGL_DEFAULT_DISPLAY), dispattrs);27EXPECT_TRUE(mDisplay != EGL_NO_DISPLAY);28EXPECT_EGL_TRUE(eglInitialize(mDisplay, nullptr, nullptr) != EGL_FALSE);29}3031EGLDisplay mDisplay;32};3334// Specify invalid client version in the attributes to eglCreateContext35// and verify EGL_BAD_ATTRIBUTE36TEST_P(EGLCreateContextAttribsTest, InvalidClientVersion)37{38EGLContext context = EGL_NO_CONTEXT;3940// Pick config41EGLConfig config = EGL_NO_CONFIG_KHR;42EGLint count = 0;4344// Get a 1.0 compatible config45EGLint cfgAttribList1[] = {EGL_RENDERABLE_TYPE, EGL_OPENGL_ES_BIT, EGL_NONE};46EXPECT_EGL_TRUE(eglChooseConfig(mDisplay, cfgAttribList1, &config, 1, &count));47ANGLE_SKIP_TEST_IF(count == 0);4849// GLES 0.0 is invalid verify invalid attribute request50EGLint contextAttribs1[] = {EGL_CONTEXT_MAJOR_VERSION, 0, EGL_CONTEXT_MINOR_VERSION, 0,51EGL_NONE};52context = eglCreateContext(mDisplay, config, nullptr, contextAttribs1);53EXPECT_EQ(context, EGL_NO_CONTEXT);54ASSERT_EGL_ERROR(EGL_BAD_ATTRIBUTE);5556// Get a 2.0/3.x compatible config57EGLint cfgAttribList2[] = {EGL_RENDERABLE_TYPE, (EGL_OPENGL_ES2_BIT), EGL_NONE};58EXPECT_EGL_TRUE(eglChooseConfig(mDisplay, cfgAttribList2, &config, 1, &count));59ASSERT_TRUE(count > 0);6061// GLES 2.1 is invalid verify invalid attribute request62EGLint contextAttribs2[] = {EGL_CONTEXT_MAJOR_VERSION, 2, EGL_CONTEXT_MINOR_VERSION, 1,63EGL_NONE};64context = eglCreateContext(mDisplay, config, nullptr, contextAttribs2);65EXPECT_EQ(context, EGL_NO_CONTEXT);66ASSERT_EGL_ERROR(EGL_BAD_ATTRIBUTE);6768// GLES 3.3 is invalid verify invalid attribute request69EGLint contextAttribs3[] = {EGL_CONTEXT_MAJOR_VERSION, 3, EGL_CONTEXT_MINOR_VERSION, 3,70EGL_NONE};71context = eglCreateContext(mDisplay, config, nullptr, contextAttribs3);72EXPECT_EQ(context, EGL_NO_CONTEXT);73ASSERT_EGL_ERROR(EGL_BAD_ATTRIBUTE);7475// GLES 4.0 is invalid verify invalid attribute request76EGLint contextAttribs4[] = {EGL_CONTEXT_MAJOR_VERSION, 4, EGL_CONTEXT_MINOR_VERSION, 0,77EGL_NONE};78context = eglCreateContext(mDisplay, config, nullptr, contextAttribs4);79EXPECT_EQ(context, EGL_NO_CONTEXT);80ASSERT_EGL_ERROR(EGL_BAD_ATTRIBUTE);8182// Cleanup contexts83eglTerminate(mDisplay);84}8586// Choose config that doesn't support requested client version, and verify that eglCreateContext87// sets EGL_BAD_MATCH88TEST_P(EGLCreateContextAttribsTest, IncompatibleConfig)89{90// Get all the configs91EGLint count;92EXPECT_EGL_TRUE(eglGetConfigs(mDisplay, nullptr, 0, &count) != EGL_FALSE);93EXPECT_TRUE(count > 0);94std::vector<EGLConfig> configs(count);95EXPECT_EGL_TRUE(eglGetConfigs(mDisplay, configs.data(), count, &count) != EGL_FALSE);9697EGLConfig notGLES1Config = EGL_NO_CONFIG_KHR;98EGLConfig notGLES2Config = EGL_NO_CONFIG_KHR;99EGLConfig notGLES3Config = EGL_NO_CONFIG_KHR;100101// Find non API matching configs102for (auto config : configs)103{104EGLint value = 0;105EXPECT_EGL_TRUE(eglGetConfigAttrib(mDisplay, config, EGL_RENDERABLE_TYPE, &value));106107if (((value & EGL_OPENGL_ES_BIT) == 0) && (notGLES1Config == EGL_NO_CONFIG_KHR))108{109notGLES1Config = config;110continue;111}112if (((value & EGL_OPENGL_ES2_BIT) == 0) && (notGLES2Config == EGL_NO_CONFIG_KHR))113{114notGLES2Config = config;115continue;116}117if (((value & EGL_OPENGL_ES3_BIT) == 0) && (notGLES3Config == EGL_NO_CONFIG_KHR))118{119notGLES3Config = config;120continue;121}122}123124// These selected configs should not be a match with the requested client version.125EGLContext context = EGL_NO_CONTEXT;126// Check GLES1127if (notGLES1Config != EGL_NO_CONFIG_KHR)128{129EGLint contextAttribs1[] = {EGL_CONTEXT_MAJOR_VERSION, 1, EGL_CONTEXT_MINOR_VERSION, 0,130EGL_NONE};131context = eglCreateContext(mDisplay, notGLES1Config, nullptr, contextAttribs1);132EXPECT_EQ(context, EGL_NO_CONTEXT);133ASSERT_EGL_ERROR(EGL_BAD_MATCH);134}135136// Check GLES2137if (notGLES2Config != EGL_NO_CONFIG_KHR)138{139EGLint contextAttribs2[] = {EGL_CONTEXT_MAJOR_VERSION, 2, EGL_CONTEXT_MINOR_VERSION, 0,140EGL_NONE};141context = eglCreateContext(mDisplay, notGLES2Config, nullptr, contextAttribs2);142EXPECT_EQ(context, EGL_NO_CONTEXT);143ASSERT_EGL_ERROR(EGL_BAD_MATCH);144}145146// Check GLES3147if (notGLES3Config != EGL_NO_CONFIG_KHR)148{149EGLint contextAttribs3[] = {EGL_CONTEXT_MAJOR_VERSION, 3, EGL_CONTEXT_MINOR_VERSION, 0,150EGL_NONE};151context = eglCreateContext(mDisplay, notGLES3Config, nullptr, contextAttribs3);152EXPECT_EQ(context, EGL_NO_CONTEXT);153ASSERT_EGL_ERROR(EGL_BAD_MATCH);154}155156// Cleanup contexts157eglTerminate(mDisplay);158}159160// EGL_IMG_context_priority - set and get attribute161TEST_P(EGLCreateContextAttribsTest, IMGContextPriorityExtension)162{163const EGLint configAttributes[] = {EGL_RED_SIZE, 8, EGL_GREEN_SIZE, 8,164EGL_BLUE_SIZE, 8, EGL_SURFACE_TYPE, EGL_WINDOW_BIT,165EGL_NONE};166167// Get all the configs168EGLint count;169EGLConfig config;170EXPECT_EGL_TRUE(eglChooseConfig(mDisplay, configAttributes, &config, 1, &count));171EXPECT_TRUE(count == 1);172173EGLContext context = EGL_NO_CONTEXT;174EGLint contextAttribs[] = {EGL_CONTEXT_MAJOR_VERSION,1752,176EGL_CONTEXT_MINOR_VERSION,1770,178EGL_CONTEXT_PRIORITY_LEVEL_IMG,179EGL_CONTEXT_PRIORITY_HIGH_IMG,180EGL_NONE};181182if (IsEGLDisplayExtensionEnabled(mDisplay, "EGL_IMG_context_priority"))183{184context = eglCreateContext(mDisplay, config, nullptr, contextAttribs);185EXPECT_NE(context, EGL_NO_CONTEXT);186ASSERT_EGL_ERROR(EGL_SUCCESS);187188EGLint value = 0;189EXPECT_EGL_TRUE(eglQueryContext(mDisplay, context, EGL_CONTEXT_PRIORITY_LEVEL_IMG, &value));190ASSERT_EGL_ERROR(EGL_SUCCESS);191}192else // Not supported so should get EGL_BAD_ATTRIBUTE193{194context = eglCreateContext(mDisplay, config, nullptr, contextAttribs);195EXPECT_EQ(context, EGL_NO_CONTEXT);196ASSERT_EGL_ERROR(EGL_BAD_ATTRIBUTE);197198EGLint contextAttribs[] = {EGL_CONTEXT_MAJOR_VERSION, 2, EGL_CONTEXT_MINOR_VERSION, 0,199EGL_NONE};200201context = eglCreateContext(mDisplay, config, nullptr, contextAttribs);202EXPECT_NE(context, EGL_NO_CONTEXT);203ASSERT_EGL_ERROR(EGL_SUCCESS);204205EGLint value = 0;206EXPECT_EGL_FALSE(207eglQueryContext(mDisplay, context, EGL_CONTEXT_PRIORITY_LEVEL_IMG, &value));208ASSERT_EGL_ERROR(EGL_BAD_ATTRIBUTE);209}210211// Cleanup contexts212ASSERT_EGL_TRUE(eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT));213eglDestroyContext(mDisplay, context);214eglTerminate(mDisplay);215}216217GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(EGLCreateContextAttribsTest);218ANGLE_INSTANTIATE_TEST(EGLCreateContextAttribsTest,219WithNoFixture(ES2_D3D9()),220WithNoFixture(ES2_D3D11()),221WithNoFixture(ES2_OPENGL()),222WithNoFixture(ES2_VULKAN()),223WithNoFixture(ES3_D3D11()),224WithNoFixture(ES3_OPENGL()),225WithNoFixture(ES3_VULKAN()));226227228