Browse Source

added current context functions, made ThreadSafe public

tags/mesa_3_3
Brian Paul 25 years ago
parent
commit
8f91fb630c
2 changed files with 76 additions and 9 deletions
  1. 62
    8
      src/mesa/glapi/glapi.c
  2. 14
    1
      src/mesa/glapi/glapi.h

+ 62
- 8
src/mesa/glapi/glapi.c View File

@@ -1,4 +1,4 @@
/* $Id: glapi.c,v 1.17 1999/12/17 12:20:23 brianp Exp $ */
/* $Id: glapi.c,v 1.18 1999/12/17 14:51:28 brianp Exp $ */

/*
* Mesa 3-D graphics library
@@ -49,11 +49,14 @@


/* Flag to indicate whether thread-safe dispatch is enabled */
static GLboolean ThreadSafe = GL_FALSE;
GLboolean _glapi_ThreadSafe = GL_FALSE;

/* This is used when thread safety is disabled */
static struct _glapi_table *Dispatch = &__glapi_noop_table;

/* Used when thread safety disabled */
void *_glapi_CurrentContext = NULL;


#if defined(THREADS)

@@ -66,6 +69,14 @@ static void dispatch_thread_init()
_glthread_InitTSD(&DispatchTSD);
}


static _glthread_TSD ContextTSD;

static void context_thread_init()
{
_glthread_InitTSD(&ContextTSD);
}

#endif


@@ -84,7 +95,7 @@ void
_glapi_check_multithread(void)
{
#if defined(THREADS)
if (!ThreadSafe) {
if (!_glapi_ThreadSafe) {
static unsigned long knownID;
static GLboolean firstCall = GL_TRUE;
if (firstCall) {
@@ -92,10 +103,10 @@ _glapi_check_multithread(void)
firstCall = GL_FALSE;
}
else if (knownID != _glthread_GetID()) {
ThreadSafe = GL_TRUE;
_glapi_ThreadSafe = GL_TRUE;
}
}
if (ThreadSafe) {
if (_glapi_ThreadSafe) {
/* make sure that this thread's dispatch pointer isn't null */
if (!_glapi_get_dispatch()) {
_glapi_set_dispatch(NULL);
@@ -106,6 +117,49 @@ _glapi_check_multithread(void)



/*
* Set the current context pointer for this thread.
* The context pointer is an opaque type which should be cast to
* void from the real context pointer type.
*/
void
_glapi_set_current_context(void *context)
{
#if defined(THREADS)
_glthread_SetTSD(&ContextTSD, context, context_thread_init);
if (_glapi_ThreadSafe)
_glapi_CurrentContext = NULL; /* to help with debugging */
else
_glapi_CurrentContext = context;
#else
_glapi_CurrentContext = context;
#endif
}



/*
* Get the current context pointer for this thread.
* The context pointer is an opaque type which should be cast from
* void to the real context pointer type.
*/
void *
_glapi_get_current_context(void)
{
#if defined(THREADS)
if (_glapi_ThreadSafe) {
return _glthread_GetTSD(&ContextTSD);
}
else {
return _glapi_CurrentContext;
}
#else
return _glapi_CurrentContext;
#endif
}



/*
* Set the global or per-thread dispatch table pointer.
*/
@@ -124,7 +178,7 @@ _glapi_set_dispatch(struct _glapi_table *dispatch)

#if defined(THREADS)
_glthread_SetTSD(&DispatchTSD, (void*) dispatch, dispatch_thread_init);
if (ThreadSafe)
if (_glapi_ThreadSafe)
Dispatch = NULL; /* to help with debugging */
else
Dispatch = dispatch;
@@ -142,7 +196,7 @@ struct _glapi_table *
_glapi_get_dispatch(void)
{
#if defined(THREADS)
if (ThreadSafe) {
if (_glapi_ThreadSafe) {
return (struct _glapi_table *) _glthread_GetTSD(&DispatchTSD);
}
else {
@@ -453,7 +507,7 @@ _glapi_check_table(const struct _glapi_table *table)

#define DISPATCH_SETUP \
const struct _glapi_table *dispatch; \
if (ThreadSafe) { \
if (_glapi_ThreadSafe) { \
dispatch = _glapi_get_dispatch(); \
} \
else { \

+ 14
- 1
src/mesa/glapi/glapi.h View File

@@ -1,4 +1,4 @@
/* $Id: glapi.h,v 1.10 1999/12/16 17:33:44 brianp Exp $ */
/* $Id: glapi.h,v 1.11 1999/12/17 14:51:29 brianp Exp $ */

/*
* Mesa 3-D graphics library
@@ -34,10 +34,23 @@
struct _glapi_table;


extern GLboolean _glapi_ThreadSafe;

extern void *_glapi_CurrentContext;


extern void
_glapi_check_multithread(void);


extern void
_glapi_set_current_context(void *context);


extern void *
_glapi_get_current_context(void);


extern void
_glapi_set_dispatch(struct _glapi_table *dispatch);


Loading…
Cancel
Save