Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  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@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.