166a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick#!/usr/bin/env python 20f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 30f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick# (C) Copyright IBM Corporation 2004, 2005 40f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick# All Rights Reserved. 50f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick# 60f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick# Permission is hereby granted, free of charge, to any person obtaining a 70f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick# copy of this software and associated documentation files (the "Software"), 80f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick# to deal in the Software without restriction, including without limitation 90f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick# on the rights to use, copy, modify, merge, publish, distribute, sub 100f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick# license, and/or sell copies of the Software, and to permit persons to whom 110f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick# the Software is furnished to do so, subject to the following conditions: 120f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick# 130f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick# The above copyright notice and this permission notice (including the next 140f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick# paragraph) shall be included in all copies or substantial portions of the 150f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick# Software. 160f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick# 170f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 180f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 190f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 200f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 210f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 220f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 230f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick# IN THE SOFTWARE. 240f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick# 250f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick# Authors: 260f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick# Ian Romanick <idr@us.ibm.com> 270f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 2866a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanickimport gl_XML, glX_XML, glX_proto_common, license 290f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanickimport sys, getopt 300f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 310f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 3266a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanickclass glx_doc_item_factory(glX_proto_common.glx_proto_item_factory): 330f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick """Factory to create GLX protocol documentation oriented objects derived from glItem.""" 340f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 3566a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick def create_item(self, name, element, context): 3666a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick if name == "parameter": 3766a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick return glx_doc_parameter(element, context) 380f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick else: 3966a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick return glX_proto_common.glx_proto_item_factory.create_item(self, name, element, context) 400f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 410f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 4266a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanickclass glx_doc_parameter(gl_XML.gl_parameter): 4366a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick def packet_type(self, type_dict): 440f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick """Get the type string for the packet header 450f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 460f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick GLX protocol documentation uses type names like CARD32, 470f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick FLOAT64, LISTofCARD8, and ENUM. This function converts the 480f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick type of the parameter to one of these names.""" 490f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 500f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick list_of = "" 510f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick if self.is_array(): 520f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick list_of = "LISTof" 530f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 5466a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick t_name = self.get_base_type_string() 5566a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick if not type_dict.has_key( t_name ): 560f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick type_name = "CARD8" 570f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick else: 5866a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick type_name = type_dict[ t_name ] 590f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 600f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick return "%s%s" % (list_of, type_name) 610f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 6266a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick 630f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick def packet_size(self): 640f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick p = None 650f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick s = self.size() 660f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick if s == 0: 670f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick a_prod = "n" 680f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick b_prod = self.p_type.size 690f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 703fec8c24ec14a5e07953828beba7e03d6367ae34Ian Romanick if not self.count_parameter_list and self.counter: 710f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick a_prod = self.counter 723fec8c24ec14a5e07953828beba7e03d6367ae34Ian Romanick elif self.count_parameter_list and not self.counter or self.is_output: 730f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick pass 743fec8c24ec14a5e07953828beba7e03d6367ae34Ian Romanick elif self.count_parameter_list and self.counter: 750f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick b_prod = self.counter 760f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick else: 770f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick raise RuntimeError("Parameter '%s' to function '%s' has size 0." % (self.name, self.context.name)) 780f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 790f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick ss = "%s*%s" % (a_prod, b_prod) 800f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 810f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick return [ss, p] 820f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick else: 830f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick if s % 4 != 0: 840f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick p = "p" 850f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 860f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick return [str(s), p] 870f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 8866a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanickclass PrintGlxProtoText(gl_XML.gl_print_base): 890f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick def __init__(self): 9066a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick gl_XML.gl_print_base.__init__(self) 910f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick self.license = "" 920f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 9366a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick 940f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick def printHeader(self): 950f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick return 960f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 9766a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick 980f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick def body_size(self, f): 990f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick # At some point, refactor this function and 1000f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick # glXFunction::command_payload_length. 1010f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 1020f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick size = 0; 1030f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick size_str = "" 1040f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick pad_str = "" 1050f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick plus = "" 10666a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick for p in f.parameterIterateGlxSend(): 1070f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick [s, pad] = p.packet_size() 1080f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick try: 1090f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick size += int(s) 1100f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick except Exception,e: 1110f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick size_str += "%s%s" % (plus, s) 1120f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick plus = "+" 1130f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 1140f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick if pad != None: 1150f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick pad_str = pad 1160f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 1170f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick return [size, size_str, pad_str] 1180f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 11966a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick 1200f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick def print_render_header(self, f): 1210f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick [size, size_str, pad_str] = self.body_size(f) 1220f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick size += 4; 1230f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 1240f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick if size_str == "": 1250f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick s = "%u" % ((size + 3) & ~3) 1260f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick elif pad_str != "": 1270f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick s = "%u+%s+%s" % (size, size_str, pad_str) 1280f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick else: 1290f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick s = "%u+%s" % (size, size_str) 1300f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 1310f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick print ' 2 %-15s rendering command length' % (s) 1320f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick print ' 2 %-4u rendering command opcode' % (f.glx_rop) 1330f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick return 1340f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 1350f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 1360f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick def print_single_header(self, f): 1370f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick [size, size_str, pad_str] = self.body_size(f) 1380f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick size = ((size + 3) / 4) + 2; 1390f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 1400f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick if f.glx_vendorpriv != 0: 1410f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick size += 1 1420f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 1430f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick print ' 1 CARD8 opcode (X assigned)' 1440f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick print ' 1 %-4u GLX opcode (%s)' % (f.opcode_real_value(), f.opcode_real_name()) 1450f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 1460f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick if size_str == "": 1470f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick s = "%u" % (size) 1480f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick elif pad_str != "": 1490f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick s = "%u+((%s+%s)/4)" % (size, size_str, pad_str) 1500f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick else: 1510f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick s = "%u+((%s)/4)" % (size, size_str) 1520f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 1530f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick print ' 2 %-15s request length' % (s) 1540f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 1550f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick if f.glx_vendorpriv != 0: 1560f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick print ' 4 %-4u vendor specific opcode' % (f.opcode_value()) 1570f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 1580f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick print ' 4 GLX_CONTEXT_TAG context tag' 1590f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 1600f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick return 1610f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 16266a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick 1630f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick def print_reply(self, f): 1640f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick print ' =>' 1650f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick print ' 1 1 reply' 1660f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick print ' 1 unused' 1670f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick print ' 2 CARD16 sequence number' 1680f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 1690f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick if f.output == None: 1700f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick print ' 4 0 reply length' 1710f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick elif f.reply_always_array: 1720f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick print ' 4 m reply length' 1730f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick else: 1740f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick print ' 4 m reply length, m = (n == 1 ? 0 : n)' 1750f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 1760f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 17766a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick output = None 17866a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick for x in f.parameterIterateOutputs(): 17966a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick output = x 18066a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick break 18166a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick 18266a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick 1830f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick unused = 24 18466a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick if f.return_type != 'void': 18566a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick print ' 4 %-15s return value' % (f.return_type) 1860f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick unused -= 4 18766a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick elif output != None: 1880f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick print ' 4 unused' 1890f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick unused -= 4 1900f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 19166a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick if output != None: 1920f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick print ' 4 CARD32 n' 1930f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick unused -= 4 1940f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 19566a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick if output != None: 1960f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick if not f.reply_always_array: 1970f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick print '' 1980f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick print ' if (n = 1) this follows:' 1990f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick print '' 20066a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick print ' 4 CARD32 %s' % (output.name) 2010f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick print ' %-2u unused' % (unused - 4) 2020f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick print '' 2030f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick print ' otherwise this follows:' 2040f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick print '' 2050f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 2060f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick print ' %-2u unused' % (unused) 20766a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick 20866a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick [s, pad] = output.packet_size() 20966a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick print ' %-8s %-15s %s' % (s, output.packet_type( self.type_map ), output.name) 2100f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick if pad != None: 2110f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick try: 2120f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick bytes = int(s) 2130f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick bytes = 4 - (bytes & 3) 2140f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick print ' %-8u %-15s unused' % (bytes, "") 2150f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick except Exception,e: 2160f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick print ' %-8s %-15s unused, %s=pad(%s)' % (pad, "", pad, s) 2170f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick else: 2180f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick print ' %-2u unused' % (unused) 2190f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 2200f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 2210f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick def print_body(self, f): 22266a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick for p in f.parameterIterateGlxSend(): 2230f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick [s, pad] = p.packet_size() 22466a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick print ' %-8s %-15s %s' % (s, p.packet_type( self.type_map ), p.name) 2250f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick if pad != None: 2260f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick try: 2270f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick bytes = int(s) 2280f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick bytes = 4 - (bytes & 3) 2290f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick print ' %-8u %-15s unused' % (bytes, "") 2300f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick except Exception,e: 2310f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick print ' %-8s %-15s unused, %s=pad(%s)' % (pad, "", pad, s) 2320f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 23366a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick def printBody(self, api): 23466a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick self.type_map = {} 23566a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick for t in api.typeIterate(): 23666a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick self.type_map[ "GL" + t.name ] = t.glx_name 23766a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick 23866a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick 2390f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick # At some point this should be expanded to support pixel 2400f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick # functions, but I'm not going to lose any sleep over it now. 2410f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 24266a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick for f in api.functionIterateByOffset(): 24366a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick if f.client_handcode or f.server_handcode or f.vectorequiv or len(f.get_images()): 24466a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick continue 2450f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 2460f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 24766a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick if f.glx_rop: 24866a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick print ' %s' % (f.name) 24966a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick self.print_render_header(f) 25066a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick elif f.glx_sop or f.glx_vendorpriv: 25166a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick print ' %s' % (f.name) 25266a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick self.print_single_header(f) 25366a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick else: 25466a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick continue 2550f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 25666a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick self.print_body(f) 2570f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 25866a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick if f.needs_reply(): 25966a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick self.print_reply(f) 26066a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick 26166a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick print '' 2620f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick return 2630f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 2640f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 2650f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanickif __name__ == '__main__': 2660f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick file_name = "gl_API.xml" 2670f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 2680f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick try: 2690f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick (args, trail) = getopt.getopt(sys.argv[1:], "f:") 2700f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick except Exception,e: 2710f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick show_usage() 2720f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 2730f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick for (arg,val) in args: 2740f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick if arg == "-f": 2750f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick file_name = val 2760f34f3efb894fb78c293e94cd51fe20a65cf9ae4Ian Romanick 27766a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick api = gl_XML.parse_GL_API( file_name, glx_doc_item_factory() ) 27866a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick 27966a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick printer = PrintGlxProtoText() 28066a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick printer.Print( api ) 281