MCPcopy
hub / github.com/KhronosGroup/Vulkan-Docs / beginFeature

Method beginFeature

scripts/base_generator.py:733–822  ·  view source on GitHub ↗
(self, interface, emit)

Source from the content-addressed store, hash-verified

731 #
732 # Processing point at beginning of each extension definition
733 def beginFeature(self, interface, emit):
734 OutputGenerator.beginFeature(self, interface, emit)
735 platform = interface.get('platform')
736 self.featureExtraProtec = self.vk.platforms[platform] if platform in self.vk.platforms else None
737 protect = self.vk.platforms[platform] if platform in self.vk.platforms else None
738 name = interface.get('name')
739
740 # TODO - This is just mimicking featurerequirementsgenerator.py and works because the logic is simple enough (for now)
741 featureRequirement = []
742 requires = interface.findall('./require')
743 for require in requires:
744 requireDepends = require.get('depends')
745 for feature in require.findall('./feature'):
746 featureStruct = feature.get('struct')
747 featureName = feature.get('name')
748 featureRequirement.append(FeatureRequirement(featureStruct, featureName, requireDepends))
749
750 # Build mapping from (extension, item_name) to their require section depends
751 # AND track which exact item names are in each extension's require sections
752 # This is used for building extensionRequirement later
753 for cmd in require.findall('command'):
754 cmdName = cmd.get('name')
755 if cmdName:
756 if requireDepends:
757 self.itemRequireSectionDepends[(name, cmdName)] = requireDepends
758 # Track exact name -> defining extensions
759 if cmdName not in self.itemDefiningExtensions:
760 self.itemDefiningExtensions[cmdName] = []
761 if name not in self.itemDefiningExtensions[cmdName]:
762 self.itemDefiningExtensions[cmdName].append(name)
763 for typeElem in require.findall('type'):
764 typeName = typeElem.get('name')
765 if typeName:
766 if requireDepends:
767 self.itemRequireSectionDepends[(name, typeName)] = requireDepends
768 # Track exact name -> defining extensions
769 if typeName not in self.itemDefiningExtensions:
770 self.itemDefiningExtensions[typeName] = []
771 if name not in self.itemDefiningExtensions[typeName]:
772 self.itemDefiningExtensions[typeName].append(name)
773 for enum in require.findall('enum'):
774 enumName = enum.get('name')
775 if enumName:
776 if requireDepends:
777 self.itemRequireSectionDepends[(name, enumName)] = requireDepends
778 # Track exact name -> defining extensions
779 if enumName not in self.itemDefiningExtensions:
780 self.itemDefiningExtensions[enumName] = []
781 if name not in self.itemDefiningExtensions[enumName]:
782 self.itemDefiningExtensions[enumName].append(name)
783
784 if interface.tag == 'extension':
785 # Generator scripts built on BaseGenerator do not handle the `supported` attribute of extensions
786 # therefore historically the `generate_source.py` in individual ecosystem components hacked the
787 # registry by removing non-applicable or disabled extensions from the loaded XML already before
788 # reg.py parsed it. That broke the general behavior of reg.py for certain use cases so we now
789 # filter extensions here instead (after parsing) in order to no longer need the filtering hack
790 # in downstream `generate_source.py` scripts.

Callers 1

beginFeatureMethod · 0.45

Calls 7

FeatureRequirementClass · 0.90
ExtensionClass · 0.90
boolGetFunction · 0.85
splitIfGetFunction · 0.85
appendMethod · 0.80
createApiVersionMethod · 0.80
getMethod · 0.45

Tested by

no test coverage detected