Merge branch 'gallium-0.1' into gallium-tex-surfaces
[mesa.git] / src / mesa / glapi / gl_apitemp.py
index d89440acbfac97ea450bb2dcc0008ead5dcb3535..6e35571e143ae635cacce61e627c0e374e7bd290 100644 (file)
@@ -1,6 +1,6 @@
-#!/usr/bin/python2
+#!/usr/bin/env python
 
-# (C) Copyright IBM Corporation 2004
+# (C) Copyright IBM Corporation 2004, 2005
 # All Rights Reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a
 # Authors:
 #    Ian Romanick <idr@us.ibm.com>
 
-from xml.sax import saxutils
-from xml.sax import make_parser
-from xml.sax.handler import feature_namespaces
-
-import gl_XML
+import gl_XML, glX_XML
 import license
 import sys, getopt
 
-class PrintGlOffsets(gl_XML.FilterGLAPISpecBase):
-       name = "gl_apitemp.py (from Mesa)"
-
+class PrintGlOffsets(gl_XML.gl_print_base):
        def __init__(self):
-               gl_XML.FilterGLAPISpecBase.__init__(self)
+               gl_XML.gl_print_base.__init__(self)
+
+               self.name = "gl_apitemp.py (from Mesa)"
                self.license = license.bsd_license_template % ( \
 """Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
 (C) Copyright IBM Corporation 2004""", "BRIAN PAUL, IBM")
 
-       def printFunction(self, f):
+               self.undef_list.append( "KEYWORD1" )
+               self.undef_list.append( "KEYWORD1_ALT" )
+               self.undef_list.append( "KEYWORD2" )
+               self.undef_list.append( "NAME" )
+               self.undef_list.append( "DISPATCH" )
+               self.undef_list.append( "RETURN_DISPATCH" )
+               self.undef_list.append( "DISPATCH_TABLE_NAME" )
+               self.undef_list.append( "UNUSED_TABLE_NAME" )
+               self.undef_list.append( "TABLE_ENTRY" )
+
+
+       def printFunction(self, f, name):
                p_string = ""
                o_string = ""
                t_string = ""
                comma = ""
 
-               for p in f.parameterIterator():
-                       cast = ""
+               if f.is_static_entry_point(name):
+                       keyword = "KEYWORD1"
+               else:
+                       keyword = "KEYWORD1_ALT"
+
+               n = f.static_name(name)
 
-                       if p.is_pointer:
-                               t = "%p"
+               for p in f.parameterIterator():
+                       if p.is_pointer():
                                cast = "(const void *) "
-                       elif p.p_type_string == 'GLenum':
-                               t = "0x%x"
-                       elif p.p_type_string in ['GLfloat', 'GLdouble', 'GLclampf', 'GLclampd']:
-                               t = "%f"
                        else:
-                               t = "%d"
+                               cast = ""
 
-                       t_string = t_string + comma + t
+                       t_string = t_string + comma + p.format_string()
                        p_string = p_string + comma + p.name
                        o_string = o_string + comma + cast + p.name
                        comma = ", "
 
 
-               if f.fn_return_type != 'void':
+               if f.return_type != 'void':
                        dispatch = "RETURN_DISPATCH"
                else:
                        dispatch = "DISPATCH"
 
-               print 'KEYWORD1 %s KEYWORD2 NAME(%s)(%s)' \
-                       % (f.fn_return_type, f.name, f.get_parameter_string())
+               if f.has_different_protocol(name):
+                       print '#ifndef GLX_INDIRECT_RENDERING'
+
+               if not f.is_static_entry_point(name):
+                       print '%s %s KEYWORD2 NAME(%s)(%s);' % (keyword, f.return_type, n, f.get_parameter_string(name))
+                       print ''
+
+               print '%s %s KEYWORD2 NAME(%s)(%s)' % (keyword, f.return_type, n, f.get_parameter_string(name))
                print '{'
                if p_string == "":
                        print '   %s(%s, (), (F, "gl%s();\\n"));' \
-                               % (dispatch, f.real_name, f.name)
+                               % (dispatch, f.name, name)
                else:
                        print '   %s(%s, (%s), (F, "gl%s(%s);\\n", %s));' \
-                               % (dispatch, f.real_name, p_string, f.name, t_string, o_string)
+                               % (dispatch, f.name, p_string, name, t_string, o_string)
                print '}'
+               if f.has_different_protocol(name):
+                       print '#endif /* GLX_INDIRECT_RENDERING */'
                print ''
                return
 
        def printRealHeader(self):
+               print ''
+               self.printVisibility( "HIDDEN", "hidden" )
                print """
 /*
  * This file is a template which generates the OpenGL API entry point
@@ -117,6 +134,10 @@ class PrintGlOffsets(gl_XML.FilterGLAPISpecBase):
 #define KEYWORD1
 #endif
 
+#ifndef KEYWORD1_ALT
+#define KEYWORD1_ALT HIDDEN
+#endif
+
 #ifndef KEYWORD2
 #define KEYWORD2
 #endif
@@ -134,7 +155,7 @@ class PrintGlOffsets(gl_XML.FilterGLAPISpecBase):
 
     
 
-       def printInitDispatch(self):
+       def printInitDispatch(self, api):
                print """
 #endif /* defined( NAME ) */
 
@@ -149,10 +170,8 @@ class PrintGlOffsets(gl_XML.FilterGLAPISpecBase):
 #endif
 
 static _glapi_proc DISPATCH_TABLE_NAME[] = {"""
-               for f in self.functionIterator():
-                       if f.fn_offset < 0: continue
-
-                       print '   TABLE_ENTRY(%s),' % (f.name)
+               for f in api.functionIterateByOffset():
+                       print '   TABLE_ENTRY(%s),' % (f.dispatch_name())
 
                print '   /* A whole bunch of no-op functions.  These might be called'
                print '    * when someone tries to call a dynamically-registered'
@@ -166,7 +185,8 @@ static _glapi_proc DISPATCH_TABLE_NAME[] = {"""
                print ''
                return
 
-       def printAliasedTable(self):
+
+       def printAliasedTable(self, api):
                print """
 /*
  * This is just used to silence compiler warnings.
@@ -175,30 +195,39 @@ static _glapi_proc DISPATCH_TABLE_NAME[] = {"""
 #ifdef UNUSED_TABLE_NAME
 static _glapi_proc UNUSED_TABLE_NAME[] = {"""
 
-               for f in self.functionIterator():
-                       if f.fn_offset < 0:
-                               print '   TABLE_ENTRY(%s),' % (f.name)
-
+               for f in api.functionIterateByOffset():
+                       for n in f.entry_points:
+                               if n != f.name:
+                                       if f.is_static_entry_point(n):
+                                               text = '   TABLE_ENTRY(%s),' % (n)
+
+                                               if f.has_different_protocol(n):
+                                                       print '#ifndef GLX_INDIRECT_RENDERING'
+                                                       print text
+                                                       print '#endif'
+                                               else:
+                                                       print text
                print '};'
                print '#endif /*UNUSED_TABLE_NAME*/'
                print ''
                return
 
-       def printRealFooter(self):
-               self.printInitDispatch()
-               self.printAliasedTable()
-               print"""
-#undef KEYWORD1
-#undef KEYWORD2
-#undef NAME
-#undef DISPATCH
-#undef RETURN_DISPATCH
-#undef DISPATCH_TABLE_NAME
-#undef UNUSED_TABLE_NAME
-#undef TABLE_ENTRY
-"""
+
+       def printBody(self, api):
+               for func in api.functionIterateByOffset():
+                       got_stub = 0
+                       for n in func.entry_points:
+                               if func.is_static_entry_point(n):
+                                       self.printFunction(func, n)
+                               elif not got_stub:
+                                       self.printFunction(func, n)
+                                       got_stub = 1
+
+               self.printInitDispatch(api)
+               self.printAliasedTable(api)
                return
 
+
 def show_usage():
        print "Usage: %s [-f input_file_name]" % sys.argv[0]
        sys.exit(1)
@@ -215,15 +244,7 @@ if __name__ == '__main__':
                if arg == "-f":
                        file_name = val
 
-       dh = PrintGlOffsets()
-
-       parser = make_parser()
-       parser.setFeature(feature_namespaces, 0)
-       parser.setContentHandler(dh)
-
-       f = open(file_name)
-
-       dh.printHeader()
-       parser.parse(f)
-       dh.printFooter()
+       api = gl_XML.parse_GL_API(file_name, glX_XML.glx_item_factory())
 
+       printer = PrintGlOffsets()
+       printer.Print(api)