summaryrefslogtreecommitdiff
path: root/codegen/vulkan/scripts/Retired
diff options
context:
space:
mode:
Diffstat (limited to 'codegen/vulkan/scripts/Retired')
-rwxr-xr-xcodegen/vulkan/scripts/Retired/checkLinks.py353
-rw-r--r--codegen/vulkan/scripts/Retired/extensionStubSource.py327
-rwxr-xr-xcodegen/vulkan/scripts/Retired/findBalance.py162
-rwxr-xr-xcodegen/vulkan/scripts/Retired/fixupRef.py202
-rwxr-xr-xcodegen/vulkan/scripts/Retired/insertTags.py102
-rwxr-xr-xcodegen/vulkan/scripts/Retired/realign.py48
-rw-r--r--codegen/vulkan/scripts/Retired/refDesc.py356
7 files changed, 0 insertions, 1550 deletions
diff --git a/codegen/vulkan/scripts/Retired/checkLinks.py b/codegen/vulkan/scripts/Retired/checkLinks.py
deleted file mode 100755
index 35103a80..00000000
--- a/codegen/vulkan/scripts/Retired/checkLinks.py
+++ /dev/null
@@ -1,353 +0,0 @@
-#!/usr/bin/python3
-#
-# Copyright 2015-2021 The Khronos Group Inc.
-#
-# SPDX-License-Identifier: Apache-2.0
-
-# checkLinks.py - validate link/reference API constructs in files
-#
-# Usage: checkLinks.py [options] files > logfile
-#
-# Options:
-# -follow attempt to follow include:: directives. This script isn't # an
-# Asciidoctor processor, so only literal relative paths can # be followed.
-# -info print some internal diagnostics.
-# -paramcheck attempt to validate param: names against the surrounding
-# context (the current structure/function being validated, for example).
-# This generates many false positives, so is not enabled by default.
-# -fatal unvalidatable links cause immediate error exit from the script.
-# Otherwise, errors are accumulated and summarized at the end.
-#
-# Depends on vkapi.py, which is a Python representation of relevant parts
-# of the Vulkan API. Only works when vkapi.py is generated for the full
-# API, e.g. 'makeAllExts checklinks'; otherwise many false-flagged errors
-# will occur.
-
-import copy, os, pdb, re, string, sys
-from vkapi import *
-
-global curFile, curLine, sectionDepth
-global errCount, warnCount, emittedPrefix, printInfo
-
-curFile = '???'
-curLine = -1
-sectionDepth = 0
-emittedPrefix = {}
-printInfo = False
-
-# Called before printing a warning or error. Only prints once prior
-# to output for a given file.
-def emitPrefix():
- global curFile, curLine, emittedPrefix
- if (curFile not in emittedPrefix.keys()):
- emittedPrefix[curFile] = None
- print('Checking file:', curFile)
- print('-------------------------------')
-
-def info(*args, **kwargs):
- global curFile, curLine, printInfo
- if (printInfo):
-
- emitPrefix()
- print('INFO: %s line %d:' % (curFile, curLine),
- ' '.join([str(arg) for arg in args]))
-
-# Print a validation warning found in a file
-def warning(*args, **kwargs):
- global curFile, curLine, warnCount
-
- warnCount = warnCount + 1
- emitPrefix()
- print('WARNING: %s line %d:' % (curFile, curLine),
- ' '.join([str(arg) for arg in args]))
-
-# Print a validation error found in a file
-def error(*args, **kwargs):
- global curFile, curLine, errCount
-
- errCount = errCount + 1
- emitPrefix()
- print('ERROR: %s line %d:' % (curFile, curLine),
- ' '.join([str(arg) for arg in args]))
-
-# See if a tag value exists in the specified dictionary and
-# suggest it as an alternative if so.
-def checkTag(tag, value, dict, dictName, tagName):
- if (value in dict.keys()):
- warning(value, 'exists in the API but not as a',
- tag + ': .', 'Try using the', tagName + ': tag.')
-
-# Report an error due to an asciidoc tag which doesn't match
-# a corresponding API entity.
-def foundError(errType, tag, value, fatal):
- global curFile, curLine
- error('no such', errType, tag + ':' + value)
- # Try some heuristics to detect likely problems such as missing vk
- # prefixes or the wrong tag.
-
- # Look in all the dictionaries in vkapi.py to see if the tag
- # is just wrong but the API entity actually exists.
- checkTag(tag, value, flags, 'flags', 'tlink/tname')
- checkTag(tag, value, enums, 'enums', 'elink')
- checkTag(tag, value, structs, 'structs', 'slink/sname')
- checkTag(tag, value, handles, 'handles', 'slink/sname')
- checkTag(tag, value, defines, 'defines', 'slink/sname')
- checkTag(tag, value, consts, 'consts', 'ename')
- checkTag(tag, value, protos, 'protos', 'flink/fname')
- checkTag(tag, value, funcpointers, 'funcpointers', 'tlink/tname')
-
- # Look for missing vk prefixes (quirky since it's case-dependent)
- # NOT DONE YET
-
- if fatal:
- print('ERROR: %s line %d:' % (curFile, curLine),
- ' '.join(['no such', errType, tag + ':' + value]), file=sys.stderr)
- sys.exit(1)
-
-# Look for param in the list of all parameters of the specified functions
-# Returns True if found, False otherwise
-def findParam(param, funclist):
- for f in funclist:
- if (param in protos[f]):
- info('parameter:', param, 'found in function:', f)
- return True
- return False
-
-# Initialize tracking state for checking links/includes
-def initChecks():
- global curFile, curLine, curFuncs, curStruct, accumFunc, sectionDepth
- global errCount, warnCount
- global incPat, linkPat, pathPat, sectionPat
-
- # Matches asciidoc single-line section tags
- sectionPat = re.compile('^(=+) ')
-
- # Matches any asciidoc include:: directive
- pathPat = re.compile('^include::([\w./_]+)\[\]')
-
- # Matches asciidoc include:: directives used in spec/ref pages (and also
- # others such as validity). This is specific to the layout of the api/
- # includes and allows any path precding 'api/' followed by the category
- # (protos, structs, enums, etc.) followed by the name of the proto,
- # struct, etc. file.
- incPat = re.compile('^.*api/(\w+)/(\w+)\.txt')
-
- # Lists of current /protos/ (functions) and /structs/ includes. There
- # can be several protos contiguously for different forms of a command
- curFuncs = []
- curStruct = None
-
- # Tag if we should accumulate funcs or start a new list. Any intervening
- # pname: tags or struct includes will restart the list.
- accumFunc = False
-
- # Matches all link names in the current spec/man pages. Assumes these
- # macro names are not trailing subsets of other macros. Used to
- # precede the regexp with [^A-Za-z], but this didn't catch macros
- # at start of line.
- linkPat = re.compile('([efpst](name|link)):(\w*)')
-
- # Total error/warning counters
- errCount = 0
- warnCount = 0
-
-# Validate asciidoc internal links in specified file.
-# infile - filename to validate
-# follow - if True, recursively follow include:: directives
-# paramCheck - if True, try to verify pname: refers to valid
-# parameter/member names. This generates many false flags currently
-# included - if True, function was called recursively
-# fatalExit - if True, validation errors cause an error exit immediately
-# Links checked are:
-# fname:vkBlah - Vulkan command name (generates internal link)
-# flink:vkBlah - Vulkan command name
-# sname:VkBlah - Vulkan struct name (generates internal link)
-# slink:VkBlah - Vulkan struct name
-# elink:VkEnumName - Vulkan enumeration ('enum') type name (generates internal link)
-# ename:VK_BLAH - Vulkan enumerant token name
-# pname:name - parameter name to a command or a struct member
-# tlink:name - Other Vulkan type name (generates internal link)
-# tname:name - Other Vulkan type name
-def checkLinks(infile, follow = False, paramCheck = True, included = False, fatalExit = False):
- global curFile, curLine, curFuncs, curStruct, accumFunc, sectionDepth
- global errCount, warnCount
- global incPat, linkPat, pathPat, sectionPat
-
- # Global state which gets saved and restored by this function
- oldCurFile = curFile
- oldCurLine = curLine
- curFile = infile
- curLine = 0
-
- # N.b. dirname() returns an empty string for a path with no directories,
- # unlike the shell dirname(1).
- if (not os.path.exists(curFile)):
- error('No such file', curFile, '- skipping check')
- # Restore global state before exiting the function
- curFile = oldCurFile
- curLine = oldCurLine
- return
-
- inPath = os.path.dirname(curFile)
- fp = open(curFile, 'r', encoding='utf-8')
-
- for line in fp:
- curLine = curLine + 1
-
- # Track changes up and down section headers, and forget
- # the current functions/structure when popping up a level
- match = sectionPat.search(line)
- if (match):
- info('Match sectionPat for line:', line)
- depth = len(match.group(1))
- if (depth < sectionDepth):
- info('Resetting current function/structure for section:', line)
- curFuncs = []
- curStruct = None
- sectionDepth = depth
-
- match = pathPat.search(line)
- if (match):
- incpath = match.group(1)
- info('Match pathPat for line:', line)
- info(' incpath =', incpath)
- # An include:: directive. First check if it looks like a
- # function or struct include file, and modify the corresponding
- # current function or struct state accordingly.
- match = incPat.search(incpath)
- if (match):
- info('Match incPat for line:', line)
- # For prototypes, if it is preceded by
- # another include:: directive with no intervening link: tags,
- # add to the current function list. Otherwise start a new list.
- # There is only one current structure.
- category = match.group(1)
- tag = match.group(2)
- # @ Validate tag!
- # @ Arguably, any intervening text should shift to accumFuncs = False,
- # e.g. only back-to-back includes separated by blank lines would be
- # accumulated.
- if (category == 'protos'):
- if (tag in protos.keys()):
- if (accumFunc):
- curFuncs.append(tag)
- else:
- curFuncs = [ tag ]
- # Restart accumulating functions
- accumFunc = True
- info('curFuncs =', curFuncs, 'accumFunc =', accumFunc)
- else:
- error('include of nonexistent function', tag)
- elif (category == 'structs'):
- if (tag in structs.keys()):
- curStruct = tag
- # Any /structs/ include means to stop accumulating /protos/
- accumFunc = False
- info('curStruct =', curStruct)
- else:
- error('include of nonexistent struct', tag)
- if (follow):
- # Actually process the included file now, recursively
- newpath = os.path.normpath(os.path.join(inPath, incpath))
- info(curFile, ': including file:', newpath)
- checkLinks(newpath, follow, paramCheck, included = True, fatalExit = fatalExit)
-
- matches = linkPat.findall(line)
- for match in matches:
- # Start actual validation work. Depending on what the
- # asciidoc tag name is, look up the value in the corresponding
- # dictionary.
- tag = match[0]
- value = match[2]
- if (tag == 'fname' or tag == 'flink'):
- if (value not in protos.keys()):
- foundError('function', tag, value, False)
- elif (tag == 'sname' or tag == 'slink'):
- if (value not in structs.keys() and
- value not in handles.keys()):
- foundError('aggregate/scalar/handle/define type', tag, value, False)
- elif (tag == 'ename'):
- if (value not in consts.keys() and value not in defines.keys()):
- foundError('enumerant/constant', tag, value, False)
- elif (tag == 'elink'):
- if (value not in enums.keys() and value not in flags.keys()):
- foundError('enum/bitflag type', tag, value, fatalExit)
- # tname and tlink are the same except if the errors are treated as fatal
- # They can be recombined once both are error-clean
- elif (tag == 'tname'):
- if (value not in funcpointers.keys() and value not in flags.keys()):
- foundError('function pointer/other type', tag, value, fatalExit)
- elif (tag == 'tlink'):
- if (value not in funcpointers.keys() and value not in flags.keys()):
- foundError('function pointer/other type', tag, value, False)
- elif (tag == 'pname'):
- # Any pname: tag means to stop accumulating /protos/
- accumFunc = False
- # See if this parameter is in the current proto(s) and struct
- foundParam = False
- if (curStruct and value in structs[curStruct]):
- info('parameter', value, 'found in struct', curStruct)
- elif (curFuncs and findParam(value, curFuncs)):
- True
- else:
- if paramCheck:
- warning('parameter', value, 'not found. curStruct =',
- curStruct, 'curFuncs =', curFuncs)
- else:
- # This is a logic error
- error('unknown tag', tag + ':' + value)
- fp.close()
-
- if (errCount > 0 or warnCount > 0):
- if (not included):
- print('Errors found:', errCount, 'Warnings found:', warnCount)
- print('')
-
- if (included):
- info('----- returning from:', infile, 'to parent file', '-----')
-
- # Don't generate any output for files without errors
- # else:
- # print(curFile + ': No errors found')
-
- # Restore global state before exiting the function
- curFile = oldCurFile
- curLine = oldCurLine
-
-if __name__ == '__main__':
- follow = False
- paramCheck = False
- included = False
- fatalExit = False
-
- totalErrCount = 0
- totalWarnCount = 0
-
- if (len(sys.argv) > 1):
- for file in sys.argv[1:]:
- if (file == '-follow'):
- follow = True
- elif (file == '-info'):
- printInfo = True
- elif file == '-paramcheck':
- paramCheck = True
- elif (file == '-fatal'):
- fatalExit = True
- else:
- initChecks()
- checkLinks(file,
- follow,
- paramCheck = paramCheck,
- included = included,
- fatalExit = fatalExit)
- totalErrCount = totalErrCount + errCount
- totalWarnCount = totalWarnCount + warnCount
- else:
- print('Need arguments: [-follow] [-info] [-paramcheck] [-fatal] infile [infile...]', file=sys.stderr)
-
- if (totalErrCount > 0 or totalWarnCount > 0):
- if (not included):
- print('TOTAL Errors found:', totalErrCount, 'Warnings found:',
- totalWarnCount)
- if totalErrCount > 0:
- sys.exit(1)
diff --git a/codegen/vulkan/scripts/Retired/extensionStubSource.py b/codegen/vulkan/scripts/Retired/extensionStubSource.py
deleted file mode 100644
index b9ff837e..00000000
--- a/codegen/vulkan/scripts/Retired/extensionStubSource.py
+++ /dev/null
@@ -1,327 +0,0 @@
-#!/usr/bin/python3 -i
-#
-# Copyright 2013-2021 The Khronos Group Inc.
-#
-# SPDX-License-Identifier: Apache-2.0
-
-import os,re,sys
-from generator import *
-
-doc = """
-/*
-** This target is no longer maintained and supported.
-** See README.adoc for discussion.
-**
-** This is a simple extension loader which provides the implementations for the
-** extension prototypes declared in vulkan header. It supports loading extensions either
-** for a single instance or a single device. Multiple instances are not yet supported.
-**
-** To use the loader add vulkan_ext.c to your solution and include <vulkan/vulkan_ext.h>.
-**
-** If your application is using a single instance, but multiple devices callParam
-**
-** vkExtInitInstance(instance);
-**
-** after initializing the instance. This way the extension loader will use the loaders
-** trampoline functions to call the correct driver for each call. This method is safe
-** if your application might use more than one device at the cost of one additional
-** indirection, the dispatch table of each dispatchable object.
-**
-** If your application uses only a single device it's better to use
-**
-** vkExtInitDevice(device);
-**
-** once the device has been initialized. This will resolve the function pointers
-** upfront and thus removes one indirection for each call into the driver. This *can*
-** result in slightly more performance for calling overhead limited cases.
-*/
-"""
-
-# StubExtGeneratorOptions - subclass of GeneratorOptions.
-#
-# Adds options used by COutputGenerator objects during C language header
-# generation.
-#
-# Additional members
-# prefixText - list of strings to prefix generated header with
-# (usually a copyright statement + calling convention macros).
-# alignFuncParam - if nonzero and parameters are being put on a
-# separate line, align parameter names at the specified column
-class StubExtGeneratorOptions(GeneratorOptions):
- """Represents options during C interface generation for headers"""
- def __init__(self,
- filename = None,
- directory = '.',
- apiname = None,
- profile = None,
- versions = '.*',
- emitversions = '.*',
- defaultExtensions = None,
- addExtensions = None,
- removeExtensions = None,
- emitExtensions = None,
- sortProcedure = regSortFeatures,
- prefixText = "",
- alignFuncParam = 0):
- GeneratorOptions.__init__(self, filename, directory, apiname, profile,
- versions, emitversions, defaultExtensions,
- addExtensions, removeExtensions,
- emitExtensions, sortProcedure)
- self.prefixText = prefixText
- self.alignFuncParam = alignFuncParam
-
-# ExtensionStubSourceOutputGenerator - subclass of OutputGenerator.
-# Generates C-language extension wrapper interface sources.
-#
-# ---- methods ----
-# ExtensionStubSourceOutputGenerator(errFile, warnFile, diagFile) - args as for
-# OutputGenerator. Defines additional internal state.
-# ---- methods overriding base class ----
-# beginFile(genOpts)
-# endFile()
-# beginFeature(interface, emit)
-# endFeature()
-# genType(typeinfo,name)
-# genStruct(typeinfo,name)
-# genGroup(groupinfo,name)
-# genEnum(enuminfo, name)
-# genCmd(cmdinfo)
-class ExtensionStubSourceOutputGenerator(OutputGenerator):
- """Generate specified API interfaces in a specific style, such as a C header"""
- # This is an ordered list of sections in the header file.
- TYPE_SECTIONS = ['include', 'define', 'basetype', 'handle', 'enum',
- 'group', 'bitmask', 'funcpointer', 'struct']
- ALL_SECTIONS = TYPE_SECTIONS + ['commandPointer', 'command']
- def __init__(self,
- errFile = sys.stderr,
- warnFile = sys.stderr,
- diagFile = sys.stdout):
- OutputGenerator.__init__(self, errFile, warnFile, diagFile)
- #
- def beginFile(self, genOpts):
- OutputGenerator.beginFile(self, genOpts)
- # C-specific
- #
- # Multiple inclusion protection & C++ wrappers.
-
- # Internal state - accumulators for function pointers and function
- # pointer initializatoin
- self.pointers = [];
- self.pointerInitializersInstance = [];
- self.pointerInitializersDevice = [];
-
- #
- # Write header protection
- filename = self.genOpts.directory + '/' + 'vulkan_ext.h'
- self.outFileHeader = open(filename, 'w', encoding='utf-8')
-
- write('#ifndef VULKAN_EXT_H', file=self.outFileHeader)
- write('#define VULKAN_EXT_H', file=self.outFileHeader)
- write('', file=self.outFileHeader)
- write('#ifdef __cplusplus', file=self.outFileHeader)
- write('extern "C" {', file=self.outFileHeader)
- write('#endif', file=self.outFileHeader)
-
- #
- # User-supplied prefix text, if any (list of strings)
- if (genOpts.prefixText):
- for s in genOpts.prefixText:
- write(s, file=self.outFile)
- write(s, file=self.outFileHeader)
-
- write(doc, file=self.outFileHeader)
-
- write('#include <vulkan/vulkan.h>', file=self.outFile)
- self.newline()
-
- write('#include <vulkan/vulkan_core.h>', file=self.outFileHeader)
- write('', file=self.outFileHeader)
-
- write('void vkExtInitInstance(VkInstance instance);', file=self.outFileHeader)
- write('void vkExtInitDevice(VkDevice device);', file=self.outFileHeader)
- write('', file=self.outFileHeader)
-
- def endFile(self):
- for pointer in self.pointers:
- write(pointer, file=self.outFile)
-
- self.newline()
-
- write('void vkExtInitInstance(VkInstance instance)\n{', file=self.outFile)
- for pointerInitializer in self.pointerInitializersInstance:
- write(pointerInitializer, file=self.outFile)
- write('}', file=self.outFile)
-
- self.newline()
-
- write('void vkExtInitDevice(VkDevice device)\n{', file=self.outFile)
- for pointerInitializer in self.pointerInitializersDevice:
- write(pointerInitializer, file=self.outFile)
- write('}', file=self.outFile)
-
- self.newline()
-
- #Finish header file
- write('#ifdef __cplusplus', file=self.outFileHeader)
- write('}', file=self.outFileHeader)
- write('#endif', file=self.outFileHeader)
- write('', file=self.outFileHeader)
- write('#endif', file=self.outFileHeader)
- self.outFileHeader.close()
-
- # Finish processing in superclass
- OutputGenerator.endFile(self)
-
- def beginFeature(self, interface, emit):
- # Start processing in superclass
- OutputGenerator.beginFeature(self, interface, emit)
-
- # Accumulate function pointers and function pointer initialization
- self.featurePointers = []
- self.featurePointerInitializersInstance = []
- self.featurePointerInitializersDevice = []
-
- def endFeature(self):
- # Add feature to global list with protectFeature
- if (self.emit and self.featurePointers):
- if (self.genOpts.protectFeature):
- self.pointers.append('#ifdef ' + self.featureName)
- self.pointerInitializersInstance.append('#ifdef ' + self.featureName)
- self.pointerInitializersDevice.append('#ifdef ' + self.featureName)
-
- if (self.featureExtraProtect != None):
- self.pointers.append('#ifdef ' + self.featureExtraProtect)
- self.pointerInitializersInstance.append('#ifndef ' + self.featureName)
- self.pointerInitializersDevice.append('#ifndef ' + self.featureName)
-
- self.pointers += self.featurePointers;
- self.pointerInitializersInstance += self.featurePointerInitializersInstance;
- self.pointerInitializersDevice += self.featurePointerInitializersDevice;
-
- if (self.featureExtraProtect != None):
- self.pointers.append('#endif /* ' + self.featureExtraProtect + ' */')
- self.pointerInitializersInstance.append('#endif /* ' + self.featureExtraProtect + ' */')
- self.pointerInitializersDevice.append('#endif /* ' + self.featureExtraProtect + ' */')
- if (self.genOpts.protectFeature):
- self.pointers.append('#endif /* ' + self.featureName + ' */')
- self.pointerInitializersInstance.append('#endif /* ' + self.featureName + ' */')
- self.pointerInitializersDevice.append('#endif /* ' + self.featureName + ' */')
-
- # Finish processing in superclass
- OutputGenerator.endFeature(self)
- #
- # Type generation
- def genType(self, typeinfo, name, alias):
- pass
-
- def genStruct(self, typeinfo, typeName, alias):
- pass
-
- def genGroup(self, groupinfo, groupName, alias):
- pass
-
- def genEnum(self, enuminfo, name, alias):
- pass
-
- #
- # Command generation
- def genCmd(self, cmdinfo, name, alias):
- OutputGenerator.genCmd(self, cmdinfo, name, alias)
-
- #
- decls = self.makeStub(cmdinfo.elem)
- self.featurePointerInitializersInstance.append(decls[0])
- self.featurePointerInitializersDevice.append(decls[1])
- self.featurePointers.append(decls[2])
-
- #
- # makeStub - return static declaration for function pointer and initialization of function pointer
- # as a two-element list of strings.
- # cmd - Element containing a <command> tag
- def makeStub(self, cmd):
- """Generate a stub function pointer <command> Element"""
- proto = cmd.find('proto')
- params = cmd.findall('param')
- name = cmd.find('name')
-
- # Begin accumulating prototype and typedef strings
- pfnDecl = 'static '
- pfnDecl += noneStr(proto.text)
-
- # Find the name tag and generate the function pointer and function pointer initialization code
- nameTag = proto.find('name')
- tail = noneStr(nameTag.tail)
- returnType = noneStr(proto.find('type').text)
-
- type = self.makeFunctionPointerType(nameTag.text, tail)
-
- # For each child element, if it's a <name> wrap in appropriate
- # declaration. Otherwise append its contents and tail con#tents.
- stubDecl = ''
- for elem in proto:
- text = noneStr(elem.text)
- tail = noneStr(elem.tail)
- if (elem.tag == 'name'):
- name = self.makeProtoName(text, tail)
- stubDecl += name
- else:
- stubDecl += text + tail
-
- pfnName = self.makeFunctionPointerName(nameTag.text, noneStr(tail));
- pfnDecl += type + ' ' + pfnName + ';'
-
- # Now generate the stub function
- pfnDecl += '\n'
-
- # Now add the parameter declaration list, which is identical
- # for prototypes and typedefs. Concatenate all the text from
- # a <param> node without the tags. No tree walking required
- # since all tags are ignored.
- n = len(params)
- paramdecl = '(\n'
-
- pfnCall = '\n{\n ' + ('return ', '')[returnType == 'void'] + pfnName + '(\n'
- # Indented parameters
- if n > 0:
- indentCallParam = '(\n'
- indentdecl = '(\n'
- for i in range(0,n):
- callParam = ''
-
- paramdecl += self.makeCParamDecl(params[i], self.genOpts.alignFuncParam)
- pfnCall += self.makeCCallParam(params[i], self.genOpts.alignFuncParam)
- if (i < n - 1):
- paramdecl += ',\n'
- pfnCall += ',\n'
- else:
- paramdecl += ')'
- pfnCall += '\n );\n'
- indentdecl += paramdecl
- indentCallParam += pfnCall
- else:
- indentdecl = '(void);'
-
- pfnCall += '}\n'
-
- featureInstance = ' ' + pfnName + ' = ('+type+')vkGetInstanceProcAddr(instance, "' + name + '");'
- featureDevice = ' ' + pfnName + ' = ('+type+')vkGetDeviceProcAddr(device, "' + name + '");'
- return [featureInstance, featureDevice , pfnDecl + stubDecl + paramdecl + pfnCall]
-
- # Return function pointer type for given function
- def makeFunctionPointerType(self, name, tail):
- return 'PFN_' + name + tail
-
- # Return name of static variable which stores the function pointer for the given function
- def makeFunctionPointerName(self, name, tail):
- return 'pfn_' + name + tail
-
- #
- # makeCParamDecl - return a string which is an indented, formatted
- # declaration for a <param> or <member> block (e.g. function parameter
- # or structure/union member).
- # param - Element (<param> or <member>) to format
- # aligncol - if non-zero, attempt to align the nested <name> element
- # at this column
- def makeCCallParam(self, param, aligncol):
- return ' ' + param.find('name').text
-
diff --git a/codegen/vulkan/scripts/Retired/findBalance.py b/codegen/vulkan/scripts/Retired/findBalance.py
deleted file mode 100755
index 2a9efe1f..00000000
--- a/codegen/vulkan/scripts/Retired/findBalance.py
+++ /dev/null
@@ -1,162 +0,0 @@
-#!/usr/bin/python3
-#
-# Copyright 2016-2021 The Khronos Group Inc.
-#
-# SPDX-License-Identifier: Apache-2.0
-
-# fixupRef.py - replace old // refBegin .. // refEnd syntax with new
-# open block syntax
-#
-# Usage: fixupRef.py [-outdir path] [-overwrite] files
-
-from reflib import *
-import argparse, copy, io, os, pdb, re, string, sys
-
-def prefix(depth):
- return ' ' * depth
-
-openPat = re.compile('^\[open,(?P<attribs>refpage=.*)\]')
-ifdefPat = re.compile('^if(n|)def::(?P<condition>.*)\[(?P<text>.*)\]')
-endifPat = re.compile('^endif::(?P<condition>.*)\[\]')
-
-# Look for imbalanced block delimiters and conditionals
-# specFile - filename to examine
-def findBalance(specFile):
- file = loadFile(specFile)
- if file == None:
- return
-
- # blocks[] is a stack of nesting constructs, each of which is
- # [ '--', line, None ] for a -- delimiter on line
- # [ 'ifdef', line, condition] for an ifdef or ifndef on line
- blocks = []
-
- line = 1
-
- for str in file:
- blockDepth = len(blocks)
- if blockDepth > 0:
- thisBlock = blocks[blockDepth-1]
- blockType = thisBlock[0]
- blockLine = thisBlock[1]
- blockCondition = thisBlock[2]
- else:
- thisBlock = None
- blockType = None
- blockLine = None
- blockCondition = None
-
- if str.rstrip() == '--':
- if (blockDepth > 0 and blockType == '--'):
- print(prefix(blockDepth - 1) +
- 'Closing -- block opened @', blockLine,
- '-> new block depth =', blockDepth - 1)
- blocks.pop()
- else:
- print(prefix(blockDepth) +
- 'Opening -- block @', line,
- '-> new block depth:', blockDepth + 1)
- blocks.append([ '--', line, None ])
- line = line + 1
- continue
-
- matches = beginPat.search(str)
- if matches != None:
- # print('Matched [open pattern @', line, ':', str.rstrip())
- line = line + 1
- continue
-
- matches = ifdefPat.search(str)
- if matches != None:
- condition = matches.group('condition')
- text = matches.group('text')
-
- if text != '':
- print('Matched self-closing if(n)def pattern @', line,
- 'condition:', condition, 'text:', text)
- else:
- print(prefix(blockDepth) +
- 'Opening if(n)def block @', line,
- '-> new block depth =', blockDepth + 1,
- 'condition:', condition)
- blocks.append([ 'ifdef', line, condition ])
-
- line = line + 1
- continue
-
- matches = endifPat.search(str)
- if matches != None:
- condition = matches.group('condition')
-
- if (blockDepth > 0):
- if blockType == 'ifdef':
- # Try closing an ifdef/ifndef block
- if blockCondition != condition:
- print('** WARNING:', specFile,
- 'endif @', blockLine,
- 'block depth:', blockDepth,
- 'condition', condition,
- 'does not match ifdef/ifndef @',
- blockLine, 'condition', blockCondition)
-
- print(prefix(blockDepth - 1) +
- 'Closing endif block @', line,
- '-> new block depth =', blockDepth - 1)
- blocks.pop()
- elif blockType == '--':
- # An overlap!
- print('** ERROR:', specFile, 'endif @', line,
- 'block depth:', blockDepth,
- 'overlaps -- block start @', blockLine)
- else:
- # Should never get here
- print('** ERROR:', specFile,
- 'block depth:', blockDepth,
- 'unknown open block type:', blockType)
- else:
- # Unlikely error condition from bad markup
- print('** ERROR:', specFile,
- 'block depth:', blockDepth,
- 'endif @', line, 'with no matching open block')
-
- line = line + 1
- continue
-
- line = line + 1
-
- blockDepth = len(blocks)
- if blockDepth > 0:
- print('** ERROR:', specFile, 'still in open block at EOF:',
- 'block depth =', blockDepth,
- 'block type:', blocks[blockDepth-1][0])
-
-if __name__ == '__main__':
- global genDict
- genDict = {}
-
- parser = argparse.ArgumentParser()
-
- parser.add_argument('-diag', action='store', dest='diagFile',
- help='Set the diagnostic file')
- parser.add_argument('-warn', action='store', dest='warnFile',
- help='Set the warning file')
- parser.add_argument('-log', action='store', dest='logFile',
- help='Set the log file for both diagnostics and warnings')
- parser.add_argument('files', metavar='filename', nargs='*',
- help='a filename to extract ref pages from')
- parser.add_argument('--version', action='version', version='%(prog)s 1.0')
-
- results = parser.parse_args()
-
- setLogFile(True, True, results.logFile)
- setLogFile(True, False, results.diagFile)
- setLogFile(False, True, results.warnFile)
-
- skipped = set()
- for file in results.files:
- findBalance(file)
-
- if len(skipped) > 0:
- print('Files containing skipped feature blocks:')
- for file in sorted(skipped):
- print('\t' + file)
diff --git a/codegen/vulkan/scripts/Retired/fixupRef.py b/codegen/vulkan/scripts/Retired/fixupRef.py
deleted file mode 100755
index 4a9b792a..00000000
--- a/codegen/vulkan/scripts/Retired/fixupRef.py
+++ /dev/null
@@ -1,202 +0,0 @@
-#!/usr/bin/python3
-#
-# Copyright 2016-2021 The Khronos Group Inc.
-#
-# SPDX-License-Identifier: Apache-2.0
-
-# fixupRef.py - replace old // refBegin .. // refEnd syntax with new
-# open block syntax
-#
-# Usage: fixupRef.py [-outdir path] [-overwrite] files
-
-from reflib import *
-from vkapi import *
-import argparse, copy, io, os, pdb, re, string, sys
-
-# Return 'None' for None, the string otherwise
-def noneStr(str):
- if str == None:
- return '(None)'
- else:
- return str
-
-# Escape single quotes in a string for asciidoc
-def escapeQuote(str):
- return str.replace("'", "\'")
-
-# Start a refpage open block
-def openBlock(pi, fp):
- if pi.refs != '':
- print("[open,refpage='" + pi.name +
- "',desc='" + pi.desc +
- "',type='" + pi.type +
- "',xrefs='" + pi.refs + "']",
- file=fp)
- else:
- print("[open,refpage='" + pi.name +
- "',desc='" + pi.desc +
- "',type='" + pi.type + "']",
- file=fp)
- print('--', file=fp)
-
-# End a refpage open block
-def closeBlock(pi, fp):
- print('--', file=fp)
- # Just for finding block ends while debugging
- # print("// end [open,refpage='" + pi.name + "']", file=fp)
-
-# Replace old // refBegin .. // refEnd references in an asciidoc
-# file with open blocks, per # ??? .
-# specFile - filename to extract from
-# outDir - output directory to write updated file to, if not overwritten
-# overwrite - True if the file should be overwritten in place
-# skipped - set of filenames containing commands which weren't
-# rewritten with open blocks (e.g. enums). Updated in place.
-def replaceRef(specFile, outDir, overwrite = False, skipped = set()):
- file = loadFile(specFile)
- if file == None:
- return
-
- # Save the path to this file for later use in rewriting relative includes
- specDir = os.path.dirname(os.path.abspath(specFile))
-
- pageMap = findRefs(file)
- logDiag(specFile + ': found', len(pageMap.keys()), 'potential pages')
-
- sys.stderr.flush()
-
- # Fix up references in pageMap
- fixupRefs(pageMap, specFile, file)
-
- # Map the page info dictionary into a dictionary of actions
- # keyed by line number they're performed on/after:
- # 'action' : 'begin' or 'end'. What to do on a refBegin or refEnd line
- # 'replace': True if this line needs to be replaced
- # 'name' : Name of the ref page being defined
- # 'desc' : One-line description of the ref page being defined
- # 'type' : Type of the ref page being defined, 'structs', 'protos', etc.
- # 'refs' : Space-separated string of crossreferenced pages
-
- actions = { }
-
- for name in pageMap.keys():
- pi = pageMap[name]
-
- # Cleanup parameters for output
- pi.name = noneStr(pi.name)
- pi.desc = escapeQuote(noneStr(pi.desc))
-
- if pi.extractPage:
- if (file[pi.begin][0:11] == '// refBegin'):
- # Replace line
- actions[pi.begin] = {
- 'action' : 'begin',
- 'replace' : True,
- 'pageinfo' : pi
- }
- else:
- # Insert line
- actions[pi.begin] = {
- 'action' : 'begin',
- 'replace' : False,
- 'pageinfo' : pi
- }
-
- if (file[pi.end][0:9] == '// refEnd'):
- # Replace line
- actions[pi.end] = {
- 'action' : 'end',
- 'replace' : True,
- 'pageinfo' : pi
- }
- else:
- # Insert line
- actions[pi.end] = {
- 'action' : 'end',
- 'replace' : False,
- 'pageinfo' : pi
- }
- else:
- logWarn('Skipping replacement for', pi.name, 'at', specFile,
- 'line', pi.begin)
- print('Skipping replacement for', pi.name, 'at', specFile,
- 'line', pi.begin)
- printPageInfo(pi, file)
- skipped.add(specFile)
-
- if overwrite:
- pageName = specFile
- else:
- pageName = outDir + '/' + os.path.basename(specFile)
-
- fp = open(pageName, 'w', encoding='utf-8')
-
- line = 0
- for text in file:
- if line in actions.keys():
- action = actions[line]['action']
- replace = actions[line]['replace']
- pi = actions[line]['pageinfo']
-
- logDiag('ACTION:', action, 'REPLACE:', replace, 'at line', line)
- logDiag('PageInfo of action:')
- printPageInfo(pi, file)
-
- if action == 'begin':
- openBlock(pi, fp)
- if not replace:
- print(text, file=fp, end='')
- elif action == 'end':
- if not replace:
- print(text, file=fp, end='')
- closeBlock(pi, fp)
- else:
- print('ERROR: unrecognized action:', action, 'in',
- specFile, 'at line', line)
- print(text, file=fp, end='')
- else:
- print(text, file=fp, end='')
- line = line + 1
-
- fp.close()
-
- #for line in sorted(actions.keys()):
- # action = actions[line]
- # print('action at line', line, '\t',
- # action[0], action[1], action[2])
-
-if __name__ == '__main__':
- global genDict
- genDict = {}
-
- parser = argparse.ArgumentParser()
-
- parser.add_argument('-diag', action='store', dest='diagFile',
- help='Set the diagnostic file')
- parser.add_argument('-warn', action='store', dest='warnFile',
- help='Set the warning file')
- parser.add_argument('-log', action='store', dest='logFile',
- help='Set the log file for both diagnostics and warnings')
- parser.add_argument('-outdir', action='store', dest='outDir',
- default='out',
- help='Set the base directory in which pages are generated')
- parser.add_argument('-overwrite', action='store_true',
- help='Overwrite input filenames instead of writing different output filenames')
- parser.add_argument('files', metavar='filename', nargs='*',
- help='a filename to extract ref pages from')
- parser.add_argument('--version', action='version', version='%(prog)s 1.0')
-
- results = parser.parse_args()
-
- setLogFile(True, True, results.logFile)
- setLogFile(True, False, results.diagFile)
- setLogFile(False, True, results.warnFile)
-
- skipped = set()
- for file in results.files:
- replaceRef(file, results.outDir, results.overwrite, skipped)
-
- if len(skipped) > 0:
- print('Files containing skipped feature blocks:')
- for file in sorted(skipped):
- print('\t' + file)
diff --git a/codegen/vulkan/scripts/Retired/insertTags.py b/codegen/vulkan/scripts/Retired/insertTags.py
deleted file mode 100755
index a8c494c1..00000000
--- a/codegen/vulkan/scripts/Retired/insertTags.py
+++ /dev/null
@@ -1,102 +0,0 @@
-#!/usr/bin/python3
-#
-# Copyright 2016-2021 The Khronos Group Inc.
-#
-# SPDX-License-Identifier: Apache-2.0
-
-# insertTags.py - insert // refBegin and // refEnd tags in Vulkan
-# spec source files.
-#
-# Usage: insertTags.py output-dir files
-
-# Short descriptions of ref pages, if not found
-from refDesc import *
-
-# Utility functions
-from reflib import *
-import copy, os, pdb, re, string, sys
-
-# Insert informative tags in a spec asciidoc source file
-# specFile - filename to add tags to
-# baseDir - output directory to generate page in
-def insertTags(specFile, baseDir):
- file = loadFile(specFile)
- if (file == None):
- return
- pageMap = findRefs(file)
- logDiag(specFile + ': found', len(pageMap.keys()), 'potential pages')
-
- # Fix up references in pageMap
- fixupRefs(pageMap, specFile, file)
-
- # Proceed backwards through the file, inserting
- # // refBegin name desc
- # lines where they're meaningful
-
- logDiag('Table of pages found:')
- logDiag('---------------------')
- for name in pageMap.keys():
- printPageInfo(pageMap[name], file)
-
- line = len(file) - 1
- while (line >= 0):
- # If this is a valid begin line without a description, and a
- # description exists in refDesc, add it.
- for name in pageMap.keys():
- pi = pageMap[name]
- if (pi.begin == line):
- if (not name in refDesc.keys()):
- if (pi.desc != None):
- logDiag('Description already exists, but no refDesc found for', name, 'at', specFile + ':' + str(line))
- else:
- if (pi.embed):
- logDiag('No refDesc found (this is OK) for embedded', name, 'at', specFile + ':' + str(line))
- else:
- logWarn('No refDesc found for', name, 'at', specFile + ':' + str(line))
- continue
-
- # New or replacement refBegin line, with short description
- newLine = '// refBegin ' + name + ' - ' + refDesc[name] + '\n'
-
- if (pi.desc == None):
- logDiag('Adding description for', name, 'at', specFile + ':' + str(line))
-
- # If there's already a refBegin on this line, replace it.
- # Otherwise, insert one.
- if (file[line].find('// refBegin') == 0):
- logDiag('Replacing existing refBegin without description for', name, 'at', specFile + ':' + str(line))
- file[line] = newLine
- else:
- logDiag('Inserting new refBegin at', specFile + ':' + str(line))
- # Add a blank line after the comment if it's new
- file.insert(line, newLine)
- file.insert(line, '\n')
- else:
- if (pi.desc[-1] == '.'):
- pi.desc = pi.desc[0:-1]
- if (pi.desc == refDesc[name]):
- logDiag('Not replacing description for', name, 'at', specFile + ':' + str(line), '- MATCHES existing one')
- else:
- logWarn('Replacing existing refBegin WITH description for', name, 'at', specFile + ':' + str(line))
- file[line] = newLine
- # logWarn('\t refDesc: ', refDesc[name])
- # logWarn('\tfile desc: ', pi.desc)
-
- line = line - 1
-
- pageName = baseDir + '/' + os.path.basename(specFile)
- logDiag('Creating output file', pageName)
- fp = open(pageName, 'w', encoding='utf-8')
- fp.writelines(file)
- fp.close()
-
-
-if __name__ == '__main__':
- logDiag('In main!')
-
- baseDir = 'man'
- follow = False
- if (len(sys.argv) > 2):
- baseDir = sys.argv[1]
- for file in sys.argv[2:]:
- insertTags(file, baseDir)
diff --git a/codegen/vulkan/scripts/Retired/realign.py b/codegen/vulkan/scripts/Retired/realign.py
deleted file mode 100755
index c2780d4c..00000000
--- a/codegen/vulkan/scripts/Retired/realign.py
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/python3
-#
-# Copyright 2013-2021 The Khronos Group Inc.
-#
-# SPDX-License-Identifier: Apache-2.0
-
-# Usage: realign [infile] > outfile
-# Used to realign XML tags in the Vulkan registry after it's operated on by
-# some other filter, since whitespace inside a tag isn't part of the
-# internal representation.
-
-import copy, sys, string, re
-
-def realignXML(fp):
- patterns = [
- [ r'(^ *\<type .*)(category=[\'"]bitmask[\'"].*)', 58 ],
- [ r'(^ *\<enum [bv].*)(name=.*)', 28 ],
- [ r'(^ *\<enum [bv].*)(comment=.*)', 85 ]
- ]
-
- # Assemble compiled expressions to match and alignment columns
- numpat = len(patterns)
- regexp = [ re.compile(patterns[i][0]) for i in range(0,numpat)]
- column = [ patterns[i][1] for i in range(0,numpat)]
-
- lines = fp.readlines()
- for line in lines:
- emitted = False
- for i in range(0,len(patterns)):
- match = regexp[i].match(line)
- if (match):
- if (not emitted):
- #print('# While processing line: ' + line, end='')
- emitted = True
- #print('# matched expression: ' + patterns[i][0])
- #print('# clause 1 = ' + match.group(1))
- #print('# clause 2 = ' + match.group(2))
- line = match.group(1).ljust(column[i]) + match.group(2)
- if (emitted):
- print(line)
- else:
- print(line, end='')
-
-if __name__ == '__main__':
- if (len(sys.argv) > 1):
- realignXML(open(sys.argv[1], 'r', encoding='utf-8'))
- else:
- realignXML(sys.stdin)
diff --git a/codegen/vulkan/scripts/Retired/refDesc.py b/codegen/vulkan/scripts/Retired/refDesc.py
deleted file mode 100644
index be05a4bb..00000000
--- a/codegen/vulkan/scripts/Retired/refDesc.py
+++ /dev/null
@@ -1,356 +0,0 @@
-#!/usr/bin/python3
-#
-# Copyright 2016-2021 The Khronos Group Inc.
-#
-# SPDX-License-Identifier: Apache-2.0
-
-refDesc = {}
-
-# These are extracted from the original handwritten ref pages
-# This is a one-time measure to inject // refBegin markup into the spec.
-
-refDesc['vkAcquireNextImageKHR'] = 'Retrieve the index of the next available presentable image'
-refDesc['vkAllocateCommandBuffers'] = 'Allocate command buffers from an existing command pool'
-refDesc['vkAllocateDescriptorSets'] = 'Allocate one or more descriptor sets'
-refDesc['vkAllocateMemory'] = 'Allocate GPU memory'
-refDesc['VkAllocationCallbacks'] = 'Structure containing callback function pointers for memory allocation'
-refDesc['vkBeginCommandBuffer'] = 'Start recording a command buffer'
-refDesc['vkBindBufferMemory'] = 'Bind device memory to a buffer object'
-refDesc['vkBindImageMemory'] = 'Bind device memory to an image object'
-refDesc['VkBufferCreateFlags'] = 'Buffer object creation flags'
-refDesc['VkBufferCreateInfo'] = 'Structure specifying the parameters of a newly created buffer object'
-refDesc['VkBufferMemoryBarrier'] = 'Structure specifying the parameters of a buffer memory barrier'
-refDesc['VkBufferUsageFlags'] = 'Buffer object usage flags'
-refDesc['vkCmdBeginQuery'] = 'Begin a query'
-refDesc['vkCmdBeginRenderPass'] = 'Begin a new render pass'
-refDesc['vkCmdBindDescriptorSets'] = 'Binds descriptor sets to a command buffer'
-refDesc['vkCmdBindIndexBuffer'] = 'Bind an index buffer to a command buffer'
-refDesc['vkCmdBindPipeline'] = 'Bind a pipeline object to a command buffer'
-refDesc['vkCmdBindVertexBuffers'] = 'Bind vertex buffers to a command buffer'
-refDesc['vkCmdBlitImage'] = 'Copy regions of an image, potentially performing format conversion,'
-refDesc['vkCmdClearAttachments'] = 'Clear regions within currently bound framebuffer attachments'
-refDesc['vkCmdClearColorImage'] = 'Clear regions of a color image'
-refDesc['vkCmdClearDepthStencilImage'] = 'Fill regions of a combined depth-stencil image'
-refDesc['vkCmdCopyBufferToImage'] = 'Copy data from a buffer into an image'
-refDesc['vkCmdCopyBuffer'] = 'Copy data between buffer regions'
-refDesc['vkCmdCopyImageToBuffer'] = 'Copy image data into a buffer'
-refDesc['vkCmdCopyImage'] = 'Copy data between images'
-refDesc['vkCmdCopyQueryPoolResults'] = 'Copy the results of queries in a query pool to a buffer object'
-refDesc['vkCmdDispatchIndirect'] = 'Dispatch compute work items using indirect parameters'
-refDesc['vkCmdDispatch'] = 'Dispatch compute work items'
-refDesc['vkCmdDrawIndexedIndirect'] = 'Perform an indexed indirect draw'
-refDesc['vkCmdDrawIndexed'] = 'Issue an indexed draw into a command buffer'
-refDesc['vkCmdDrawIndirect'] = 'Issue an indirect draw into a command buffer'
-refDesc['vkCmdDraw'] = 'Draw primitives'
-refDesc['vkCmdEndQuery'] = 'Ends a query'
-refDesc['vkCmdEndRenderPass'] = 'End the current render pass'
-refDesc['vkCmdExecuteCommands'] = 'Execute a secondary command buffer from a primary command buffer'
-refDesc['vkCmdFillBuffer'] = 'Fill a region of a buffer with a fixed value'
-refDesc['vkCmdNextSubpass'] = 'Transition to the next subpass of a render pass'
-refDesc['vkCmdPipelineBarrier'] = 'Insert a set of execution and memory barriers'
-refDesc['vkCmdPushConstants'] = 'Update the values of push constants'
-refDesc['vkCmdResetEvent'] = 'Reset an event object to non-signaled state'
-refDesc['vkCmdResetQueryPool'] = 'Reset queries in a query pool'
-refDesc['vkCmdResolveImage'] = 'Resolve regions of an image'
-refDesc['vkCmdSetBlendConstants'] = 'Set the values of blend constants'
-refDesc['vkCmdSetDepthBias'] = 'Set the depth bias dynamic state'
-refDesc['vkCmdSetDepthBounds'] = 'Set the depth bounds test values for a command buffer'
-refDesc['vkCmdSetEvent'] = 'Set an event object to signaled state'
-refDesc['vkCmdSetLineWidth'] = 'Set the dynamic line width state'
-refDesc['vkCmdSetScissor'] = 'Set the dynamic scissor rectangles on a command buffer'
-refDesc['vkCmdSetStencilCompareMask'] = 'Set the stencil compare mask dynamic state'
-refDesc['vkCmdSetStencilReference'] = 'Set the stencil reference dynamic state'
-refDesc['vkCmdSetStencilWriteMask'] = 'Set the stencil write mask dynamic state'
-refDesc['vkCmdSetViewport'] = 'Set the viewport on a command buffer'
-refDesc['vkCmdUpdateBuffer'] = 'Update a buffer\'s contents from host memory'
-refDesc['vkCmdWaitEvents'] = 'Wait for one or more events and insert a set of memory'
-refDesc['vkCmdWriteTimestamp'] = 'Write a device timestamp into a query object'
-refDesc['VkCommandBufferAllocateInfo'] = 'Structure specifying the allocation parameters for command buffer object'
-refDesc['vkCreateAndroidSurfaceKHR'] = 'Create a slink:VkSurfaceKHR object for an Android native window'
-refDesc['vkCreateBuffer'] = 'Create a new buffer object'
-refDesc['vkCreateBufferView'] = 'Create a new buffer view object'
-refDesc['vkCreateCommandPool'] = 'Create a new command pool object'
-refDesc['vkCreateComputePipelines'] = 'Creates a new compute pipeline object'
-refDesc['vkCreateDescriptorPool'] = 'Creates a descriptor pool object'
-refDesc['vkCreateDescriptorSetLayout'] = 'Create a new descriptor set layout'
-refDesc['vkCreateDevice'] = 'Create a new device instance'
-refDesc['vkCreateDisplayModeKHR'] = 'Create a display mode'
-refDesc['vkCreateDisplayPlaneSurfaceKHR'] = 'Create a slink:VkSurfaceKHR structure representing a display plane and mode'
-refDesc['vkCreateEvent'] = 'Create a new event object'
-refDesc['vkCreateFence'] = 'Create a new fence object'
-refDesc['vkCreateFramebuffer'] = 'Create a new framebuffer object'
-refDesc['vkCreateGraphicsPipelines'] = 'Create graphics pipelines'
-refDesc['vkCreateImage'] = 'Create a new image object'
-refDesc['vkCreateImageView'] = 'Create an image view from an existing image'
-refDesc['vkCreateInstance'] = 'Create a new Vulkan instance'
-refDesc['vkCreateMirSurfaceKHR'] = 'Create a slink:VkSurfaceKHR object for a Mir window'
-refDesc['vkCreatePipelineCache'] = 'Creates a new pipeline cache'
-refDesc['vkCreatePipelineLayout'] = 'Creates a new pipeline layout object'
-refDesc['vkCreateQueryPool'] = 'Create a new query pool object'
-refDesc['vkCreateRenderPass'] = 'Create a new render pass object'
-refDesc['vkCreateSampler'] = 'Create a new sampler object'
-refDesc['vkCreateSemaphore'] = 'Create a new queue semaphore object'
-refDesc['vkCreateShaderModule'] = 'Creates a new shader module object'
-refDesc['vkCreateSharedSwapchainsKHR'] = 'Create multiple swapchains that share presentable images'
-refDesc['vkCreateSwapchainKHR'] = 'Create a swapchain'
-refDesc['vkCreateWaylandSurfaceKHR'] = 'Create a slink:VkSurfaceKHR object for a Wayland window'
-refDesc['vkCreateXcbSurfaceKHR'] = 'Create a slink:VkSurfaceKHR object for a X11 window, using the XCB client-side library'
-refDesc['vkCreateXlibSurfaceKHR'] = 'Create a slink:VkSurfaceKHR object for an X11 window, using the Xlib client-side library'
-refDesc['VkDescriptorSetAllocateInfo'] = 'Structure specifying the allocation parameters for descriptor sets'
-refDesc['VkDescriptorType'] = 'Specifies the type of a descriptor in a descriptor set'
-refDesc['vkDestroyBuffer'] = 'Destroy a buffer object'
-refDesc['vkDestroyBufferView'] = 'Destroy a buffer view object'
-refDesc['vkDestroyCommandPool'] = 'Destroy a command pool object'
-refDesc['vkDestroyDescriptorPool'] = 'Destroy a descriptor pool object'
-refDesc['vkDestroyDescriptorSetLayout'] = 'Destroy a descriptor set layout object'
-refDesc['vkDestroyDevice'] = 'Destroy a logical device'
-refDesc['vkDestroyEvent'] = 'Destroy an event object'
-refDesc['vkDestroyFence'] = 'Destroy a fence object'
-refDesc['vkDestroyFramebuffer'] = 'Destroy a framebuffer object'
-refDesc['vkDestroyImage'] = 'Destroy an image object'
-refDesc['vkDestroyImageView'] = 'Destroy an image view object'
-refDesc['vkDestroyInstance'] = 'Destroy an instance of Vulkan'
-refDesc['vkDestroyPipelineCache'] = 'Destroy a pipeline cache object'
-refDesc['vkDestroyPipelineLayout'] = 'Destroy a pipeline layout object'
-refDesc['vkDestroyPipeline'] = 'Destroy a pipeline object'
-refDesc['vkDestroyQueryPool'] = 'Destroy a query pool object'
-refDesc['vkDestroyRenderPass'] = 'Destroy a render pass object'
-refDesc['vkDestroySampler'] = 'Destroy a sampler object'
-refDesc['vkDestroySemaphore'] = 'Destroy a semaphore object'
-refDesc['vkDestroyShaderModule'] = 'Destroy a shader module'
-refDesc['vkDestroySurfaceKHR'] = 'Destroy a VkSurfaceKHR object'
-refDesc['vkDestroySwapchainKHR'] = 'Destroy a swapchain object'
-refDesc['vkDeviceWaitIdle'] = 'Wait for a device to become idle'
-refDesc['vkEndCommandBuffer'] = 'Finish recording a command buffer'
-refDesc['vkEnumerateDeviceExtensionProperties'] = 'Returns properties of available physical device extensions'
-refDesc['vkEnumerateDeviceLayerProperties'] = 'Returns properties of available physical device layers'
-refDesc['vkEnumerateInstanceExtensionProperties'] = 'Returns up to requested number of global extension properties'
-refDesc['vkEnumerateInstanceLayerProperties'] = 'Returns up to requested number of global layer properties'
-refDesc['vkEnumeratePhysicalDevices'] = 'Enumerates the physical devices accessible to a Vulkan instance'
-refDesc['vkFlushMappedMemoryRanges'] = 'Flush mapped memory ranges'
-refDesc['VkFormatFeatureFlags'] = 'Capability flags of a particular format'
-refDesc['vkFreeCommandBuffers'] = 'Free command buffers'
-refDesc['vkFreeDescriptorSets'] = 'Free one or more descriptor sets'
-refDesc['vkFreeMemory'] = 'Free GPU memory'
-refDesc['vkGetBufferMemoryRequirements'] = 'Returns the memory requirements for specified Vulkan object'
-refDesc['vkGetDeviceMemoryCommitment'] = 'Query the current commitment for a VkDeviceMemory'
-refDesc['vkGetDeviceProcAddr'] = 'Return a function pointer for a command'
-refDesc['vkGetDeviceQueue'] = 'Get a queue handle from a device'
-refDesc['vkGetDisplayModePropertiesKHR'] = 'Query the set of mode properties supported by the display'
-refDesc['vkGetDisplayPlaneCapabilitiesKHR'] = 'Query capabilities of a mode and plane combination'
-refDesc['vkGetDisplayPlaneSupportedDisplaysKHR'] = 'Query the list of displays a plane supports'
-refDesc['vkGetEventStatus'] = 'Retrieve the status of an event object'
-refDesc['vkGetFenceStatus'] = 'Return the status of a fence'
-refDesc['vkGetImageMemoryRequirements'] = 'Returns the memory requirements for specified Vulkan object'
-refDesc['vkGetImageSparseMemoryRequirements'] = 'Query the memory requirements for a sparse image'
-refDesc['vkGetImageSubresourceLayout'] = 'Retrieve information about an image subresource'
-refDesc['vkGetInstanceProcAddr'] = 'Return a function pointer for a command'
-refDesc['vkGetPhysicalDeviceDisplayPlanePropertiesKHR'] = 'Query the plane properties'
-refDesc['vkGetPhysicalDeviceDisplayPropertiesKHR'] = 'Query information about the available displays'
-refDesc['vkGetPhysicalDeviceFeatures'] = 'Reports capabilities of a physical device'
-refDesc['vkGetPhysicalDeviceFormatProperties'] = 'Lists physical device\'s format capabilities'
-refDesc['vkGetPhysicalDeviceImageFormatProperties'] = 'Lists physical device\'s image format capabilities'
-refDesc['vkGetPhysicalDeviceMemoryProperties'] = 'Reports memory information for the specified physical device'
-refDesc['vkGetPhysicalDeviceMirPresentationSupportKHR'] = 'Query physical device for presentation to Mir'
-refDesc['vkGetPhysicalDeviceProperties'] = 'Returns properties of a physical device'
-refDesc['vkGetPhysicalDeviceQueueFamilyProperties'] = 'Reports properties of the queues of the specified physical device'
-refDesc['vkGetPhysicalDeviceSparseImageFormatProperties'] = 'Retrieve properties of an image format applied to sparse images'
-refDesc['vkGetPhysicalDeviceSurfaceCapabilitiesKHR'] = 'Query surface capabilities'
-refDesc['vkGetPhysicalDeviceSurfaceFormatsKHR'] = 'Query color formats supported by surface'
-refDesc['vkGetPhysicalDeviceSurfacePresentModesKHR'] = 'Query supported presentation modes'
-refDesc['vkGetPhysicalDeviceSurfaceSupportKHR'] = 'Query if presentation is supported'
-refDesc['vkGetPhysicalDeviceWaylandPresentationSupportKHR'] = 'Query physical device for presentation to Wayland'
-refDesc['vkGetPhysicalDeviceXcbPresentationSupportKHR'] = 'Query physical device for presentation to X11 server using XCB'
-refDesc['vkGetPhysicalDeviceXlibPresentationSupportKHR'] = 'Query physical device for presentation to X11 server using Xlib'
-refDesc['vkGetPipelineCacheData'] = 'Get the data store from a pipeline cache'
-refDesc['vkGetQueryPoolResults'] = 'Copy results of queries in a query pool to a host memory region'
-refDesc['vkGetRenderAreaGranularity'] = 'Returns the granularity for optimal render area'
-refDesc['vkGetSwapchainImagesKHR'] = 'Obtain the array of presentable images associated with a swapchain'
-refDesc['VkImageCreateFlags'] = 'Image object creation flags'
-refDesc['VkImageCreateInfo'] = 'Structure specifying the parameters of a newly created image object'
-refDesc['VkImageLayout'] = 'Layout of image and image subresources'
-refDesc['VkImageMemoryBarrier'] = 'Structure specifying the parameters of an image memory barrier'
-refDesc['VkImageType'] = 'Specifies the type of an image object'
-refDesc['VkImageUsageFlags'] = 'Image object usage flags'
-refDesc['VkImageViewType'] = 'Image view types'
-refDesc['vkInvalidateMappedMemoryRanges'] = 'Invalidate ranges of mapped memory objects'
-refDesc['vkMapMemory'] = 'Map a memory object into application address space'
-refDesc['VkMemoryAllocateInfo'] = 'Structure containing parameters of a memory allocation'
-refDesc['VkMemoryPropertyFlags'] = 'Memory pool properties'
-refDesc['vkMergePipelineCaches'] = 'Combine the data stores of pipeline caches'
-refDesc['VkPhysicalDeviceFeatures'] = 'Structure describing the fine-grained features that can be supported by an implementation'
-refDesc['VkPhysicalDeviceLimits'] = 'Structure'
-refDesc['VkPipelineLayoutCreateInfo'] = 'Structure specifying the parameters of a newly created pipeline layout object'
-refDesc['VkPipelineStageFlags'] = 'Pipeline stage identifiers'
-refDesc['VkQueryControlFlags'] = 'Query control flags'
-refDesc['VkQueryResultFlags'] = 'Query result flags'
-refDesc['vkQueueBindSparse'] = 'Bind device memory to a sparse resource object'
-refDesc['VkQueueFamilyProperties'] = 'Structure providing information about a queue family'
-refDesc['VkQueueFlags'] = 'Queue capability flags'
-refDesc['vkQueuePresentKHR'] = 'Queue an image for presentation'
-refDesc['vkQueueSubmit'] = 'Submits a sequence of semaphores or command buffers to a queue'
-refDesc['vkQueueWaitIdle'] = 'Wait for a queue to become idle'
-refDesc['vkResetCommandBuffer'] = 'Reset a command buffer'
-refDesc['vkResetCommandPool'] = 'Reset a command pool'
-refDesc['vkResetDescriptorPool'] = 'Resets a descriptor pool object'
-refDesc['vkResetEvent'] = 'Reset an event to non-signaled state'
-refDesc['vkResetFences'] = 'Resets one or more fence objects'
-refDesc['vkSetEvent'] = 'Set an event to signaled state'
-refDesc['VkSharingMode'] = 'Buffer and image sharing modes'
-refDesc['vkUnmapMemory'] = 'Unmap a previously mapped memory object'
-refDesc['vkUpdateDescriptorSets'] = 'Update the contents of a descriptor set object'
-refDesc['vkWaitForFences'] = 'Wait for one or more fences to become signaled'
-refDesc['VkWriteDescriptorSet'] = 'Structure specifying the parameters of a descriptor set write operation'
-refDesc['VkAndroidSurfaceCreateInfoKHR'] = 'Structure specifying parameters of a newly created Android surface object'
-refDesc['VkDebugReportCallbackCreateInfoEXT'] = 'Structure specifying parameters of a newly created debug report object'
-refDesc['VkDisplayModeCreateInfoKHR'] = 'Structure specifying parameters of a newly created display mode object'
-refDesc['VkDisplayModeParametersKHR'] = 'Structure describing display parameters associated with a display mode'
-refDesc['VkDisplayModePropertiesKHR'] = 'Structure describing display mode properties'
-refDesc['VkDisplayPlaneCapabilitiesKHR'] = 'Structure describing capabilities of a mode and plane combination'
-refDesc['VkDisplayPlanePropertiesKHR'] = 'Structure describing display plane properties'
-refDesc['VkDisplayPresentInfoKHR'] = 'Structure describing parameters of a queue presentation to a swapchain'
-refDesc['VkDisplayPropertiesKHR'] = 'Structure describing an available display device'
-refDesc['VkDisplaySurfaceCreateInfoKHR'] = 'Structure specifying parameters of a newly created display plane surface object'
-refDesc['VkMirSurfaceCreateInfoKHR'] = 'Structure specifying parameters of a newly created Mir surface object'
-refDesc['VkPresentInfoKHR'] = 'Structure describing parameters of a queue presentation'
-refDesc['VkSurfaceCapabilitiesKHR'] = 'Structure describing capabilities of a surface'
-refDesc['VkSurfaceFormatKHR'] = 'Structure describing a supported swapchain format-colorspace pair'
-refDesc['VkSwapchainCreateInfoKHR'] = 'Structure specifying parameters of a newly created swapchain object'
-refDesc['VkWaylandSurfaceCreateInfoKHR'] = 'Structure specifying parameters of a newly created Wayland surface object'
-refDesc['VkWin32SurfaceCreateInfoKHR'] = 'Structure specifying parameters of a newly created Win32 surface object'
-refDesc['VkXcbSurfaceCreateInfoKHR'] = 'Structure specifying parameters of a newly created Xcb surface object'
-refDesc['VkXlibSurfaceCreateInfoKHR'] = 'Structure specifying parameters of a newly created Xlib surface object'
-
-# These are generated based on the structure name
-
-refDesc['VkBufferViewCreateInfo'] = 'Structure specifying parameters of a newly created buffer view'
-refDesc['VkCommandPoolCreateInfo'] = 'Structure specifying parameters of a newly created command pool'
-refDesc['VkComputePipelineCreateInfo'] = 'Structure specifying parameters of a newly created compute pipeline'
-refDesc['VkDescriptorPoolCreateInfo'] = 'Structure specifying parameters of a newly created descriptor pool'
-refDesc['VkDescriptorSetLayoutCreateInfo'] = 'Structure specifying parameters of a newly created descriptor set layout'
-refDesc['VkDeviceCreateInfo'] = 'Structure specifying parameters of a newly created device'
-refDesc['VkDeviceQueueCreateInfo'] = 'Structure specifying parameters of a newly created device queue'
-refDesc['VkEventCreateInfo'] = 'Structure specifying parameters of a newly created event'
-refDesc['VkExtent2D'] = 'Structure specifying a two-dimensional extent'
-refDesc['VkExtent3D'] = 'Structure specifying a three-dimensional extent'
-refDesc['VkFenceCreateInfo'] = 'Structure specifying parameters of a newly created fence'
-refDesc['VkFramebufferCreateInfo'] = 'Structure specifying parameters of a newly created framebuffer'
-refDesc['VkGraphicsPipelineCreateInfo'] = 'Structure specifying parameters of a newly created graphics pipeline'
-refDesc['VkImageViewCreateInfo'] = 'Structure specifying parameters of a newly created image view'
-refDesc['VkInstanceCreateInfo'] = 'Structure specifying parameters of a newly created instance'
-refDesc['VkOffset2D'] = 'Structure specifying a two-dimensional offset'
-refDesc['VkOffset3D'] = 'Structure specifying a three-dimensional offset'
-refDesc['VkPipelineCacheCreateInfo'] = 'Structure specifying parameters of a newly created pipeline cache'
-refDesc['VkPipelineColorBlendStateCreateInfo'] = 'Structure specifying parameters of a newly created pipeline color blend state'
-refDesc['VkPipelineDepthStencilStateCreateInfo'] = 'Structure specifying parameters of a newly created pipeline depth stencil state'
-refDesc['VkPipelineDynamicStateCreateInfo'] = 'Structure specifying parameters of a newly created pipeline dynamic state'
-refDesc['VkPipelineInputAssemblyStateCreateInfo'] = 'Structure specifying parameters of a newly created pipeline input assembly state'
-refDesc['VkPipelineMultisampleStateCreateInfo'] = 'Structure specifying parameters of a newly created pipeline multisample state'
-refDesc['VkPipelineRasterizationStateCreateInfo'] = 'Structure specifying parameters of a newly created pipeline rasterization state'
-refDesc['VkPipelineShaderStageCreateInfo'] = 'Structure specifying parameters of a newly created pipeline shader stage'
-refDesc['VkPipelineTessellationStateCreateInfo'] = 'Structure specifying parameters of a newly created pipeline tessellation state'
-refDesc['VkPipelineVertexInputStateCreateInfo'] = 'Structure specifying parameters of a newly created pipeline vertex input state'
-refDesc['VkPipelineViewportStateCreateInfo'] = 'Structure specifying parameters of a newly created pipeline viewport state'
-refDesc['VkQueryPoolCreateInfo'] = 'Structure specifying parameters of a newly created query pool'
-refDesc['VkRect2D'] = 'Structure specifying a two-dimensional subregion'
-refDesc['VkRenderPassCreateInfo'] = 'Structure specifying parameters of a newly created render pass'
-refDesc['VkSamplerCreateInfo'] = 'Structure specifying parameters of a newly created sampler'
-refDesc['VkSemaphoreCreateInfo'] = 'Structure specifying parameters of a newly created semaphore'
-refDesc['VkShaderModuleCreateInfo'] = 'Structure specifying parameters of a newly created shader module'
-
-# These are TBD
-
-refDesc['VkApplicationInfo'] = 'Structure specifying application info'
-refDesc['VkAttachmentDescription'] = 'Structure specifying an attachment description'
-refDesc['VkAttachmentReference'] = 'Structure specifying an attachment reference'
-refDesc['VkBindSparseInfo'] = 'Structure specifying a sparse binding operation'
-refDesc['VkBufferCopy'] = 'Structure specifying a buffer copy operation'
-refDesc['VkBufferImageCopy'] = 'Structure specifying a buffer image copy operation'
-refDesc['VkClearAttachment'] = 'Structure specifying a clear attachment'
-refDesc['VkClearColorValue'] = 'Structure specifying a clear color value'
-refDesc['VkClearDepthStencilValue'] = 'Structure specifying a clear depth stencil value'
-refDesc['VkClearRect'] = 'Structure specifying a clear rectangle'
-refDesc['VkClearValue'] = 'Structure specifying a clear value'
-refDesc['VkCommandBufferBeginInfo'] = 'Structure specifying a command buffer begin operation'
-refDesc['VkCommandBufferInheritanceInfo'] = 'Structure specifying command buffer inheritance info'
-refDesc['VkCommandBufferLevel'] = 'Structure specifying a command buffer level'
-refDesc['VkComponentMapping'] = 'Structure specifying a color component mapping'
-refDesc['VkCopyDescriptorSet'] = 'Structure specifying a copy descriptor set operation'
-refDesc['VkDescriptorBufferInfo'] = 'Structure specifying descriptor buffer info'
-refDesc['VkDescriptorImageInfo'] = 'Structure specifying descriptor image info'
-refDesc['VkDescriptorPoolSize'] = 'Structure specifying descriptor pool size'
-refDesc['VkDescriptorSetLayoutBinding'] = 'Structure specifying a descriptor set layout binding'
-refDesc['VkDispatchIndirectCommand'] = 'Structure specifying a dispatch indirect command'
-refDesc['VkDrawIndexedIndirectCommand'] = 'Structure specifying a draw indexed indirect command'
-refDesc['VkDrawIndirectCommand'] = 'Structure specifying a draw indirect command'
-refDesc['VkExtensionProperties'] = 'Structure specifying a extension properties'
-refDesc['VkFormatProperties'] = 'Structure specifying image format properties'
-refDesc['VkImageBlit'] = 'Structure specifying an image blit operation'
-refDesc['VkImageCopy'] = 'Structure specifying an image copy operation'
-refDesc['VkImageFormatProperties'] = 'Structure specifying a image format properties'
-refDesc['VkImageResolve'] = 'Structure specifying an image resolve operation'
-refDesc['VkImageSubresource'] = 'Structure specifying a image subresource'
-refDesc['VkImageSubresourceLayers'] = 'Structure specifying a image subresource layers'
-refDesc['VkImageSubresourceRange'] = 'Structure specifying a image subresource range'
-refDesc['VkLayerProperties'] = 'Structure specifying layer properties'
-refDesc['VkMappedMemoryRange'] = 'Structure specifying a mapped memory range'
-refDesc['VkMemoryBarrier'] = 'Structure specifying a memory barrier'
-refDesc['VkMemoryHeap'] = 'Structure specifying a memory heap'
-refDesc['VkMemoryRequirements'] = 'Structure specifying memory requirements'
-refDesc['VkMemoryType'] = 'Structure specifying memory type'
-refDesc['VkPhysicalDeviceMemoryProperties'] = 'Structure specifying physical device memory properties'
-refDesc['VkPhysicalDeviceProperties'] = 'Structure specifying physical device properties'
-refDesc['VkPhysicalDeviceSparseProperties'] = 'Structure specifying physical device sparse memory properties'
-refDesc['VkPipelineColorBlendAttachmentState'] = 'Structure specifying a pipeline color blend attachment state'
-refDesc['VkPushConstantRange'] = 'Structure specifying a push constant range'
-refDesc['VkRenderPassBeginInfo'] = 'Structure specifying render pass begin info'
-refDesc['VkSparseBufferMemoryBindInfo'] = 'Structure specifying a sparse buffer memory bind operation'
-refDesc['VkSparseImageFormatProperties'] = 'Structure specifying sparse image format properties'
-refDesc['VkSparseImageMemoryBind'] = 'Structure specifying sparse image memory bind'
-refDesc['VkSparseImageMemoryBindInfo'] = 'Structure specifying sparse image memory bind info'
-refDesc['VkSparseImageMemoryRequirements'] = 'Structure specifying sparse image memory requirements'
-refDesc['VkSparseImageOpaqueMemoryBindInfo'] = 'Structure specifying sparse image opaque memory bind info'
-refDesc['VkSparseMemoryBind'] = 'Structure specifying a sparse memory bind operation'
-refDesc['VkSpecializationInfo'] = 'Structure specifying specialization info'
-refDesc['VkSpecializationMapEntry'] = 'Structure specifying a specialization map entry'
-refDesc['VkStencilOpState'] = 'Structure specifying stencil operation state'
-refDesc['VkSubmitInfo'] = 'Structure specifying a queue submit operation'
-refDesc['VkSubpassDependency'] = 'Structure specifying a subpass dependency'
-refDesc['VkSubpassDescription'] = 'Structure specifying a subpass description'
-refDesc['VkSubresourceLayout'] = 'Structure specifying subresource layout'
-refDesc['VkVertexInputAttributeDescription'] = 'Structure specifying vertex input attribute description'
-refDesc['VkVertexInputBindingDescription'] = 'Structure specifying vertex input binding description'
-refDesc['VkViewport'] = 'Structure specifying a viewport'
-
-# These are constructed from spec text
-
-refDesc['VkAccessFlagBits'] = 'Bitmask specifying classes of memory access the will participate in a memory barrier dependency'
-refDesc['VkAttachmentDescriptionFlagBits'] = 'Bitmask specifying additional properties of an attachment'
-refDesc['VkBufferCreateFlagBits'] = 'Bitmask specifying additional parameters of a buffer'
-refDesc['VkBufferUsageFlagBits'] = 'Bitmask specifying allowed usage of a buffer'
-refDesc['VkColorComponentFlagBits'] = 'Bitmask controlling which components are written to the framebuffer'
-refDesc['VkCommandBufferResetFlagBits'] = 'Bitmask controlling behavior of a command buffer reset'
-refDesc['VkCommandBufferUsageFlagBits'] = 'Bitmask specifying usage behavior for command buffer'
-refDesc['VkCommandPoolCreateFlagBits'] = 'Bitmask specifying usage behavior for a command pool'
-refDesc['VkCommandPoolResetFlagBits'] = 'Bitmask controlling behavior of a command pool reset'
-refDesc['VkCullModeFlagBits'] = 'Bitmask controlling triangle culling'
-refDesc['VkDependencyFlagBits'] = 'Bitmask specifying dependencies between subpasses'
-refDesc['VkDescriptorPoolCreateFlagBits'] = 'Bitmask specifying certain supported operations on a descriptor pool'
-refDesc['VkFenceCreateFlagBits'] = 'Bitmask specifying initial state and behavior of a fence'
-refDesc['VkFormatFeatureFlagBits'] = 'Bitmask specifying features supported by a buffer'
-refDesc['VkImageAspectFlagBits'] = 'Bitmask specifying which aspects of an image are included in a view'
-refDesc['VkImageCreateFlagBits'] = 'Bitmask specifying additional parameters of an image'
-refDesc['VkImageUsageFlagBits'] = 'Bitmask specifying intended usage of an image'
-refDesc['VkMemoryHeapFlagBits'] = 'Bitmask specifying attribute flags for a heap'
-refDesc['VkMemoryPropertyFlagBits'] = 'Bitmask specifying properties for a memory type'
-refDesc['VkPipelineCreateFlagBits'] = 'Bitmask controlling how a pipeline is generated'
-refDesc['VkPipelineStageFlagBits'] = 'Bitmask specifying pipeline stages'
-refDesc['VkQueryControlFlagBits'] = 'Bitmask specifying constraints on a query'
-refDesc['VkQueryPipelineStatisticFlagBits'] = 'Bitmask specifying queried pipeline statistics'
-refDesc['VkQueryResultFlagBits'] = 'Bitmask specifying how and when query results are returned'
-refDesc['VkQueueFlagBits'] = 'Bitmask specifying capabilities of queues in a queue family'
-refDesc['VkSampleCountFlagBits'] = 'Bitmask specifying sample counts supported for an image used for storage operations'
-refDesc['VkShaderStageFlagBits'] = 'Bitmask specifying a pipeline stage'
-refDesc['VkSparseImageFormatFlagBits'] = 'Bitmask specifying additional information about a sparse image resource'
-refDesc['VkSparseMemoryBindFlagBits'] = 'Bitmask specifying usage of a sparse memory binding operation'
-refDesc['VkStencilFaceFlagBits'] = 'Bitmask specifying sets of stencil state for which to update the compare mask'