diff options
| author | Mark Lobodzinski <mark@lunarg.com> | 2017-02-08 14:37:15 -0700 |
|---|---|---|
| committer | Mark Lobodzinski <mark@lunarg.com> | 2017-02-09 08:01:35 -0700 |
| commit | aa0090a1fe4212bc60229ea3a91b9859c705a076 (patch) | |
| tree | 21d85c9e38a8c5361ccae4f911dbe1c37a75c45b /scripts/parameter_validation_generator.py | |
| parent | 6cfe8feeaffec6c66ea4fdcbd0d0e47c799f570e (diff) | |
| download | usermoji-aa0090a1fe4212bc60229ea3a91b9859c705a076.tar.xz | |
scripts: Automate intercepts for parameter validation
Change-Id: Idcacab581775ce95cf11965b417b625df8e12176
Diffstat (limited to 'scripts/parameter_validation_generator.py')
| -rw-r--r-- | scripts/parameter_validation_generator.py | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/scripts/parameter_validation_generator.py b/scripts/parameter_validation_generator.py index 3a5c87ac..48f4e2e7 100644 --- a/scripts/parameter_validation_generator.py +++ b/scripts/parameter_validation_generator.py @@ -124,6 +124,8 @@ class ParamCheckerOutputGenerator(OutputGenerator): diagFile = sys.stdout): OutputGenerator.__init__(self, errFile, warnFile, diagFile) self.INDENT_SPACES = 4 + self.intercepts = [] + self.declarations = [] # Commands to ignore self.blacklist = [ 'vkGetInstanceProcAddr', @@ -205,6 +207,15 @@ class ParamCheckerOutputGenerator(OutputGenerator): def endFile(self): # C-specific self.newline() + + # Output declarations and record intercepted procedures + write('// Declarations', file=self.outFile) + write('\n'.join(self.declarations), file=self.outFile) + write('// Intercepts', file=self.outFile) + write('struct { const char* name; PFN_vkVoidFunction pFunc;} procmap[] = {', file=self.outFile) + write('\n'.join(self.intercepts), file=self.outFile) + write('};\n', file=self.outFile) + self.newline() # Namespace write('} // namespace parameter_validation', file = self.outFile) # Finish C++ wrapper and multiple inclusion protection @@ -400,6 +411,31 @@ class ParamCheckerOutputGenerator(OutputGenerator): # check code generation. def genCmd(self, cmdinfo, name): OutputGenerator.genCmd(self, cmdinfo, name) + interface_functions = [ + 'vkEnumerateInstanceLayerProperties', + 'vkEnumerateInstanceExtensionProperties', + 'vkEnumerateDeviceLayerProperties', + # These are unimplemented in the PV layer -- need to be added. + 'vkDisplayPowerControlEXT', + 'vkGetSwapchainCounterEXT', + 'vkRegisterDeviceEventEXT', + 'vkRegisterDisplayEventEXT', + 'vkCmdDebugMarkerEndEXT', + 'vkCmdDrawIndexedIndirectCountAMD', + 'vkCmdDrawIndirectCountAMD', + ] + # Record that the function will be intercepted + if name not in interface_functions: + if (self.featureExtraProtect != None): + self.declarations += [ '#ifdef %s' % self.featureExtraProtect ] + self.intercepts += [ '#ifdef %s' % self.featureExtraProtect ] + self.intercepts += [ ' {"%s", reinterpret_cast<PFN_vkVoidFunction>(%s)},' % (name,name[2:]) ] + decls = self.makeCDecls(cmdinfo.elem) + # Strip off 'vk' from API name + self.declarations += [ '%s' % decls[0].replace("VKAPI_CALL vk", "VKAPI_CALL ") ] + if (self.featureExtraProtect != None): + self.intercepts += [ '#endif' ] + self.declarations += [ '#endif' ] if name not in self.blacklist: params = cmdinfo.elem.findall('param') # Get list of array lengths |
