diff --git a/src/freedreno/registers/gen_header.py b/src/freedreno/registers/gen_header.py index b52ba7b7b9e..f4b452c22ab 100644 --- a/src/freedreno/registers/gen_header.py +++ b/src/freedreno/registers/gen_header.py @@ -296,6 +296,7 @@ class Parser(object): self.current_array = None self.current_domain = None self.current_prefix = None + self.current_prefix_type = None self.current_stripe = None self.current_bitset = None self.current_bitsize = 32 @@ -307,8 +308,10 @@ class Parser(object): parser, filename = self.stack[-1] return Error("%s:%d:%d: %s" % (filename, parser.CurrentLineNumber, parser.CurrentColumnNumber, message)) - def prefix(self): - if self.current_stripe: + def prefix(self, variant=None): + if self.current_prefix_type == "variant" and variant: + return variant + elif self.current_stripe: return self.current_stripe + "_" + self.current_domain elif self.current_prefix: return self.current_prefix + "_" + self.current_domain @@ -407,7 +410,8 @@ class Parser(object): if "type" in attrs: self.parse_field(None, attrs) - self.current_reg = Reg(attrs, self.prefix(), self.current_array, bit_size) + variant = parse_variants(attrs) + self.current_reg = Reg(attrs, self.prefix(variant), self.current_array, bit_size) self.current_reg.bitset = self.current_bitset if len(self.stack) == 1: @@ -419,8 +423,12 @@ class Parser(object): self.do_parse(os.path.join(self.path, filename)) elif name == "domain": self.current_domain = attrs["name"] - if "prefix" in attrs and attrs["prefix"] == "chip": + if "prefix" in attrs: self.current_prefix = parse_variants(attrs) + self.current_prefix_type = attrs["prefix"] + else: + self.current_prefix = None + self.current_prefix_type = None elif name == "stripe": self.current_stripe = parse_variants(attrs) elif name == "enum": @@ -442,7 +450,8 @@ class Parser(object): self.parse_reg(attrs, 64) elif name == "array": self.current_bitsize = 32 - self.current_array = Array(attrs, self.prefix()) + variant = parse_variants(attrs) + self.current_array = Array(attrs, self.prefix(variant)) if len(self.stack) == 1: self.file.append(self.current_array) elif name == "bitset": @@ -461,6 +470,7 @@ class Parser(object): if name == "domain": self.current_domain = None self.current_prefix = None + self.current_prefix_type = None elif name == "stripe": self.current_stripe = None elif name == "bitset": diff --git a/src/freedreno/registers/rules-ng.xsd b/src/freedreno/registers/rules-ng.xsd index 46d6a2dad60..a8166c2efc6 100644 --- a/src/freedreno/registers/rules-ng.xsd +++ b/src/freedreno/registers/rules-ng.xsd @@ -218,6 +218,7 @@ +