Home | History | Annotate | Download | only in gen
      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