Home | History | Annotate | Download | only in glapi
      1 /*
      2  * Mesa 3-D graphics library
      3  *
      4  * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
      5  *
      6  * Permission is hereby granted, free of charge, to any person obtaining a
      7  * copy of this software and associated documentation files (the "Software"),
      8  * to deal in the Software without restriction, including without limitation
      9  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
     10  * and/or sell copies of the Software, and to permit persons to whom the
     11  * Software is furnished to do so, subject to the following conditions:
     12  *
     13  * The above copyright notice and this permission notice shall be included
     14  * in all copies or substantial portions of the Software.
     15  *
     16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
     17  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
     19  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
     20  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
     21  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
     22  * 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 "util/macros.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__)
     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 
     84 typedef void (*_glapi_nop_handler_proc)(const char *name);
     85 
     86 struct _glapi_table;
     87 
     88 
     89 #if defined (GLX_USE_TLS)
     90 
     91 _GLAPI_EXPORT extern __thread struct _glapi_table * _glapi_tls_Dispatch
     92     __attribute__((tls_model("initial-exec")));
     93 
     94 _GLAPI_EXPORT extern __thread void * _glapi_tls_Context
     95     __attribute__((tls_model("initial-exec")));
     96 
     97 _GLAPI_EXPORT extern const struct _glapi_table *_glapi_Dispatch;
     98 _GLAPI_EXPORT extern const void *_glapi_Context;
     99 
    100 # define GET_DISPATCH() _glapi_tls_Dispatch
    101 # define GET_CURRENT_CONTEXT(C)  struct gl_context *C = (struct gl_context *) _glapi_tls_Context
    102 
    103 #else
    104 
    105 _GLAPI_EXPORT extern struct _glapi_table *_glapi_Dispatch;
    106 _GLAPI_EXPORT extern void *_glapi_Context;
    107 
    108 #define GET_DISPATCH() \
    109      (likely(_glapi_Dispatch) ? _glapi_Dispatch : _glapi_get_dispatch())
    110 
    111 #define GET_CURRENT_CONTEXT(C)  struct gl_context *C = (struct gl_context *) \
    112      (likely(_glapi_Context) ? _glapi_Context : _glapi_get_context())
    113 
    114 #endif /* defined (GLX_USE_TLS) */
    115 
    116 
    117 void
    118 _glapi_destroy_multithread(void);
    119 
    120 
    121 _GLAPI_EXPORT void
    122 _glapi_check_multithread(void);
    123 
    124 
    125 _GLAPI_EXPORT void
    126 _glapi_set_context(void *context);
    127 
    128 
    129 _GLAPI_EXPORT void *
    130 _glapi_get_context(void);
    131 
    132 
    133 _GLAPI_EXPORT void
    134 _glapi_set_dispatch(struct _glapi_table *dispatch);
    135 
    136 
    137 _GLAPI_EXPORT struct _glapi_table *
    138 _glapi_get_dispatch(void);
    139 
    140 
    141 _GLAPI_EXPORT unsigned int
    142 _glapi_get_dispatch_table_size(void);
    143 
    144 
    145 _GLAPI_EXPORT int
    146 _glapi_add_dispatch( const char * const * function_names,
    147 		     const char * parameter_signature );
    148 
    149 _GLAPI_EXPORT int
    150 _glapi_get_proc_offset(const char *funcName);
    151 
    152 
    153 _GLAPI_EXPORT _glapi_proc
    154 _glapi_get_proc_address(const char *funcName);
    155 
    156 
    157 _GLAPI_EXPORT const char *
    158 _glapi_get_proc_name(unsigned int offset);
    159 
    160 
    161 #if defined(GLX_USE_APPLEGL) || defined(GLX_USE_WINDOWSGL)
    162 _GLAPI_EXPORT struct _glapi_table *
    163 _glapi_create_table_from_handle(void *handle, const char *symbol_prefix);
    164 
    165 _GLAPI_EXPORT void
    166 _glapi_table_patch(struct _glapi_table *, const char *name, void *wrapper);
    167 #endif
    168 
    169 
    170 _GLAPI_EXPORT void
    171 _glapi_set_nop_handler(_glapi_nop_handler_proc func);
    172 
    173 /** Return pointer to new dispatch table filled with no-op functions */
    174 _GLAPI_EXPORT struct _glapi_table *
    175 _glapi_new_nop_table(unsigned num_entries);
    176 
    177 
    178 /** Deprecated function */
    179 _GLAPI_EXPORT unsigned long
    180 _glthread_GetID(void);
    181 
    182 
    183 /*
    184  * These stubs are kept so that the old DRI drivers still load.
    185  */
    186 _GLAPI_EXPORT void
    187 _glapi_noop_enable_warnings(unsigned char enable);
    188 
    189 
    190 _GLAPI_EXPORT void
    191 _glapi_set_warning_func(_glapi_proc func);
    192 
    193 
    194 #ifdef __cplusplus
    195 }
    196 #endif
    197 
    198 #endif /* _GLAPI_H */
    199