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, glX_XML
  29. import string
  30.  
  31.  
  32. class glx_proto_item_factory(glX_XML.glx_item_factory):
  33.         """Factory to create GLX protocol oriented objects derived from gl_item."""
  34.    
  35.         def create_item(self, name, element, context):
  36.                 if name == "type":
  37.                         return glx_proto_type(element, context)
  38.                 else:
  39.                         return glX_XML.glx_item_factory.create_item(self, name, element, context)
  40.  
  41.  
  42. class glx_proto_type(gl_XML.gl_type):
  43.         def __init__(self, element, context):
  44.                 gl_XML.gl_type.__init__(self, element, context)
  45.  
  46.                 self.glx_name = element.nsProp( "glx_name", None )
  47.                 return
  48.  
  49.  
  50. class glx_print_proto(gl_XML.gl_print_base):
  51.         def size_call(self, func, outputs_also = 0):
  52.                 """Create C code to calculate 'compsize'.
  53.  
  54.                 Creates code to calculate 'compsize'.  If the function does
  55.                 not need 'compsize' to be calculated, None will be
  56.                 returned."""
  57.        
  58.                 compsize = None
  59.  
  60.                 for param in func.parameterIterator():
  61.                         if outputs_also or not param.is_output:
  62.                                 if param.is_image():
  63.                                         [dim, w, h, d, junk] = param.get_dimensions()
  64.  
  65.                                         compsize = '__glImageSize(%s, %s, %s, %s, %s, %s)' % (w, h, d, param.img_format, param.img_type, param.img_target)
  66.                                         if not param.img_send_null:
  67.                                                 compsize = '(%s != NULL) ? %s : 0' % (param.name, compsize)
  68.  
  69.                                         return compsize
  70.  
  71.                                 elif len(param.count_parameter_list):
  72.                                         parameters = string.join( param.count_parameter_list, "," )
  73.                                         compsize = "__gl%s_size(%s)" % (func.name, parameters)
  74.  
  75.                                         return compsize
  76.  
  77.                 return None
  78.  
  79.  
  80.         def emit_packet_size_calculation(self, f, bias):
  81.                 # compsize is only used in the command size calculation if
  82.                 # the function has a non-output parameter that has a non-empty
  83.                 # counter_parameter_list.
  84.  
  85.                 compsize = self.size_call(f)
  86.                 if compsize:
  87.                         print '    const GLuint compsize = %s;' % (compsize)
  88.  
  89.                 if bias:
  90.                         print '    const GLuint cmdlen = %s - %u;' % (f.command_length(), bias)
  91.                 else:
  92.                         print '    const GLuint cmdlen = %s;' % (f.command_length())
  93.  
  94.                 #print ''
  95.                 return compsize
  96.