-#!/usr/bin/python2
# (C) Copyright IBM Corporation 2004
# All Rights Reserved.
# Authors:
# Ian Romanick <idr@us.ibm.com>
-import sys
-import getopt
+import argparse
import gl_XML
import license
class PrintGlTable(gl_XML.gl_print_base):
- def __init__(self, es=False):
+ def __init__(self):
gl_XML.gl_print_base.__init__(self)
- self.es = es
self.header_tag = '_GLAPI_TABLE_H_'
self.name = "gl_table.py (from Mesa)"
self.license = license.bsd_license_template % ( \
"""Copyright (C) 1999-2003 Brian Paul All Rights Reserved.
(C) Copyright IBM Corporation 2004""", "BRIAN PAUL, IBM")
- self.ifdef_emitted = False
return
def printBody(self, api):
for f in api.functionIterateByOffset():
- if not f.is_abi() and not self.ifdef_emitted:
- print '#if !defined HAVE_SHARED_GLAPI'
- self.ifdef_emitted = True
arg_string = f.get_parameter_string()
print ' %s (GLAPIENTRYP %s)(%s); /* %d */' % (
f.return_type, f.name, arg_string, f.offset)
- print '#endif /* !defined HAVE_SHARED_GLAPI */'
-
def printRealHeader(self):
print '#ifndef GLAPIENTRYP'
print '# ifndef GLAPIENTRY'
class PrintRemapTable(gl_XML.gl_print_base):
- def __init__(self, es=False):
+ def __init__(self):
gl_XML.gl_print_base.__init__(self)
- self.es = es
self.header_tag = '_DISPATCH_H_'
self.name = "gl_table.py (from Mesa)"
self.license = license.bsd_license_template % (
functions = []
abi_functions = []
- alias_functions = []
count = 0
for f in api.functionIterateByOffset():
if not f.is_abi():
else:
abi_functions.append([f, -1])
- if self.es:
- # remember functions with aliases
- if len(f.entry_points) > 1:
- alias_functions.append(f)
-
print '/* total number of offsets below */'
print '#define _gloffset_COUNT %d' % (len(abi_functions + functions))
print ''
for f, index in abi_functions:
print '#define _gloffset_%s %d' % (f.name, f.offset)
- if self.es:
- remap_table = "esLocalRemapTable"
+ remap_table = "driDispatchRemapTable"
- print '#define %s_size %u' % (remap_table, count)
- print 'static int %s[ %s_size ];' % (remap_table, remap_table)
- print ''
- else:
- remap_table = "driDispatchRemapTable"
-
- print '#define %s_size %u' % (remap_table, count)
- print 'extern int %s[ %s_size ];' % (remap_table, remap_table)
- print ''
+ print '#define %s_size %u' % (remap_table, count)
+ print 'extern int %s[ %s_size ];' % (remap_table, remap_table)
+ print ''
for f, index in functions:
print '#define %s_remap_index %u' % (f.name, index)
print '}'
print
- if alias_functions:
- print ''
- print '/* define aliases for compatibility */'
- for f in alias_functions:
- for name in f.entry_points:
- if name != f.name:
- print '#define CALL_%s(disp, parameters) CALL_%s(disp, parameters)' % (name, f.name)
- print '#define GET_%s(disp) GET_%s(disp)' % (name, f.name)
- print '#define SET_%s(disp, fn) SET_%s(disp, fn)' % (name, f.name)
- print ''
-
- for f in alias_functions:
- for name in f.entry_points:
- if name != f.name:
- print '#define %s_remap_index %s_remap_index' % (name, f.name)
- print ''
-
return
-def show_usage():
- print "Usage: %s [-f input_file_name] [-m mode] [-c ver]" % sys.argv[0]
- print " -m mode Mode can be 'table' or 'remap_table'."
- print " -c ver Version can be 'es1' or 'es2'."
- sys.exit(1)
+def _parser():
+ """Parse arguments and return a namespace."""
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-f', '--filename',
+ default='gl_API.xml',
+ metavar="input_file_name",
+ dest='file_name',
+ help="Path to an XML description of OpenGL API.")
+ parser.add_argument('-m', '--mode',
+ choices=['table', 'remap_table'],
+ default='table',
+ metavar="mode",
+ help="Generate either a table or a remap_table")
+ return parser.parse_args()
def main():
"""Main function."""
- file_name = "gl_API.xml"
-
- try:
- args, _ = getopt.getopt(sys.argv[1:], "f:m:c:")
- except Exception:
- show_usage()
-
- mode = "table"
- es = None
- for (arg, val) in args:
- if arg == "-f":
- file_name = val
- elif arg == "-m":
- mode = val
- elif arg == "-c":
- es = val
-
- if mode == "table":
- printer = PrintGlTable(es)
- elif mode == "remap_table":
- printer = PrintRemapTable(es)
- else:
- show_usage()
-
- api = gl_XML.parse_GL_API(file_name)
-
- if es is not None:
- api.filter_functions_by_api(es)
+ args = _parser()
+
+ api = gl_XML.parse_GL_API(args.file_name)
+
+ if args.mode == "table":
+ printer = PrintGlTable()
+ elif args.mode == "remap_table":
+ printer = PrintRemapTable()
printer.Print(api)