diff options
author | Matthew Waters <matthew@centricular.com> | 2015-10-02 01:01:42 +1000 |
---|---|---|
committer | Matthew Waters <matthew@centricular.com> | 2015-10-02 01:01:42 +1000 |
commit | 83c226284929c2d3974cd1d201b392f0638da4b9 (patch) | |
tree | ce10168033e9b25227716707bbc30a4a175d7bd1 /gst-libs/gst/gl/gstgldebug.c | |
parent | 50b690cadbb1bdba98e667fa4d6dc67f393c126f (diff) | |
download | gstreamer-plugins-bad-83c226284929c2d3974cd1d201b392f0638da4b9.tar.gz |
gl: move debugging related functions to their own file
Diffstat (limited to 'gst-libs/gst/gl/gstgldebug.c')
-rw-r--r-- | gst-libs/gst/gl/gstgldebug.c | 215 |
1 files changed, 215 insertions, 0 deletions
diff --git a/gst-libs/gst/gl/gstgldebug.c b/gst-libs/gst/gl/gstgldebug.c new file mode 100644 index 000000000..466389ba1 --- /dev/null +++ b/gst-libs/gst/gl/gstgldebug.c @@ -0,0 +1,215 @@ +/* + * GStreamer + * Copyright (C) 2015 Matthew Waters <matthew@centricular.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "gl.h" +#include "gstgldebug.h" +#include <glib/gprintf.h> + +#ifndef GL_DEBUG_TYPE_ERROR +#define GL_DEBUG_TYPE_ERROR 0x824C +#endif +#ifndef GL_DEBUG_TYPE_DEPRECATED_BEHAVIOUR +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOUR 0x824D +#endif +#ifndef GL_DEBUG_TYPE_UNDEFINED_BEHAVIOUR +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOUR 0x824E +#endif +#ifndef GL_DEBUG_TYPE_PORTABILITY +#define GL_DEBUG_TYPE_PORTABILITY 0x824F +#endif +#ifndef GL_DEBUG_TYPE_PERFORMANCE +#define GL_DEBUG_TYPE_PERFORMANCE 0x8250 +#endif +#ifndef GL_DEBUG_TYPE_MARKER +#define GL_DEBUG_TYPE_MARKER 0x8268 +#endif +#ifndef GL_DEBUG_TYPE_OTHER +#define GL_DEBUG_TYPE_OTHER 0x8251 +#endif + +#ifndef GL_DEBUG_SEVERITY_HIGH +#define GL_DEBUG_SEVERITY_HIGH 0x9146 +#endif +#ifndef GL_DEBUG_SEVERITY_MEDIUM +#define GL_DEBUG_SEVERITY_MEDIUM 0x9147 +#endif +#ifndef GL_DEBUG_SEVERITY_LOW +#define GL_DEBUG_SEVERITY_LOW 0x9148 +#endif +#ifndef GL_DEBUG_SEVERITY_NOTIFICATION +#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B +#endif + +#ifndef GL_DEBUG_SOURCE_API +#define GL_DEBUG_SOURCE_API 0x8246 +#endif +#ifndef GL_DEBUG_SOURCE_WINDOW_SYSTEM +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 +#endif +#ifndef GL_DEBUG_SOURCE_SHADER_COMPILER +#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 +#endif +#ifndef GL_DEBUG_SOURCE_THIRD_PARTY +#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 +#endif +#ifndef GL_DEBUG_SOURCE_APPLICATION +#define GL_DEBUG_SOURCE_APPLICATION 0x824A +#endif +#ifndef GL_DEBUG_SOURCE_OTHER +#define GL_DEBUG_SOURCE_OTHER 0x824B +#endif + +#if !defined(GST_DISABLE_GST_DEBUG) +GST_DEBUG_CATEGORY_STATIC (gst_performance); + +static void +_init_debug (void) +{ + static volatile gsize _init = 0; + + if (g_once_init_enter (&_init)) { + GST_DEBUG_CATEGORY_GET (gst_performance, "GST_PERFORMANCE"); + g_once_init_leave (&_init, 1); + } +} + +static inline const gchar * +_debug_severity_to_string (GLenum severity) +{ + switch (severity) { + case GL_DEBUG_SEVERITY_HIGH: + return "high"; + case GL_DEBUG_SEVERITY_MEDIUM: + return "medium"; + case GL_DEBUG_SEVERITY_LOW: + return "low"; + case GL_DEBUG_SEVERITY_NOTIFICATION: + return "notification"; + default: + return "invalid"; + } +} + +static inline const gchar * +_debug_source_to_string (GLenum source) +{ + switch (source) { + case GL_DEBUG_SOURCE_API: + return "API"; + case GL_DEBUG_SOURCE_WINDOW_SYSTEM: + return "winsys"; + case GL_DEBUG_SOURCE_SHADER_COMPILER: + return "shader compiler"; + case GL_DEBUG_SOURCE_THIRD_PARTY: + return "third party"; + case GL_DEBUG_SOURCE_APPLICATION: + return "application"; + case GL_DEBUG_SOURCE_OTHER: + return "other"; + default: + return "invalid"; + } +} + +static inline const gchar * +_debug_type_to_string (GLenum type) +{ + switch (type) { + case GL_DEBUG_TYPE_ERROR: + return "error"; + case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOUR: + return "deprecated"; + case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOUR: + return "undefined"; + case GL_DEBUG_TYPE_PORTABILITY: + return "portability"; + case GL_DEBUG_TYPE_PERFORMANCE: + return "performance"; + case GL_DEBUG_TYPE_MARKER: + return "debug marker"; + case GL_DEBUG_TYPE_OTHER: + return "other"; + default: + return "invalid"; + } +} + +/* silence the compiler... */ +void GSTGLAPI _gst_gl_debug_callback (GLenum source, GLenum type, GLuint id, + GLenum severity, GLsizei length, const gchar * message, gpointer user_data); + +void GSTGLAPI +_gst_gl_debug_callback (GLenum source, GLenum type, GLuint id, GLenum severity, + GLsizei length, const gchar * message, gpointer user_data) +{ + GstGLContext *context = user_data; + const gchar *severity_str = _debug_severity_to_string (severity); + const gchar *source_str = _debug_source_to_string (source); + const gchar *type_str = _debug_type_to_string (type); + + _init_debug (); + + switch (type) { + case GL_DEBUG_TYPE_ERROR: + case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOUR: + GST_ERROR_OBJECT (context, "%s: GL %s from %s id:%u, %s", severity_str, + type_str, source_str, id, message); + break; + case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOUR: + case GL_DEBUG_TYPE_PORTABILITY: + GST_FIXME_OBJECT (context, "%s: GL %s from %s id:%u, %s", severity_str, + type_str, source_str, id, message); + break; + case GL_DEBUG_TYPE_PERFORMANCE: + GST_CAT_DEBUG_OBJECT (gst_performance, context, "%s: GL %s from %s id:%u," + " %s", severity_str, type_str, source_str, id, message); + break; + default: + GST_DEBUG_OBJECT (context, "%s: GL %s from %s id:%u, %s", severity_str, + type_str, source_str, id, message); + break; + } +} + +void +gst_gl_insert_debug_marker (GstGLContext * context, const gchar * format, ...) +{ + const GstGLFuncs *gl = context->gl_vtable; + gchar *string; + gint len; + va_list args; + + va_start (args, format); + len = g_vasprintf (&string, format, args); + va_end (args); + + if (gl->DebugMessageInsert) + gl->DebugMessageInsert (GL_DEBUG_SOURCE_THIRD_PARTY, GL_DEBUG_TYPE_MARKER, + 0, GL_DEBUG_SEVERITY_LOW, (gsize) len, string); + else if (gl->InsertEventMarker) + gl->InsertEventMarker (len, string); + else if (gl->StringMarker) + gl->StringMarker (len, string); +} +#endif |