Layers: Add code-gen'd calls to val exts
Modified PV code gen to insert and make calls to validate
extension dependencies.
Change-Id: I90103b16d36fb868b32df796b1dae7741dfcba34
diff --git a/scripts/parameter_validation_generator.py b/scripts/parameter_validation_generator.py
index 1c5a4e4..330e532 100644
--- a/scripts/parameter_validation_generator.py
+++ b/scripts/parameter_validation_generator.py
@@ -18,6 +18,7 @@
# limitations under the License.
#
# Author: Dustin Graves <dustin@lunarg.com>
+# Author: Mark Lobodzinski <mark@lunarg.com>
import os,re,sys
import xml.etree.ElementTree as etree
@@ -155,6 +156,7 @@
self.flags = set() # Map of flags typenames
self.flagBits = dict() # Map of flag bits typename to list of values
self.newFlags = set() # Map of flags typenames /defined in the current feature/
+ self.required_extensions = [] # List of required extensions for the current extension
# Named tuples to store struct and command data
self.StructType = namedtuple('StructType', ['name', 'value'])
self.CommandParam = namedtuple('CommandParam', ['type', 'name', 'ispointer', 'isstaticarray', 'isbool', 'israngedenum',
@@ -241,6 +243,13 @@
self.commands = []
self.structMembers = []
self.newFlags = set()
+ # Save list of required extensions for this extension
+ self.required_extensions = []
+ if self.featureName != "VK_VERSION_1_0":
+ self.required_extensions.append(self.featureName)
+ required_extensions = interface.get('requires')
+ if required_extensions is not None:
+ self.required_extensions.extend(required_extensions.split(','))
def endFeature(self):
# C-specific
# Actually write the interface to the output file.
@@ -631,7 +640,10 @@
# argument is a handle (not vkCreateInstance)
reportData = ' debug_report_data*'.ljust(self.genOpts.alignFuncParam) + 'report_data,'
if cmd.name != 'vkCreateInstance':
- lines[1] = reportData
+ if len(lines) < 3: # Terminate correctly if single parameter
+ lines[1] = reportData[:-1] + ')'
+ else:
+ lines[1] = reportData
else:
lines.insert(1, reportData)
return '\n'.join(lines)
@@ -1010,7 +1022,17 @@
for command in self.commands:
# Skip first parameter if it is a dispatch handle (everything except vkCreateInstance)
startIndex = 0 if command.name == 'vkCreateInstance' else 1
+ if command.name == 'vkCmdDebugMarkerEndEXT':
+ stop = 'here'
lines, unused = self.genFuncBody(command.name, command.params[startIndex:], '', '', None)
+ if self.required_extensions:
+ def_line = 'std::vector<std::string> required_extensions = {'
+ for ext in self.required_extensions:
+ def_line += '"%s", ' % ext
+ def_line = def_line[:-2] + '};'
+ ext_call = 'skipCall |= ValidateRequiredExtensions("%s", required_extensions);\n' % command.name
+ lines.insert(0, ext_call)
+ lines.insert(0, def_line)
if lines:
cmdDef = self.getCmdDef(command) + '\n'
cmdDef += '{\n'
@@ -1023,6 +1045,7 @@
if len(unused) > 0:
cmdDef += '\n'
cmdDef += indent + 'bool skipCall = false;\n'
+
for line in lines:
cmdDef += '\n'
if type(line) is list: