nv2a: Log gl errors to stderr

This commit is contained in:
Erik Abair 2022-02-17 10:47:05 -08:00
parent 49edc43439
commit c8ceb6a4ed
1 changed files with 97 additions and 2 deletions

View File

@ -44,6 +44,97 @@
static bool has_GL_GREMEDY_frame_terminator = false;
static bool has_GL_KHR_debug = false;
#ifdef STREAM_GL_DEBUG_MESSAGES
static const char *gl_debug_type_names[] = {
"ERROR",
"DEPRECATED",
"UNDEFINED",
"PORTABILITY",
"PERFORMANCE",
"MARKER",
"PUSH_GROUP",
"POP_GROUP",
"OTHER",
};
static const char *gl_debug_severity_names[] = {
"HIGH",
"MEDIUM",
"LOW",
"NOTIFICATION",
};
static void APIENTRY print_gl_debug_message(GLenum /*source*/, GLenum type,
GLuint id, GLenum severity,
GLsizei length,
const GLchar *message,
const void *userParam)
{
const char *type_name = "<UNKNOWN>";
const char *severity_name = "<UNKNOWN>";
if (type != GL_DEBUG_TYPE_ERROR) {
return;
}
switch (type) {
default:
break;
case GL_DEBUG_TYPE_ERROR:
type_name = gl_debug_type_names[0];
break;
case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR:
type_name = gl_debug_type_names[1];
break;
case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR:
type_name = gl_debug_type_names[2];
break;
case GL_DEBUG_TYPE_PORTABILITY:
type_name = gl_debug_type_names[3];
break;
case GL_DEBUG_TYPE_PERFORMANCE:
type_name = gl_debug_type_names[4];
break;
case GL_DEBUG_TYPE_MARKER:
type_name = gl_debug_type_names[5];
break;
case GL_DEBUG_TYPE_PUSH_GROUP:
type_name = gl_debug_type_names[6];
break;
case GL_DEBUG_TYPE_POP_GROUP:
type_name = gl_debug_type_names[7];
break;
case GL_DEBUG_TYPE_OTHER:
type_name = gl_debug_type_names[8];
break;
}
switch (severity) {
default:
break;
case GL_DEBUG_SEVERITY_HIGH:
severity_name = gl_debug_severity_names[0];
break;
case GL_DEBUG_SEVERITY_MEDIUM:
severity_name = gl_debug_severity_names[1];
break;
case GL_DEBUG_SEVERITY_LOW:
severity_name = gl_debug_severity_names[2];
break;
case GL_DEBUG_SEVERITY_NOTIFICATION:
severity_name = gl_debug_severity_names[3];
break;
}
if (length < 0) {
fprintf(stderr,"GLDBG[%s][%s]> %s\n", type_name, severity_name, message);
} else {
fprintf(stderr,"GLDBG[%s][%s]> %*s\n", type_name, severity_name, length, message);
}
}
#endif
void gl_debug_initialize(void)
{
has_GL_KHR_debug = glo_check_extension("GL_KHR_debug");
@ -62,8 +153,12 @@ void gl_debug_initialize(void)
* so skip the call for this platform.
*/
#else
glEnable(GL_DEBUG_OUTPUT);
assert(glGetError() == GL_NO_ERROR);
glEnable(GL_DEBUG_OUTPUT);
assert(glGetError() == GL_NO_ERROR);
#endif
#ifdef STREAM_GL_DEBUG_MESSAGES
glDebugMessageCallback(print_gl_debug_message, NULL);
#endif
}