aboutsummaryrefslogtreecommitdiff
path: root/scripts/parameter_validation_generator.py
diff options
context:
space:
mode:
authorMark Lobodzinski <mark@lunarg.com>2017-02-08 14:37:15 -0700
committerMark Lobodzinski <mark@lunarg.com>2017-02-09 08:01:35 -0700
commitaa0090a1fe4212bc60229ea3a91b9859c705a076 (patch)
tree21d85c9e38a8c5361ccae4f911dbe1c37a75c45b /scripts/parameter_validation_generator.py
parent6cfe8feeaffec6c66ea4fdcbd0d0e47c799f570e (diff)
downloadusermoji-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.py36
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