Mesa (master): anv/entrypoints: Parse entrypoints before extensions/features

Jason Ekstrand jekstrand at kemper.freedesktop.org
Tue Jan 23 08:38:21 UTC 2018


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

Author: Jason Ekstrand <jason.ekstrand at intel.com>
Date:   Tue Jan 16 17:20:33 2018 -0800

anv/entrypoints: Parse entrypoints before extensions/features

Reviewed-by: Samuel Iglesias Gonsálvez <siglesias at igalia.com>

---

 src/intel/vulkan/anv_entrypoints_gen.py | 32 +++++++++++++++++---------------
 1 file changed, 17 insertions(+), 15 deletions(-)

diff --git a/src/intel/vulkan/anv_entrypoints_gen.py b/src/intel/vulkan/anv_entrypoints_gen.py
index 8999df9069..ccbc2ffb5e 100644
--- a/src/intel/vulkan/anv_entrypoints_gen.py
+++ b/src/intel/vulkan/anv_entrypoints_gen.py
@@ -27,6 +27,7 @@ import functools
 import os
 import xml.etree.cElementTree as et
 
+from collections import OrderedDict
 from mako.template import Template
 
 from anv_extensions import *
@@ -276,6 +277,7 @@ class Entrypoint(object):
         self.return_type = return_type
         self.params = ', '.join(params)
         self.guard = guard
+        self.enabled = False
         self.num = None
 
     def prefixed_name(self, prefix):
@@ -287,7 +289,16 @@ class Entrypoint(object):
 
 def get_entrypoints(doc, entrypoints_to_defines, start_index):
     """Extract the entry points from the registry."""
-    entrypoints = []
+    entrypoints = OrderedDict()
+
+    for command in doc.findall('./commands/command'):
+        ret_type = command.find('./proto/type').text
+        fullname = command.find('./proto/name').text
+        params = (''.join(p.itertext()) for p in command.findall('./param'))
+        guard = entrypoints_to_defines.get(fullname)
+        # They really need to be unique
+        assert fullname not in entrypoints
+        entrypoints[fullname] = Entrypoint(fullname, ret_type, params, guard)
 
     enabled_commands = set()
     for feature in doc.findall('./feature'):
@@ -296,7 +307,8 @@ def get_entrypoints(doc, entrypoints_to_defines, start_index):
             continue
 
         for command in feature.findall('./require/command'):
-            enabled_commands.add(command.attrib['name'])
+            e = entrypoints[command.attrib['name']]
+            e.enabled = True
 
     supported = set(ext.name for ext in EXTENSIONS)
     for extension in doc.findall('.extensions/extension'):
@@ -307,20 +319,10 @@ def get_entrypoints(doc, entrypoints_to_defines, start_index):
             continue
 
         for command in extension.findall('./require/command'):
-            enabled_commands.add(command.attrib['name'])
-
-    for command in doc.findall('./commands/command'):
-        ret_type = command.find('./proto/type').text
-        fullname = command.find('./proto/name').text
-
-        if fullname not in enabled_commands:
-            continue
-
-        params = (''.join(p.itertext()) for p in command.findall('./param'))
-        guard = entrypoints_to_defines.get(fullname)
-        entrypoints.append(Entrypoint(fullname, ret_type, params, guard))
+            e = entrypoints[command.attrib['name']]
+            e.enabled = True
 
-    return entrypoints
+    return [e for e in entrypoints.itervalues() if e.enabled]
 
 
 def get_entrypoints_defines(doc):




More information about the mesa-commit mailing list