Update for Vulkan-Docs 1.2.140

This commit is contained in:
Jon Leech 2020-05-04 03:42:53 -07:00 committed by Jon Leech
parent 4c19ae6b95
commit 0c5351f5e9
11 changed files with 2096 additions and 905 deletions

File diff suppressed because it is too large Load diff

View file

@ -90,9 +90,6 @@ typedef enum VkAccelerationStructureBuildTypeKHR {
VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR = 0, VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR = 0,
VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR = 1, VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR = 1,
VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR = 2, VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR = 2,
VK_ACCELERATION_STRUCTURE_BUILD_TYPE_BEGIN_RANGE_KHR = VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR,
VK_ACCELERATION_STRUCTURE_BUILD_TYPE_END_RANGE_KHR = VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR,
VK_ACCELERATION_STRUCTURE_BUILD_TYPE_RANGE_SIZE_KHR = (VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR - VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR + 1),
VK_ACCELERATION_STRUCTURE_BUILD_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF VK_ACCELERATION_STRUCTURE_BUILD_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF
} VkAccelerationStructureBuildTypeKHR; } VkAccelerationStructureBuildTypeKHR;
typedef union VkDeviceOrHostAddressKHR { typedef union VkDeviceOrHostAddressKHR {

File diff suppressed because it is too large Load diff

View file

@ -272,9 +272,6 @@ typedef enum VkFullScreenExclusiveEXT {
VK_FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT = 1, VK_FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT = 1,
VK_FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT = 2, VK_FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT = 2,
VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT = 3, VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT = 3,
VK_FULL_SCREEN_EXCLUSIVE_BEGIN_RANGE_EXT = VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT,
VK_FULL_SCREEN_EXCLUSIVE_END_RANGE_EXT = VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT,
VK_FULL_SCREEN_EXCLUSIVE_RANGE_SIZE_EXT = (VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT - VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT + 1),
VK_FULL_SCREEN_EXCLUSIVE_MAX_ENUM_EXT = 0x7FFFFFFF VK_FULL_SCREEN_EXCLUSIVE_MAX_ENUM_EXT = 0x7FFFFFFF
} VkFullScreenExclusiveEXT; } VkFullScreenExclusiveEXT;
typedef struct VkSurfaceFullScreenExclusiveInfoEXT { typedef struct VkSurfaceFullScreenExclusiveInfoEXT {

View file

@ -126,6 +126,9 @@ class CGeneratorOptions(GeneratorOptions):
self.aliasMacro = aliasMacro self.aliasMacro = aliasMacro
"""alias macro to inject when genAliasMacro is True""" """alias macro to inject when genAliasMacro is True"""
self.codeGenerator = True
"""True if this generator makes compilable code"""
class COutputGenerator(OutputGenerator): class COutputGenerator(OutputGenerator):
"""Generates C-language API interfaces.""" """Generates C-language API interfaces."""

View file

@ -333,6 +333,13 @@ class ConventionsBase:
group should be generated as part of group generation.""" group should be generated as part of group generation."""
return False return False
@property
def generate_max_enum_in_docs(self):
"""Return True if MAX_ENUM tokens should be generated in
documentation includes."""
return False
def extension_include_string(self, ext): def extension_include_string(self, ext):
"""Return format string for include:: line for an extension appendix """Return format string for include:: line for an extension appendix
file. ext is an object with the following members: file. ext is an object with the following members:

View file

@ -127,6 +127,7 @@ class GeneratorOptions:
addExtensions=None, addExtensions=None,
removeExtensions=None, removeExtensions=None,
emitExtensions=None, emitExtensions=None,
reparentEnums=True,
sortProcedure=regSortFeatures): sortProcedure=regSortFeatures):
"""Constructor. """Constructor.
@ -155,6 +156,11 @@ class GeneratorOptions:
- emitExtensions - regex matching names of extensions to actually emit - emitExtensions - regex matching names of extensions to actually emit
interfaces for (though all requested versions are considered when interfaces for (though all requested versions are considered when
deciding which interfaces to generate). deciding which interfaces to generate).
- reparentEnums - move <enum> elements which extend an enumerated
type from <feature> or <extension> elements to the target <enums>
element. This is required for almost all purposes, but the
InterfaceGenerator relies on the list of interfaces in the <feature>
or <extension> being complete. Defaults to True.
- sortProcedure - takes a list of FeatureInfo objects and sorts - sortProcedure - takes a list of FeatureInfo objects and sorts
them in place to a preferred order in the generated output. them in place to a preferred order in the generated output.
Default is core API versions, ARB/KHR/OES extensions, all other Default is core API versions, ARB/KHR/OES extensions, all other
@ -208,12 +214,19 @@ class GeneratorOptions:
interfaces for (though all requested versions are considered when interfaces for (though all requested versions are considered when
deciding which interfaces to generate).""" deciding which interfaces to generate)."""
self.reparentEnums = reparentEnums
"""boolean specifying whether to remove <enum> elements from
<feature> or <extension> when extending an <enums> type."""
self.sortProcedure = sortProcedure self.sortProcedure = sortProcedure
"""takes a list of FeatureInfo objects and sorts """takes a list of FeatureInfo objects and sorts
them in place to a preferred order in the generated output. them in place to a preferred order in the generated output.
Default is core API versions, ARB/KHR/OES extensions, all Default is core API versions, ARB/KHR/OES extensions, all
other extensions, alphabetically within each group.""" other extensions, alphabetically within each group."""
self.codeGenerator = False
"""True if this generator makes compilable code"""
def emptyRegex(self, pat): def emptyRegex(self, pat):
"""Substitute a regular expression which matches no version """Substitute a regular expression which matches no version
or extension names for None or the empty string.""" or extension names for None or the empty string."""
@ -254,6 +267,7 @@ class OutputGenerator:
self.featureName = None self.featureName = None
self.genOpts = None self.genOpts = None
self.registry = None self.registry = None
self.featureDictionary = {}
# Used for extension enum value generation # Used for extension enum value generation
self.extBase = 1000000000 self.extBase = 1000000000
self.extBlockSize = 1000 self.extBlockSize = 1000
@ -400,11 +414,9 @@ class OutputGenerator:
# still add this enum to the list. # still add this enum to the list.
(name2, numVal2, strVal2) = valueMap[numVal] (name2, numVal2, strVal2) = valueMap[numVal]
try: msg = 'Two enums found with the same value: {} = {} = {}'.format(
self.logMsg('warn', 'Two enums found with the same value: ' + name, name2.get('name'), strVal)
name + ' = ' + name2.get('name') + ' = ' + strVal) self.logMsg('error', msg)
except:
pdb.set_trace()
# Track this enum to detect followon duplicates # Track this enum to detect followon duplicates
nameMap[name] = [elem, numVal, strVal] nameMap[name] = [elem, numVal, strVal]
@ -518,16 +530,19 @@ class OutputGenerator:
# Now append the non-numeric enumerant values # Now append the non-numeric enumerant values
body.extend(aliasText) body.extend(aliasText)
# Generate min/max value tokens and a range-padding enum. Need some # Generate min/max value tokens - legacy use case.
# additional padding to generate correct names...
if isEnum and expand: if isEnum and expand:
body.extend((" {}_BEGIN_RANGE{} = {},".format(expandPrefix, expandSuffix, minName), body.extend((" {}_BEGIN_RANGE{} = {},".format(expandPrefix, expandSuffix, minName),
" {}_END_RANGE{} = {},".format( " {}_END_RANGE{} = {},".format(
expandPrefix, expandSuffix, maxName), expandPrefix, expandSuffix, maxName),
" {}_RANGE_SIZE{} = ({} - {} + 1),".format(expandPrefix, expandSuffix, maxName, minName))) " {}_RANGE_SIZE{} = ({} - {} + 1),".format(expandPrefix, expandSuffix, maxName, minName)))
body.append(" {}_MAX_ENUM{} = 0x7FFFFFFF".format( # Generate a range-padding value to ensure the enum is 32 bits, but
expandPrefix, expandSuffix)) # only in code generators, so it doesn't appear in documentation
if (self.genOpts.codeGenerator or
self.conventions.generate_max_enum_in_docs):
body.append(" {}_MAX_ENUM{} = 0x7FFFFFFF".format(
expandPrefix, expandSuffix))
# Postfix # Postfix
body.append("} %s;" % groupName) body.append("} %s;" % groupName)

View file

@ -25,9 +25,11 @@ from cgenerator import CGeneratorOptions, COutputGenerator
from docgenerator import DocGeneratorOptions, DocOutputGenerator from docgenerator import DocGeneratorOptions, DocOutputGenerator
from extensionmetadocgenerator import (ExtensionMetaDocGeneratorOptions, from extensionmetadocgenerator import (ExtensionMetaDocGeneratorOptions,
ExtensionMetaDocOutputGenerator) ExtensionMetaDocOutputGenerator)
from interfacedocgenerator import InterfaceDocGenerator
from generator import write from generator import write
from hostsyncgenerator import HostSynchronizationOutputGenerator from hostsyncgenerator import HostSynchronizationOutputGenerator
from pygenerator import PyOutputGenerator from pygenerator import PyOutputGenerator
from reflib import logDiag, logWarn, setLogFile
from reg import Registry from reg import Registry
from validitygenerator import ValidityOutputGenerator from validitygenerator import ValidityOutputGenerator
from vkconventions import VulkanConventions from vkconventions import VulkanConventions
@ -47,7 +49,7 @@ def endTimer(timeit, msg):
global startTime global startTime
if timeit: if timeit:
endTime = time.process_time() endTime = time.process_time()
write(msg, endTime - startTime, file=sys.stderr) logDiag(msg, endTime - startTime)
startTime = None startTime = None
@ -212,10 +214,14 @@ def makeGenOpts(args):
defaultExtensions = None, defaultExtensions = None,
addExtensions = addExtensionsPat, addExtensions = addExtensionsPat,
removeExtensions = removeExtensionsPat, removeExtensions = removeExtensionsPat,
emitExtensions = emitExtensionsPat) emitExtensions = emitExtensionsPat,
reparentEnums = False)
] ]
# Extension metainformation for spec extension appendices # Extension metainformation for spec extension appendices
# Includes all extensions by default, but only so that the generated
# 'promoted_extensions_*' files refer to all extensions that were
# promoted to a core version.
genOpts['extinc'] = [ genOpts['extinc'] = [
ExtensionMetaDocOutputGenerator, ExtensionMetaDocOutputGenerator,
ExtensionMetaDocGeneratorOptions( ExtensionMetaDocGeneratorOptions(
@ -227,11 +233,30 @@ def makeGenOpts(args):
versions = featuresPat, versions = featuresPat,
emitversions = None, emitversions = None,
defaultExtensions = defaultExtensions, defaultExtensions = defaultExtensions,
addExtensions = None, addExtensions = addExtensionsPat,
removeExtensions = None, removeExtensions = None,
emitExtensions = emitExtensionsPat) emitExtensions = emitExtensionsPat)
] ]
# Version and extension interface docs for version/extension appendices
# Includes all extensions by default.
genOpts['interfaceinc'] = [
InterfaceDocGenerator,
DocGeneratorOptions(
conventions = conventions,
filename = 'timeMarker',
directory = directory,
apiname = 'vulkan',
profile = None,
versions = featuresPat,
emitversions = featuresPat,
defaultExtensions = None,
addExtensions = addExtensionsPat,
removeExtensions = removeExtensionsPat,
emitExtensions = emitExtensionsPat,
reparentEnums = False)
]
# Platform extensions, in their own header files # Platform extensions, in their own header files
# Each element of the platforms[] array defines information for # Each element of the platforms[] array defines information for
# generating a single platform: # generating a single platform:
@ -313,8 +338,7 @@ def makeGenOpts(args):
apicall = 'VKAPI_ATTR ', apicall = 'VKAPI_ATTR ',
apientry = 'VKAPI_CALL ', apientry = 'VKAPI_CALL ',
apientryp = 'VKAPI_PTR *', apientryp = 'VKAPI_PTR *',
alignFuncParam = 48, alignFuncParam = 48)
genEnumBeginEndRange = True)
genOpts[headername] = [ COutputGenerator, opts ] genOpts[headername] = [ COutputGenerator, opts ]
@ -352,8 +376,7 @@ def makeGenOpts(args):
apicall = 'VKAPI_ATTR ', apicall = 'VKAPI_ATTR ',
apientry = 'VKAPI_CALL ', apientry = 'VKAPI_CALL ',
apientryp = 'VKAPI_PTR *', apientryp = 'VKAPI_PTR *',
alignFuncParam = 48, alignFuncParam = 48)
genEnumBeginEndRange = True)
] ]
# Unused - vulkan10.h target. # Unused - vulkan10.h target.
@ -415,7 +438,8 @@ def makeGenOpts(args):
def genTarget(args): def genTarget(args):
"""Generate a target based on the options in the matching genOpts{} object. """Create an API generator and corresponding generator options based on
the requested target and command line options.
This is encapsulated in a function so it can be profiled and/or timed. This is encapsulated in a function so it can be profiled and/or timed.
The args parameter is an parsed argument object containing the following The args parameter is an parsed argument object containing the following
@ -425,35 +449,30 @@ def genTarget(args):
- directory - directory to generate it in - directory - directory to generate it in
- protect - True if re-inclusion wrappers should be created - protect - True if re-inclusion wrappers should be created
- extensions - list of additional extensions to include in generated interfaces""" - extensions - list of additional extensions to include in generated interfaces"""
# Create generator options with specified parameters
# Create generator options with parameters specified on command line
makeGenOpts(args) makeGenOpts(args)
# Select a generator matching the requested target
if args.target in genOpts: if args.target in genOpts:
createGenerator = genOpts[args.target][0] createGenerator = genOpts[args.target][0]
options = genOpts[args.target][1] options = genOpts[args.target][1]
if not args.quiet: logDiag('* Building', options.filename)
write('* Building', options.filename, file=sys.stderr) logDiag('* options.versions =', options.versions)
write('* options.versions =', options.versions, file=sys.stderr) logDiag('* options.emitversions =', options.emitversions)
write('* options.emitversions =', options.emitversions, file=sys.stderr) logDiag('* options.defaultExtensions =', options.defaultExtensions)
write('* options.defaultExtensions =', options.defaultExtensions, file=sys.stderr) logDiag('* options.addExtensions =', options.addExtensions)
write('* options.addExtensions =', options.addExtensions, file=sys.stderr) logDiag('* options.removeExtensions =', options.removeExtensions)
write('* options.removeExtensions =', options.removeExtensions, file=sys.stderr) logDiag('* options.emitExtensions =', options.emitExtensions)
write('* options.emitExtensions =', options.emitExtensions, file=sys.stderr)
startTimer(args.time)
gen = createGenerator(errFile=errWarn, gen = createGenerator(errFile=errWarn,
warnFile=errWarn, warnFile=errWarn,
diagFile=diag) diagFile=diag)
reg.setGenerator(gen) return (gen, options)
reg.apiGen(options)
if not args.quiet:
write('* Generated', options.filename, file=sys.stderr)
endTimer(args.time, '* Time to generate ' + options.filename + ' =')
else: else:
write('No generator options for unknown target:', logErr('No generator options for unknown target:', args.target)
args.target, file=sys.stderr) return None
# -feature name # -feature name
@ -515,27 +534,6 @@ if __name__ == '__main__':
args.feature = [name for arg in args.feature for name in arg.split()] args.feature = [name for arg in args.feature for name in arg.split()]
args.extension = [name for arg in args.extension for name in arg.split()] args.extension = [name for arg in args.extension for name in arg.split()]
# Load & parse registry
reg = Registry()
startTimer(args.time)
tree = etree.parse(args.registry)
endTimer(args.time, '* Time to make ElementTree =')
if args.debug:
pdb.run('reg.loadElementTree(tree)')
else:
startTimer(args.time)
reg.loadElementTree(tree)
endTimer(args.time, '* Time to parse ElementTree =')
if args.validate:
reg.validateGroups()
if args.dump:
write('* Dumping registry to regdump.txt', file=sys.stderr)
reg.dumpReg(filehandle=open('regdump.txt', 'w', encoding='utf-8'))
# create error/warning & diagnostic files # create error/warning & diagnostic files
if args.errfile: if args.errfile:
errWarn = open(args.errfile, 'w', encoding='utf-8') errWarn = open(args.errfile, 'w', encoding='utf-8')
@ -547,13 +545,37 @@ if __name__ == '__main__':
else: else:
diag = None diag = None
# Create the API generator & generator options
(gen, options) = genTarget(args)
# Create the registry object with the specified generator and generator
# options. The options are set before XML loading as they may affect it.
reg = Registry(gen, options)
# Parse the specified registry XML into an ElementTree object
startTimer(args.time)
tree = etree.parse(args.registry)
endTimer(args.time, '* Time to make ElementTree =')
# Load the XML tree into the registry object
startTimer(args.time)
reg.loadElementTree(tree)
endTimer(args.time, '* Time to parse ElementTree =')
if args.validate:
reg.validateGroups()
if args.dump:
logDiag('* Dumping registry to regdump.txt')
reg.dumpReg(filehandle=open('regdump.txt', 'w', encoding='utf-8'))
# Finally, use the output generator to create the requested target
if args.debug: if args.debug:
pdb.run('genTarget(args)') pdb.run('reg.apiGen()')
elif args.profile:
import cProfile
import pstats
cProfile.run('genTarget(args)', 'profile.txt')
p = pstats.Stats('profile.txt')
p.strip_dirs().sort_stats('time').print_stats(50)
else: else:
genTarget(args) startTimer(args.time)
reg.apiGen()
endTimer(args.time, '* Time to generate ' + options.filename + ' =')
if not args.quiet:
logDiag('* Generated', options.filename)

