Browse Source

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 <siglesias@igalia.com>
tags/18.1-branchpoint
Jason Ekstrand 8 years ago
parent
commit
39d9fcea13
1 changed files with 12 additions and 9 deletions
  1. 12
    9
      src/intel/vulkan/anv_entrypoints_gen.py

+ 12
- 9
src/intel/vulkan/anv_entrypoints_gen.py View File

@@ -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]


Loading…
Cancel
Save