diff options
| author | 2015-10-10 00:32:40 +0100 | |
|---|---|---|
| committer | 2015-10-24 02:30:51 +0100 | |
| commit | 53df67376de96904f0174fc9d4a35940b87652b7 (patch) | |
| tree | 1df791299f3c84ac2e786540365d8a9f72b7d6d9 /src | |
| parent | Externals: Regenerate GLAD with GL_KHR_debug support. (diff) | |
| download | yuzu-53df67376de96904f0174fc9d4a35940b87652b7.tar.gz yuzu-53df67376de96904f0174fc9d4a35940b87652b7.tar.xz yuzu-53df67376de96904f0174fc9d4a35940b87652b7.zip | |
OpenGL: Log GL_KHR_debug messages we receive
This allows the driver to communicate errors, warnings and improvement
suggestions about our usage of the API.
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/renderer_opengl/renderer_opengl.cpp | 57 |
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 | ||
| 372 | static 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 | |||
| 387 | static 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 | |||
| 403 | static 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 |
| 373 | void RendererOpenGL::Init() { | 425 | void 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)); |