View file

@ -20,7 +20,7 @@ import re
import sys import sys
import xml.etree.ElementTree as etree import xml.etree.ElementTree as etree
from collections import defaultdict, namedtuple from collections import defaultdict, namedtuple
from generator import OutputGenerator, write from generator import OutputGenerator, GeneratorOptions, write
def matchAPIProfile(api, profile, elem): def matchAPIProfile(api, profile, elem):
@ -129,12 +129,14 @@ class BaseInfo:
# If both specify the same value or bit position, # If both specify the same value or bit position,
# they're equal # they're equal
return True return True
elif (self.compareKeys(info, 'extends') and elif (self.compareKeys(info, 'extnumber') and
self.compareKeys(info, 'extnumber') and
self.compareKeys(info, 'offset') and self.compareKeys(info, 'offset') and
self.compareKeys(info, 'dir')): self.compareKeys(info, 'dir')):
# If both specify the same relative offset, they're equal # If both specify the same relative offset, they're equal
return True return True
elif (self.compareKeys(info, 'alias')):
# If both are aliases of the same value
return True
else: else:
return False return False
else: else:
@ -254,7 +256,24 @@ class FeatureInfo(BaseInfo):
class Registry: class Registry:
"""Object representing an API registry, loaded from an XML file.""" """Object representing an API registry, loaded from an XML file."""
def __init__(self): def __init__(self, gen=None, genOpts=None):
if gen is None:
# If not specified, give a default object so messaging will work
self.gen = OutputGenerator()
else:
self.gen = gen
"Output generator used to write headers / messages"
if genOpts is None:
self.genOpts = GeneratorOptions()
else:
self.genOpts = genOpts
"Options controlling features to write and how to format them"
self.gen.registry = self
self.gen.genOpts = self.genOpts
self.gen.genOpts.registry = self
self.tree = None self.tree = None
"ElementTree containing the root `<registry>`" "ElementTree containing the root `<registry>`"
@ -279,15 +298,6 @@ class Registry:
self.extdict = {} self.extdict = {}
"dictionary of FeatureInfo objects for `<extension>` elements keyed by extension name" "dictionary of FeatureInfo objects for `<extension>` elements keyed by extension name"
# A default output generator, so commands prior to apiGen can report
# errors via the generator object.
self.gen = OutputGenerator()
"OutputGenerator object used to write headers / messages"
self.genOpts = None
"""GeneratorOptions object used to control which
features to write and how to format them"""
self.emitFeatures = False self.emitFeatures = False
"""True to actually emit features for a version / extension, """True to actually emit features for a version / extension,
or False to just treat them as emitted""" or False to just treat them as emitted"""
@ -516,13 +526,16 @@ class Registry:
# groupName, 'found, adding element...') # groupName, 'found, adding element...')
gi = self.groupdict[groupName] gi = self.groupdict[groupName]
gi.elem.append(enum) gi.elem.append(enum)
# Remove element from parent <require> tag
# This should be a no-op in lxml.etree if self.genOpts.reparentEnums:
try: # Remove element from parent <require> tag
elem.remove(enum) # This is already done by lxml.etree, so
except ValueError: # allow for it to fail.
# Must be lxml.etree try:
pass elem.remove(enum)
except ValueError:
# Must be lxml.etree
pass
else: else:
self.gen.logMsg('warn', 'NO matching group', self.gen.logMsg('warn', 'NO matching group',
groupName, 'for enum', enum.get('name'), 'found.') groupName, 'for enum', enum.get('name'), 'found.')
@ -570,13 +583,16 @@ class Registry:
# groupName, 'found, adding element...') # groupName, 'found, adding element...')
gi = self.groupdict[groupName] gi = self.groupdict[groupName]
gi.elem.append(enum) gi.elem.append(enum)
# Remove element from parent <require> tag
# This should be a no-op in lxml.etree if self.genOpts.reparentEnums:
try: # Remove element from parent <require> tag
elem.remove(enum) # This is already done by lxml.etree, so
except ValueError: # allow for it to fail.
# Must be lxml.etree try:
pass elem.remove(enum)
except ValueError:
# Must be lxml.etree
pass
else: else:
self.gen.logMsg('warn', 'NO matching group', self.gen.logMsg('warn', 'NO matching group',
groupName, 'for enum', enum.get('name'), 'found.') groupName, 'for enum', enum.get('name'), 'found.')
@ -780,6 +796,112 @@ class Registry:
else: else:
self.gen.logMsg('warn', 'extend type:', extendType, 'IS NOT SUPPORTED') self.gen.logMsg('warn', 'extend type:', extendType, 'IS NOT SUPPORTED')
def getAlias(self, elem, dict):
"""Check for an alias in the same require block.
- elem - Element to check for an alias"""
# Try to find an alias
alias = elem.get('alias')
if alias is None:
name = elem.get('name')
typeinfo = self.lookupElementInfo(name, dict)
alias = typeinfo.elem.get('alias')
return alias
def checkForCorrectionAliases(self, alias, require, tag):
"""Check for an alias in the same require block.
- alias - String name of the alias
- require - `<require>` block from the registry
- tag - tag to look for in the require block"""
if alias and require.findall(tag + "[@name='" + alias + "']"):
return True
return False
def fillFeatureDictionary(self, interface, featurename, api, profile):
"""Capture added interfaces for a `<version>` or `<extension>`.
- interface - Element for `<version>` or `<extension>`, containing
`<require>` and `<remove>` tags
- featurename - name of the feature
- api - string specifying API name being generated
- profile - string specifying API profile being generated"""
# Explicitly initialize known types - errors for unhandled categories
self.gen.featureDictionary[featurename] = {
"enumconstant": {},
"command": {},
"enum": {},
"struct": {},
"handle": {},
"basetype": {},
"include": {},
"define": {},
"bitmask": {},
"union": {},
"funcpointer": {},
}
# <require> marks things that are required by this version/profile
for require in interface.findall('require'):
if matchAPIProfile(api, profile, require):
# Determine the required extension or version needed for a require block
# Assumes that only one of these is specified
required_key = require.get('feature')
if required_key is None:
required_key = require.get('extension')
# Loop over types, enums, and commands in the tag
for typeElem in require.findall('type'):
typename = typeElem.get('name')
typeinfo = self.lookupElementInfo(typename, self.typedict)
if typeinfo:
# Remove aliases in the same extension/feature; these are always added as a correction. Don't need the original to be visible.
alias = self.getAlias(typeElem, self.typedict)
if not self.checkForCorrectionAliases(alias, require, 'type'):
# Resolve the type info to the actual type, so we get an accurate read for 'structextends'
while alias:
typeinfo = self.lookupElementInfo(alias, self.typedict)
alias = typeinfo.elem.get('alias')
typecat = typeinfo.elem.get('category')
typeextends = typeinfo.elem.get('structextends')
if not required_key in self.gen.featureDictionary[featurename][typecat]:
self.gen.featureDictionary[featurename][typecat][required_key] = {}
if not typeextends in self.gen.featureDictionary[featurename][typecat][required_key]:
self.gen.featureDictionary[featurename][typecat][required_key][typeextends] = []
self.gen.featureDictionary[featurename][typecat][required_key][typeextends].append(typename)
for enumElem in require.findall('enum'):
enumname = enumElem.get('name')
typeinfo = self.lookupElementInfo(enumname, self.enumdict)
# Remove aliases in the same extension/feature; these are always added as a correction. Don't need the original to be visible.
alias = self.getAlias(enumElem, self.enumdict)
if not self.checkForCorrectionAliases(alias, require, 'enum'):
enumextends = enumElem.get('extends')
if not required_key in self.gen.featureDictionary[featurename]['enumconstant']:
self.gen.featureDictionary[featurename]['enumconstant'][required_key] = {}
if not enumextends in self.gen.featureDictionary[featurename]['enumconstant'][required_key]:
self.gen.featureDictionary[featurename]['enumconstant'][required_key][enumextends] = []
self.gen.featureDictionary[featurename]['enumconstant'][required_key][enumextends].append(enumname)
for cmdElem in require.findall('command'):
# Remove aliases in the same extension/feature; these are always added as a correction. Don't need the original to be visible.
alias = self.getAlias(cmdElem, self.cmddict)
if not self.checkForCorrectionAliases(alias, require, 'command'):
if not required_key in self.gen.featureDictionary[featurename]['command']:
self.gen.featureDictionary[featurename]['command'][required_key] = []
self.gen.featureDictionary[featurename]['command'][required_key].append(cmdElem.get('name'))
def requireAndRemoveFeatures(self, interface, featurename, api, profile): def requireAndRemoveFeatures(self, interface, featurename, api, profile):
"""Process `<require>` and `<remove>` tags for a `<version>` or `<extension>`. """Process `<require>` and `<remove>` tags for a `<version>` or `<extension>`.
@ -1005,18 +1127,16 @@ class Registry:
for c in features.findall('command'): for c in features.findall('command'):
self.generateFeature(c.get('name'), 'command', self.cmddict) self.generateFeature(c.get('name'), 'command', self.cmddict)
def apiGen(self, genOpts): def apiGen(self):
"""Generate interface for specified versions """Generate interface for specified versions using the current
generator and generator options"""
- genOpts - GeneratorOptions object with parameters used
by the Generator object."""
self.gen.logMsg('diag', '*******************************************') self.gen.logMsg('diag', '*******************************************')
self.gen.logMsg('diag', ' Registry.apiGen file:', genOpts.filename, self.gen.logMsg('diag', ' Registry.apiGen file:', self.genOpts.filename,
'api:', genOpts.apiname, 'api:', self.genOpts.apiname,
'profile:', genOpts.profile) 'profile:', self.genOpts.profile)
self.gen.logMsg('diag', '*******************************************') self.gen.logMsg('diag', '*******************************************')
self.genOpts = genOpts
# Reset required/declared flags for all features # Reset required/declared flags for all features
self.apiReset() self.apiReset()
@ -1134,6 +1254,7 @@ class Registry:
for f in features: for f in features:
self.gen.logMsg('diag', 'PASS 1: Tagging required and removed features for', self.gen.logMsg('diag', 'PASS 1: Tagging required and removed features for',
f.name) f.name)
self.fillFeatureDictionary(f.elem, f.name, self.genOpts.apiname, self.genOpts.profile)
self.requireAndRemoveFeatures(f.elem, f.name, self.genOpts.apiname, self.genOpts.profile) self.requireAndRemoveFeatures(f.elem, f.name, self.genOpts.apiname, self.genOpts.profile)
self.assignAdditionalValidity(f.elem, self.genOpts.apiname, self.genOpts.profile) self.assignAdditionalValidity(f.elem, self.genOpts.apiname, self.genOpts.profile)

File diff suppressed because one or more lines are too long

View file

@ -157,7 +157,7 @@ server.
<type category="define">// Vulkan 1.2 version number <type category="define">// Vulkan 1.2 version number
#define <name>VK_API_VERSION_1_2</name> <type>VK_MAKE_VERSION</type>(1, 2, 0)// Patch version should always be set to 0</type> #define <name>VK_API_VERSION_1_2</name> <type>VK_MAKE_VERSION</type>(1, 2, 0)// Patch version should always be set to 0</type>
<type category="define">// Version of this file <type category="define">// Version of this file
#define <name>VK_HEADER_VERSION</name> 139</type> #define <name>VK_HEADER_VERSION</name> 140</type>
<type category="define" requires="VK_HEADER_VERSION">// Complete version of this file <type category="define" requires="VK_HEADER_VERSION">// Complete version of this file
#define <name>VK_HEADER_VERSION_COMPLETE</name> <type>VK_MAKE_VERSION</type>(1, 2, VK_HEADER_VERSION)</type> #define <name>VK_HEADER_VERSION_COMPLETE</name> <type>VK_MAKE_VERSION</type>(1, 2, VK_HEADER_VERSION)</type>
@ -176,9 +176,9 @@ server.
<type category="define"> <type category="define">
#define <name>VK_NULL_HANDLE</name> 0</type> #define <name>VK_NULL_HANDLE</name> 0</type>
<type category="define">struct <name>ANativeWindow</name>;</type> <type category="basetype">struct <name>ANativeWindow</name>;</type>
<type category="define">struct <name>AHardwareBuffer</name>;</type> <type category="basetype">struct <name>AHardwareBuffer</name>;</type>
<type category="define"> <type category="basetype">
#ifdef __OBJC__ #ifdef __OBJC__
@class CAMetalLayer; @class CAMetalLayer;
#else #else
@ -273,6 +273,7 @@ typedef void <name>CAMetalLayer</name>;
<type category="bitmask" name="VkGeometryInstanceFlagsNV" alias="VkGeometryInstanceFlagsKHR"/> <type category="bitmask" name="VkGeometryInstanceFlagsNV" alias="VkGeometryInstanceFlagsKHR"/>
<type requires="VkBuildAccelerationStructureFlagBitsKHR" category="bitmask">typedef <type>VkFlags</type> <name>VkBuildAccelerationStructureFlagsKHR</name>;</type> <type requires="VkBuildAccelerationStructureFlagBitsKHR" category="bitmask">typedef <type>VkFlags</type> <name>VkBuildAccelerationStructureFlagsKHR</name>;</type>
<type category="bitmask" name="VkBuildAccelerationStructureFlagsNV" alias="VkBuildAccelerationStructureFlagsKHR"/> <type category="bitmask" name="VkBuildAccelerationStructureFlagsNV" alias="VkBuildAccelerationStructureFlagsKHR"/>
<type requires="VkPrivateDataSlotCreateFlagBitsEXT" category="bitmask">typedef <type>VkFlags</type> <name>VkPrivateDataSlotCreateFlagsEXT</name>;</type>
<type category="bitmask">typedef <type>VkFlags</type> <name>VkDescriptorUpdateTemplateCreateFlags</name>;</type> <type category="bitmask">typedef <type>VkFlags</type> <name>VkDescriptorUpdateTemplateCreateFlags</name>;</type>
<type category="bitmask" name="VkDescriptorUpdateTemplateCreateFlagsKHR" alias="VkDescriptorUpdateTemplateCreateFlags"/> <type category="bitmask" name="VkDescriptorUpdateTemplateCreateFlagsKHR" alias="VkDescriptorUpdateTemplateCreateFlags"/>
<type requires="VkPipelineCreationFeedbackFlagBitsEXT" category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineCreationFeedbackFlagsEXT</name>;</type> <type requires="VkPipelineCreationFeedbackFlagBitsEXT" category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineCreationFeedbackFlagsEXT</name>;</type>
@ -388,6 +389,7 @@ typedef void <name>CAMetalLayer</name>;
<type category="handle" name="VkAccelerationStructureNV" alias="VkAccelerationStructureKHR"/> <type category="handle" name="VkAccelerationStructureNV" alias="VkAccelerationStructureKHR"/>
<type category="handle" parent="VkDevice"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkPerformanceConfigurationINTEL</name>)</type> <type category="handle" parent="VkDevice"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkPerformanceConfigurationINTEL</name>)</type>
<type category="handle" parent="VkDevice"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkDeferredOperationKHR</name>)</type> <type category="handle" parent="VkDevice"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkDeferredOperationKHR</name>)</type>
<type category="handle" parent="VkDevice"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkPrivateDataSlotEXT</name>)</type>
<comment>WSI extensions</comment> <comment>WSI extensions</comment>
<type category="handle" parent="VkPhysicalDevice"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkDisplayKHR</name>)</type> <type category="handle" parent="VkPhysicalDevice"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkDisplayKHR</name>)</type>
@ -491,6 +493,7 @@ typedef void <name>CAMetalLayer</name>;
<type name="VkIndirectCommandsLayoutUsageFlagBitsNV" category="enum"/> <type name="VkIndirectCommandsLayoutUsageFlagBitsNV" category="enum"/>
<type name="VkIndirectCommandsTokenTypeNV" category="enum"/> <type name="VkIndirectCommandsTokenTypeNV" category="enum"/>
<type name="VkIndirectStateFlagBitsNV" category="enum"/> <type name="VkIndirectStateFlagBitsNV" category="enum"/>
<type name="VkPrivateDataSlotCreateFlagBitsEXT" category="enum"/>
<type name="VkDescriptorUpdateTemplateType" category="enum"/> <type name="VkDescriptorUpdateTemplateType" category="enum"/>
<type category="enum" name="VkDescriptorUpdateTemplateTypeKHR" alias="VkDescriptorUpdateTemplateType"/> <type category="enum" name="VkDescriptorUpdateTemplateTypeKHR" alias="VkDescriptorUpdateTemplateType"/>
<type name="VkViewportCoordinateSwizzleNV" category="enum"/> <type name="VkViewportCoordinateSwizzleNV" category="enum"/>
@ -1916,6 +1919,21 @@ typedef void <name>CAMetalLayer</name>;
<member noautovalidity="true"><type>void</type>* <name>pNext</name></member> <member noautovalidity="true"><type>void</type>* <name>pNext</name></member>
<member><type>VkBool32</type> <name>deviceGeneratedCommands</name></member> <member><type>VkBool32</type> <name>deviceGeneratedCommands</name></member>
</type> </type>
<type category="struct" name="VkDevicePrivateDataCreateInfoEXT" allowduplicate="true">
<member values="VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member><type>uint32_t</type> <name>privateDataSlotRequestCount</name></member>
</type>
<type category="struct" name="VkPrivateDataSlotCreateInfoEXT">
<member values="VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member><type>VkPrivateDataSlotCreateFlagsEXT</type> <name>flags</name></member>
</type>
<type category="struct" name="VkPhysicalDevicePrivateDataFeaturesEXT">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
<member><type>void</type>* <name>pNext</name></member>
<member><type>VkBool32</type> <name>privateData</name></member>
</type>
<type category="struct" name="VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV" structextends="VkPhysicalDeviceProperties2" returnedonly="true"> <type category="struct" name="VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV" structextends="VkPhysicalDeviceProperties2" returnedonly="true">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV"><type>VkStructureType</type> <name>sType</name></member> <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true"><type>void</type>* <name>pNext</name></member> <member noautovalidity="true"><type>void</type>* <name>pNext</name></member>
@ -4619,6 +4637,23 @@ typedef void <name>CAMetalLayer</name>;
<member><type>char</type> <name>description</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member> <member><type>char</type> <name>description</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member>
<member><type>char</type> <name>layer</name>[<enum>VK_MAX_EXTENSION_NAME_SIZE</enum>]</member> <member><type>char</type> <name>layer</name>[<enum>VK_MAX_EXTENSION_NAME_SIZE</enum>]</member>
</type> </type>
<type category="struct" name="VkSamplerCustomBorderColorCreateInfoEXT" structextends="VkSamplerCreateInfo">
<member values="VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member><type>VkClearColorValue</type> <name>customBorderColor</name></member>
<member><type>VkFormat</type> <name>format</name></member>
</type>
<type category="struct" name="VkPhysicalDeviceCustomBorderColorPropertiesEXT" structextends="VkPhysicalDeviceProperties2" returnedonly="true">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true"><type>void</type>* <name>pNext</name></member>
<member><type>uint32_t</type> <name>maxCustomBorderColorSamplers</name></member>
</type>
<type category="struct" name="VkPhysicalDeviceCustomBorderColorFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true"><type>void</type>* <name>pNext</name></member>
<member><type>VkBool32</type> <name>customBorderColors</name></member>
<member><type>VkBool32</type> <name>customBorderColorWithoutFormat</name></member>
</type>
<type category="union" name="VkDeviceOrHostAddressKHR"> <type category="union" name="VkDeviceOrHostAddressKHR">
<member noautovalidity="true"><type>VkDeviceAddress</type> <name>deviceAddress</name></member> <member noautovalidity="true"><type>VkDeviceAddress</type> <name>deviceAddress</name></member>
<member noautovalidity="true"><type>void</type>* <name>hostAddress</name></member> <member noautovalidity="true"><type>void</type>* <name>hostAddress</name></member>
@ -5756,6 +5791,8 @@ typedef void <name>CAMetalLayer</name>;
<enum value="6" name="VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV"/> <enum value="6" name="VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV"/>
<enum value="7" name="VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV"/> <enum value="7" name="VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV"/>
</enums> </enums>
<enums name="VkPrivateDataSlotCreateFlagBitsEXT" type="bitmask">
</enums>
<enums name="VkDescriptorSetLayoutCreateFlagBits" type="bitmask"> <enums name="VkDescriptorSetLayoutCreateFlagBits" type="bitmask">
</enums> </enums>
<enums name="VkExternalMemoryHandleTypeFlagBits" type="bitmask"> <enums name="VkExternalMemoryHandleTypeFlagBits" type="bitmask">
@ -6236,6 +6273,9 @@ typedef void <name>CAMetalLayer</name>;
<proto><type>void</type> <name>vkDestroyDevice</name></proto> <proto><type>void</type> <name>vkDestroyDevice</name></proto>
<param optional="true" externsync="true"><type>VkDevice</type> <name>device</name></param> <param optional="true" externsync="true"><type>VkDevice</type> <name>device</name></param>
<param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param> <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
<implicitexternsyncparams>
<param>all sname:VkQueue objects received from pname:device</param>
</implicitexternsyncparams>
</command> </command>
<command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY"> <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY">
<proto><type>VkResult</type> <name>vkEnumerateInstanceVersion</name></proto> <proto><type>VkResult</type> <name>vkEnumerateInstanceVersion</name></proto>
@ -7342,7 +7382,7 @@ typedef void <name>CAMetalLayer</name>;
<command> <command>
<proto><type>void</type> <name>vkDestroyDebugReportCallbackEXT</name></proto> <proto><type>void</type> <name>vkDestroyDebugReportCallbackEXT</name></proto>
<param><type>VkInstance</type> <name>instance</name></param> <param><type>VkInstance</type> <name>instance</name></param>
<param externsync="true"><type>VkDebugReportCallbackEXT</type> <name>callback</name></param> <param optional="true" externsync="true"><type>VkDebugReportCallbackEXT</type> <name>callback</name></param>
<param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param> <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
</command> </command>
<command> <command>
@ -7432,7 +7472,7 @@ typedef void <name>CAMetalLayer</name>;
<command> <command>
<proto><type>void</type> <name>vkDestroyIndirectCommandsLayoutNV</name></proto> <proto><type>void</type> <name>vkDestroyIndirectCommandsLayoutNV</name></proto>
<param><type>VkDevice</type> <name>device</name></param> <param><type>VkDevice</type> <name>device</name></param>
<param><type>VkIndirectCommandsLayoutNV</type> <name>indirectCommandsLayout</name></param> <param optional="true" externsync="true"><type>VkIndirectCommandsLayoutNV</type> <name>indirectCommandsLayout</name></param>
<param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param> <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
</command> </command>
<command> <command>
@ -8038,7 +8078,7 @@ typedef void <name>CAMetalLayer</name>;
<command> <command>
<proto><type>void</type> <name>vkDestroyDebugUtilsMessengerEXT</name></proto> <proto><type>void</type> <name>vkDestroyDebugUtilsMessengerEXT</name></proto>
<param><type>VkInstance</type> <name>instance</name></param> <param><type>VkInstance</type> <name>instance</name></param>
<param externsync="true"><type>VkDebugUtilsMessengerEXT</type> <name>messenger</name></param> <param optional="true" externsync="true"><type>VkDebugUtilsMessengerEXT</type> <name>messenger</name></param>
<param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param> <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
</command> </command>
<command> <command>
@ -8165,7 +8205,7 @@ typedef void <name>CAMetalLayer</name>;
<param><type>uint32_t</type> <name>bindingCount</name></param> <param><type>uint32_t</type> <name>bindingCount</name></param>
<param len="bindingCount">const <type>VkBuffer</type>* <name>pBuffers</name></param> <param len="bindingCount">const <type>VkBuffer</type>* <name>pBuffers</name></param>
<param len="bindingCount">const <type>VkDeviceSize</type>* <name>pOffsets</name></param> <param len="bindingCount">const <type>VkDeviceSize</type>* <name>pOffsets</name></param>
<param optional="true" len="bindingCount">const <type>VkDeviceSize</type>* <name>pSizes</name></param> <param optional="true" len="bindingCount" noautovalidity="true">const <type>VkDeviceSize</type>* <name>pSizes</name></param>
</command> </command>
<command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary"> <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary">
<proto><type>void</type> <name>vkCmdBeginTransformFeedbackEXT</name></proto> <proto><type>void</type> <name>vkCmdBeginTransformFeedbackEXT</name></proto>
@ -8275,7 +8315,7 @@ typedef void <name>CAMetalLayer</name>;
<command> <command>
<proto><type>void</type> <name>vkDestroyAccelerationStructureKHR</name></proto> <proto><type>void</type> <name>vkDestroyAccelerationStructureKHR</name></proto>
<param><type>VkDevice</type> <name>device</name></param> <param><type>VkDevice</type> <name>device</name></param>
<param><type>VkAccelerationStructureKHR</type> <name>accelerationStructure</name></param> <param optional="true" externsync="true"><type>VkAccelerationStructureKHR</type> <name>accelerationStructure</name></param>
<param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param> <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
</command> </command>
<command name="vkDestroyAccelerationStructureNV" alias="vkDestroyAccelerationStructureKHR"/> <command name="vkDestroyAccelerationStructureNV" alias="vkDestroyAccelerationStructureKHR"/>
@ -8678,7 +8718,7 @@ typedef void <name>CAMetalLayer</name>;
<command> <command>
<proto><type>void</type> <name>vkDestroyDeferredOperationKHR</name></proto> <proto><type>void</type> <name>vkDestroyDeferredOperationKHR</name></proto>
<param><type>VkDevice</type> <name>device</name></param> <param><type>VkDevice</type> <name>device</name></param>
<param><type>VkDeferredOperationKHR</type> <name>operation</name></param> <param optional="true" externsync="true"><type>VkDeferredOperationKHR</type> <name>operation</name></param>
<param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param> <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
</command> </command>
<command> <command>
@ -8696,6 +8736,35 @@ typedef void <name>CAMetalLayer</name>;
<param><type>VkDevice</type> <name>device</name></param> <param><type>VkDevice</type> <name>device</name></param>
<param><type>VkDeferredOperationKHR</type> <name>operation</name></param> <param><type>VkDeferredOperationKHR</type> <name>operation</name></param>
</command> </command>
<command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY">
<proto><type>VkResult</type> <name>vkCreatePrivateDataSlotEXT</name></proto>
<param><type>VkDevice</type> <name>device</name></param>
<param>const <type>VkPrivateDataSlotCreateInfoEXT</type>* <name>pCreateInfo</name></param>
<param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
<param><type>VkPrivateDataSlotEXT</type>* <name>pPrivateDataSlot</name></param>
</command>
<command>
<proto><type>void</type> <name>vkDestroyPrivateDataSlotEXT</name></proto>
<param><type>VkDevice</type> <name>device</name></param>
<param optional="true" externsync="true"><type>VkPrivateDataSlotEXT</type> <name>privateDataSlot</name></param>
<param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
</command>
<command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY">
<proto><type>VkResult</type> <name>vkSetPrivateDataEXT</name></proto>
<param><type>VkDevice</type> <name>device</name></param>
<param><type>VkObjectType</type> <name>objectType</name></param>
<param><type>uint64_t</type> <name>objectHandle</name></param>
<param><type>VkPrivateDataSlotEXT</type> <name>privateDataSlot</name></param>
<param><type>uint64_t</type> <name>data</name></param>
</command>
<command>
<proto><type>void</type> <name>vkGetPrivateDataEXT</name></proto>
<param><type>VkDevice</type> <name>device</name></param>
<param><type>VkObjectType</type> <name>objectType</name></param>
<param><type>uint64_t</type> <name>objectHandle</name></param>
<param><type>VkPrivateDataSlotEXT</type> <name>privateDataSlot</name></param>
<param><type>uint64_t</type>* <name>pData</name></param>
</command>
</commands> </commands>
<feature api="vulkan" name="VK_VERSION_1_0" number="1.0" comment="Vulkan core API interface definitions"> <feature api="vulkan" name="VK_VERSION_1_0" number="1.0" comment="Vulkan core API interface definitions">
@ -9461,6 +9530,13 @@ typedef void <name>CAMetalLayer</name>;
<enum offset="0" extends="VkResult" dir="-" name="VK_ERROR_SURFACE_LOST_KHR"/> <enum offset="0" extends="VkResult" dir="-" name="VK_ERROR_SURFACE_LOST_KHR"/>
<enum offset="1" extends="VkResult" dir="-" name="VK_ERROR_NATIVE_WINDOW_IN_USE_KHR"/> <enum offset="1" extends="VkResult" dir="-" name="VK_ERROR_NATIVE_WINDOW_IN_USE_KHR"/>
<enum offset="0" extends="VkObjectType" name="VK_OBJECT_TYPE_SURFACE_KHR" comment="VkSurfaceKHR"/> <enum offset="0" extends="VkObjectType" name="VK_OBJECT_TYPE_SURFACE_KHR" comment="VkSurfaceKHR"/>
<type name="VkSurfaceKHR"/>
<type name="VkSurfaceTransformFlagBitsKHR"/>
<type name="VkPresentModeKHR"/>
<type name="VkColorSpaceKHR"/>
<type name="VkCompositeAlphaFlagBitsKHR"/>
<type name="VkSurfaceCapabilitiesKHR"/>
<type name="VkSurfaceFormatKHR"/>
<command name="vkDestroySurfaceKHR"/> <command name="vkDestroySurfaceKHR"/>
<command name="vkGetPhysicalDeviceSurfaceSupportKHR"/> <command name="vkGetPhysicalDeviceSurfaceSupportKHR"/>
<command name="vkGetPhysicalDeviceSurfaceCapabilitiesKHR"/> <command name="vkGetPhysicalDeviceSurfaceCapabilitiesKHR"/>
@ -9478,6 +9554,11 @@ typedef void <name>CAMetalLayer</name>;
<enum offset="3" extends="VkResult" name="VK_SUBOPTIMAL_KHR"/> <enum offset="3" extends="VkResult" name="VK_SUBOPTIMAL_KHR"/>
<enum offset="4" extends="VkResult" dir="-" name="VK_ERROR_OUT_OF_DATE_KHR"/> <enum offset="4" extends="VkResult" dir="-" name="VK_ERROR_OUT_OF_DATE_KHR"/>
<enum offset="0" extends="VkObjectType" name="VK_OBJECT_TYPE_SWAPCHAIN_KHR" comment="VkSwapchainKHR"/> <enum offset="0" extends="VkObjectType" name="VK_OBJECT_TYPE_SWAPCHAIN_KHR" comment="VkSwapchainKHR"/>
<type name="VkSwapchainCreateFlagBitsKHR"/>
<type name="VkSwapchainCreateFlagsKHR"/>
<type name="VkSwapchainCreateInfoKHR"/>
<type name="VkSwapchainKHR"/>
<type name="VkPresentInfoKHR"/>
<command name="vkCreateSwapchainKHR"/> <command name="vkCreateSwapchainKHR"/>
<command name="vkDestroySwapchainKHR"/> <command name="vkDestroySwapchainKHR"/>
<command name="vkGetSwapchainImagesKHR"/> <command name="vkGetSwapchainImagesKHR"/>
@ -9516,6 +9597,8 @@ typedef void <name>CAMetalLayer</name>;
<enum offset="1" extends="VkStructureType" name="VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR"/> <enum offset="1" extends="VkStructureType" name="VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR"/>
<enum offset="0" extends="VkObjectType" name="VK_OBJECT_TYPE_DISPLAY_KHR" comment="VkDisplayKHR"/> <enum offset="0" extends="VkObjectType" name="VK_OBJECT_TYPE_DISPLAY_KHR" comment="VkDisplayKHR"/>
<enum offset="1" extends="VkObjectType" name="VK_OBJECT_TYPE_DISPLAY_MODE_KHR" comment="VkDisplayModeKHR"/> <enum offset="1" extends="VkObjectType" name="VK_OBJECT_TYPE_DISPLAY_MODE_KHR" comment="VkDisplayModeKHR"/>
<type name="VkDisplayKHR"/>
<type name="VkDisplayModeKHR"/>
<type name="VkDisplayPlaneAlphaFlagsKHR"/> <type name="VkDisplayPlaneAlphaFlagsKHR"/>
<type name="VkDisplayPlaneAlphaFlagBitsKHR"/> <type name="VkDisplayPlaneAlphaFlagBitsKHR"/>
<type name="VkDisplayPropertiesKHR"/> <type name="VkDisplayPropertiesKHR"/>
@ -9635,6 +9718,10 @@ typedef void <name>CAMetalLayer</name>;
<enum alias="VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT" extends="VkStructureType" name="VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT" comment="Backwards-compatible alias containing a typo"/> <enum alias="VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT" extends="VkStructureType" name="VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT" comment="Backwards-compatible alias containing a typo"/>
<enum offset="1" extends="VkResult" dir="-" name="VK_ERROR_VALIDATION_FAILED_EXT"/> <enum offset="1" extends="VkResult" dir="-" name="VK_ERROR_VALIDATION_FAILED_EXT"/>
<enum offset="0" extends="VkObjectType" name="VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT" comment="VkDebugReportCallbackEXT"/> <enum offset="0" extends="VkObjectType" name="VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT" comment="VkDebugReportCallbackEXT"/>
<type name="VkDebugReportCallbackEXT"/>
<type name="PFN_vkDebugReportCallbackEXT"/>
<type name="VkDebugReportFlagBitsEXT"/>
<type name="VkDebugReportFlagsEXT"/>
<type name="VkDebugReportObjectTypeEXT"/> <type name="VkDebugReportObjectTypeEXT"/>
<type name="VkDebugReportCallbackCreateInfoEXT"/> <type name="VkDebugReportCallbackCreateInfoEXT"/>
<command name="vkCreateDebugReportCallbackEXT"/> <command name="vkCreateDebugReportCallbackEXT"/>
@ -10162,6 +10249,7 @@ typedef void <name>CAMetalLayer</name>;
<enum value="&quot;VK_EXT_validation_flags&quot;" name="VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME"/> <enum value="&quot;VK_EXT_validation_flags&quot;" name="VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME"/>
<enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT"/> <enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT"/>
<type name="VkValidationFlagsEXT"/> <type name="VkValidationFlagsEXT"/>
<type name="VkValidationCheckEXT"/>
</require> </require>
</extension> </extension>
<extension name="VK_NN_vi_surface" number="63" type="instance" author="NN" contact="Mathias Heyer gitlab:@mheyer" requires="VK_KHR_surface" platform="vi" supported="vulkan"> <extension name="VK_NN_vi_surface" number="63" type="instance" author="NN" contact="Mathias Heyer gitlab:@mheyer" requires="VK_KHR_surface" platform="vi" supported="vulkan">
@ -10346,6 +10434,7 @@ typedef void <name>CAMetalLayer</name>;
<enum value="&quot;VK_KHR_external_semaphore_capabilities&quot;" name="VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME"/> <enum value="&quot;VK_KHR_external_semaphore_capabilities&quot;" name="VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME"/>
<enum extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO"/> <enum extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO"/>
<enum extends="VkStructureType" name="VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR" alias="VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES"/> <enum extends="VkStructureType" name="VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR" alias="VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES"/>
<enum extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES"/>
<enum name="VK_LUID_SIZE_KHR"/> <enum name="VK_LUID_SIZE_KHR"/>
<type name="VkExternalSemaphoreHandleTypeFlagsKHR"/> <type name="VkExternalSemaphoreHandleTypeFlagsKHR"/>
<type name="VkExternalSemaphoreHandleTypeFlagBitsKHR"/> <type name="VkExternalSemaphoreHandleTypeFlagBitsKHR"/>
@ -10416,6 +10505,10 @@ typedef void <name>CAMetalLayer</name>;
<command name="vkCmdPushDescriptorSetWithTemplateKHR"/> <command name="vkCmdPushDescriptorSetWithTemplateKHR"/>
<enum value="1" extends="VkDescriptorUpdateTemplateType" name="VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR" comment="Create descriptor update template for pushed descriptor updates"/> <enum value="1" extends="VkDescriptorUpdateTemplateType" name="VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR" comment="Create descriptor update template for pushed descriptor updates"/>
</require> </require>
<require extension="VK_KHR_descriptor_update_template">
<command name="vkCmdPushDescriptorSetWithTemplateKHR"/>
<enum value="1" extends="VkDescriptorUpdateTemplateType" name="VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR" comment="Create descriptor update template for pushed descriptor updates"/>
</require>
</extension> </extension>
<extension name="VK_EXT_conditional_rendering" number="82" type="device" author="NV" contact="Vikram Kushwaha @vkushwaha" supported="vulkan"> <extension name="VK_EXT_conditional_rendering" number="82" type="device" author="NV" contact="Vikram Kushwaha @vkushwaha" supported="vulkan">
<require> <require>
@ -10767,6 +10860,7 @@ typedef void <name>CAMetalLayer</name>;
<enum value="&quot;VK_KHR_external_fence_capabilities&quot;" name="VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME"/> <enum value="&quot;VK_KHR_external_fence_capabilities&quot;" name="VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME"/>
<enum extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO"/> <enum extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO"/>
<enum extends="VkStructureType" name="VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES_KHR" alias="VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES"/> <enum extends="VkStructureType" name="VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES_KHR" alias="VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES"/>
<enum extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES"/>
<enum name="VK_LUID_SIZE_KHR"/> <enum name="VK_LUID_SIZE_KHR"/>
<type name="VkExternalFenceHandleTypeFlagsKHR"/> <type name="VkExternalFenceHandleTypeFlagsKHR"/>
<type name="VkExternalFenceHandleTypeFlagBitsKHR"/> <type name="VkExternalFenceHandleTypeFlagBitsKHR"/>
@ -10903,8 +10997,8 @@ typedef void <name>CAMetalLayer</name>;
<require> <require>
<enum value="1" name="VK_KHR_VARIABLE_POINTERS_SPEC_VERSION"/> <enum value="1" name="VK_KHR_VARIABLE_POINTERS_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_variable_pointers&quot;" name="VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME"/> <enum value="&quot;VK_KHR_variable_pointers&quot;" name="VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME"/>
<enum extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES"/> <enum extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES"/>
<enum extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES"/> <enum extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR"/>
<type name="VkPhysicalDeviceVariablePointerFeaturesKHR"/> <type name="VkPhysicalDeviceVariablePointerFeaturesKHR"/>
<type name="VkPhysicalDeviceVariablePointersFeaturesKHR"/> <type name="VkPhysicalDeviceVariablePointersFeaturesKHR"/>
</require> </require>
@ -10989,6 +11083,8 @@ typedef void <name>CAMetalLayer</name>;
<enum offset="3" extends="VkStructureType" name="VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT"/> <enum offset="3" extends="VkStructureType" name="VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT"/>
<enum offset="4" extends="VkStructureType" name="VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT"/> <enum offset="4" extends="VkStructureType" name="VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT"/>
<enum offset="0" extends="VkObjectType" name="VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT" comment="VkDebugUtilsMessengerEXT"/> <enum offset="0" extends="VkObjectType" name="VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT" comment="VkDebugUtilsMessengerEXT"/>
<type name="VkDebugUtilsMessengerEXT"/>
<type name="PFN_vkDebugUtilsMessengerCallbackEXT"/>
<type name="VkDebugUtilsObjectNameInfoEXT"/> <type name="VkDebugUtilsObjectNameInfoEXT"/>
<type name="VkDebugUtilsObjectTagInfoEXT"/> <type name="VkDebugUtilsObjectTagInfoEXT"/>
<type name="VkDebugUtilsLabelEXT"/> <type name="VkDebugUtilsLabelEXT"/>
@ -11737,6 +11833,7 @@ typedef void <name>CAMetalLayer</name>;
<require> <require>
<enum value="0" name="VK_EXT_EXTENSION_168_SPEC_VERSION"/> <enum value="0" name="VK_EXT_EXTENSION_168_SPEC_VERSION"/>
<enum value="&quot;VK_NV_extension_168&quot;" name="VK_EXT_EXTENSION_168_EXTENSION_NAME"/> <enum value="&quot;VK_NV_extension_168&quot;" name="VK_EXT_EXTENSION_168_EXTENSION_NAME"/>
<enum bitpos="19" extends="VkPipelineCreateFlagBits" name="VK_PIPELINE_CREATE_RESERVED_19_BIT_KHR"/>
</require> </require>
</extension> </extension>
<extension name="VK_KHR_maintenance3" number="169" type="device" requires="VK_KHR_get_physical_device_properties2" author="KHR" contact="Jeff Bolz @jeffbolznv" supported="vulkan" promotedto="VK_VERSION_1_1"> <extension name="VK_KHR_maintenance3" number="169" type="device" requires="VK_KHR_get_physical_device_properties2" author="KHR" contact="Jeff Bolz @jeffbolznv" supported="vulkan" promotedto="VK_VERSION_1_1">
@ -11834,8 +11931,6 @@ typedef void <name>CAMetalLayer</name>;
<enum offset="2" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT"/> <enum offset="2" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT"/>
<enum bitpos="7" extends="VkExternalMemoryHandleTypeFlagBits" name="VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT"/> <enum bitpos="7" extends="VkExternalMemoryHandleTypeFlagBits" name="VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT"/>
<enum bitpos="8" extends="VkExternalMemoryHandleTypeFlagBits" name="VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT"/> <enum bitpos="8" extends="VkExternalMemoryHandleTypeFlagBits" name="VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT"/>
<type name="VkExternalMemoryHandleTypeFlagsKHR"/>
<type name="VkExternalMemoryHandleTypeFlagBitsKHR"/>
<type name="VkImportMemoryHostPointerInfoEXT"/> <type name="VkImportMemoryHostPointerInfoEXT"/>
<type name="VkMemoryHostPointerPropertiesEXT"/> <type name="VkMemoryHostPointerPropertiesEXT"/>
<type name="VkPhysicalDeviceExternalMemoryHostPropertiesEXT"/> <type name="VkPhysicalDeviceExternalMemoryHostPropertiesEXT"/>
@ -12328,6 +12423,7 @@ typedef void <name>CAMetalLayer</name>;
<require> <require>
<enum value="0" name="VK_AMD_EXTENSION_227_SPEC_VERSION"/> <enum value="0" name="VK_AMD_EXTENSION_227_SPEC_VERSION"/>
<enum value="&quot;VK_AMD_extension_227&quot;" name="VK_AMD_EXTENSION_227_EXTENSION_NAME"/> <enum value="&quot;VK_AMD_extension_227&quot;" name="VK_AMD_EXTENSION_227_EXTENSION_NAME"/>
<enum bitpos="30" extends="VkFormatFeatureFlagBits" name="VK_FORMAT_FEATURE_AMD_RESERVED_30_BIT"/>
</require> </require>
</extension> </extension>
<extension name="VK_AMD_shader_core_properties2" number="228" type="device" author="AMD" contact="Matthaeus G. Chajdas @anteru" supported="vulkan" requires="VK_AMD_shader_core_properties"> <extension name="VK_AMD_shader_core_properties2" number="228" type="device" author="AMD" contact="Matthaeus G. Chajdas @anteru" supported="vulkan" requires="VK_AMD_shader_core_properties">
@ -12513,6 +12609,8 @@ typedef void <name>CAMetalLayer</name>;
<enum value="&quot;VK_EXT_validation_features&quot;" name="VK_EXT_VALIDATION_FEATURES_EXTENSION_NAME"/> <enum value="&quot;VK_EXT_validation_features&quot;" name="VK_EXT_VALIDATION_FEATURES_EXTENSION_NAME"/>
<enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT"/> <enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT"/>
<type name="VkValidationFeaturesEXT"/> <type name="VkValidationFeaturesEXT"/>
<type name="VkValidationFeatureEnableEXT"/>
<type name="VkValidationFeatureDisableEXT"/>
</require> </require>
</extension> </extension>
<extension name="VK_KHR_extension_249" number="249" author="KHR" contact="Keith Packard @keithp" supported="disabled"> <extension name="VK_KHR_extension_249" number="249" author="KHR" contact="Keith Packard @keithp" supported="disabled">
@ -12915,10 +13013,18 @@ typedef void <name>CAMetalLayer</name>;
<type name="VkPhysicalDeviceRobustness2PropertiesEXT"/> <type name="VkPhysicalDeviceRobustness2PropertiesEXT"/>
</require> </require>
</extension> </extension>
<extension name="VK_NVX_extension_288" number="288" author="NVX" contact="Liam Middlebrook @liam-middlebrook" supported="disabled"> <extension name="VK_EXT_custom_border_color" number="288" type="device" author="EXT" contact="Liam Middlebrook @liam-middlebrook" supported="vulkan">
<require> <require>
<enum value="0" name="VK_NVX_EXTENSION_288_SPEC_VERSION"/> <enum value="12" name="VK_EXT_CUSTOM_BORDER_COLOR_SPEC_VERSION"/>
<enum value="&quot;VK_NVX_extension_288&quot;" name="VK_NVX_EXTENSION_288_EXTENSION_NAME"/> <enum value="&quot;VK_EXT_custom_border_color&quot;" name="VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME"/>
<enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT"/>
<enum offset="1" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT"/>
<enum offset="2" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT"/>
<enum offset="3" extends="VkBorderColor" name="VK_BORDER_COLOR_FLOAT_CUSTOM_EXT"/>
<enum offset="4" extends="VkBorderColor" name="VK_BORDER_COLOR_INT_CUSTOM_EXT"/>
<type name="VkSamplerCustomBorderColorCreateInfoEXT"/>
<type name="VkPhysicalDeviceCustomBorderColorPropertiesEXT"/>
<type name="VkPhysicalDeviceCustomBorderColorFeaturesEXT"/>
</require> </require>
</extension> </extension>
<extension name="VK_EXT_extension_289" number="289" author="EXT" contact="Jan-Harald Fredriksen @janharaldfredriksen-arm" supported="disabled"> <extension name="VK_EXT_extension_289" number="289" author="EXT" contact="Jan-Harald Fredriksen @janharaldfredriksen-arm" supported="disabled">
@ -12966,10 +13072,24 @@ typedef void <name>CAMetalLayer</name>;
<enum value="&quot;VK_KHR_extension_295&quot;" name="VK_KHR_EXTENSION_295_EXTENSION_NAME"/> <enum value="&quot;VK_KHR_extension_295&quot;" name="VK_KHR_EXTENSION_295_EXTENSION_NAME"/>
</require> </require>
</extension> </extension>
<extension name="VK_NV_extension_296" number="296" author="NV" contact="Matthew Rusch gitlab:@mrusch" supported="disabled"> <extension name="VK_EXT_private_data" number="296" type="device" author="NV" contact="Matthew Rusch @mattruschnv" supported="vulkan">
<require> <require>
<enum value="0" name="VK_NV_EXTENSION_296_SPEC_VERSION"/> <enum value="1" name="VK_EXT_PRIVATE_DATA_SPEC_VERSION"/>
<enum value="&quot;VK_NV_extension_296&quot;" name="VK_NV_EXTENSION_296_EXTENSION_NAME"/> <enum value="&quot;VK_EXT_private_data&quot;" name="VK_EXT_PRIVATE_DATA_EXTENSION_NAME"/>
<enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT"/>
<enum offset="1" extends="VkStructureType" name="VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT"/>
<enum offset="2" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT"/>
<enum offset="0" extends="VkObjectType" name="VK_OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT"/>
<type name="VkPhysicalDevicePrivateDataFeaturesEXT"/>
<type name="VkDevicePrivateDataCreateInfoEXT"/>
<type name="VkPrivateDataSlotCreateInfoEXT"/>
<type name="VkPrivateDataSlotEXT"/>
<type name="VkPrivateDataSlotCreateFlagsEXT"/>
<type name="VkPrivateDataSlotCreateFlagBitsEXT"/>
<command name="vkCreatePrivateDataSlotEXT"/>
<command name="vkDestroyPrivateDataSlotEXT"/>
<command name="vkSetPrivateDataEXT"/>
<command name="vkGetPrivateDataEXT"/>
</require> </require>
</extension> </extension>
<extension name="VK_KHR_extension_297" number="297" author="KHR" contact="Corentin Wallez @Kangz" supported="disabled"> <extension name="VK_KHR_extension_297" number="297" author="KHR" contact="Corentin Wallez @Kangz" supported="disabled">
@ -13259,5 +13379,17 @@ typedef void <name>CAMetalLayer</name>;
<enum value="&quot;VK_EXT_extension_340&quot;" name="VK_EXT_EXTENSION_340_EXTENSION_NAME"/> <enum value="&quot;VK_EXT_extension_340&quot;" name="VK_EXT_EXTENSION_340_EXTENSION_NAME"/>
</require> </require>
</extension> </extension>
<extension name="VK_EXT_extension_341" number="341" author="EXT" contact="Joshua Ashton @Joshua-Ashton" supported="disabled">
<require>
<enum value="0" name="VK_EXT_EXTENSION_341_SPEC_VERSION"/>
<enum value="&quot;VK_EXT_extension_341&quot;" name="VK_EXT_EXTENSION_341_EXTENSION_NAME"/>
</require>
</extension>
<extension name="VK_EXT_extension_342" number="342" author="EXT" contact="Ralph Potter gitlab:@r_potter" supported="disabled">
<require>
<enum value="0" name="VK_EXT_EXTENSION_342_SPEC_VERSION"/>
<enum value="&quot;VK_EXT_extension_342&quot;" name="VK_EXT_EXTENSION_342_EXTENSION_NAME"/>
</require>
</extension>
</extensions> </extensions>
</registry> </registry>