diff options
Diffstat (limited to 'src/mesa/glapi/gl_table.py')
-rw-r--r-- | src/mesa/glapi/gl_table.py | 67 |
1 files changed, 57 insertions, 10 deletions
diff --git a/src/mesa/glapi/gl_table.py b/src/mesa/glapi/gl_table.py index 55a33748ae..908d966da5 100644 --- a/src/mesa/glapi/gl_table.py +++ b/src/mesa/glapi/gl_table.py @@ -30,9 +30,10 @@ import license import sys, getopt class PrintGlTable(gl_XML.gl_print_base): - def __init__(self): + def __init__(self, es=False): 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 % ( \ @@ -42,10 +43,29 @@ class PrintGlTable(gl_XML.gl_print_base): def printBody(self, api): + if self.es: + typedefs = [] + for t in api.typeIterate(): + if t.name == "fixed": + typedefs.append("typedef int GLfixed;") + elif t.name == "clampx": + typedefs.append("typedef int GLclampx;") + elif t.name == "eglImageOES": + typedefs.append("typedef void *GLeglImageOES;") + if typedefs: + print '#ifndef HAVE_GLES_TYPES' + print "\n".join(typedefs) + print '#endif' + print '' + print 'struct _glapi_table' + print '{' + for f in api.functionIterateByOffset(): arg_string = f.get_parameter_string() print ' %s (GLAPIENTRYP %s)(%s); /* %d */' % (f.return_type, f.name, arg_string, f.offset) + print '};' + def printRealHeader(self): print '#ifndef GLAPIENTRYP' @@ -56,21 +76,18 @@ class PrintGlTable(gl_XML.gl_print_base): print '# define GLAPIENTRYP GLAPIENTRY *' print '#endif' print '' - print '' - print 'struct _glapi_table' - print '{' return def printRealFooter(self): - print '};' return class PrintRemapTable(gl_XML.gl_print_base): - def __init__(self): + def __init__(self, es=False): 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 % ("(C) Copyright IBM Corporation 2005", "IBM") @@ -116,6 +133,7 @@ class PrintRemapTable(gl_XML.gl_print_base): functions = [] abi_functions = [] + alias_functions = [] count = 0 for f in api.functionIterateByOffset(): [category, num] = api.get_category_for_name( f.name ) @@ -125,6 +143,11 @@ class PrintRemapTable(gl_XML.gl_print_base): else: abi_functions.append( f ) + if self.es: + # remember functions with aliases + if [f.name] != f.entry_points: + alias_functions.append(f) + for f in abi_functions: print '#define CALL_%s(disp, parameters) (*((disp)->%s)) parameters' % (f.name, f.name) @@ -164,33 +187,57 @@ class PrintRemapTable(gl_XML.gl_print_base): print '' print '#endif /* !defined(IN_DRI_DRIVER) */' + + if self.es and 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 '' + + print '#if defined(IN_DRI_DRIVER)' + 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 '#endif /* defined(IN_DRI_DRIVER) */' + print '' + return def show_usage(): - print "Usage: %s [-f input_file_name] [-m mode]" % sys.argv[0] + print "Usage: %s [-f input_file_name] [-m mode] [-c]" % sys.argv[0] print " -m mode Mode can be 'table' or 'remap_table'." + print " -c Enable compatibility with OpenGL ES." sys.exit(1) if __name__ == '__main__': file_name = "gl_API.xml" try: - (args, trail) = getopt.getopt(sys.argv[1:], "f:m:") + (args, trail) = getopt.getopt(sys.argv[1:], "f:m:c") except Exception,e: show_usage() mode = "table" + es = False for (arg,val) in args: if arg == "-f": file_name = val elif arg == "-m": mode = val + elif arg == "-c": + es = True if mode == "table": - printer = PrintGlTable() + printer = PrintGlTable(es) elif mode == "remap_table": - printer = PrintRemapTable() + printer = PrintRemapTable(es) else: show_usage() |