1 #!/usr/bin/env python 2 3 # (C) Copyright IBM Corporation 2004, 2005 4 # 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 # on the rights to use, copy, modify, merge, publish, distribute, sub 10 # license, and/or sell copies of the Software, and to permit persons to whom 11 # the Software is furnished to do so, subject to the following conditions: 12 # 13 # The above copyright notice and this permission notice (including the next 14 # paragraph) shall be included in all copies or substantial portions of the 15 # Software. 16 # 17 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 # FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 20 # IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 23 # IN THE SOFTWARE. 24 # 25 # Authors: 26 # Ian Romanick <idr (at] us.ibm.com> 27 28 import gl_XML 29 import license 30 import sys, getopt 31 32 class PrintGlOffsets(gl_XML.gl_print_base): 33 def __init__(self, es=False): 34 gl_XML.gl_print_base.__init__(self) 35 36 self.es = es 37 self.name = "gl_offsets.py (from Mesa)" 38 self.header_tag = '_GLAPI_OFFSETS_H_' 39 self.license = license.bsd_license_template % ( \ 40 """Copyright (C) 1999-2001 Brian Paul All Rights Reserved. 41 (C) Copyright IBM Corporation 2004""", "BRIAN PAUL, IBM") 42 return 43 44 def printBody(self, api): 45 print '/* this file should not be included directly in mesa */' 46 print '' 47 48 functions = [] 49 abi_functions = [] 50 alias_functions = [] 51 count = 0 52 for f in api.functionIterateByOffset(): 53 if not f.is_abi(): 54 functions.append( [f, count] ) 55 count += 1 56 else: 57 abi_functions.append( f ) 58 59 if self.es: 60 # remember functions with aliases 61 if len(f.entry_points) > 1: 62 alias_functions.append(f) 63 64 for f in abi_functions: 65 print '#define _gloffset_%s %d' % (f.name, f.offset) 66 last_static = f.offset 67 68 print '' 69 print '#if !defined(_GLAPI_USE_REMAP_TABLE)' 70 print '' 71 72 for [f, index] in functions: 73 print '#define _gloffset_%s %d' % (f.name, f.offset) 74 75 print '#define _gloffset_FIRST_DYNAMIC %d' % (api.next_offset) 76 77 print '' 78 print '#else' 79 print '' 80 81 for [f, index] in functions: 82 print '#define _gloffset_%s driDispatchRemapTable[%s_remap_index]' % (f.name, f.name) 83 84 print '' 85 print '#endif /* !defined(_GLAPI_USE_REMAP_TABLE) */' 86 87 if alias_functions: 88 print '' 89 print '/* define aliases for compatibility */' 90 for f in alias_functions: 91 for name in f.entry_points: 92 if name != f.name: 93 print '#define _gloffset_%s _gloffset_%s' % (name, f.name) 94 return 95 96 97 def show_usage(): 98 print "Usage: %s [-f input_file_name] [-c]" % sys.argv[0] 99 print " -c Enable compatibility with OpenGL ES." 100 sys.exit(1) 101 102 if __name__ == '__main__': 103 file_name = "gl_API.xml" 104 105 try: 106 (args, trail) = getopt.getopt(sys.argv[1:], "f:c") 107 except Exception,e: 108 show_usage() 109 110 es = False 111 for (arg,val) in args: 112 if arg == "-f": 113 file_name = val 114 elif arg == "-c": 115 es = True 116 117 api = gl_XML.parse_GL_API( file_name ) 118 119 printer = PrintGlOffsets(es) 120 printer.Print( api ) 121