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 * Copyright (C) 2010 LunarG Inc.
6*61046927SAndroid Build Coastguard Worker *
7*61046927SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a
8*61046927SAndroid Build Coastguard Worker * copy of this software and associated documentation files (the "Software"),
9*61046927SAndroid Build Coastguard Worker * to deal in the Software without restriction, including without limitation
10*61046927SAndroid Build Coastguard Worker * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11*61046927SAndroid Build Coastguard Worker * and/or sell copies of the Software, and to permit persons to whom the
12*61046927SAndroid Build Coastguard Worker * Software is furnished to do so, subject to the following conditions:
13*61046927SAndroid Build Coastguard Worker *
14*61046927SAndroid Build Coastguard Worker * The above copyright notice and this permission notice shall be included
15*61046927SAndroid Build Coastguard Worker * in all copies or substantial portions of the Software.
16*61046927SAndroid Build Coastguard Worker *
17*61046927SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18*61046927SAndroid Build Coastguard Worker * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19*61046927SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20*61046927SAndroid Build Coastguard Worker * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21*61046927SAndroid Build Coastguard Worker * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22*61046927SAndroid Build Coastguard Worker * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23*61046927SAndroid Build Coastguard Worker * DEALINGS IN THE SOFTWARE.
24*61046927SAndroid Build Coastguard Worker *
25*61046927SAndroid Build Coastguard Worker * Authors:
26*61046927SAndroid Build Coastguard Worker * Chia-I Wu <[email protected]>
27*61046927SAndroid Build Coastguard Worker */
28*61046927SAndroid Build Coastguard Worker
29*61046927SAndroid Build Coastguard Worker #include <string.h>
30*61046927SAndroid Build Coastguard Worker #include <stdlib.h>
31*61046927SAndroid Build Coastguard Worker #include "glapi/glapi.h"
32*61046927SAndroid Build Coastguard Worker #include "u_current.h"
33*61046927SAndroid Build Coastguard Worker #include "table.h" /* for MAPI_TABLE_NUM_SLOTS */
34*61046927SAndroid Build Coastguard Worker #include "stub.h"
35*61046927SAndroid Build Coastguard Worker
36*61046927SAndroid Build Coastguard Worker /*
37*61046927SAndroid Build Coastguard Worker * _glapi_Dispatch, _glapi_Context
38*61046927SAndroid Build Coastguard Worker * _glapi_tls_Dispatch, _glapi_tls_Context,
39*61046927SAndroid Build Coastguard Worker * _glapi_set_context, _glapi_get_context,
40*61046927SAndroid Build Coastguard Worker * _glapi_destroy_multithread, _glapi_check_multithread
41*61046927SAndroid Build Coastguard Worker * _glapi_set_dispatch, and _glapi_get_dispatch
42*61046927SAndroid Build Coastguard Worker * are defined in u_current.c.
43*61046927SAndroid Build Coastguard Worker */
44*61046927SAndroid Build Coastguard Worker
45*61046927SAndroid Build Coastguard Worker /**
46*61046927SAndroid Build Coastguard Worker * Return size of dispatch table struct as number of functions (or
47*61046927SAndroid Build Coastguard Worker * slots).
48*61046927SAndroid Build Coastguard Worker */
49*61046927SAndroid Build Coastguard Worker unsigned int
_glapi_get_dispatch_table_size(void)50*61046927SAndroid Build Coastguard Worker _glapi_get_dispatch_table_size(void)
51*61046927SAndroid Build Coastguard Worker {
52*61046927SAndroid Build Coastguard Worker return MAPI_TABLE_NUM_SLOTS;
53*61046927SAndroid Build Coastguard Worker }
54*61046927SAndroid Build Coastguard Worker
55*61046927SAndroid Build Coastguard Worker /**
56*61046927SAndroid Build Coastguard Worker * Initializes the glapi relocs table (no-op for shared-glapi), and returns the
57*61046927SAndroid Build Coastguard Worker * offset of the given function in the dispatch table.
58*61046927SAndroid Build Coastguard Worker */
59*61046927SAndroid Build Coastguard Worker int
_glapi_add_dispatch(const char * function_name)60*61046927SAndroid Build Coastguard Worker _glapi_add_dispatch( const char * function_name )
61*61046927SAndroid Build Coastguard Worker {
62*61046927SAndroid Build Coastguard Worker assert(function_name[0] == 'g' && function_name[1] == 'l');
63*61046927SAndroid Build Coastguard Worker
64*61046927SAndroid Build Coastguard Worker const struct mapi_stub *stub = stub_find_public(function_name + 2);
65*61046927SAndroid Build Coastguard Worker if (!stub)
66*61046927SAndroid Build Coastguard Worker return -1;
67*61046927SAndroid Build Coastguard Worker
68*61046927SAndroid Build Coastguard Worker return stub_get_slot(stub);
69*61046927SAndroid Build Coastguard Worker }
70*61046927SAndroid Build Coastguard Worker
71*61046927SAndroid Build Coastguard Worker static const struct mapi_stub *
_glapi_get_stub(const char * name)72*61046927SAndroid Build Coastguard Worker _glapi_get_stub(const char *name)
73*61046927SAndroid Build Coastguard Worker {
74*61046927SAndroid Build Coastguard Worker if (!name || name[0] != 'g' || name[1] != 'l')
75*61046927SAndroid Build Coastguard Worker return NULL;
76*61046927SAndroid Build Coastguard Worker name += 2;
77*61046927SAndroid Build Coastguard Worker
78*61046927SAndroid Build Coastguard Worker return stub_find_public(name);
79*61046927SAndroid Build Coastguard Worker }
80*61046927SAndroid Build Coastguard Worker
81*61046927SAndroid Build Coastguard Worker /**
82*61046927SAndroid Build Coastguard Worker * Return offset of entrypoint for named function within dispatch table.
83*61046927SAndroid Build Coastguard Worker */
84*61046927SAndroid Build Coastguard Worker int
_glapi_get_proc_offset(const char * funcName)85*61046927SAndroid Build Coastguard Worker _glapi_get_proc_offset(const char *funcName)
86*61046927SAndroid Build Coastguard Worker {
87*61046927SAndroid Build Coastguard Worker const struct mapi_stub *stub = _glapi_get_stub(funcName);
88*61046927SAndroid Build Coastguard Worker return (stub) ? stub_get_slot(stub) : -1;
89*61046927SAndroid Build Coastguard Worker }
90*61046927SAndroid Build Coastguard Worker
91*61046927SAndroid Build Coastguard Worker /**
92*61046927SAndroid Build Coastguard Worker * Return pointer to the named function. If the function name isn't found
93*61046927SAndroid Build Coastguard Worker * in the name of static functions, try generating a new API entrypoint on
94*61046927SAndroid Build Coastguard Worker * the fly with assembly language.
95*61046927SAndroid Build Coastguard Worker */
96*61046927SAndroid Build Coastguard Worker _glapi_proc
_glapi_get_proc_address(const char * funcName)97*61046927SAndroid Build Coastguard Worker _glapi_get_proc_address(const char *funcName)
98*61046927SAndroid Build Coastguard Worker {
99*61046927SAndroid Build Coastguard Worker const struct mapi_stub *stub = _glapi_get_stub(funcName);
100*61046927SAndroid Build Coastguard Worker return (stub) ? (_glapi_proc) stub_get_addr(stub) : NULL;
101*61046927SAndroid Build Coastguard Worker }
102*61046927SAndroid Build Coastguard Worker
103*61046927SAndroid Build Coastguard Worker /**
104*61046927SAndroid Build Coastguard Worker * Return the name of the function at the given dispatch offset.
105*61046927SAndroid Build Coastguard Worker * This is only intended for debugging.
106*61046927SAndroid Build Coastguard Worker */
107*61046927SAndroid Build Coastguard Worker const char *
_glapi_get_proc_name(unsigned int offset)108*61046927SAndroid Build Coastguard Worker _glapi_get_proc_name(unsigned int offset)
109*61046927SAndroid Build Coastguard Worker {
110*61046927SAndroid Build Coastguard Worker const struct mapi_stub *stub = stub_find_by_slot(offset);
111*61046927SAndroid Build Coastguard Worker return stub ? stub_get_name(stub) : NULL;
112*61046927SAndroid Build Coastguard Worker }
113*61046927SAndroid Build Coastguard Worker
114*61046927SAndroid Build Coastguard Worker /** Return pointer to new dispatch table filled with no-op functions */
115*61046927SAndroid Build Coastguard Worker struct _glapi_table *
_glapi_new_nop_table(unsigned num_entries)116*61046927SAndroid Build Coastguard Worker _glapi_new_nop_table(unsigned num_entries)
117*61046927SAndroid Build Coastguard Worker {
118*61046927SAndroid Build Coastguard Worker struct _glapi_table *table;
119*61046927SAndroid Build Coastguard Worker
120*61046927SAndroid Build Coastguard Worker if (num_entries > MAPI_TABLE_NUM_SLOTS)
121*61046927SAndroid Build Coastguard Worker num_entries = MAPI_TABLE_NUM_SLOTS;
122*61046927SAndroid Build Coastguard Worker
123*61046927SAndroid Build Coastguard Worker table = malloc(num_entries * sizeof(mapi_func));
124*61046927SAndroid Build Coastguard Worker if (table) {
125*61046927SAndroid Build Coastguard Worker memcpy(table, table_noop_array, num_entries * sizeof(mapi_func));
126*61046927SAndroid Build Coastguard Worker }
127*61046927SAndroid Build Coastguard Worker return table;
128*61046927SAndroid Build Coastguard Worker }
129*61046927SAndroid Build Coastguard Worker
130*61046927SAndroid Build Coastguard Worker void
_glapi_set_nop_handler(_glapi_nop_handler_proc func)131*61046927SAndroid Build Coastguard Worker _glapi_set_nop_handler(_glapi_nop_handler_proc func)
132*61046927SAndroid Build Coastguard Worker {
133*61046927SAndroid Build Coastguard Worker table_set_noop_handler(func);
134*61046927SAndroid Build Coastguard Worker }
135*61046927SAndroid Build Coastguard Worker
136*61046927SAndroid Build Coastguard Worker /**
137*61046927SAndroid Build Coastguard Worker * This is a deprecated function which should not be used anymore.
138*61046927SAndroid Build Coastguard Worker * It's only present to satisfy linking with older versions of libGL.
139*61046927SAndroid Build Coastguard Worker */
140*61046927SAndroid Build Coastguard Worker unsigned long
_glthread_GetID(void)141*61046927SAndroid Build Coastguard Worker _glthread_GetID(void)
142*61046927SAndroid Build Coastguard Worker {
143*61046927SAndroid Build Coastguard Worker return 0;
144*61046927SAndroid Build Coastguard Worker }
145*61046927SAndroid Build Coastguard Worker
146*61046927SAndroid Build Coastguard Worker void
_glapi_noop_enable_warnings(unsigned char enable)147*61046927SAndroid Build Coastguard Worker _glapi_noop_enable_warnings(unsigned char enable)
148*61046927SAndroid Build Coastguard Worker {
149*61046927SAndroid Build Coastguard Worker }
150*61046927SAndroid Build Coastguard Worker
151*61046927SAndroid Build Coastguard Worker void
_glapi_set_warning_func(_glapi_proc func)152*61046927SAndroid Build Coastguard Worker _glapi_set_warning_func(_glapi_proc func)
153*61046927SAndroid Build Coastguard Worker {
154*61046927SAndroid Build Coastguard Worker }
155