aboutsummaryrefslogtreecommitdiff
path: root/scripts/unique_objects_generator.py
diff options
context:
space:
mode:
authorMark Lobodzinski <mark@lunarg.com>2017-02-09 15:58:14 -0700
committerMark Lobodzinski <mark@lunarg.com>2017-02-10 08:37:44 -0700
commitafdce378e35d6274d2f8c969308ca3c1839858ea (patch)
tree0cd863d7c2ec03274c2f129dfd64de0506b4fcb1 /scripts/unique_objects_generator.py
parent2e2660243ad8cfe456f4d45dbe5dc957748fb50a (diff)
downloadusermoji-afdce378e35d6274d2f8c969308ca3c1839858ea.tar.xz
layers: Codegen unique-objects extension whitelists
These lists are now generated from vk.xml. Change-Id: Id7571d8b18b272c7d7ead905d53e5ff778afcb6e
Diffstat (limited to 'scripts/unique_objects_generator.py')
-rw-r--r--scripts/unique_objects_generator.py31
1 files changed, 30 insertions, 1 deletions
diff --git a/scripts/unique_objects_generator.py b/scripts/unique_objects_generator.py
index bba7cfd5..fdf4c387 100644
--- a/scripts/unique_objects_generator.py
+++ b/scripts/unique_objects_generator.py
@@ -121,8 +121,9 @@ class UniqueObjectsOutputGenerator(OutputGenerator):
diagFile = sys.stdout):
OutputGenerator.__init__(self, errFile, warnFile, diagFile)
self.INDENT_SPACES = 4
- # Commands to ignore
self.intercepts = []
+ self.instance_extensions = []
+ self.device_extensions = []
# Commands which are not autogenerated but still intercepted
self.no_autogen_list = [
'vkGetDeviceProcAddr',
@@ -197,7 +198,23 @@ class UniqueObjectsOutputGenerator(OutputGenerator):
write('namespace unique_objects {', file = self.outFile)
#
def endFile(self):
+ # Write out device extension white list
self.newline()
+ write('// Layer Device Extension Whitelist', file=self.outFile)
+ write('static const char *kUniqueObjectsSupportedDeviceExtensions =', file=self.outFile)
+ for line in self.device_extensions:
+ write('%s' % line, file=self.outFile)
+ write(';\n', file=self.outFile)
+
+ # Write out instance extension white list
+ self.newline()
+ write('// Layer Instance Extension Whitelist', file=self.outFile)
+ write('static const char *kUniqueObjectsSupportedInstanceExtensions =', file=self.outFile)
+ for line in self.instance_extensions:
+ write('%s' % line, file=self.outFile)
+ write(';\n', file=self.outFile)
+ self.newline()
+
# Record intercepted procedures
write('// intercepts', file=self.outFile)
write('struct { const char* name; PFN_vkVoidFunction pFunc;} procmap[] = {', file=self.outFile)
@@ -222,6 +239,18 @@ class UniqueObjectsOutputGenerator(OutputGenerator):
self.flags = set()
self.StructMemberData = namedtuple('StructMemberData', ['name', 'members'])
self.CmdMemberData = namedtuple('CmdMemberData', ['name', 'members'])
+ if self.featureName != 'VK_VERSION_1_0':
+ white_list_entry = []
+ if (self.featureExtraProtect != None):
+ white_list_entry += [ '#ifdef %s' % self.featureExtraProtect ]
+ white_list_entry += [ '"%s"' % self.featureName ]
+ if (self.featureExtraProtect != None):
+ white_list_entry += [ '#endif' ]
+ featureType = interface.get('type')
+ if featureType == 'instance':
+ self.instance_extensions += white_list_entry
+ elif featureType == 'device':
+ self.device_extensions += white_list_entry
#
def endFeature(self):
# Actually write the interface to the output file.