From 87bf8bb455d56e9833b33a94384388232e8c6b4e Mon Sep 17 00:00:00 2001 From: Mike Schuchardt Date: Sun, 23 Jul 2017 12:47:47 -0600 Subject: scripts: Switch codegen to use structextends Replace all usages of the deprecated validextensionstructs member attribute with the registry.validextensionstructs dict. Internally the registry builds this extension dictionary using the new structextends type attribute. Change-Id: I072ff707bfdfa1f576266291e4196837da526287 --- scripts/helper_file_generator.py | 2 +- scripts/parameter_validation_generator.py | 7 +++---- scripts/unique_objects_generator.py | 16 ++++++++-------- 3 files changed, 12 insertions(+), 13 deletions(-) (limited to 'scripts') diff --git a/scripts/helper_file_generator.py b/scripts/helper_file_generator.py index 895075bb..7d00e6d6 100644 --- a/scripts/helper_file_generator.py +++ b/scripts/helper_file_generator.py @@ -344,7 +344,7 @@ class HelperFileOutputGenerator(OutputGenerator): isconst=True if 'const' in cdecl else False, iscount=True if name in lens else False, len=self.getLen(member), - extstructs=member.attrib.get('validextensionstructs') if name == 'pNext' else None, + extstructs=self.registry.validextensionstructs[typeName] if name == 'pNext' else None, cdecl=cdecl)) self.structMembers.append(self.StructMemberData(name=typeName, members=membersInfo, ifdef_protect=self.featureExtraProtect)) # diff --git a/scripts/parameter_validation_generator.py b/scripts/parameter_validation_generator.py index 5a945f72..f1dfba1f 100644 --- a/scripts/parameter_validation_generator.py +++ b/scripts/parameter_validation_generator.py @@ -422,7 +422,7 @@ class ParamCheckerOutputGenerator(OutputGenerator): iscount=iscount, noautovalidity=noautovalidity, len=self.getLen(member), - extstructs=member.attrib.get('validextensionstructs') if name == 'pNext' else None, + extstructs=self.registry.validextensionstructs[typeName] if name == 'pNext' else None, condition=conditions[name] if conditions and name in conditions else None, cdecl=cdecl)) self.structMembers.append(self.StructMemberData(name=typeName, members=membersInfo)) @@ -795,9 +795,8 @@ class ParamCheckerOutputGenerator(OutputGenerator): if value.extstructs: extStructVar = 'allowed_structs_{}'.format(struct_type_name) extStructCount = 'ARRAY_SIZE({})'.format(extStructVar) - structs = value.extstructs.split(',') - extStructNames = '"' + ', '.join(structs) + '"' - checkExpr.append('const VkStructureType {}[] = {{ {} }};\n'.format(extStructVar, ', '.join([self.getStructType(s) for s in structs]))) + extStructNames = '"' + ', '.join(value.extstructs) + '"' + checkExpr.append('const VkStructureType {}[] = {{ {} }};\n'.format(extStructVar, ', '.join([self.getStructType(s) for s in value.extstructs]))) checkExpr.append('skipCall |= validate_struct_pnext(layer_data->report_data, "{}", {ppp}"{}"{pps}, {}, {}{}, {}, {}, GeneratedHeaderVersion, {});\n'.format( funcPrintName, valuePrintName, extStructNames, prefix, value.name, extStructCount, extStructVar, vuid, **postProcSpec)) return checkExpr diff --git a/scripts/unique_objects_generator.py b/scripts/unique_objects_generator.py index 3af26fb0..9cfa9546 100644 --- a/scripts/unique_objects_generator.py +++ b/scripts/unique_objects_generator.py @@ -172,7 +172,7 @@ class UniqueObjectsOutputGenerator(OutputGenerator): self.cmd_info_data = [] # Save the cmdinfo data for wrapping the handles when processing is complete self.structMembers = [] # List of StructMemberData records for all Vulkan structs self.extension_structs = [] # List of all structs or sister-structs containing handles - # A sister-struct may contain no handles but shares with one that does + # A sister-struct may contain no handles but shares a structextends attribute with one that does self.structTypes = dict() # Map of Vulkan struct typename to required VkStructureType self.struct_member_dict = dict() # Named tuples to store struct and command data @@ -400,7 +400,7 @@ class UniqueObjectsOutputGenerator(OutputGenerator): # Store the required type value self.structTypes[typeName] = self.StructType(name=name, value=value) # Store pointer/array/string info - extstructs = member.attrib.get('validextensionstructs') if name == 'pNext' else None + extstructs = self.registry.validextensionstructs[typeName] if name == 'pNext' else None membersInfo.append(self.CommandParam(type=type, name=name, ispointer=self.paramIsPointer(member), @@ -457,18 +457,18 @@ class UniqueObjectsOutputGenerator(OutputGenerator): ndo_list.add(item) return ndo_list # - # Construct list of extension structs containing handles, or extension structs that share a - # tag WITH an extension struct containing handles. All extension structs in any pNext chain will have to be copied. + # Construct list of extension structs containing handles, or extension structs that share a structextends attribute + # WITH an extension struct containing handles. All extension structs in any pNext chain will have to be copied. # TODO: make this recursive -- structs buried three or more levels deep are not searched for extensions def GenerateCommandWrapExtensionList(self): for struct in self.structMembers: if (len(struct.members) > 1) and struct.members[1].extstructs is not None: found = False; - for item in struct.members[1].extstructs.split(','): + for item in struct.members[1].extstructs: if item != '' and self.struct_contains_ndo(item) == True: found = True if found == True: - for item in struct.members[1].extstructs.split(','): + for item in struct.members[1].extstructs: if item != '' and item not in self.extension_structs: self.extension_structs.append(item) # @@ -477,7 +477,7 @@ class UniqueObjectsOutputGenerator(OutputGenerator): if struct_type in self.struct_member_dict: param_info = self.struct_member_dict[struct_type] if (len(param_info) > 1) and param_info[1].extstructs is not None: - for item in param_info[1].extstructs.split(','): + for item in param_info[1].extstructs: if item in self.extension_structs: return True return False @@ -820,7 +820,7 @@ class UniqueObjectsOutputGenerator(OutputGenerator): islocal = True isdestroy = True if True in [destroy_txt in cmdname for destroy_txt in ['Destroy', 'Free']] else False iscreate = True if True in [create_txt in cmdname for create_txt in ['Create', 'Allocate', 'GetRandROutputDisplayEXT', 'RegisterDeviceEvent', 'RegisterDisplayEvent']] else False - extstructs = member.attrib.get('validextensionstructs') if name == 'pNext' else None + extstructs = self.registry.validextensionstructs[type] if name == 'pNext' else None membersInfo.append(self.CommandParam(type=type, name=name, ispointer=ispointer, -- cgit v1.2.3