layers: Move PV custom funcptrs into map
Simplifies steps necessary for new custom functions.
Change-Id: Ib2d80346ebc42011dce74fdd8cee62adb4b3432c
diff --git a/scripts/parameter_validation_generator.py b/scripts/parameter_validation_generator.py
index 8e04f75..4d4ad6c 100644
--- a/scripts/parameter_validation_generator.py
+++ b/scripts/parameter_validation_generator.py
@@ -292,6 +292,9 @@
write('extern std::unordered_map<void *, layer_data *> layer_data_map;', file = self.outFile)
write('extern std::unordered_map<void *, instance_layer_data *> instance_layer_data_map;', file = self.outFile)
self.newline()
+ #
+ # FuncPtrMap
+ self.func_pointers += 'std::unordered_map<std::string, void *> custom_functions = {\n'
#
# Called at end-time for final content output
def endFile(self):
@@ -301,6 +304,7 @@
self.newline()
write(self.typedefs, file=self.outFile)
self.newline()
+ self.func_pointers += '};\n'
write(self.func_pointers, file=self.outFile)
self.newline()
ext_template = 'template <typename T>\n'
@@ -531,7 +535,7 @@
self.typedefs += '#ifdef %s\n' % self.featureExtraProtect
if (name not in self.validate_only):
self.typedefs += 'typedef bool (*PFN_manual_%s)%s\n' % (name, typedef)
- self.func_pointers += 'PFN_manual_%s manual_%s = (PFN_manual_%s)nullptr;\n' % (name, name, name)
+ self.func_pointers += ' {"%s", nullptr},\n' % name
self.intercepts += [ ' {"%s", (void*)%s},' % (name,name) ]
# Strip off 'vk' from API name
self.declarations += [ '%s' % decls[0].replace("VKAPI_CALL vk", "VKAPI_CALL ") ]
@@ -1198,8 +1202,9 @@
params_text += '%s, ' % param.name
params_text = params_text[:-2]
# Generate call to manual function if its function pointer is non-null
- cmdDef += '%sif (manual_%s != nullptr) {\n' % (indent, command.name)
- cmdDef += ' %sskip |= manual_%s(%s);\n' % (indent, command.name, params_text)
+ cmdDef += '%sPFN_manual_%s custom_func = (PFN_manual_%s)custom_functions["%s"];\n' % (indent, command.name, command.name, command.name)
+ cmdDef += '%sif (custom_func != nullptr) {\n' % indent
+ cmdDef += ' %sskip |= custom_func(%s);\n' % (indent, params_text)
cmdDef += '%s}\n\n' % indent
# Release the validation lock
cmdDef += '%slock.unlock();\n' % indent