summaryrefslogtreecommitdiff
path: root/gst-libs/gst/gl/gstgldebug.c
diff options
context:
space:
mode:
authorMatthew Waters <matthew@centricular.com>2015-10-02 01:01:42 +1000
committerMatthew Waters <matthew@centricular.com>2015-10-02 01:01:42 +1000
commit83c226284929c2d3974cd1d201b392f0638da4b9 (patch)
treece10168033e9b25227716707bbc30a4a175d7bd1 /gst-libs/gst/gl/gstgldebug.c
parent50b690cadbb1bdba98e667fa4d6dc67f393c126f (diff)
downloadgstreamer-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.c215
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