diff options
Diffstat (limited to 'src/mesa')
| -rw-r--r-- | src/mesa/glapi/glapi.c | 61 | ||||
| -rw-r--r-- | src/mesa/glapi/glapi.h | 10 | ||||
| -rw-r--r-- | src/mesa/main/dispatch.c | 18 | 
3 files changed, 76 insertions, 13 deletions
| diff --git a/src/mesa/glapi/glapi.c b/src/mesa/glapi/glapi.c index 9c40ce8e4d..8d31afb01d 100644 --- a/src/mesa/glapi/glapi.c +++ b/src/mesa/glapi/glapi.c @@ -1,8 +1,8 @@ -/* $Id: glapi.c,v 1.42 2000/05/24 17:53:30 brianp Exp $ */ +/* $Id: glapi.c,v 1.43 2000/09/05 20:17:37 brianp Exp $ */  /*   * Mesa 3-D graphics library - * Version:  3.3 + * Version:  3.5   *   * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.   * @@ -49,6 +49,9 @@  #include "glapitable.h"  #include "glthread.h" +#if defined(TRACE) +#include "types.h" +#endif  /* This is used when thread safety is disabled */  struct _glapi_table *_glapi_Dispatch = (struct _glapi_table *) __glapi_noop_table; @@ -167,6 +170,10 @@ _glapi_get_context(void)  void  _glapi_set_dispatch(struct _glapi_table *dispatch)  { +#if defined(TRACE) +   GLcontext * ctx; +#endif +     if (!dispatch) {        /* use the no-op functions */        dispatch = (struct _glapi_table *) __glapi_noop_table; @@ -178,14 +185,36 @@ _glapi_set_dispatch(struct _glapi_table *dispatch)  #endif  #if defined(THREADS) +#if defined(TRACE) +   ctx = (GLcontext *)_glthread_GetTSD(&ContextTSD); +   if (ctx->TraceCtx->traceEnabled == GL_TRUE) { +      _glthread_SetTSD(&DispatchTSD, (void*) ctx->TraceDispatch); +      if (ThreadSafe) +         _glapi_Dispatch = NULL; +      else +         _glapi_Dispatch = ctx->TraceDispatch; +   } else { +      _glthread_SetTSD(&DispatchTSD, (void*) dispatch); +      if (ThreadSafe) +         _glapi_Dispatch = NULL; +      else +         _glapi_Dispatch = dispatch; +   } +#else     _glthread_SetTSD(&DispatchTSD, (void*) dispatch);     if (ThreadSafe)        _glapi_Dispatch = NULL;     else        _glapi_Dispatch = dispatch; +#endif /*TRACE*/ +#else /*THREADS*/ +#if defined(TRACE) +   ctx = (GLcontext *)_glthread_GetTSD(&ContextTSD); +   _glapi_Dispatch = ctx->TraceDispatch;  #else     _glapi_Dispatch = dispatch; -#endif +#endif /*TRACE*/ +#endif /*THREADS*/  } @@ -210,6 +239,32 @@ _glapi_get_dispatch(void)  } +#if defined(TRACE) +struct _glapi_table * +_glapi_get_true_dispatch(void) +{ +   GLcontext* ctx; + +#if defined(THREADS) +   if (ThreadSafe) { +      ctx = (GLcontext *) _glthread_GetTSD(&ContextTSD); +      assert(ctx); +      assert(ctx->CurrentDispatch); +      return ctx->CurrentDispatch; +   } +   else { +      assert(_glapi_Context); +      assert(((GLcontext *)_glapi_Context)->CurrentDispatch); +      return ((GLcontext *)_glapi_Context)->CurrentDispatch; +   } +#else +   assert(_glapi_Context); +   assert(((GLcontext *)_glapi_Context)->CurrentDispatch); +   return ((GLcontext *)_glapi_Context)->CurrentDispatch; +#endif +} +#endif /* TRACE */ +  /*   * Return size of dispatch table struct as number of functions (or diff --git a/src/mesa/glapi/glapi.h b/src/mesa/glapi/glapi.h index 2b545b4888..2a56c77cec 100644 --- a/src/mesa/glapi/glapi.h +++ b/src/mesa/glapi/glapi.h @@ -1,8 +1,8 @@ -/* $Id: glapi.h,v 1.14 2000/01/28 20:17:42 brianp Exp $ */ +/* $Id: glapi.h,v 1.15 2000/09/05 20:17:37 brianp Exp $ */  /*   * Mesa 3-D graphics library - * Version:  3.3 + * Version:  3.5   *   * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.   * @@ -59,6 +59,12 @@ extern struct _glapi_table *  _glapi_get_dispatch(void); +#if defined(TRACE) +extern struct _glapi_table * +_glapi_get_true_dispatch(void); +#endif + +  extern GLuint  _glapi_get_dispatch_table_size(void); diff --git a/src/mesa/main/dispatch.c b/src/mesa/main/dispatch.c index 048ad16169..a2198cb15f 100644 --- a/src/mesa/main/dispatch.c +++ b/src/mesa/main/dispatch.c @@ -1,8 +1,8 @@ -/* $Id: dispatch.c,v 1.15 2000/02/02 19:34:08 brianp Exp $ */ +/* $Id: dispatch.c,v 1.16 2000/09/05 20:17:37 brianp Exp $ */  /*   * Mesa 3-D graphics library - * Version:  3.3 + * Version:  3.5   *   * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.   * @@ -64,6 +64,7 @@  #ifdef DEBUG +#if 0  static int  trace(void)  { @@ -72,26 +73,27 @@ trace(void)        trace = getenv("MESA_TRACE") ? 1 : 0;     return trace > 0;  } +#endif  #define F stderr  #define DISPATCH(FUNC, ARGS, MESSAGE)					\     const struct _glapi_table *dispatch;					\     dispatch = _glapi_Dispatch ? _glapi_Dispatch : _glapi_get_dispatch();\ -   if (trace()) {							\ -      fprintf MESSAGE;							\ -      fprintf(F, "\n");							\ -   }									\     (dispatch->FUNC) ARGS  #define RETURN_DISPATCH(FUNC, ARGS, MESSAGE) 				\     const struct _glapi_table *dispatch;					\     dispatch = _glapi_Dispatch ? _glapi_Dispatch : _glapi_get_dispatch();\ +   return (dispatch->FUNC) ARGS + +#if 0 +   /* From both macros above... */     if (trace()) {							\        fprintf MESSAGE;							\        fprintf(F, "\n");							\ -   }									\ -   return (dispatch->FUNC) ARGS +   } +#endif  #else | 
