OSDN Git Service

glapi: Add OpenGL ES compatibility mode to scripts.
[android-x86/external-mesa.git] / src / mesa / glapi / gl_offsets.py
index f47eaa2..07db370 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
@@ -29,36 +29,92 @@ import gl_XML
 import license
 import sys, getopt
 
-class PrintGlOffsets(gl_XML.FilterGLAPISpecBase):
-       name = "gl_offsets.py (from Mesa)"
+class PrintGlOffsets(gl_XML.gl_print_base):
+       def __init__(self, es=False):
+               gl_XML.gl_print_base.__init__(self)
 
-       def __init__(self):
-               gl_XML.FilterGLAPISpecBase.__init__(self)
+               self.es = es
+               self.name = "gl_offsets.py (from Mesa)"
                self.header_tag = '_GLAPI_OFFSETS_H_'
                self.license = license.bsd_license_template % ( \
 """Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
 (C) Copyright IBM Corporation 2004""", "BRIAN PAUL, IBM")
+               return
 
-       def printFunction(self, f):
-               if f.fn_offset < 0: return
-               print '#define _gloffset_%s %d' % (f.name, f.fn_offset)
+       def printBody(self, api):
+               abi = [ "1.0", "1.1", "1.2", "GL_ARB_multitexture" ]
+
+               functions = []
+               abi_functions = []
+               alias_functions = []
+               count = 0
+               for f in api.functionIterateByOffset():
+                       [category, num] = api.get_category_for_name( f.name )
+                       if category not in abi:
+                               functions.append( [f, count] )
+                               count += 1
+                       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 _gloffset_%s %d' % (f.name, f.offset)
+                       last_static = f.offset
+
+               print ''
+               print '#if !defined(IN_DRI_DRIVER)'
+               print ''
+
+               for [f, index] in functions:
+                       print '#define _gloffset_%s %d' % (f.name, f.offset)
+
+               print '#define _gloffset_FIRST_DYNAMIC %d' % (api.next_offset)
+
+               print ''
+               print '#else'
+               print ''
+
+               for [f, index] in functions:
+                       print '#define _gloffset_%s driDispatchRemapTable[%s_remap_index]' % (f.name, f.name)
+
+               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 _gloffset_%s _gloffset_%s' % (name, f.name)
+               return
 
 
 def show_usage():
-       print "Usage: %s [-f input_file_name]" % sys.argv[0]
+       print "Usage: %s [-f input_file_name] [-c]" % sys.argv[0]
+       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:")
+               (args, trail) = getopt.getopt(sys.argv[1:], "f:c")
        except Exception,e:
                show_usage()
 
+       es = False
        for (arg,val) in args:
                if arg == "-f":
                        file_name = val
+               elif arg == "-c":
+                       es = True
+
+       api = gl_XML.parse_GL_API( file_name )
 
-       dh = PrintGlOffsets()
-       gl_XML.parse_GL_API( dh, file_name )
+       printer = PrintGlOffsets(es)
+       printer.Print( api )