vulkan/enum_to_str: Add support for aliases and new Vulkan versions
authorJason Ekstrand <jason.ekstrand@intel.com>
Thu, 21 Sep 2017 15:26:06 +0000 (08:26 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Wed, 7 Mar 2018 20:13:47 +0000 (12:13 -0800)
Reviewed-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
src/vulkan/util/gen_enum_to_str.py

index 6182055442f41e24a39459d91ba7816411a2850c..bf883d5cb8ff552fcce63f8917340e231c260c79 100644 (file)
@@ -152,28 +152,38 @@ class VkEnum(object):
         self.name = name
         # Maps numbers to names
         self.values = values or dict()
+        self.name_to_value = dict()
 
     def add_value(self, name, value=None,
-                  extension=None, offset=None,
+                  extnum=None, offset=None,
                   error=False):
-        assert value is not None or extension is not None
+        assert value is not None or extnum is not None
         if value is None:
-            value = 1000000000 + (extension.number - 1) * 1000 + offset
+            value = 1000000000 + (extnum - 1) * 1000 + offset
             if error:
                 value = -value
 
+        self.name_to_value[name] = value
         if value not in self.values:
             self.values[value] = name
+        elif len(self.values[value]) > len(name):
+            self.values[value] = name
 
     def add_value_from_xml(self, elem, extension=None):
         if 'value' in elem.attrib:
             self.add_value(elem.attrib['name'],
                            value=int(elem.attrib['value']))
+        elif 'alias' in elem.attrib:
+            self.add_value(elem.attrib['name'],
+                           value=self.name_to_value[elem.attrib['alias']])
         else:
             error = 'dir' in elem.attrib and elem.attrib['dir'] == '-'
-            print(elem.attrib['name'])
+            if 'extnumber' in elem.attrib:
+                extnum = int(elem.attrib['extnumber'])
+            else:
+                extnum = extension.number
             self.add_value(elem.attrib['name'],
-                           extension=extension,
+                           extnum=extnum,
                            offset=int(elem.attrib['offset']),
                            error=error)
 
@@ -192,6 +202,11 @@ def parse_xml(enum_factory, ext_factory, filename):
         for value in enum_type.findall('./enum'):
             enum.add_value_from_xml(value)
 
+    for value in xml.findall('./feature/require/enum[@extends]'):
+        enum = enum_factory.get(value.attrib['extends'])
+        if enum is not None:
+            enum.add_value_from_xml(value)
+
     for ext_elem in xml.findall('./extensions/extension[@supported="vulkan"]'):
         extension = ext_factory(ext_elem.attrib['name'],
                                 number=int(ext_elem.attrib['number']))