summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2017-09-19 14:44:26 -0700
committerJason Ekstrand <[email protected]>2018-03-07 12:13:47 -0800
commit8efa173ed2d42dd817462eaa1ab3a4746458e551 (patch)
treea618e8438999c143a7506cc265d369470b35b25f /src
parent39d9fcea13407a61a34eb744f01abeeb524951de (diff)
anv/entrypoints_gen: Add support for aliases in the XML
Reviewed-by: Lionel Landwerlin <[email protected]> Reviewed-by: Samuel Iglesias Gonsálvez <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/intel/vulkan/anv_entrypoints_gen.py65
1 files changed, 46 insertions, 19 deletions
diff --git a/src/intel/vulkan/anv_entrypoints_gen.py b/src/intel/vulkan/anv_entrypoints_gen.py
index 8769886e91b..fbbbf896a6c 100644
--- a/src/intel/vulkan/anv_entrypoints_gen.py
+++ b/src/intel/vulkan/anv_entrypoints_gen.py
@@ -76,6 +76,9 @@ extern const struct anv_dispatch_table ${layer}_dispatch_table;
extern const struct anv_dispatch_table anv_tramp_dispatch_table;
% for e in entrypoints:
+ % if e.alias:
+ <% continue %>
+ % endif
% if e.guard is not None:
#ifdef ${e.guard}
% endif
@@ -189,6 +192,9 @@ string_map_lookup(const char *str)
% for layer in LAYERS:
% for e in entrypoints:
+ % if e.alias:
+ <% continue %>
+ % endif
% if e.guard is not None:
#ifdef ${e.guard}
% endif
@@ -215,7 +221,7 @@ string_map_lookup(const char *str)
/** Trampoline entrypoints for all device functions */
% for e in entrypoints:
- % if not e.is_device_entrypoint():
+ % if e.alias or not e.is_device_entrypoint():
<% continue %>
% endif
% if e.guard is not None:
@@ -398,18 +404,24 @@ class StringIntMap(object):
EntrypointParam = namedtuple('EntrypointParam', 'type name decl')
-class Entrypoint(object):
- def __init__(self, name, return_type, params, guard = None):
+class EntrypointBase(object):
+ def __init__(self, name):
self.name = name
- self.return_type = return_type
- self.params = params
- self.guard = guard
+ self.alias = None
+ self.guard = None
self.enabled = False
self.num = None
# Extensions which require this entrypoint
self.core_version = None
self.extensions = []
+class Entrypoint(EntrypointBase):
+ def __init__(self, name, return_type, params, guard = None):
+ super(Entrypoint, self).__init__(name)
+ self.return_type = return_type
+ self.params = params
+ self.guard = guard
+
def is_device_entrypoint(self):
return self.params[0].type in ('VkDevice', 'VkCommandBuffer')
@@ -423,24 +435,39 @@ class Entrypoint(object):
def call_params(self):
return ', '.join(p.name for p in self.params)
+class EntrypointAlias(EntrypointBase):
+ def __init__(self, name, entrypoint):
+ super(EntrypointAlias, self).__init__(name)
+ self.alias = entrypoint
+
+ def is_device_entrypoint(self):
+ return self.alias.is_device_entrypoint()
+
+ def prefixed_name(self, prefix):
+ return self.alias.prefixed_name(prefix)
+
def get_entrypoints(doc, entrypoints_to_defines, start_index):
"""Extract the entry points from the registry."""
entrypoints = OrderedDict()
for command in doc.findall('./commands/command'):
- ret_type = command.find('./proto/type').text
- fullname = command.find('./proto/name').text
- params = [EntrypointParam(
- type = p.find('./type').text,
- name = p.find('./name').text,
- decl = ''.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()
+ if 'alias' in command.attrib:
+ alias = command.attrib['name']
+ target = command.attrib['alias']
+ entrypoints[alias] = EntrypointAlias(alias, entrypoints[target])
+ else:
+ name = command.find('./proto/name').text
+ ret_type = command.find('./proto/type').text
+ params = [EntrypointParam(
+ type = p.find('./type').text,
+ name = p.find('./name').text,
+ decl = ''.join(p.itertext())
+ ) for p in command.findall('./param')]
+ guard = entrypoints_to_defines.get(name)
+ # They really need to be unique
+ assert name not in entrypoints
+ entrypoints[name] = Entrypoint(name, ret_type, params, guard)
+
for feature in doc.findall('./feature'):
assert feature.attrib['api'] == 'vulkan'
version = VkVersion(feature.attrib['number'])