X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=generate.py;h=4b6bb7902c7187f493a8868d9e2c07b17b2865b7;hb=d72ef6d75a11f6cc05ab8ec039520719e1044741;hp=229ecc3ecf18b347256a7cded1653ee6c0de2215;hpb=61fdcb975ab928dc2b56269e0602f3d8a66e726d;p=gldbg.git diff --git a/generate.py b/generate.py index 229ecc3..4b6bb79 100755 --- a/generate.py +++ b/generate.py @@ -1,5 +1,4 @@ #!/usr/bin/python -# $Id$ import sys import os @@ -146,10 +145,6 @@ class Function: if (s.type=="SizeI" or s.type.endswith("Int32") or s.type.startswith("BufferSize")): if s.kind=="value": self.csize = "%s"%self.size - if self.func.name.startswith("glUniformMatrix") and self.func.name[16]!='x': - self.csize += "*%d"%(int(self.func.name[15])**2) - elif self.func.name.startswith("glUniform") and self.func.name[9].isdigit(): - self.csize += "*%s"%self.func.name[9] if strip_name(self.base_ctype)!="void": self.csize += "*sizeof(%s)"%self.base_ctype elif s.kind=="array" and s.size==1: @@ -307,6 +302,8 @@ class Template: iomap = IOmap(api.iomap) for spec in api.specs: funcs = read_spec(spec, api.prefix) + for err in api.errata: + read_spec(err, api.prefix, funcs) funcs = [f for f in funcs if f.name not in api.ignore_funcs and f.category not in api.ignore_categs] for func in funcs: func.finalize(typemap, iomap) @@ -328,6 +325,7 @@ class Api: self.typemap = None self.iomap = None self.specs = [] + self.errata = [] self.prefix = None self.enumspecs = [] self.enumprefix = None @@ -344,6 +342,8 @@ class Api: self.iomap = os.path.join(path, parts[1]) elif parts[0]=="spec": self.specs.append(os.path.join(path, parts[1])) + elif parts[0]=="errata": + self.errata.append(os.path.join(path, parts[1])) elif parts[0]=="prefix": self.prefix = parts[1] elif parts[0]=="enumspec": @@ -359,8 +359,9 @@ class Api: sys.stderr.write("Unknown keyword '%s'\n", parts[0]) -def read_spec(fn, prefix): - funcs = [] +def read_spec(fn, prefix, funcs=None): + if funcs is None: + funcs = [] cur_func = None for line in InputFile(fn): @@ -392,8 +393,15 @@ def read_spec(fn, prefix): pnames = [n.strip() for n in line[paren+1:cparen].split(",")] else: pnames = [] - cur_func = Function(prefix+line[:paren], pnames) - funcs.append(cur_func) + fname = prefix+line[:paren] + cur_func = None + for f in funcs: + if f.name==fname: + cur_func = f + break + if not cur_func: + cur_func = Function(prefix+line[:paren], pnames) + funcs.append(cur_func) return funcs