diff options
| author | Mike Schuchardt <mikes@lunarg.com> | 2017-08-24 15:15:02 -0600 |
|---|---|---|
| committer | Mike Schuchardt <mikes@lunarg.com> | 2017-08-28 07:17:31 -0700 |
| commit | 8d6d36ed7485844b905b510c9ded62bd3441b246 (patch) | |
| tree | e8a3ba5203533df829b06b64f81a14d18af46e5f /scripts/parameter_validation_generator.py | |
| parent | 256ab5f97a2330f103543399b5a5add22d210923 (diff) | |
| download | usermoji-8d6d36ed7485844b905b510c9ded62bd3441b246.tar.xz | |
scripts: PV codegen handle multiple requires
Modify parameter validation codegen to handle multiple require blocks in
an extension, each with additional extension dependencies.
Change-Id: I336569ca19808f3dca342eb65fd076599c4fb329
Diffstat (limited to 'scripts/parameter_validation_generator.py')
| -rw-r--r-- | scripts/parameter_validation_generator.py | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/scripts/parameter_validation_generator.py b/scripts/parameter_validation_generator.py index a7d973ff..23a54f69 100644 --- a/scripts/parameter_validation_generator.py +++ b/scripts/parameter_validation_generator.py @@ -175,7 +175,7 @@ class ParameterValidationOutputGenerator(OutputGenerator): self.flags = set() # Map of flags typenames self.flagBits = dict() # Map of flag bits typename to list of values self.newFlags = set() # Map of flags typenames /defined in the current feature/ - self.required_extensions = [] # List of required extensions for the current extension + self.required_extensions = dict() # Dictionary of required extensions for each item in the current extension self.extension_type = '' # Type of active feature (extension), device or instance self.extension_names = dict() # Dictionary of extension names to extension name defines self.valid_vuids = set() # Set of all valid VUIDs @@ -345,19 +345,34 @@ class ParameterValidationOutputGenerator(OutputGenerator): self.commands = [] self.structMembers = [] self.newFlags = set() - # Save list of required extensions for this extension - self.required_extensions = [] + + # Get base list of extension dependencies for all items in this extension + base_required_extensions = [] if self.featureName != "VK_VERSION_1_0": # Save Name Define to get correct enable name later nameElem = interface[0][1] name = nameElem.get('name') self.extension_names[self.featureName] = name # This extension is the first dependency for this command - self.required_extensions.append(self.featureName) - # Add any defined extension dependencies to the dependency list for this command - required_extensions = interface.get('requires') - if required_extensions is not None: - self.required_extensions.extend(required_extensions.split(',')) + base_required_extensions.append(self.featureName) + # Add any defined extension dependencies to the base dependency list for this extension + requires = interface.get('requires') + if requires is not None: + base_required_extensions.extend(requires.split(',')) + + # Build dictionary of extension dependencies for each item in this extension + self.required_extensions = dict() + for require_element in interface.findall('require'): + # Copy base extension dependency list + required_extensions = list(base_required_extensions) + # Add any additional extension dependencies specified in this require block + additional_extensions = require_element.get('extension') + if additional_extensions: + required_extensions.extend(additional_extensions.split(',')) + # Save full extension list for all named items + for element in require_element.findall('*[@name]'): + self.required_extensions[element.get('name')] = required_extensions + # And note if this is an Instance or Device extension self.extension_type = interface.get('type') # @@ -1143,9 +1158,9 @@ class ParameterValidationOutputGenerator(OutputGenerator): startIndex = 0 if command.name == 'vkCreateInstance' else 1 lines, unused = self.genFuncBody(command.name, command.params[startIndex:], '', '', None) # Cannot validate extension dependencies for device extension APIs having a physical device as their dispatchable object - if self.required_extensions and (self.extension_type != 'device' or command.params[0].type != 'VkPhysicalDevice'): + if (command.name in self.required_extensions) and (self.extension_type != 'device' or command.params[0].type != 'VkPhysicalDevice'): ext_test = '' - for ext in self.required_extensions: + for ext in self.required_extensions[command.name]: ext_name_define = '' ext_enable_name = '' for extension in self.registry.extensions: |
