Home | History | Annotate | Download | only in glapi
      1 /*
      2  * Mesa 3-D graphics library
      3  * Version:  7.1
      4  *
      5  * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
      6  *
      7  * Permission is hereby granted, free of charge, to any person obtaining a
      8  * copy of this software and associated documentation files (the "Software"),
      9  * to deal in the Software without restriction, including without limitation
     10  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
     11  * and/or sell copies of the Software, and to permit persons to whom the
     12  * Software is furnished to do so, subject to the following conditions:
     13  *
     14  * The above copyright notice and this permission notice shall be included
     15  * in all copies or substantial portions of the Software.
     16  *
     17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
     18  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     19  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
     20  * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
     21  * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
     22  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     23  */
     24 
     25 
     26 /**
     27  * \mainpage Mesa GL API Module
     28  *
     29  * \section GLAPIIntroduction Introduction
     30  *
     31  * The Mesa GL API module is responsible for dispatching all the
     32  * gl*() functions.  All GL functions are dispatched by jumping through
     33  * the current dispatch table (basically a struct full of function
     34  * pointers.)
     35  *
     36  * A per-thread current dispatch table and per-thread current context
     37  * pointer are managed by this module too.
     38  *
     39  * This module is intended to be non-Mesa-specific so it can be used
     40  * with the X/DRI libGL also.
     41  */
     42 
     43 
     44 #ifndef _GLAPI_H
     45 #define _GLAPI_H
     46 
     47 #include "glapi/glthread.h"
     48 
     49 
     50 #ifdef __cplusplus
     51 extern "C" {
     52 #endif
     53 
     54 
     55 #ifdef _GLAPI_NO_EXPORTS
     56 #  define _GLAPI_EXPORT
     57 #else /* _GLAPI_NO_EXPORTS */
     58 #  ifdef _WIN32
     59 #    ifdef _GLAPI_DLL_EXPORTS
     60 #      define _GLAPI_EXPORT __declspec(dllexport)
     61 #    else
     62 #      define _GLAPI_EXPORT __declspec(dllimport)
     63 #    endif
     64 #  elif defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
     65 #    define _GLAPI_EXPORT __attribute__((visibility("default")))
     66 #  else
     67 #    define _GLAPI_EXPORT
     68 #  endif
     69 #endif /* _GLAPI_NO_EXPORTS */
     70 
     71 
     72 /* Is this needed?  It is incomplete anyway. */
     73 #ifdef USE_MGL_NAMESPACE
     74 #define _glapi_set_dispatch _mglapi_set_dispatch
     75 #define _glapi_get_dispatch _mglapi_get_dispatch
     76 #define _glapi_set_context _mglapi_set_context
     77 #define _glapi_get_context _mglapi_get_context
     78 #define _glapi_Dispatch _mglapi_Dispatch
     79 #define _glapi_Context _mglapi_Context
     80 #endif
     81 
     82 typedef void (*_glapi_proc)(void);
     83 struct _glapi_table;
     84 
     85 
     86 #if defined (GLX_USE_TLS)
     87 
     88 _GLAPI_EXPORT extern __thread struct _glapi_table * _glapi_tls_Dispatch
     89     __attribute__((tls_model("initial-exec")));
     90 
     91 _GLAPI_EXPORT extern __thread void * _glapi_tls_Context
     92     __attribute__((tls_model("initial-exec")));
     93 
     94 _GLAPI_EXPORT extern const struct _glapi_table *_glapi_Dispatch;
     95 _GLAPI_EXPORT extern const void *_glapi_Context;
     96 
     97 # define GET_DISPATCH() _glapi_tls_Dispatch
     98 # define GET_CURRENT_CONTEXT(C)  struct gl_context *C = (struct gl_context *) _glapi_tls_Context
     99 
    100 #else
    101 
    102 _GLAPI_EXPORT extern struct _glapi_table *_glapi_Dispatch;
    103 _GLAPI_EXPORT extern void *_glapi_Context;
    104 
    105 # ifdef THREADS
    106 
    107 #  define GET_DISPATCH() \
    108      (likely(_glapi_Dispatch) ? _glapi_Dispatch : _glapi_get_dispatch())
    109 
    110 #  define GET_CURRENT_CONTEXT(C)  struct gl_context *C = (struct gl_context *) \
    111      (likely(_glapi_Context) ? _glapi_Context : _glapi_get_context())
    112 
    113 # else
    114 
    115 #  define GET_DISPATCH() _glapi_Dispatch
    116 #  define GET_CURRENT_CONTEXT(C)  struct gl_context *C = (struct gl_context *) _glapi_Context
    117 
    118 # endif
    119 
    120 #endif /* defined (GLX_USE_TLS) */
    121 
    122 
    123 void
    124 _glapi_destroy_multithread(void);
    125 
    126 
    127 _GLAPI_EXPORT void
    128 _glapi_check_multithread(void);
    129 
    130 
    131 _GLAPI_EXPORT void
    132 _glapi_set_context(void *context);
    133 
    134 
    135 _GLAPI_EXPORT void *
    136 _glapi_get_context(void);
    137 
    138 
    139 _GLAPI_EXPORT void
    140 _glapi_set_dispatch(struct _glapi_table *dispatch);
    141 
    142 
    143 _GLAPI_EXPORT struct _glapi_table *
    144 _glapi_get_dispatch(void);
    145 
    146 
    147 _GLAPI_EXPORT unsigned int
    148 _glapi_get_dispatch_table_size(void);
    149 
    150 
    151 _GLAPI_EXPORT int
    152 _glapi_add_dispatch( const char * const * function_names,
    153 		     const char * parameter_signature );
    154 
    155 _GLAPI_EXPORT int
    156 _glapi_get_proc_offset(const char *funcName);
    157 
    158 
    159 _GLAPI_EXPORT _glapi_proc
    160 _glapi_get_proc_address(const char *funcName);
    161 
    162 
    163 _GLAPI_EXPORT const char *
    164 _glapi_get_proc_name(unsigned int offset);
    165 
    166 
    167 _GLAPI_EXPORT struct _glapi_table *
    168 _glapi_create_table_from_handle(void *handle, const char *symbol_prefix);
    169 
    170 
    171 _GLAPI_EXPORT unsigned long
    172 _glthread_GetID(void);
    173 
    174 
    175 /*
    176  * These stubs are kept so that the old DRI drivers still load.
    177  */
    178 _GLAPI_EXPORT void
    179 _glapi_noop_enable_warnings(unsigned char enable);
    180 
    181 
    182 _GLAPI_EXPORT void
    183 _glapi_set_warning_func(_glapi_proc func);
    184 
    185 
    186 #ifdef __cplusplus
    187 }
    188 #endif
    189 
    190 #endif /* _GLAPI_H */
    191