1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#!/usr/bin/env python 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# (C) Copyright IBM Corporation 2004, 2005 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# All Rights Reserved. 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# Permission is hereby granted, free of charge, to any person obtaining a 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# copy of this software and associated documentation files (the "Software"), 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# to deal in the Software without restriction, including without limitation 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# on the rights to use, copy, modify, merge, publish, distribute, sub 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# license, and/or sell copies of the Software, and to permit persons to whom 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# the Software is furnished to do so, subject to the following conditions: 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# The above copyright notice and this permission notice (including the next 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# paragraph) shall be included in all copies or substantial portions of the 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# Software. 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# IN THE SOFTWARE. 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# Authors: 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# Ian Romanick <idr@us.ibm.com> 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgimport gl_XML, glX_XML 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgimport license 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgimport sys, getopt 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass PrintGlOffsets(gl_XML.gl_print_base): 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org def __init__(self, es=False): 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org gl_XML.gl_print_base.__init__(self) 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org self.name = "gl_apitemp.py (from Mesa)" 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org self.license = license.bsd_license_template % ( \ 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org"""Copyright (C) 1999-2001 Brian Paul All Rights Reserved. 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org(C) Copyright IBM Corporation 2004""", "BRIAN PAUL, IBM") 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org self.es = es 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org self.undef_list.append( "KEYWORD1" ) 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org self.undef_list.append( "KEYWORD1_ALT" ) 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org self.undef_list.append( "KEYWORD2" ) 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org self.undef_list.append( "NAME" ) 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org self.undef_list.append( "DISPATCH" ) 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org self.undef_list.append( "RETURN_DISPATCH" ) 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org self.undef_list.append( "DISPATCH_TABLE_NAME" ) 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org self.undef_list.append( "UNUSED_TABLE_NAME" ) 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org self.undef_list.append( "TABLE_ENTRY" ) 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org def printFunction(self, f, name): 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org p_string = "" 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org o_string = "" 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org t_string = "" 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org comma = "" 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if f.is_static_entry_point(name): 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org keyword = "KEYWORD1" 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else: 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org keyword = "KEYWORD1_ALT" 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org n = f.static_name(name) 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org silence = '' 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org space = '' 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for p in f.parameterIterator(): 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if p.is_padding: 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org continue 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if p.is_pointer(): 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org cast = "(const void *) " 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else: 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org cast = "" 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org t_string = t_string + comma + p.format_string() 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org p_string = p_string + comma + p.name 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org o_string = o_string + comma + cast + p.name 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org comma = ", " 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org silence += "%s(void) %s;" % (space, p.name); 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org space = ' ' 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if f.return_type != 'void': 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dispatch = "RETURN_DISPATCH" 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else: 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dispatch = "DISPATCH" 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org need_proto = False 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if not f.is_static_entry_point(name): 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org need_proto = True 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org elif self.es: 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org cat, num = api.get_category_for_name(name) 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (cat.startswith("es") or cat.startswith("GL_OES")): 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org need_proto = True 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if need_proto: 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print '%s %s KEYWORD2 NAME(%s)(%s);' % (keyword, f.return_type, n, f.get_parameter_string(name)) 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print '' 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print '%s %s KEYWORD2 NAME(%s)(%s)' % (keyword, f.return_type, n, f.get_parameter_string(name)) 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print '{' 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if silence: 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print ' %s' % (silence) 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if p_string == "": 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print ' %s(%s, (), (F, "gl%s();\\n"));' \ 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org % (dispatch, f.name, name) 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else: 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print ' %s(%s, (%s), (F, "gl%s(%s);\\n", %s));' \ 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org % (dispatch, f.name, p_string, name, t_string, o_string) 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print '}' 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print '' 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org def printRealHeader(self): 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print '' 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org self.printVisibility( "HIDDEN", "hidden" ) 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print """ 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This file is a template which generates the OpenGL API entry point 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * functions. It should be included by a .c file which first defines 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the following macros: 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * KEYWORD1 - usually nothing, but might be __declspec(dllexport) on Win32 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * KEYWORD2 - usually nothing, but might be __stdcall on Win32 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * NAME(n) - builds the final function name (usually add "gl" prefix) 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * DISPATCH(func, args, msg) - code to do dispatch of named function. 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * msg is a printf-style debug message. 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * RETURN_DISPATCH(func, args, msg) - code to do dispatch with a return value 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Here is an example which generates the usual OpenGL functions: 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * #define KEYWORD1 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * #define KEYWORD2 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * #define NAME(func) gl##func 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * #define DISPATCH(func, args, msg) \\ 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * struct _glapi_table *dispatch = CurrentDispatch; \\ 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * (*dispatch->func) args 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * #define RETURN DISPATCH(func, args, msg) \\ 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * struct _glapi_table *dispatch = CurrentDispatch; \\ 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * return (*dispatch->func) args 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if defined( NAME ) 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef KEYWORD1 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define KEYWORD1 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef KEYWORD1_ALT 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define KEYWORD1_ALT HIDDEN 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef KEYWORD2 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define KEYWORD2 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef DISPATCH 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#error DISPATCH must be defined 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef RETURN_DISPATCH 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#error RETURN_DISPATCH must be defined 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org""" 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org def printInitDispatch(self, api): 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print """ 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* defined( NAME ) */ 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This is how a dispatch table can be initialized with all the functions 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * we generated above. 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef DISPATCH_TABLE_NAME 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef TABLE_ENTRY 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#error TABLE_ENTRY must be defined 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef _GLAPI_SKIP_NORMAL_ENTRY_POINTS 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#error _GLAPI_SKIP_NORMAL_ENTRY_POINTS must not be defined 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_glapi_proc DISPATCH_TABLE_NAME[] = {""" 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for f in api.functionIterateByOffset(): 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print ' TABLE_ENTRY(%s),' % (f.dispatch_name()) 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print ' /* A whole bunch of no-op functions. These might be called' 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print ' * when someone tries to call a dynamically-registered' 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print ' * extension function without a current rendering context.' 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print ' */' 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for i in range(1, 100): 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print ' TABLE_ENTRY(Unused),' 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print '};' 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print '#endif /* DISPATCH_TABLE_NAME */' 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print '' 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org def printAliasedTable(self, api): 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print """ 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This is just used to silence compiler warnings. 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * We list the functions which are not otherwise used. 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef UNUSED_TABLE_NAME 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_glapi_proc UNUSED_TABLE_NAME[] = {""" 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org normal_entries = [] 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org proto_entries = [] 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for f in api.functionIterateByOffset(): 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org normal_ents, proto_ents = self.classifyEntryPoints(f) 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org # exclude f.name 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if f.name in normal_ents: 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org normal_ents.remove(f.name) 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org elif f.name in proto_ents: 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org proto_ents.remove(f.name) 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org normal_ents = [f.static_name(ent) for ent in normal_ents] 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org proto_ents = [f.static_name(ent) for ent in proto_ents] 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org normal_entries.extend(normal_ents) 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org proto_entries.extend(proto_ents) 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print '#ifndef _GLAPI_SKIP_NORMAL_ENTRY_POINTS' 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for ent in normal_entries: 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print ' TABLE_ENTRY(%s),' % (ent) 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print '#endif /* _GLAPI_SKIP_NORMAL_ENTRY_POINTS */' 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print '#ifndef _GLAPI_SKIP_PROTO_ENTRY_POINTS' 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for ent in proto_entries: 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print ' TABLE_ENTRY(%s),' % (ent) 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print '#endif /* _GLAPI_SKIP_PROTO_ENTRY_POINTS */' 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print '};' 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print '#endif /*UNUSED_TABLE_NAME*/' 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print '' 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org def classifyEntryPoints(self, func): 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org normal_names = [] 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org normal_stubs = [] 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org proto_names = [] 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org proto_stubs = [] 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org # classify the entry points 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for name in func.entry_points: 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if func.has_different_protocol(name): 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if func.is_static_entry_point(name): 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org proto_names.append(name) 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else: 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org proto_stubs.append(name) 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else: 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if func.is_static_entry_point(name): 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org normal_names.append(name) 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else: 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org normal_stubs.append(name) 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org # there can be at most one stub for a function 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if normal_stubs: 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org normal_names.append(normal_stubs[0]) 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org elif proto_stubs: 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org proto_names.append(proto_stubs[0]) 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (normal_names, proto_names) 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org def printBody(self, api): 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org normal_entry_points = [] 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org proto_entry_points = [] 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for func in api.functionIterateByOffset(): 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org normal_ents, proto_ents = self.classifyEntryPoints(func) 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org normal_entry_points.append((func, normal_ents)) 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org proto_entry_points.append((func, proto_ents)) 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print '#ifndef _GLAPI_SKIP_NORMAL_ENTRY_POINTS' 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print '' 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for func, ents in normal_entry_points: 284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for ent in ents: 285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org self.printFunction(func, ent) 286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print '' 287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print '#endif /* _GLAPI_SKIP_NORMAL_ENTRY_POINTS */' 288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print '' 289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print '/* these entry points might require different protocols */' 290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print '#ifndef _GLAPI_SKIP_PROTO_ENTRY_POINTS' 291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print '' 292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for func, ents in proto_entry_points: 293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for ent in ents: 294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org self.printFunction(func, ent) 295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print '' 296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print '#endif /* _GLAPI_SKIP_PROTO_ENTRY_POINTS */' 297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print '' 298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org self.printInitDispatch(api) 300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org self.printAliasedTable(api) 301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdef show_usage(): 305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print "Usage: %s [-f input_file_name] [-c]" % sys.argv[0] 306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org print "-c Enable compatibility with OpenGL ES." 307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org sys.exit(1) 308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgif __name__ == '__main__': 310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org file_name = "gl_API.xml" 311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org try: 313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (args, trail) = getopt.getopt(sys.argv[1:], "f:c") 314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org except Exception,e: 315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org show_usage() 316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org es = False 318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (arg,val) in args: 319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if arg == "-f": 320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org file_name = val 321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org elif arg == "-c": 322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org es = True 323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org api = gl_XML.parse_GL_API(file_name, glX_XML.glx_item_factory()) 325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printer = PrintGlOffsets(es) 327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printer.Print(api) 328