1c212abf99af494f024b0b981a83350f7ac9821efIan Romanick#!/usr/bin/env python 2c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 3c212abf99af494f024b0b981a83350f7ac9821efIan Romanick# (C) Copyright IBM Corporation 2005 4c212abf99af494f024b0b981a83350f7ac9821efIan Romanick# All Rights Reserved. 5c212abf99af494f024b0b981a83350f7ac9821efIan Romanick# 6c212abf99af494f024b0b981a83350f7ac9821efIan Romanick# Permission is hereby granted, free of charge, to any person obtaining a 7c212abf99af494f024b0b981a83350f7ac9821efIan Romanick# copy of this software and associated documentation files (the "Software"), 8c212abf99af494f024b0b981a83350f7ac9821efIan Romanick# to deal in the Software without restriction, including without limitation 9c212abf99af494f024b0b981a83350f7ac9821efIan Romanick# on the rights to use, copy, modify, merge, publish, distribute, sub 10c212abf99af494f024b0b981a83350f7ac9821efIan Romanick# license, and/or sell copies of the Software, and to permit persons to whom 11c212abf99af494f024b0b981a83350f7ac9821efIan Romanick# the Software is furnished to do so, subject to the following conditions: 12c212abf99af494f024b0b981a83350f7ac9821efIan Romanick# 13c212abf99af494f024b0b981a83350f7ac9821efIan Romanick# The above copyright notice and this permission notice (including the next 14c212abf99af494f024b0b981a83350f7ac9821efIan Romanick# paragraph) shall be included in all copies or substantial portions of the 15c212abf99af494f024b0b981a83350f7ac9821efIan Romanick# Software. 16c212abf99af494f024b0b981a83350f7ac9821efIan Romanick# 17c212abf99af494f024b0b981a83350f7ac9821efIan Romanick# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18c212abf99af494f024b0b981a83350f7ac9821efIan Romanick# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19c212abf99af494f024b0b981a83350f7ac9821efIan Romanick# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 20c212abf99af494f024b0b981a83350f7ac9821efIan Romanick# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21c212abf99af494f024b0b981a83350f7ac9821efIan Romanick# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22c212abf99af494f024b0b981a83350f7ac9821efIan Romanick# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 23c212abf99af494f024b0b981a83350f7ac9821efIan Romanick# IN THE SOFTWARE. 24c212abf99af494f024b0b981a83350f7ac9821efIan Romanick# 25c212abf99af494f024b0b981a83350f7ac9821efIan Romanick# Authors: 26c212abf99af494f024b0b981a83350f7ac9821efIan Romanick# Ian Romanick <idr@us.ibm.com> 27c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 28c212abf99af494f024b0b981a83350f7ac9821efIan Romanickimport gl_XML 29c212abf99af494f024b0b981a83350f7ac9821efIan Romanickimport license 30c212abf99af494f024b0b981a83350f7ac9821efIan Romanickimport sys, getopt, string 31c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 32c212abf99af494f024b0b981a83350f7ac9821efIan Romanickvtxfmt = [ 33c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "ArrayElement", \ 34c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "Color3f", \ 35c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "Color3fv", \ 36c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "Color4f", \ 37c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "Color4fv", \ 38c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "EdgeFlag", \ 39c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "EdgeFlagv", \ 40c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "EvalCoord1f", \ 41c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "EvalCoord1fv", \ 42c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "EvalCoord2f", \ 43c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "EvalCoord2fv", \ 44c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "EvalPoint1", \ 45c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "EvalPoint2", \ 46c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "FogCoordfEXT", \ 47c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "FogCoordfvEXT", \ 48c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "Indexf", \ 49c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "Indexfv", \ 50c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "Materialfv", \ 51c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "MultiTexCoord1fARB", \ 52c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "MultiTexCoord1fvARB", \ 53c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "MultiTexCoord2fARB", \ 54c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "MultiTexCoord2fvARB", \ 55c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "MultiTexCoord3fARB", \ 56c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "MultiTexCoord3fvARB", \ 57c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "MultiTexCoord4fARB", \ 58c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "MultiTexCoord4fvARB", \ 59c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "Normal3f", \ 60c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "Normal3fv", \ 61c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "SecondaryColor3fEXT", \ 62c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "SecondaryColor3fvEXT", \ 63c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "TexCoord1f", \ 64c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "TexCoord1fv", \ 65c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "TexCoord2f", \ 66c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "TexCoord2fv", \ 67c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "TexCoord3f", \ 68c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "TexCoord3fv", \ 69c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "TexCoord4f", \ 70c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "TexCoord4fv", \ 71c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "Vertex2f", \ 72c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "Vertex2fv", \ 73c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "Vertex3f", \ 74c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "Vertex3fv", \ 75c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "Vertex4f", \ 76c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "Vertex4fv", \ 77c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "CallList", \ 78c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "CallLists", \ 79c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "Begin", \ 80c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "End", \ 81c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "VertexAttrib1fNV", \ 82c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "VertexAttrib1fvNV", \ 83c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "VertexAttrib2fNV", \ 84c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "VertexAttrib2fvNV", \ 85c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "VertexAttrib3fNV", \ 86c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "VertexAttrib3fvNV", \ 87c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "VertexAttrib4fNV", \ 88c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "VertexAttrib4fvNV", \ 89c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "VertexAttrib1fARB", \ 90c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "VertexAttrib1fvARB", \ 91c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "VertexAttrib2fARB", \ 92c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "VertexAttrib2fvARB", \ 93c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "VertexAttrib3fARB", \ 94c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "VertexAttrib3fvARB", \ 95c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "VertexAttrib4fARB", \ 96c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "VertexAttrib4fvARB", \ 97c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "Rectf", \ 98c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "DrawArrays", \ 99c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "DrawElements", \ 100c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "DrawRangeElements", \ 101c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "EvalMesh1", \ 102c212abf99af494f024b0b981a83350f7ac9821efIan Romanick "EvalMesh2", \ 103c212abf99af494f024b0b981a83350f7ac9821efIan Romanick] 104c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 1051585c234e0db4bfb7cd85c4111594f6da1582e6fIan Romanickdef all_entrypoints_in_abi(f, abi, api): 1061585c234e0db4bfb7cd85c4111594f6da1582e6fIan Romanick for n in f.entry_points: 1071585c234e0db4bfb7cd85c4111594f6da1582e6fIan Romanick [category, num] = api.get_category_for_name( n ) 1081585c234e0db4bfb7cd85c4111594f6da1582e6fIan Romanick if category not in abi: 1091585c234e0db4bfb7cd85c4111594f6da1582e6fIan Romanick return 0 1101585c234e0db4bfb7cd85c4111594f6da1582e6fIan Romanick 1111585c234e0db4bfb7cd85c4111594f6da1582e6fIan Romanick return 1 1121585c234e0db4bfb7cd85c4111594f6da1582e6fIan Romanick 1131585c234e0db4bfb7cd85c4111594f6da1582e6fIan Romanick 1141585c234e0db4bfb7cd85c4111594f6da1582e6fIan Romanickdef any_entrypoints_in_abi(f, abi, api): 1151585c234e0db4bfb7cd85c4111594f6da1582e6fIan Romanick for n in f.entry_points: 1161585c234e0db4bfb7cd85c4111594f6da1582e6fIan Romanick [category, num] = api.get_category_for_name( n ) 1171585c234e0db4bfb7cd85c4111594f6da1582e6fIan Romanick if category in abi: 1181585c234e0db4bfb7cd85c4111594f6da1582e6fIan Romanick return 1 1191585c234e0db4bfb7cd85c4111594f6da1582e6fIan Romanick 1201585c234e0db4bfb7cd85c4111594f6da1582e6fIan Romanick return 0 1211585c234e0db4bfb7cd85c4111594f6da1582e6fIan Romanick 1221585c234e0db4bfb7cd85c4111594f6da1582e6fIan Romanick 123c212abf99af494f024b0b981a83350f7ac9821efIan Romanickdef condition_for_function(f, abi, all_not_in_ABI): 124c212abf99af494f024b0b981a83350f7ac9821efIan Romanick """Create a C-preprocessor condition for the function. 125c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 126c212abf99af494f024b0b981a83350f7ac9821efIan Romanick There are two modes of operation. If all_not_in_ABI is set, a 127c212abf99af494f024b0b981a83350f7ac9821efIan Romanick condition is only created is all of the entry-point names for f are 128c212abf99af494f024b0b981a83350f7ac9821efIan Romanick not in the selected ABI. If all_not_in_ABI is not set, a condition 129c212abf99af494f024b0b981a83350f7ac9821efIan Romanick is created if any entryp-point name is not in the selected ABI. 130c212abf99af494f024b0b981a83350f7ac9821efIan Romanick """ 131c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 132c212abf99af494f024b0b981a83350f7ac9821efIan Romanick condition = [] 133c212abf99af494f024b0b981a83350f7ac9821efIan Romanick for n in f.entry_points: 134c212abf99af494f024b0b981a83350f7ac9821efIan Romanick [category, num] = api.get_category_for_name( n ) 135c212abf99af494f024b0b981a83350f7ac9821efIan Romanick if category not in abi: 136c212abf99af494f024b0b981a83350f7ac9821efIan Romanick condition.append( 'defined(need_%s)' % (gl_XML.real_category_name( category )) ) 137c212abf99af494f024b0b981a83350f7ac9821efIan Romanick elif all_not_in_ABI: 138c212abf99af494f024b0b981a83350f7ac9821efIan Romanick return [] 139c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 140c212abf99af494f024b0b981a83350f7ac9821efIan Romanick return condition 141c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 142c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 143c212abf99af494f024b0b981a83350f7ac9821efIan Romanickclass PrintGlExtensionGlue(gl_XML.gl_print_base): 144c212abf99af494f024b0b981a83350f7ac9821efIan Romanick def __init__(self): 145c212abf99af494f024b0b981a83350f7ac9821efIan Romanick gl_XML.gl_print_base.__init__(self) 146c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 147c212abf99af494f024b0b981a83350f7ac9821efIan Romanick self.name = "extension_helper.py (from Mesa)" 148c212abf99af494f024b0b981a83350f7ac9821efIan Romanick self.license = license.bsd_license_template % ("(C) Copyright IBM Corporation 2005", "IBM") 149c212abf99af494f024b0b981a83350f7ac9821efIan Romanick return 150c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 151c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 152c212abf99af494f024b0b981a83350f7ac9821efIan Romanick def printRealHeader(self): 153c212abf99af494f024b0b981a83350f7ac9821efIan Romanick print '#include "utils.h"' 1542cf44390d1e819f23e1d7ceb3199276c9148c647Chia-I Wu print '#include "main/dispatch.h"' 155c212abf99af494f024b0b981a83350f7ac9821efIan Romanick print '' 156c212abf99af494f024b0b981a83350f7ac9821efIan Romanick return 157c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 158c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 159c212abf99af494f024b0b981a83350f7ac9821efIan Romanick def printBody(self, api): 160c212abf99af494f024b0b981a83350f7ac9821efIan Romanick abi = [ "1.0", "1.1", "1.2", "GL_ARB_multitexture" ] 161c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 162c212abf99af494f024b0b981a83350f7ac9821efIan Romanick category_list = {} 163c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 164c212abf99af494f024b0b981a83350f7ac9821efIan Romanick print '#ifndef NULL' 165c212abf99af494f024b0b981a83350f7ac9821efIan Romanick print '# define NULL 0' 166c212abf99af494f024b0b981a83350f7ac9821efIan Romanick print '#endif' 167c212abf99af494f024b0b981a83350f7ac9821efIan Romanick print '' 168c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 169c212abf99af494f024b0b981a83350f7ac9821efIan Romanick for f in api.functionIterateAll(): 170c212abf99af494f024b0b981a83350f7ac9821efIan Romanick condition = condition_for_function(f, abi, 0) 171c212abf99af494f024b0b981a83350f7ac9821efIan Romanick if len(condition): 172c212abf99af494f024b0b981a83350f7ac9821efIan Romanick print '#if %s' % (string.join(condition, " || ")) 17396bdd993ec2e02da676b2f7c6a15017e022e7185Ian Romanick print 'static const char %s_names[] =' % (f.name) 174c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 175c212abf99af494f024b0b981a83350f7ac9821efIan Romanick parameter_signature = '' 176c212abf99af494f024b0b981a83350f7ac9821efIan Romanick for p in f.parameterIterator(): 1770f73302d24f4201813da2939742c5bcb6964b3b1Ian Romanick if p.is_padding: 1780f73302d24f4201813da2939742c5bcb6964b3b1Ian Romanick continue 1790f73302d24f4201813da2939742c5bcb6964b3b1Ian Romanick 180c212abf99af494f024b0b981a83350f7ac9821efIan Romanick # FIXME: This is a *really* ugly hack. :( 181c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 182c212abf99af494f024b0b981a83350f7ac9821efIan Romanick tn = p.type_expr.get_base_type_node() 183c212abf99af494f024b0b981a83350f7ac9821efIan Romanick if p.is_pointer(): 184c212abf99af494f024b0b981a83350f7ac9821efIan Romanick parameter_signature += 'p' 185c212abf99af494f024b0b981a83350f7ac9821efIan Romanick elif tn.integer: 186c212abf99af494f024b0b981a83350f7ac9821efIan Romanick parameter_signature += 'i' 187c212abf99af494f024b0b981a83350f7ac9821efIan Romanick elif tn.size == 4: 188c212abf99af494f024b0b981a83350f7ac9821efIan Romanick parameter_signature += 'f' 189c212abf99af494f024b0b981a83350f7ac9821efIan Romanick else: 190c212abf99af494f024b0b981a83350f7ac9821efIan Romanick parameter_signature += 'd' 191c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 192c212abf99af494f024b0b981a83350f7ac9821efIan Romanick print ' "%s\\0" /* Parameter signature */' % (parameter_signature) 193c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 194c212abf99af494f024b0b981a83350f7ac9821efIan Romanick for n in f.entry_points: 195c212abf99af494f024b0b981a83350f7ac9821efIan Romanick print ' "gl%s\\0"' % (n) 196c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 197c212abf99af494f024b0b981a83350f7ac9821efIan Romanick [category, num] = api.get_category_for_name( n ) 198c212abf99af494f024b0b981a83350f7ac9821efIan Romanick if category not in abi: 199c212abf99af494f024b0b981a83350f7ac9821efIan Romanick c = gl_XML.real_category_name(category) 200c212abf99af494f024b0b981a83350f7ac9821efIan Romanick if not category_list.has_key(c): 201c212abf99af494f024b0b981a83350f7ac9821efIan Romanick category_list[ c ] = [] 202c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 2031585c234e0db4bfb7cd85c4111594f6da1582e6fIan Romanick category_list[ c ].append( f ) 204c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 205c212abf99af494f024b0b981a83350f7ac9821efIan Romanick print ' "";' 206c212abf99af494f024b0b981a83350f7ac9821efIan Romanick print '#endif' 207c212abf99af494f024b0b981a83350f7ac9821efIan Romanick print '' 208c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 209c212abf99af494f024b0b981a83350f7ac9821efIan Romanick keys = category_list.keys() 210c212abf99af494f024b0b981a83350f7ac9821efIan Romanick keys.sort() 211c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 212c212abf99af494f024b0b981a83350f7ac9821efIan Romanick for category in keys: 213c212abf99af494f024b0b981a83350f7ac9821efIan Romanick print '#if defined(need_%s)' % (category) 214c212abf99af494f024b0b981a83350f7ac9821efIan Romanick print 'static const struct dri_extension_function %s_functions[] = {' % (category) 2151585c234e0db4bfb7cd85c4111594f6da1582e6fIan Romanick 2161585c234e0db4bfb7cd85c4111594f6da1582e6fIan Romanick for f in category_list[ category ]: 2178fbe16d4dd0664f7766f5241c055efb582cc06e5Ian Romanick # A function either has an offset that is 2188fbe16d4dd0664f7766f5241c055efb582cc06e5Ian Romanick # assigned by the ABI, or it has a remap 2198fbe16d4dd0664f7766f5241c055efb582cc06e5Ian Romanick # index. 2201585c234e0db4bfb7cd85c4111594f6da1582e6fIan Romanick if any_entrypoints_in_abi(f, abi, api): 2211585c234e0db4bfb7cd85c4111594f6da1582e6fIan Romanick index_name = "-1" 2228fbe16d4dd0664f7766f5241c055efb582cc06e5Ian Romanick offset = f.offset 2231585c234e0db4bfb7cd85c4111594f6da1582e6fIan Romanick else: 2241585c234e0db4bfb7cd85c4111594f6da1582e6fIan Romanick index_name = "%s_remap_index" % (f.name) 2258fbe16d4dd0664f7766f5241c055efb582cc06e5Ian Romanick offset = -1 2261585c234e0db4bfb7cd85c4111594f6da1582e6fIan Romanick 2278fbe16d4dd0664f7766f5241c055efb582cc06e5Ian Romanick print ' { %s_names, %s, %d },' % (f.name, index_name, offset) 2281585c234e0db4bfb7cd85c4111594f6da1582e6fIan Romanick 2291585c234e0db4bfb7cd85c4111594f6da1582e6fIan Romanick 2301585c234e0db4bfb7cd85c4111594f6da1582e6fIan Romanick print ' { NULL, 0, 0 }' 231c212abf99af494f024b0b981a83350f7ac9821efIan Romanick print '};' 232c212abf99af494f024b0b981a83350f7ac9821efIan Romanick print '#endif' 233c212abf99af494f024b0b981a83350f7ac9821efIan Romanick print '' 234c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 235c212abf99af494f024b0b981a83350f7ac9821efIan Romanick return 236c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 237c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 238c212abf99af494f024b0b981a83350f7ac9821efIan Romanickclass PrintInitDispatch(gl_XML.gl_print_base): 239c212abf99af494f024b0b981a83350f7ac9821efIan Romanick def __init__(self): 240c212abf99af494f024b0b981a83350f7ac9821efIan Romanick gl_XML.gl_print_base.__init__(self) 241c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 242c212abf99af494f024b0b981a83350f7ac9821efIan Romanick self.name = "extension_helper.py (from Mesa)" 243c212abf99af494f024b0b981a83350f7ac9821efIan Romanick self.license = license.bsd_license_template % ("(C) Copyright IBM Corporation 2005", "IBM") 244c212abf99af494f024b0b981a83350f7ac9821efIan Romanick return 245c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 246c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 247c212abf99af494f024b0b981a83350f7ac9821efIan Romanick def do_function_body(self, api, abi, vtxfmt_only): 248c212abf99af494f024b0b981a83350f7ac9821efIan Romanick last_condition_string = None 249c212abf99af494f024b0b981a83350f7ac9821efIan Romanick for f in api.functionIterateByOffset(): 250c212abf99af494f024b0b981a83350f7ac9821efIan Romanick if (f.name in vtxfmt) and not vtxfmt_only: 251c212abf99af494f024b0b981a83350f7ac9821efIan Romanick continue 252c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 253c212abf99af494f024b0b981a83350f7ac9821efIan Romanick if (f.name not in vtxfmt) and vtxfmt_only: 254c212abf99af494f024b0b981a83350f7ac9821efIan Romanick continue 255c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 256c212abf99af494f024b0b981a83350f7ac9821efIan Romanick condition = condition_for_function(f, abi, 1) 257c212abf99af494f024b0b981a83350f7ac9821efIan Romanick condition_string = string.join(condition, " || ") 258c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 259c212abf99af494f024b0b981a83350f7ac9821efIan Romanick if condition_string != last_condition_string: 260c212abf99af494f024b0b981a83350f7ac9821efIan Romanick if last_condition_string: 261c212abf99af494f024b0b981a83350f7ac9821efIan Romanick print '#endif /* %s */' % (last_condition_string) 262c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 263c212abf99af494f024b0b981a83350f7ac9821efIan Romanick if condition_string: 264c212abf99af494f024b0b981a83350f7ac9821efIan Romanick print '#if %s' % (condition_string) 265c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 266c212abf99af494f024b0b981a83350f7ac9821efIan Romanick if vtxfmt_only: 267c212abf99af494f024b0b981a83350f7ac9821efIan Romanick print ' disp->%s = vfmt->%s;' % (f.name, f.name) 268c212abf99af494f024b0b981a83350f7ac9821efIan Romanick else: 269c212abf99af494f024b0b981a83350f7ac9821efIan Romanick print ' disp->%s = _mesa_%s;' % (f.name, f.name) 270c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 271c212abf99af494f024b0b981a83350f7ac9821efIan Romanick last_condition_string = condition_string 272c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 273c212abf99af494f024b0b981a83350f7ac9821efIan Romanick if last_condition_string: 274c212abf99af494f024b0b981a83350f7ac9821efIan Romanick print '#endif /* %s */' % (last_condition_string) 275c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 276c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 277c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 278c212abf99af494f024b0b981a83350f7ac9821efIan Romanick def printBody(self, api): 279c212abf99af494f024b0b981a83350f7ac9821efIan Romanick abi = [ "1.0", "1.1", "1.2", "GL_ARB_multitexture" ] 280c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 281c212abf99af494f024b0b981a83350f7ac9821efIan Romanick print 'void driver_init_exec_table(struct _glapi_table *disp)' 282c212abf99af494f024b0b981a83350f7ac9821efIan Romanick print '{' 283c212abf99af494f024b0b981a83350f7ac9821efIan Romanick self.do_function_body(api, abi, 0) 284c212abf99af494f024b0b981a83350f7ac9821efIan Romanick print '}' 285c212abf99af494f024b0b981a83350f7ac9821efIan Romanick print '' 286c212abf99af494f024b0b981a83350f7ac9821efIan Romanick print 'void driver_install_vtxfmt(struct _glapi_table *disp, const GLvertexformat *vfmt)' 287c212abf99af494f024b0b981a83350f7ac9821efIan Romanick print '{' 288c212abf99af494f024b0b981a83350f7ac9821efIan Romanick self.do_function_body(api, abi, 1) 289c212abf99af494f024b0b981a83350f7ac9821efIan Romanick print '}' 290c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 291c212abf99af494f024b0b981a83350f7ac9821efIan Romanick return 292c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 293c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 294c212abf99af494f024b0b981a83350f7ac9821efIan Romanickdef show_usage(): 295c212abf99af494f024b0b981a83350f7ac9821efIan Romanick print "Usage: %s [-f input_file_name] [-m output_mode]" % sys.argv[0] 296c212abf99af494f024b0b981a83350f7ac9821efIan Romanick print " -m output_mode Output mode can be one of 'extensions' or 'exec_init'." 297c212abf99af494f024b0b981a83350f7ac9821efIan Romanick sys.exit(1) 298c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 299c212abf99af494f024b0b981a83350f7ac9821efIan Romanickif __name__ == '__main__': 300c212abf99af494f024b0b981a83350f7ac9821efIan Romanick file_name = "gl_API.xml" 301c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 302c212abf99af494f024b0b981a83350f7ac9821efIan Romanick try: 303c212abf99af494f024b0b981a83350f7ac9821efIan Romanick (args, trail) = getopt.getopt(sys.argv[1:], "f:m:") 304c212abf99af494f024b0b981a83350f7ac9821efIan Romanick except Exception,e: 305c212abf99af494f024b0b981a83350f7ac9821efIan Romanick show_usage() 306c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 307c212abf99af494f024b0b981a83350f7ac9821efIan Romanick mode = "extensions" 308c212abf99af494f024b0b981a83350f7ac9821efIan Romanick for (arg,val) in args: 309c212abf99af494f024b0b981a83350f7ac9821efIan Romanick if arg == "-f": 310c212abf99af494f024b0b981a83350f7ac9821efIan Romanick file_name = val 311c212abf99af494f024b0b981a83350f7ac9821efIan Romanick if arg == '-m': 312c212abf99af494f024b0b981a83350f7ac9821efIan Romanick mode = val 313c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 314c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 315c212abf99af494f024b0b981a83350f7ac9821efIan Romanick api = gl_XML.parse_GL_API( file_name ) 316c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 317c212abf99af494f024b0b981a83350f7ac9821efIan Romanick if mode == "extensions": 318c212abf99af494f024b0b981a83350f7ac9821efIan Romanick printer = PrintGlExtensionGlue() 319c212abf99af494f024b0b981a83350f7ac9821efIan Romanick elif mode == "exec_init": 320c212abf99af494f024b0b981a83350f7ac9821efIan Romanick printer = PrintInitDispatch() 321c212abf99af494f024b0b981a83350f7ac9821efIan Romanick else: 322c212abf99af494f024b0b981a83350f7ac9821efIan Romanick show_usage() 323c212abf99af494f024b0b981a83350f7ac9821efIan Romanick 324c212abf99af494f024b0b981a83350f7ac9821efIan Romanick printer.Print( api ) 325