From 00e760c971ccd6ffab7895a157b5256d54aba24e Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Thu, 17 Mar 2005 01:50:32 +0000 Subject: Refactored some of the code for PrintGlxReqSize_[ch]. This ensures that the same set of functions will be iterated for both the generated C-source file and the generated header file. --- src/mesa/glapi/glX_proto_size.py | 63 ++++++++++++++++++++++++++++------------ 1 file changed, 44 insertions(+), 19 deletions(-) diff --git a/src/mesa/glapi/glX_proto_size.py b/src/mesa/glapi/glX_proto_size.py index 404b526b85..a3c339f52c 100644 --- a/src/mesa/glapi/glX_proto_size.py +++ b/src/mesa/glapi/glX_proto_size.py @@ -227,13 +227,45 @@ class PrintGlxSizeStubs_h(PrintGlxSizeStubs_common): print 'extern INTERNAL PURE FASTCALL GLint __gl%s_size(GLenum);' % (f.name) -class PrintGlxReqSize_h(glX_XML.GlxProto): +class PrintGlxReqSize_common(glX_XML.GlxProto): + """Common base class for PrintGlxSizeReq_h and PrintGlxSizeReq_h. + + The main purpose of this common base class is to provide the infrastructure + for the derrived classes to iterate over the same set of functions. + """ + def __init__(self): glX_XML.GlxProto.__init__(self) self.name = "glX_proto_size.py (from Mesa)" self.license = license.bsd_license_template % ( "(C) Copyright IBM Corporation 2005", "IBM") self.aliases = [] self.glx_enum_sigs = {} + self.size_functions = [] + + + def endElement(self, name): + if name == "function": + f = self.current_object + if f.glx_rop and not f.ignore and f.fn_alias == None and f.vectorequiv == None: + + if self.glx_enum_functions.has_key(f.name) or f.image or f.server_handcode: + self.size_functions.append( f ) + else: + for p in f.parameterIterator(1,2): + if p.counter and not p.is_output: + self.size_functions.append( f ) + break + + glX_XML.GlxProto.endElement(self, name) + + + def functionIterator(self): + return self.size_functions + + +class PrintGlxReqSize_h(PrintGlxReqSize_common): + def __init__(self): + PrintGlxReqSize_common.__init__(self) self.header_tag = "_INDIRECT_REQSIZE_H_" @@ -245,25 +277,12 @@ class PrintGlxReqSize_h(glX_XML.GlxProto): def printFunction(self, f): - if f.glx_rop == 0: return - - has_counter = 0 - for p in f.parameterIterator(1,2): - if p.is_counter: - has_counter = 1 - break - - if self.glx_enum_functions.has_key(f.name) or f.image or has_counter: - print 'extern PURE HIDDEN int __glX%sReqSize(const GLbyte *pc, Bool swap);' % (f.name) + print 'extern PURE HIDDEN int __glX%sReqSize(const GLbyte *pc, Bool swap);' % (f.name) -class PrintGlxReqSize_c(glX_XML.GlxProto): +class PrintGlxReqSize_c(PrintGlxReqSize_common): def __init__(self): - glX_XML.GlxProto.__init__(self) - self.name = "glX_proto_size.py (from Mesa)" - self.license = license.bsd_license_template % ( "(C) Copyright IBM Corporation 2005", "IBM") - self.aliases = [] - self.glx_enum_sigs = {} + PrintGlxReqSize_common.__init__(self) self.counter_sigs = {} @@ -304,7 +323,13 @@ class PrintGlxReqSize_c(glX_XML.GlxProto): def printFunction(self, f): - if f.glx_rop == 0 or f.server_handcode: return + # Even though server-handcode fuctions are on "the list", + # and prototypes are generated for them, there isn't enough + # information to generate a size function. If there was + # enough information, they probably wouldn't need to be + # handcoded in the first place! + + if f.server_handcode: return if self.glx_enum_functions.has_key(f.name): ef = self.glx_enum_functions[f.name] @@ -425,7 +450,7 @@ class PrintGlxReqSize_c(glX_XML.GlxProto): offset += p.size() - # If the calculate signature matches a function that has + # If the calculated signature matches a function that has # already be emitted, don't emit this function. Instead, add # it to the list of function aliases. -- cgit v1.2.3