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

Author: Jason Ekstrand <[email protected]>
Date:   Thu Sep 21 08:05:25 2017 -0700

vulkan: enum generator: Stop using iterparse

While using iterparse is potentially a little more efficient, the Vulkan
registry XML is not large and using regular element tree simplifies the
parsing logic substantially.

Reviewed-by: Dylan Baker <[email protected]>

---

 src/vulkan/util/gen_enum_to_str.py | 36 ++++++++++--------------------------
 1 file changed, 10 insertions(+), 26 deletions(-)

diff --git a/src/vulkan/util/gen_enum_to_str.py 
b/src/vulkan/util/gen_enum_to_str.py
index e89acb94bb..b54c740484 100644
--- a/src/vulkan/util/gen_enum_to_str.py
+++ b/src/vulkan/util/gen_enum_to_str.py
@@ -157,32 +157,16 @@ def parse_xml(enum_factory, ext_factory, filename):
     of VkEnum objects.
     """
 
-    with open(filename, 'rb') as f:
-        context = iter(et.iterparse(f, events=('start', 'end')))
-
-        # This gives the root element, since goal is to iterate over the
-        # elements without building a tree, this allows the root to be cleared
-        # (erase the elements) after the children have been processed.
-        _, root = next(context)
-
-        for event, elem in context:
-            if event == 'end' and elem.tag == 'enums':
-                type_ = elem.attrib.get('type')
-                if type_ == 'enum':
-                    enum = enum_factory(elem.attrib['name'])
-                    enum.values.extend([e.attrib['name'] for e in elem
-                                        if e.tag == 'enum'])
-            elif event == 'start' and elem.tag == 'extension':
-                ext_factory(elem.attrib['name'],
-                            number=int(elem.attrib['number']))
-            elif event == 'end' and elem.tag == 'extension':
-                if elem.attrib['supported'] != 'vulkan':
-                    continue
-                for e in elem.findall('.//enum[@extends][@offset]'):
-                    enum = enum_factory(e.attrib['extends'])
-                    enum.values.append(e.attrib['name'])
-
-            root.clear()
+    xml = et.parse(filename)
+
+    for enum_type in xml.findall('./enums[@type="enum"]'):
+        enum = enum_factory(enum_type.attrib['name'])
+        for value in enum_type.findall('./enum'):
+            enum.values.append(value.attrib['name'])
+
+    for ext_elem in xml.findall('./extensions/extension[@supported="vulkan"]'):
+        ext_factory(ext_elem.attrib['name'],
+                    number=int(ext_elem.attrib['number']))
 
 def main():
     parser = argparse.ArgumentParser()

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to