summaryrefslogtreecommitdiff
path: root/src/mapi
diff options
context:
space:
mode:
Diffstat (limited to 'src/mapi')
-rw-r--r--src/mapi/glapi/glapi.h8
-rw-r--r--src/mapi/glapi/glapi_dispatch.c80
2 files changed, 71 insertions, 17 deletions
diff --git a/src/mapi/glapi/glapi.h b/src/mapi/glapi/glapi.h
index a0bb078106..2fa580283e 100644
--- a/src/mapi/glapi/glapi.h
+++ b/src/mapi/glapi/glapi.h
@@ -94,7 +94,7 @@ _GLAPI_EXPORT extern __thread void * _glapi_tls_Context
_GLAPI_EXPORT extern const struct _glapi_table *_glapi_Dispatch;
_GLAPI_EXPORT extern const void *_glapi_Context;
-# define GET_DISPATCH() _glapi_tls_Dispatch
+# define GET_DISPATCH(t) _glapi_tls_Dispatch
# define GET_CURRENT_CONTEXT(C) GLcontext *C = (GLcontext *) _glapi_tls_Context
#else
@@ -167,6 +167,12 @@ _glapi_get_proc_name(unsigned int offset);
_GLAPI_EXPORT unsigned long
_glthread_GetID(void);
+_GLAPI_EXPORT int
+_glapi_logging_available(void);
+
+_GLAPI_EXPORT void
+_glapi_enable_logging(void (*func)(void *data, const char *fmt, ...),
+ void *data);
/*
* These stubs are kept so that the old DRI drivers still load.
diff --git a/src/mapi/glapi/glapi_dispatch.c b/src/mapi/glapi/glapi_dispatch.c
index 7421a36d35..0d41c9499b 100644
--- a/src/mapi/glapi/glapi_dispatch.c
+++ b/src/mapi/glapi/glapi_dispatch.c
@@ -41,7 +41,6 @@
#include "glapi/glapitable.h"
#include "glapi/glapidispatch.h"
-
#if !(defined(USE_X86_ASM) || defined(USE_X86_64_ASM) || defined(USE_SPARC_ASM))
#if defined(WIN32)
@@ -58,27 +57,12 @@
#define NAME(func) gl##func
#endif
-#if 0 /* Use this to log GL calls to stdout (for DEBUG only!) */
-
-#define F stdout
-#define DISPATCH(FUNC, ARGS, MESSAGE) \
- fprintf MESSAGE; \
- CALL_ ## FUNC(GET_DISPATCH(), ARGS);
-
-#define RETURN_DISPATCH(FUNC, ARGS, MESSAGE) \
- fprintf MESSAGE; \
- return CALL_ ## FUNC(GET_DISPATCH(), ARGS);
-
-#else
-
#define DISPATCH(FUNC, ARGS, MESSAGE) \
CALL_ ## FUNC(GET_DISPATCH(), ARGS);
#define RETURN_DISPATCH(FUNC, ARGS, MESSAGE) \
return CALL_ ## FUNC(GET_DISPATCH(), ARGS);
-#endif /* logging */
-
#ifndef GLAPIENTRY
#define GLAPIENTRY
@@ -91,3 +75,67 @@
#include "glapi/glapitemp.h"
#endif /* USE_X86_ASM */
+
+
+#ifdef DEBUG
+
+static void *logger_data;
+static void (*logger_func)(void *data, const char *fmt, ...);
+static struct _glapi_table *real_dispatch; /* FIXME: This need to be TLS etc */
+
+#define KEYWORD1 static
+#define KEYWORD1_ALT static
+#define KEYWORD2
+#define NAME(func) log_##func
+#define F logger_data
+
+static void
+log_Unused(void)
+{
+}
+
+#define DISPATCH(FUNC, ARGS, MESSAGE) \
+ logger_func MESSAGE; \
+ CALL_ ## FUNC(real_dispatch, ARGS);
+
+#define RETURN_DISPATCH(FUNC, ARGS, MESSAGE) \
+ logger_func MESSAGE; \
+ return CALL_ ## FUNC(real_dispatch, ARGS);
+
+#define DISPATCH_TABLE_NAME __glapi_logging_table
+
+#define TABLE_ENTRY(func) (_glapi_proc) log_##func
+
+#include "glapi/glapitemp.h"
+
+int
+_glapi_logging_available(void)
+{
+ return 1;
+}
+
+void
+_glapi_enable_logging(void (*func)(void *data, const char *fmt, ...),
+ void *data)
+{
+ real_dispatch = GET_DISPATCH();
+ logger_func = func;
+ logger_data = data;
+ _glapi_set_dispatch(&__glapi_logging_table);
+}
+
+#else
+
+int
+_glapi_logging_available(void)
+{
+ return 0
+}
+
+void
+_glapi_enable_logging(void (*func)(void *data, const char *fmt, ...),
+ void *data)
+{
+}
+
+#endif