Commit 39d9fcea authored by Jason Ekstrand's avatar Jason Ekstrand

anv/entrypoints: Allow an entrypoint to require multiple extensions

In this case, we say an entrypoint is supported if ANY of the extensions
is supported.  This is because, in the XML, entrypoints don't require
extensions so much as extensions require entrypoints.
Reviewed-by: Samuel Iglesias Gonsálvez's avatarSamuel Iglesias Gonsálvez <siglesias@igalia.com>
parent 8e8f167c
......@@ -266,14 +266,18 @@ anv_entrypoint_is_enabled(int index, uint32_t core_version,
switch (index) {
% for e in entrypoints:
case ${e.num}:
/* ${e.name} */
% if e.core_version:
return ${e.core_version.c_vk_version()} <= core_version;
% elif e.extension:
% if e.extension.type == 'instance':
return !device && instance->${e.extension.name[3:]};
% else:
return !device || device->${e.extension.name[3:]};
% endif
% elif e.extensions:
% for ext in e.extensions:
% if ext.type == 'instance':
if (!device && instance->${ext.name[3:]}) return true;
% else:
if (!device || device->${ext.name[3:]}) return true;
% endif
% endfor
return false;
% else:
return true;
% endif
......@@ -404,7 +408,7 @@ class Entrypoint(object):
self.num = None
# Extensions which require this entrypoint
self.core_version = None
self.extension = None
self.extensions = []
def is_device_entrypoint(self):
return self.params[0].type in ('VkDevice', 'VkCommandBuffer')
......@@ -465,8 +469,7 @@ def get_entrypoints(doc, entrypoints_to_defines, start_index):
e = entrypoints[command.attrib['name']]
e.enabled = True
assert e.core_version is None
assert e.extension is None
e.extension = ext
e.extensions.append(ext)
return [e for e in entrypoints.itervalues() if e.enabled]
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment