diff --git a/src/asahi/genxml/cmdbuf.xml b/src/asahi/genxml/cmdbuf.xml index 7496c60e050..62d6e028cc7 100644 --- a/src/asahi/genxml/cmdbuf.xml +++ b/src/asahi/genxml/cmdbuf.xml @@ -1127,7 +1127,7 @@ - + @@ -1140,7 +1140,7 @@ - + @@ -1158,7 +1158,7 @@ - + @@ -1185,7 +1185,7 @@ - + @@ -1302,7 +1302,7 @@ - + diff --git a/src/asahi/genxml/gen_pack.py b/src/asahi/genxml/gen_pack.py index 911cc5d188f..d5f45eff119 100644 --- a/src/asahi/genxml/gen_pack.py +++ b/src/asahi/genxml/gen_pack.py @@ -9,6 +9,7 @@ import xml.parsers.expat import sys import operator import math +import platform from functools import reduce global_prefix = "agx" @@ -449,6 +450,7 @@ class Parser(object): self.parser = xml.parsers.expat.ParserCreate() self.parser.StartElementHandler = self.start_element self.parser.EndElementHandler = self.end_element + self.os = platform.system().lower() self.struct = None self.structs = {} @@ -459,6 +461,9 @@ class Parser(object): return f'{global_prefix.upper()}_{name}' def start_element(self, name, attrs): + if "os" in attrs and attrs["os"] != self.os: + return + if name == "genxml": print(pack_header) elif name == "struct": @@ -471,7 +476,7 @@ class Parser(object): self.group.length = int(attrs["size"]) self.group.align = int(attrs["align"]) if "align" in attrs else None self.structs[attrs["name"]] = self.group - elif name == "field": + elif name == "field" and self.group is not None: self.group.fields.append(Field(self, attrs)) self.values = [] elif name == "enum": @@ -487,10 +492,12 @@ class Parser(object): def end_element(self, name): if name == "struct": - self.emit_struct() - self.struct = None + if self.struct is not None: + self.emit_struct() + self.struct = None + self.group = None - elif name == "field": + elif name == "field" and self.group is not None: self.group.fields[-1].values = self.values elif name == "enum": self.emit_enum()