Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/angle
Path: blob/main_old/src/tests/gl_tests/ErrorMessages.cpp
1693 views
1
//
2
// Copyright 2015 The ANGLE Project Authors. All rights reserved.
3
// Use of this source code is governed by a BSD-style license that can be
4
// found in the LICENSE file.
5
//
6
7
// ErrorMessages.cpp : Tests functionality of internal error error messages
8
9
#include "test_utils/ANGLETest.h"
10
11
#include "../src/libANGLE/ErrorStrings.h"
12
#include "test_utils/gl_raii.h"
13
14
namespace
15
{
16
17
struct Message
18
{
19
GLenum source;
20
GLenum type;
21
GLenum id;
22
GLenum severity;
23
std::string message;
24
const void *userParam;
25
26
inline bool operator==(Message a)
27
{
28
if (a.source == source && a.type == type && a.id == id && a.message == message)
29
{
30
return true;
31
}
32
else
33
{
34
return false;
35
}
36
}
37
};
38
39
static void GL_APIENTRY Callback(GLenum source,
40
GLenum type,
41
GLuint id,
42
GLenum severity,
43
GLsizei length,
44
const GLchar *message,
45
const void *userParam)
46
{
47
Message m{source, type, id, severity, std::string(message, length), userParam};
48
std::vector<Message> *messages =
49
static_cast<std::vector<Message> *>(const_cast<void *>(userParam));
50
messages->push_back(m);
51
}
52
53
} // namespace
54
55
namespace angle
56
{
57
58
class ErrorMessagesTest : public ANGLETest
59
{
60
protected:
61
ErrorMessagesTest()
62
{
63
setWindowWidth(128);
64
setWindowHeight(128);
65
setConfigRedBits(8);
66
setConfigGreenBits(8);
67
setConfigBlueBits(8);
68
setConfigAlphaBits(8);
69
setWebGLCompatibilityEnabled(true);
70
}
71
};
72
73
// Verify functionality of WebGL specific errors using KHR_debug
74
TEST_P(ErrorMessagesTest, ErrorMessages)
75
{
76
ANGLE_SKIP_TEST_IF(!IsGLExtensionEnabled("GL_KHR_debug"));
77
78
glEnable(GL_DEBUG_OUTPUT);
79
80
std::vector<Message> messages;
81
glDebugMessageCallbackKHR(Callback, &messages);
82
glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
83
84
constexpr GLenum source = GL_DEBUG_SOURCE_API;
85
constexpr GLenum type = GL_DEBUG_TYPE_ERROR;
86
constexpr GLenum severity = GL_DEBUG_SEVERITY_HIGH;
87
constexpr GLuint id1 = 1282;
88
const std::string message1 = gl::err::kWebglBindAttribLocationReservedPrefix;
89
Message expectedMessage;
90
91
GLint numMessages = 0;
92
glGetIntegerv(GL_DEBUG_LOGGED_MESSAGES, &numMessages);
93
EXPECT_EQ(0, numMessages);
94
95
glBindAttribLocation(0, 0, "_webgl_var");
96
97
ASSERT_EQ(1u, messages.size());
98
99
expectedMessage.source = source;
100
expectedMessage.id = id1;
101
expectedMessage.type = type;
102
expectedMessage.severity = severity;
103
expectedMessage.message = message1;
104
105
Message &m = messages.front();
106
ASSERT_TRUE(m == expectedMessage);
107
}
108
109
// Use this to select which configurations (e.g. which renderer, which GLES major version) these
110
// tests should be run against.
111
ANGLE_INSTANTIATE_TEST(ErrorMessagesTest,
112
ES2_D3D9(),
113
ES2_D3D11(),
114
ES3_D3D11(),
115
ES2_METAL(),
116
ES2_OPENGL(),
117
ES3_OPENGL(),
118
ES2_OPENGLES(),
119
ES3_OPENGLES(),
120
ES2_VULKAN());
121
} // namespace angle
122
123