diff options
author | Kristian Høgsberg <krh@bitplanet.net> | 2010-09-09 12:59:14 -0400 |
---|---|---|
committer | Kristian Høgsberg <krh@bitplanet.net> | 2010-09-09 13:21:15 -0400 |
commit | b9abc6139a310677a37754ea7172d976dbf56979 (patch) | |
tree | dd42377907938fe8a5e9eb3c24ec3df678a0fe25 /src/mesa | |
parent | 94118fe2d4b1e5d0b9f39d9d2c44706db462e97e (diff) | |
download | external_mesa3d-b9abc6139a310677a37754ea7172d976dbf56979.zip external_mesa3d-b9abc6139a310677a37754ea7172d976dbf56979.tar.gz external_mesa3d-b9abc6139a310677a37754ea7172d976dbf56979.tar.bz2 |
glapi: Implement optional dispatch logging
There's a useful feature buried in glapi to log all API calls to stderr.
Unfortunately it requires editing the code and then it's enabled
unconditionally for that build. This patch builds in API logging for
debug builds and makes it run-time switchable by setting MESA_DEBUG=dispatch.
Diffstat (limited to 'src/mesa')
-rw-r--r-- | src/mesa/drivers/dri/common/dri_test.c | 12 | ||||
-rw-r--r-- | src/mesa/main/context.c | 24 | ||||
-rw-r--r-- | src/mesa/main/context.h | 3 | ||||
-rw-r--r-- | src/mesa/main/debug.c | 6 | ||||
-rw-r--r-- | src/mesa/main/dlist.c | 8 | ||||
-rw-r--r-- | src/mesa/main/mtypes.h | 3 |
6 files changed, 48 insertions, 8 deletions
diff --git a/src/mesa/drivers/dri/common/dri_test.c b/src/mesa/drivers/dri/common/dri_test.c index 793f0c3..8a47316 100644 --- a/src/mesa/drivers/dri/common/dri_test.c +++ b/src/mesa/drivers/dri/common/dri_test.c @@ -82,6 +82,18 @@ _glthread_GetID(void) return 0; } +PUBLIC int +_glapi_logging_available(void) +{ + return 0; +} + +PUBLIC void +_glapi_enable_logging(void (*func)(void *data, const char *fmt, ...), + void *data) +{ +} + int main(int argc, char** argv) { void* p = __driDriverExtensions; diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c index 8e34ec4..73d96e8 100644 --- a/src/mesa/main/context.c +++ b/src/mesa/main/context.c @@ -1367,6 +1367,26 @@ _mesa_check_init_viewport(GLcontext *ctx, GLuint width, GLuint height) } } +static void +dispatch_logger(void *data, const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); +} + +void +_mesa_set_dispatch(void *table) +{ + if (table && (MESA_VERBOSE & VERBOSE_DISPATCH)) { + _glapi_set_dispatch(table); + _glapi_enable_logging(dispatch_logger, stderr); + } else { + _glapi_set_dispatch(table); + } +} /** * Bind the given context to the given drawBuffer and readBuffer and @@ -1411,10 +1431,10 @@ _mesa_make_current( GLcontext *newCtx, GLframebuffer *drawBuffer, ASSERT(_mesa_get_current_context() == newCtx); if (!newCtx) { - _glapi_set_dispatch(NULL); /* none current */ + _mesa_set_dispatch(NULL); /* none current */ } else { - _glapi_set_dispatch(newCtx->CurrentDispatch); + _mesa_set_dispatch(newCtx->CurrentDispatch); if (drawBuffer && readBuffer) { /* TODO: check if newCtx and buffer's visual match??? */ diff --git a/src/mesa/main/context.h b/src/mesa/main/context.h index c61da62..142243f 100644 --- a/src/mesa/main/context.h +++ b/src/mesa/main/context.h @@ -145,6 +145,9 @@ extern GLboolean _mesa_make_current( GLcontext *ctx, GLframebuffer *drawBuffer, GLframebuffer *readBuffer ); +extern void +_mesa_set_dispatch(void *table); + extern GLboolean _mesa_share_state(GLcontext *ctx, GLcontext *ctxToShare); diff --git a/src/mesa/main/debug.c b/src/mesa/main/debug.c index 526145a..e5c3133 100644 --- a/src/mesa/main/debug.c +++ b/src/mesa/main/debug.c @@ -201,7 +201,8 @@ static void add_debug_flags( const char *debug ) { "lighting", VERBOSE_LIGHTING }, { "disassem", VERBOSE_DISASSEM }, { "draw", VERBOSE_DRAW }, - { "swap", VERBOSE_SWAPBUFFERS } + { "swap", VERBOSE_SWAPBUFFERS }, + { "dispatch", VERBOSE_DISPATCH } }; GLuint i; @@ -211,6 +212,9 @@ static void add_debug_flags( const char *debug ) MESA_VERBOSE |= debug_opt[i].flag; } + if ((MESA_VERBOSE & VERBOSE_DISPATCH) && !_glapi_logging_available()) + _mesa_debug(NULL, "dispatch logging not available in this buidl\n"); + /* Debug flag: */ if (strstr(debug, "flush")) diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c index 6928d21..0c4e3d5 100644 --- a/src/mesa/main/dlist.c +++ b/src/mesa/main/dlist.c @@ -8062,7 +8062,7 @@ _mesa_NewList(GLuint name, GLenum mode) ctx->Driver.NewList(ctx, name, mode); ctx->CurrentDispatch = ctx->Save; - _glapi_set_dispatch(ctx->CurrentDispatch); + _mesa_set_dispatch(ctx->CurrentDispatch); } @@ -8109,7 +8109,7 @@ _mesa_EndList(void) ctx->CompileFlag = GL_FALSE; ctx->CurrentDispatch = ctx->Exec; - _glapi_set_dispatch(ctx->CurrentDispatch); + _mesa_set_dispatch(ctx->CurrentDispatch); } @@ -8143,7 +8143,7 @@ _mesa_CallList(GLuint list) /* also restore API function pointers to point to "save" versions */ if (save_compile_flag) { ctx->CurrentDispatch = ctx->Save; - _glapi_set_dispatch(ctx->CurrentDispatch); + _mesa_set_dispatch(ctx->CurrentDispatch); } } @@ -8195,7 +8195,7 @@ _mesa_CallLists(GLsizei n, GLenum type, const GLvoid * lists) /* also restore API function pointers to point to "save" versions */ if (save_compile_flag) { ctx->CurrentDispatch = ctx->Save; - _glapi_set_dispatch(ctx->CurrentDispatch); + _mesa_set_dispatch(ctx->CurrentDispatch); } } diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 3e54656..96fd914 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -3345,7 +3345,8 @@ enum _verbose VERBOSE_VERTS = 0x0800, VERBOSE_DISASSEM = 0x1000, VERBOSE_DRAW = 0x2000, - VERBOSE_SWAPBUFFERS = 0x4000 + VERBOSE_SWAPBUFFERS = 0x4000, + VERBOSE_DISPATCH = 0x8000 }; |