Mesa (master): vulkan/enum_to_str: Handle out-of-order aliases

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Nov 26 02:48:59 UTC 2019


Module: Mesa
Branch: master
Commit: 121551bfdb07786c8e26b712d87c8564bda556b4
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=121551bfdb07786c8e26b712d87c8564bda556b4

Author: Jason Ekstrand <jason at jlekstrand.net>
Date:   Wed Jun 26 13:35:54 2019 -0500

vulkan/enum_to_str: Handle out-of-order aliases

The current code can only handle enum aliases if the original enum is
declared first followed by the alias as we walk the XML in a linear
fashion.  This commit allows us to handle aliases where the alias
declaration comes before the thing it's aliasing.

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>

---

 src/vulkan/util/gen_enum_to_str.py | 24 +++++++++++++++++++++---
 1 file changed, 21 insertions(+), 3 deletions(-)

diff --git a/src/vulkan/util/gen_enum_to_str.py b/src/vulkan/util/gen_enum_to_str.py
index b65bc7f7ef6..035aa02a172 100644
--- a/src/vulkan/util/gen_enum_to_str.py
+++ b/src/vulkan/util/gen_enum_to_str.py
@@ -258,10 +258,23 @@ class VkEnum(object):
         self.values = values or dict()
         self.name_to_value = dict()
         self.guard = None
+        self.name_to_alias_list = {}
 
     def add_value(self, name, value=None,
-                  extnum=None, offset=None,
+                  extnum=None, offset=None, alias=None,
                   error=False):
+        if alias is not None:
+            assert value is None and offset is None
+            if alias not in self.name_to_value:
+                # We don't have this alias yet.  Just record the alias and
+                # we'll deal with it later.
+                alias_list = self.name_to_alias_list.get(alias, [])
+                alias_list.append(name);
+                return
+
+            # Use the value from the alias
+            value = self.name_to_value[alias]
+
         assert value is not None or extnum is not None
         if value is None:
             value = 1000000000 + (extnum - 1) * 1000 + offset
@@ -274,14 +287,19 @@ class VkEnum(object):
         elif len(self.values[value]) > len(name):
             self.values[value] = name
 
+        # Now that the value has been fully added, resolve aliases, if any.
+        if name in self.name_to_alias_list:
+            for alias in self.name_to_alias_list[name]:
+                add_value(alias, value)
+            del self.name_to_alias_list[name]
+
     def add_value_from_xml(self, elem, extension=None):
         self.extension = extension
         if 'value' in elem.attrib:
             self.add_value(elem.attrib['name'],
                            value=int(elem.attrib['value'], base=0))
         elif 'alias' in elem.attrib:
-            self.add_value(elem.attrib['name'],
-                           value=self.name_to_value[elem.attrib['alias']])
+            self.add_value(elem.attrib['name'], alias=elem.attrib['alias'])
         else:
             error = 'dir' in elem.attrib and elem.attrib['dir'] == '-'
             if 'extnumber' in elem.attrib:




More information about the mesa-commit mailing list