Path: blob/main_old/src/tests/gl_tests/ErrorMessages.cpp
1693 views
//1// Copyright 2015 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//56// ErrorMessages.cpp : Tests functionality of internal error error messages78#include "test_utils/ANGLETest.h"910#include "../src/libANGLE/ErrorStrings.h"11#include "test_utils/gl_raii.h"1213namespace14{1516struct Message17{18GLenum source;19GLenum type;20GLenum id;21GLenum severity;22std::string message;23const void *userParam;2425inline bool operator==(Message a)26{27if (a.source == source && a.type == type && a.id == id && a.message == message)28{29return true;30}31else32{33return false;34}35}36};3738static void GL_APIENTRY Callback(GLenum source,39GLenum type,40GLuint id,41GLenum severity,42GLsizei length,43const GLchar *message,44const void *userParam)45{46Message m{source, type, id, severity, std::string(message, length), userParam};47std::vector<Message> *messages =48static_cast<std::vector<Message> *>(const_cast<void *>(userParam));49messages->push_back(m);50}5152} // namespace5354namespace angle55{5657class ErrorMessagesTest : public ANGLETest58{59protected:60ErrorMessagesTest()61{62setWindowWidth(128);63setWindowHeight(128);64setConfigRedBits(8);65setConfigGreenBits(8);66setConfigBlueBits(8);67setConfigAlphaBits(8);68setWebGLCompatibilityEnabled(true);69}70};7172// Verify functionality of WebGL specific errors using KHR_debug73TEST_P(ErrorMessagesTest, ErrorMessages)74{75ANGLE_SKIP_TEST_IF(!IsGLExtensionEnabled("GL_KHR_debug"));7677glEnable(GL_DEBUG_OUTPUT);7879std::vector<Message> messages;80glDebugMessageCallbackKHR(Callback, &messages);81glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);8283constexpr GLenum source = GL_DEBUG_SOURCE_API;84constexpr GLenum type = GL_DEBUG_TYPE_ERROR;85constexpr GLenum severity = GL_DEBUG_SEVERITY_HIGH;86constexpr GLuint id1 = 1282;87const std::string message1 = gl::err::kWebglBindAttribLocationReservedPrefix;88Message expectedMessage;8990GLint numMessages = 0;91glGetIntegerv(GL_DEBUG_LOGGED_MESSAGES, &numMessages);92EXPECT_EQ(0, numMessages);9394glBindAttribLocation(0, 0, "_webgl_var");9596ASSERT_EQ(1u, messages.size());9798expectedMessage.source = source;99expectedMessage.id = id1;100expectedMessage.type = type;101expectedMessage.severity = severity;102expectedMessage.message = message1;103104Message &m = messages.front();105ASSERT_TRUE(m == expectedMessage);106}107108// Use this to select which configurations (e.g. which renderer, which GLES major version) these109// tests should be run against.110ANGLE_INSTANTIATE_TEST(ErrorMessagesTest,111ES2_D3D9(),112ES2_D3D11(),113ES3_D3D11(),114ES2_METAL(),115ES2_OPENGL(),116ES3_OPENGL(),117ES2_OPENGLES(),118ES3_OPENGLES(),119ES2_VULKAN());120} // namespace angle121122123