summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/video_core/renderer_opengl/renderer_opengl.cpp57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/video_core/renderer_opengl/renderer_opengl.cpp b/src/video_core/renderer_opengl/renderer_opengl.cpp
index f1313b54f..4202d828c 100644
--- a/src/video_core/renderer_opengl/renderer_opengl.cpp
+++ b/src/video_core/renderer_opengl/renderer_opengl.cpp
@@ -369,6 +369,58 @@ void RendererOpenGL::SetWindow(EmuWindow* window) {
369 render_window = window; 369 render_window = window;
370} 370}
371 371
372static const char* GetSource(GLenum source) {
373#define RET(s) case GL_DEBUG_SOURCE_##s: return #s
374 switch (source) {
375 RET(API);
376 RET(WINDOW_SYSTEM);
377 RET(SHADER_COMPILER);
378 RET(THIRD_PARTY);
379 RET(APPLICATION);
380 RET(OTHER);
381 default:
382 UNREACHABLE();
383 }
384#undef RET
385}
386
387static const char* GetType(GLenum type) {
388#define RET(t) case GL_DEBUG_TYPE_##t: return #t
389 switch (type) {
390 RET(ERROR);
391 RET(DEPRECATED_BEHAVIOR);
392 RET(UNDEFINED_BEHAVIOR);
393 RET(PORTABILITY);
394 RET(PERFORMANCE);
395 RET(OTHER);
396 RET(MARKER);
397 default:
398 UNREACHABLE();
399 }
400#undef RET
401}
402
403static void DebugHandler(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length,
404 const GLchar* message, const void* user_param) {
405 Log::Level level;
406 switch (severity) {
407 case GL_DEBUG_SEVERITY_HIGH:
408 level = Log::Level::Error;
409 break;
410 case GL_DEBUG_SEVERITY_MEDIUM:
411 level = Log::Level::Warning;
412 break;
413 case GL_DEBUG_SEVERITY_NOTIFICATION:
414 level = Log::Level::Info;
415 break;
416 case GL_DEBUG_SEVERITY_LOW:
417 level = Log::Level::Debug;
418 break;
419 }
420 LOG_GENERIC(Log::Class::Render_OpenGL, level, "%s %s %d: %s",
421 GetSource(source), GetType(type), id, message);
422}
423
372/// Initialize the renderer 424/// Initialize the renderer
373void RendererOpenGL::Init() { 425void RendererOpenGL::Init() {
374 render_window->MakeCurrent(); 426 render_window->MakeCurrent();
@@ -379,6 +431,11 @@ void RendererOpenGL::Init() {
379 exit(-1); 431 exit(-1);
380 } 432 }
381 433
434 if (GLAD_GL_KHR_debug) {
435 glEnable(GL_DEBUG_OUTPUT);
436 glDebugMessageCallback(DebugHandler, nullptr);
437 }
438
382 LOG_INFO(Render_OpenGL, "GL_VERSION: %s", glGetString(GL_VERSION)); 439 LOG_INFO(Render_OpenGL, "GL_VERSION: %s", glGetString(GL_VERSION));
383 LOG_INFO(Render_OpenGL, "GL_VENDOR: %s", glGetString(GL_VENDOR)); 440 LOG_INFO(Render_OpenGL, "GL_VENDOR: %s", glGetString(GL_VENDOR));
384 LOG_INFO(Render_OpenGL, "GL_RENDERER: %s", glGetString(GL_RENDERER)); 441 LOG_INFO(Render_OpenGL, "GL_RENDERER: %s", glGetString(GL_RENDERER));