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