Mesa (master): intel/genxml/bits: Emit per-container _length helpers

Jason Ekstrand jekstrand at kemper.freedesktop.org
Sat Apr 8 05:34:26 UTC 2017


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

Author: Jason Ekstrand <jason.ekstrand at intel.com>
Date:   Wed Mar 29 20:39:18 2017 -0700

intel/genxml/bits: Emit per-container _length helpers

Reviewed-by: Topi Pohjolainen <topi.pohjolainen at intel.com>

---

 src/intel/genxml/gen_bits_header.py | 34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)

diff --git a/src/intel/genxml/gen_bits_header.py b/src/intel/genxml/gen_bits_header.py
index fc31baa1b8..ac8ec4c41f 100644
--- a/src/intel/genxml/gen_bits_header.py
+++ b/src/intel/genxml/gen_bits_header.py
@@ -107,6 +107,11 @@ ${item.token_name}_${prop}(const struct gen_device_info *devinfo)
 extern "C" {
 #endif
 % for _, container in sorted(containers.iteritems(), key=itemgetter(0)):
+
+/* ${container.name} */
+
+${emit_per_gen_prop_func(container, 'length')}
+
 % for _, field in sorted(container.fields.iteritems(), key=itemgetter(0)):
 
 /* ${container.name}::${field.name} */
@@ -191,8 +196,15 @@ class Container(object):
 
     def __init__(self, name):
         self.name = name
+        self.token_name = safe_name(name)
+        self.length_by_gen = {}
         self.fields = {}
 
+    def add_gen(self, gen, xml_attrs):
+        assert isinstance(gen, Gen)
+        if 'length' in xml_attrs:
+            self.length_by_gen[gen] = xml_attrs['length']
+
     def get_field(self, field_name, create=False):
         if field_name not in self.fields:
             if create:
@@ -201,6 +213,27 @@ class Container(object):
                 return None
         return self.fields[field_name]
 
+    def has_prop(self, prop):
+        if prop == 'length':
+            return bool(self.length_by_gen)
+        else:
+            raise ValueError('Invalid property: "{0}"'.format(prop))
+
+    def iter_prop(self, prop):
+        if prop == 'length':
+            return self.length_by_gen.iteritems()
+        else:
+            raise ValueError('Invalid property: "{0}"'.format(prop))
+
+    def get_prop(self, prop, gen):
+        if not isinstance(gen, Gen):
+            gen = Gen(gen)
+
+        if prop == 'length':
+            return self.length_by_gen.get(gen, 0)
+        else:
+            raise ValueError('Invalid property: "{0}"'.format(prop))
+
 class Field(object):
 
     def __init__(self, container, name):
@@ -277,6 +310,7 @@ class XmlParser(object):
         if name not in self.containers:
             self.containers[name] = Container(name)
         self.container = self.containers[name]
+        self.container.add_gen(self.gen, attrs)
 
     def start_field(self, attrs):
         if self.container is None:




More information about the mesa-commit mailing list