repo: Delete unused code generators

Change-Id: I1ef619a117c6ec9c2befe0458eb8502894ecff6c
diff --git a/scripts/dispatch_table_helper_generator.py b/scripts/dispatch_table_helper_generator.py
deleted file mode 100644
index 6e21045..0000000
--- a/scripts/dispatch_table_helper_generator.py
+++ /dev/null
@@ -1,207 +0,0 @@
-#!/usr/bin/python3 -i
-#
-# Copyright (c) 2015-2017 The Khronos Group Inc.
-# Copyright (c) 2015-2017 Valve Corporation
-# Copyright (c) 2015-2017 LunarG, Inc.
-# Copyright (c) 2015-2017 Google Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# Author: Mark Lobodzinski <mark@lunarg.com>
-
-import os,re,sys
-import xml.etree.ElementTree as etree
-from generator import *
-from collections import namedtuple
-from common_codegen import *
-
-#
-# DispatchTableHelperOutputGeneratorOptions - subclass of GeneratorOptions.
-class DispatchTableHelperOutputGeneratorOptions(GeneratorOptions):
-    def __init__(self,
-                 filename = None,
-                 directory = '.',
-                 apiname = None,
-                 profile = None,
-                 versions = '.*',
-                 emitversions = '.*',
-                 defaultExtensions = None,
-                 addExtensions = None,
-                 removeExtensions = None,
-                 emitExtensions = None,
-                 sortProcedure = regSortFeatures,
-                 prefixText = "",
-                 genFuncPointers = True,
-                 apicall = '',
-                 apientry = '',
-                 apientryp = '',
-                 alignFuncParam = 0,
-                 expandEnumerants = True):
-        GeneratorOptions.__init__(self, filename, directory, apiname, profile,
-                                  versions, emitversions, defaultExtensions,
-                                  addExtensions, removeExtensions, emitExtensions, sortProcedure)
-        self.prefixText      = prefixText
-        self.genFuncPointers = genFuncPointers
-        self.prefixText      = None
-        self.apicall         = apicall
-        self.apientry        = apientry
-        self.apientryp       = apientryp
-#
-# DispatchTableHelperOutputGenerator - subclass of OutputGenerator.
-# Generates dispatch table helper header files for LVL
-class DispatchTableHelperOutputGenerator(OutputGenerator):
-    """Generate dispatch table helper header based on XML element attributes"""
-    def __init__(self,
-                 errFile = sys.stderr,
-                 warnFile = sys.stderr,
-                 diagFile = sys.stdout):
-        OutputGenerator.__init__(self, errFile, warnFile, diagFile)
-        # Internal state - accumulators for different inner block text
-        self.instance_dispatch_list = []      # List of entries for instance dispatch list
-        self.device_dispatch_list = []        # List of entries for device dispatch list
-    #
-    # Called once at the beginning of each run
-    def beginFile(self, genOpts):
-        OutputGenerator.beginFile(self, genOpts)
-        write("#pragma once", file=self.outFile)
-        # User-supplied prefix text, if any (list of strings)
-        if (genOpts.prefixText):
-            for s in genOpts.prefixText:
-                write(s, file=self.outFile)
-        # File Comment
-        file_comment = '// *** THIS FILE IS GENERATED - DO NOT EDIT ***\n'
-        file_comment += '// See dispatch_helper_generator.py for modifications\n'
-        write(file_comment, file=self.outFile)
-        # Copyright Notice
-        copyright =  '/*\n'
-        copyright += ' * Copyright (c) 2015-2017 The Khronos Group Inc.\n'
-        copyright += ' * Copyright (c) 2015-2017 Valve Corporation\n'
-        copyright += ' * Copyright (c) 2015-2017 LunarG, Inc.\n'
-        copyright += ' *\n'
-        copyright += ' * Licensed under the Apache License, Version 2.0 (the "License");\n'
-        copyright += ' * you may not use this file except in compliance with the License.\n'
-        copyright += ' * You may obtain a copy of the License at\n'
-        copyright += ' *\n'
-        copyright += ' *     http://www.apache.org/licenses/LICENSE-2.0\n'
-        copyright += ' *\n'
-        copyright += ' * Unless required by applicable law or agreed to in writing, software\n'
-        copyright += ' * distributed under the License is distributed on an "AS IS" BASIS,\n'
-        copyright += ' * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n'
-        copyright += ' * See the License for the specific language governing permissions and\n'
-        copyright += ' * limitations under the License.\n'
-        copyright += ' *\n'
-        copyright += ' * Author: Courtney Goeltzenleuchter <courtney@LunarG.com>\n'
-        copyright += ' * Author: Jon Ashburn <jon@lunarg.com>\n'
-        copyright += ' * Author: Mark Lobodzinski <mark@lunarg.com>\n'
-        copyright += ' */\n'
-
-        preamble = ''
-        preamble += '#include <vulkan/vulkan.h>\n'
-        preamble += '#include <vulkan/vk_layer.h>\n'
-        preamble += '#include <string.h>\n'
-
-        write(copyright, file=self.outFile)
-        write(preamble, file=self.outFile)
-    #
-    # Write generate and write dispatch tables to output file
-    def endFile(self):
-        device_table = ''
-        instance_table = ''
-
-        device_table += self.OutputDispatchTableHelper('device')
-        instance_table += self.OutputDispatchTableHelper('instance')
-
-        write(device_table, file=self.outFile);
-        write("\n", file=self.outFile)
-        write(instance_table, file=self.outFile);
-
-        # Finish processing in superclass
-        OutputGenerator.endFile(self)
-    #
-    # Processing at beginning of each feature or extension
-    def beginFeature(self, interface, emit):
-        OutputGenerator.beginFeature(self, interface, emit)
-        self.featureExtraProtect = GetFeatureProtect(interface)
-
-    #
-    # Process commands, adding to appropriate dispatch tables
-    def genCmd(self, cmdinfo, name, alias):
-        OutputGenerator.genCmd(self, cmdinfo, name, alias)
-
-        avoid_entries = ['vkCreateInstance',
-                         'vkCreateDevice']
-        # Get first param type
-        params = cmdinfo.elem.findall('param')
-        info = self.getTypeNameTuple(params[0])
-
-        if name not in avoid_entries:
-            self.AddCommandToDispatchList(name, info[0], self.featureExtraProtect)
-
-    #
-    # Determine if this API should be ignored or added to the instance or device dispatch table
-    def AddCommandToDispatchList(self, name, handle_type, protect):
-        handle = self.registry.tree.find("types/type/[name='" + handle_type + "'][@category='handle']")
-        if handle == None:
-            return
-        if handle_type != 'VkInstance' and handle_type != 'VkPhysicalDevice' and name != 'vkGetInstanceProcAddr':
-            self.device_dispatch_list.append((name, self.featureExtraProtect))
-        else:
-            self.instance_dispatch_list.append((name, self.featureExtraProtect))
-        return
-    #
-    # Retrieve the type and name for a parameter
-    def getTypeNameTuple(self, param):
-        type = ''
-        name = ''
-        for elem in param:
-            if elem.tag == 'type':
-                type = noneStr(elem.text)
-            elif elem.tag == 'name':
-                name = noneStr(elem.text)
-        return (type, name)
-    #
-    # Create a dispatch table from the appropriate list and return it as a string
-    def OutputDispatchTableHelper(self, table_type):
-        entries = []
-        table = ''
-        if table_type == 'device':
-            entries = self.device_dispatch_list
-            table += 'static inline void layer_init_device_dispatch_table(VkDevice device, VkLayerDispatchTable *table, PFN_vkGetDeviceProcAddr gpa) {\n'
-            table += '    memset(table, 0, sizeof(*table));\n'
-            table += '    // Device function pointers\n'
-        else:
-            entries = self.instance_dispatch_list
-            table += 'static inline void layer_init_instance_dispatch_table(VkInstance instance, VkLayerInstanceDispatchTable *table, PFN_vkGetInstanceProcAddr gpa) {\n'
-            table += '    memset(table, 0, sizeof(*table));\n'
-            table += '    // Instance function pointers\n'
-
-        for item in entries:
-            # Remove 'vk' from proto name
-            base_name = item[0][2:]
-
-            if item[1] is not None:
-                table += '#ifdef %s\n' % item[1]
-
-            # If we're looking for the proc we are passing in, just point the table to it.  This fixes the issue where
-            # a layer overrides the function name for the loader.
-            if (table_type == 'device' and base_name == 'GetDeviceProcAddr'):
-                table += '    table->GetDeviceProcAddr = gpa;\n'
-            elif (table_type != 'device' and base_name == 'GetInstanceProcAddr'):
-                table += '    table->GetInstanceProcAddr = gpa;\n'
-            else:
-                table += '    table->%s = (PFN_%s) gpa(%s, "%s");\n' % (base_name, item[0], table_type, item[0])
-
-            if item[1] is not None:
-                table += '#endif // %s\n' % item[1]
-        table += '}'
-        return table
diff --git a/scripts/helper_file_generator.py b/scripts/helper_file_generator.py
deleted file mode 100644
index ba2f14a..0000000
--- a/scripts/helper_file_generator.py
+++ /dev/null
@@ -1,1185 +0,0 @@
-#!/usr/bin/python3 -i
-#
-# Copyright (c) 2015-2017 The Khronos Group Inc.
-# Copyright (c) 2015-2017 Valve Corporation
-# Copyright (c) 2015-2017 LunarG, Inc.
-# Copyright (c) 2015-2017 Google Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# Author: Mark Lobodzinski <mark@lunarg.com>
-# Author: Tobin Ehlis <tobine@google.com>
-# Author: John Zulauf <jzulauf@lunarg.com>
-
-import os,re,sys
-import xml.etree.ElementTree as etree
-from generator import *
-from collections import namedtuple
-from common_codegen import *
-
-#
-# HelperFileOutputGeneratorOptions - subclass of GeneratorOptions.
-class HelperFileOutputGeneratorOptions(GeneratorOptions):
-    def __init__(self,
-                 filename = None,
-                 directory = '.',
-                 apiname = None,
-                 profile = None,
-                 versions = '.*',
-                 emitversions = '.*',
-                 defaultExtensions = None,
-                 addExtensions = None,
-                 removeExtensions = None,
-                 emitExtensions = None,
-                 sortProcedure = regSortFeatures,
-                 prefixText = "",
-                 genFuncPointers = True,
-                 protectFile = True,
-                 protectFeature = True,
-                 apicall = '',
-                 apientry = '',
-                 apientryp = '',
-                 alignFuncParam = 0,
-                 library_name = '',
-                 expandEnumerants = True,
-                 helper_file_type = ''):
-        GeneratorOptions.__init__(self, filename, directory, apiname, profile,
-                                  versions, emitversions, defaultExtensions,
-                                  addExtensions, removeExtensions, emitExtensions, sortProcedure)
-        self.prefixText       = prefixText
-        self.genFuncPointers  = genFuncPointers
-        self.protectFile      = protectFile
-        self.protectFeature   = protectFeature
-        self.apicall          = apicall
-        self.apientry         = apientry
-        self.apientryp        = apientryp
-        self.alignFuncParam   = alignFuncParam
-        self.library_name     = library_name
-        self.helper_file_type = helper_file_type
-#
-# HelperFileOutputGenerator - subclass of OutputGenerator. Outputs Vulkan helper files
-class HelperFileOutputGenerator(OutputGenerator):
-    """Generate helper file based on XML element attributes"""
-    def __init__(self,
-                 errFile = sys.stderr,
-                 warnFile = sys.stderr,
-                 diagFile = sys.stdout):
-        OutputGenerator.__init__(self, errFile, warnFile, diagFile)
-        # Internal state - accumulators for different inner block text
-        self.enum_output = ''                             # string built up of enum string routines
-        # Internal state - accumulators for different inner block text
-        self.structNames = []                             # List of Vulkan struct typenames
-        self.structTypes = dict()                         # Map of Vulkan struct typename to required VkStructureType
-        self.structMembers = []                           # List of StructMemberData records for all Vulkan structs
-        self.object_types = []                            # List of all handle types
-        self.object_type_aliases = []                     # Aliases to handles types (for handles that were extensions)
-        self.debug_report_object_types = []               # Handy copy of debug_report_object_type enum data
-        self.core_object_types = []                       # Handy copy of core_object_type enum data
-        self.device_extension_info = dict()               # Dict of device extension name defines and ifdef values
-        self.instance_extension_info = dict()             # Dict of instance extension name defines and ifdef values
-
-        # Named tuples to store struct and command data
-        self.StructType = namedtuple('StructType', ['name', 'value'])
-        self.CommandParam = namedtuple('CommandParam', ['type', 'name', 'ispointer', 'isstaticarray', 'isconst', 'iscount', 'len', 'extstructs', 'cdecl'])
-        self.StructMemberData = namedtuple('StructMemberData', ['name', 'members', 'ifdef_protect'])
-
-        self.custom_construct_params = {
-            # safe_VkGraphicsPipelineCreateInfo needs to know if subpass has color and\or depth\stencil attachments to use its pointers
-            'VkGraphicsPipelineCreateInfo' :
-                ', const bool uses_color_attachment, const bool uses_depthstencil_attachment',
-            # safe_VkPipelineViewportStateCreateInfo needs to know if viewport and scissor is dynamic to use its pointers
-            'VkPipelineViewportStateCreateInfo' :
-                ', const bool is_dynamic_viewports, const bool is_dynamic_scissors',
-        }
-    #
-    # Called once at the beginning of each run
-    def beginFile(self, genOpts):
-        OutputGenerator.beginFile(self, genOpts)
-        # User-supplied prefix text, if any (list of strings)
-        self.helper_file_type = genOpts.helper_file_type
-        self.library_name = genOpts.library_name
-        # File Comment
-        file_comment = '// *** THIS FILE IS GENERATED - DO NOT EDIT ***\n'
-        file_comment += '// See helper_file_generator.py for modifications\n'
-        write(file_comment, file=self.outFile)
-        # Copyright Notice
-        copyright = ''
-        copyright += '\n'
-        copyright += '/***************************************************************************\n'
-        copyright += ' *\n'
-        copyright += ' * Copyright (c) 2015-2017 The Khronos Group Inc.\n'
-        copyright += ' * Copyright (c) 2015-2017 Valve Corporation\n'
-        copyright += ' * Copyright (c) 2015-2017 LunarG, Inc.\n'
-        copyright += ' * Copyright (c) 2015-2017 Google Inc.\n'
-        copyright += ' *\n'
-        copyright += ' * Licensed under the Apache License, Version 2.0 (the "License");\n'
-        copyright += ' * you may not use this file except in compliance with the License.\n'
-        copyright += ' * You may obtain a copy of the License at\n'
-        copyright += ' *\n'
-        copyright += ' *     http://www.apache.org/licenses/LICENSE-2.0\n'
-        copyright += ' *\n'
-        copyright += ' * Unless required by applicable law or agreed to in writing, software\n'
-        copyright += ' * distributed under the License is distributed on an "AS IS" BASIS,\n'
-        copyright += ' * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n'
-        copyright += ' * See the License for the specific language governing permissions and\n'
-        copyright += ' * limitations under the License.\n'
-        copyright += ' *\n'
-        copyright += ' * Author: Mark Lobodzinski <mark@lunarg.com>\n'
-        copyright += ' * Author: Courtney Goeltzenleuchter <courtneygo@google.com>\n'
-        copyright += ' * Author: Tobin Ehlis <tobine@google.com>\n'
-        copyright += ' * Author: Chris Forbes <chrisforbes@google.com>\n'
-        copyright += ' * Author: John Zulauf<jzulauf@lunarg.com>\n'
-        copyright += ' *\n'
-        copyright += ' ****************************************************************************/\n'
-        write(copyright, file=self.outFile)
-    #
-    # Write generated file content to output file
-    def endFile(self):
-        dest_file = ''
-        dest_file += self.OutputDestFile()
-        # Remove blank lines at EOF
-        if dest_file.endswith('\n'):
-            dest_file = dest_file[:-1]
-        write(dest_file, file=self.outFile);
-        # Finish processing in superclass
-        OutputGenerator.endFile(self)
-    #
-    # Override parent class to be notified of the beginning of an extension
-    def beginFeature(self, interface, emit):
-        # Start processing in superclass
-        OutputGenerator.beginFeature(self, interface, emit)
-        self.featureExtraProtect = GetFeatureProtect(interface)
-
-        if self.featureName == 'VK_VERSION_1_0' or self.featureName == 'VK_VERSION_1_1':
-            return
-        nameElem = interface[0][1]
-        name = nameElem.get('name')
-        if 'EXTENSION_NAME' not in name:
-            print("Error in vk.xml file -- extension name is not available")
-        if interface.get('type') == 'instance':
-            self.instance_extension_info[name] = self.featureExtraProtect
-        else:
-            self.device_extension_info[name] = self.featureExtraProtect
-    #
-    # Override parent class to be notified of the end of an extension
-    def endFeature(self):
-        # Finish processing in superclass
-        OutputGenerator.endFeature(self)
-    #
-    # Grab group (e.g. C "enum" type) info to output for enum-string conversion helper
-    def genGroup(self, groupinfo, groupName, alias):
-        OutputGenerator.genGroup(self, groupinfo, groupName, alias)
-        groupElem = groupinfo.elem
-        # For enum_string_header
-        if self.helper_file_type == 'enum_string_header':
-            value_set = set()
-            for elem in groupElem.findall('enum'):
-                if elem.get('supported') != 'disabled' and elem.get('alias') == None:
-                    value_set.add(elem.get('name'))
-            self.enum_output += self.GenerateEnumStringConversion(groupName, value_set)
-        elif self.helper_file_type == 'object_types_header':
-            if groupName == 'VkDebugReportObjectTypeEXT':
-                for elem in groupElem.findall('enum'):
-                    if elem.get('supported') != 'disabled':
-                        item_name = elem.get('name')
-                        self.debug_report_object_types.append(item_name)
-            elif groupName == 'VkObjectType':
-                for elem in groupElem.findall('enum'):
-                    if elem.get('supported') != 'disabled':
-                        item_name = elem.get('name')
-                        self.core_object_types.append(item_name)
-
-    #
-    # Called for each type -- if the type is a struct/union, grab the metadata
-    def genType(self, typeinfo, name, alias):
-        OutputGenerator.genType(self, typeinfo, name, alias)
-        typeElem = typeinfo.elem
-        # If the type is a struct type, traverse the imbedded <member> tags generating a structure.
-        # Otherwise, emit the tag text.
-        category = typeElem.get('category')
-        if category == 'handle':
-            if alias:
-                self.object_type_aliases.append((name,alias))
-            else:
-                self.object_types.append(name)
-        elif (category == 'struct' or category == 'union'):
-            self.structNames.append(name)
-            self.genStruct(typeinfo, name, alias)
-    #
-    # Generate a VkStructureType based on a structure typename
-    def genVkStructureType(self, typename):
-        # Add underscore between lowercase then uppercase
-        value = re.sub('([a-z0-9])([A-Z])', r'\1_\2', typename)
-        # Change to uppercase
-        value = value.upper()
-        # Add STRUCTURE_TYPE_
-        return re.sub('VK_', 'VK_STRUCTURE_TYPE_', value)
-    #
-    # Check if the parameter passed in is a pointer
-    def paramIsPointer(self, param):
-        ispointer = False
-        for elem in param:
-            if ((elem.tag is not 'type') and (elem.tail is not None)) and '*' in elem.tail:
-                ispointer = True
-        return ispointer
-    #
-    # Check if the parameter passed in is a static array
-    def paramIsStaticArray(self, param):
-        isstaticarray = 0
-        paramname = param.find('name')
-        if (paramname.tail is not None) and ('[' in paramname.tail):
-            isstaticarray = paramname.tail.count('[')
-        return isstaticarray
-    #
-    # Retrieve the type and name for a parameter
-    def getTypeNameTuple(self, param):
-        type = ''
-        name = ''
-        for elem in param:
-            if elem.tag == 'type':
-                type = noneStr(elem.text)
-            elif elem.tag == 'name':
-                name = noneStr(elem.text)
-        return (type, name)
-    # Extract length values from latexmath.  Currently an inflexible solution that looks for specific
-    # patterns that are found in vk.xml.  Will need to be updated when new patterns are introduced.
-    def parseLateXMath(self, source):
-        name = 'ERROR'
-        decoratedName = 'ERROR'
-        if 'mathit' in source:
-            # Matches expressions similar to 'latexmath:[\lceil{\mathit{rasterizationSamples} \over 32}\rceil]'
-            match = re.match(r'latexmath\s*\:\s*\[\s*\\l(\w+)\s*\{\s*\\mathit\s*\{\s*(\w+)\s*\}\s*\\over\s*(\d+)\s*\}\s*\\r(\w+)\s*\]', source)
-            if not match or match.group(1) != match.group(4):
-                raise 'Unrecognized latexmath expression'
-            name = match.group(2)
-            # Need to add 1 for ceiling function; otherwise, the allocated packet
-            # size will be less than needed during capture for some title which use
-            # this in VkPipelineMultisampleStateCreateInfo. based on ceiling function
-            # definition,it is '{0}%{1}?{0}/{1} + 1:{0}/{1}'.format(*match.group(2, 3)),
-            # its value <= '{}/{} + 1'.
-            if match.group(1) == 'ceil':
-                decoratedName = '{}/{} + 1'.format(*match.group(2, 3))
-            else:
-                decoratedName = '{}/{}'.format(*match.group(2, 3))
-        else:
-            # Matches expressions similar to 'latexmath : [dataSize \over 4]'
-            match = re.match(r'latexmath\s*\:\s*\[\s*(\w+)\s*\\over\s*(\d+)\s*\]', source)
-            name = match.group(1)
-            decoratedName = '{}/{}'.format(*match.group(1, 2))
-        return name, decoratedName
-    #
-    # Retrieve the value of the len tag
-    def getLen(self, param):
-        result = None
-        len = param.attrib.get('len')
-        if len and len != 'null-terminated':
-            # For string arrays, 'len' can look like 'count,null-terminated', indicating that we
-            # have a null terminated array of strings.  We strip the null-terminated from the
-            # 'len' field and only return the parameter specifying the string count
-            if 'null-terminated' in len:
-                result = len.split(',')[0]
-            else:
-                result = len
-            if 'latexmath' in len:
-                param_type, param_name = self.getTypeNameTuple(param)
-                len_name, result = self.parseLateXMath(len)
-            # Spec has now notation for len attributes, using :: instead of platform specific pointer symbol
-            result = str(result).replace('::', '->')
-        return result
-    #
-    # Check if a structure is or contains a dispatchable (dispatchable = True) or 
-    # non-dispatchable (dispatchable = False) handle
-    def TypeContainsObjectHandle(self, handle_type, dispatchable):
-        if dispatchable:
-            type_key = 'VK_DEFINE_HANDLE'
-        else:
-            type_key = 'VK_DEFINE_NON_DISPATCHABLE_HANDLE'
-        handle = self.registry.tree.find("types/type/[name='" + handle_type + "'][@category='handle']")
-        if handle is not None and handle.find('type').text == type_key:
-            return True
-        # if handle_type is a struct, search its members
-        if handle_type in self.structNames:
-            member_index = next((i for i, v in enumerate(self.structMembers) if v[0] == handle_type), None)
-            if member_index is not None:
-                for item in self.structMembers[member_index].members:
-                    handle = self.registry.tree.find("types/type/[name='" + item.type + "'][@category='handle']")
-                    if handle is not None and handle.find('type').text == type_key:
-                        return True
-        return False
-    #
-    # Generate local ready-access data describing Vulkan structures and unions from the XML metadata
-    def genStruct(self, typeinfo, typeName, alias):
-        OutputGenerator.genStruct(self, typeinfo, typeName, alias)
-        members = typeinfo.elem.findall('.//member')
-        # Iterate over members once to get length parameters for arrays
-        lens = set()
-        for member in members:
-            len = self.getLen(member)
-            if len:
-                lens.add(len)
-        # Generate member info
-        membersInfo = []
-        for member in members:
-            # Get the member's type and name
-            info = self.getTypeNameTuple(member)
-            type = info[0]
-            name = info[1]
-            cdecl = self.makeCParamDecl(member, 1)
-            # Process VkStructureType
-            if type == 'VkStructureType':
-                # Extract the required struct type value from the comments
-                # embedded in the original text defining the 'typeinfo' element
-                rawXml = etree.tostring(typeinfo.elem).decode('ascii')
-                result = re.search(r'VK_STRUCTURE_TYPE_\w+', rawXml)
-                if result:
-                    value = result.group(0)
-                else:
-                    value = self.genVkStructureType(typeName)
-                # Store the required type value
-                self.structTypes[typeName] = self.StructType(name=name, value=value)
-            # Store pointer/array/string info
-            isstaticarray = self.paramIsStaticArray(member)
-            membersInfo.append(self.CommandParam(type=type,
-                                                 name=name,
-                                                 ispointer=self.paramIsPointer(member),
-                                                 isstaticarray=isstaticarray,
-                                                 isconst=True if 'const' in cdecl else False,
-                                                 iscount=True if name in lens else False,
-                                                 len=self.getLen(member),
-                                                 extstructs=self.registry.validextensionstructs[typeName] if name == 'pNext' else None,
-                                                 cdecl=cdecl))
-        self.structMembers.append(self.StructMemberData(name=typeName, members=membersInfo, ifdef_protect=self.featureExtraProtect))
-    #
-    # Enum_string_header: Create a routine to convert an enumerated value into a string
-    def GenerateEnumStringConversion(self, groupName, value_list):
-        outstring = '\n'
-        outstring += 'static inline const char* string_%s(%s input_value)\n' % (groupName, groupName)
-        outstring += '{\n'
-        outstring += '    switch ((%s)input_value)\n' % groupName
-        outstring += '    {\n'
-        for item in value_list:
-            outstring += '        case %s:\n' % item
-            outstring += '            return "%s";\n' % item
-        outstring += '        default:\n'
-        outstring += '            return "Unhandled %s";\n' % groupName
-        outstring += '    }\n'
-        outstring += '}\n'
-        return outstring
-    #
-    # Tack on a helper which, given an index into a VkPhysicalDeviceFeatures structure, will print the corresponding feature name
-    def DeIndexPhysDevFeatures(self):
-        pdev_members = None
-        for name, members, ifdef in self.structMembers:
-            if name == 'VkPhysicalDeviceFeatures':
-                pdev_members = members
-                break
-        deindex = '\n'
-        deindex += 'static inline const char * GetPhysDevFeatureString(uint32_t index) {\n'
-        deindex += '    const char * IndexToPhysDevFeatureString[] = {\n'
-        for feature in pdev_members:
-            deindex += '        "%s",\n' % feature.name
-        deindex += '    };\n\n'
-        deindex += '    return IndexToPhysDevFeatureString[index];\n'
-        deindex += '}\n'
-        return deindex
-    #
-    # Combine enum string helper header file preamble with body text and return
-    def GenerateEnumStringHelperHeader(self):
-            enum_string_helper_header = '\n'
-            enum_string_helper_header += '#pragma once\n'
-            enum_string_helper_header += '#ifdef _WIN32\n'
-            enum_string_helper_header += '#pragma warning( disable : 4065 )\n'
-            enum_string_helper_header += '#endif\n'
-            enum_string_helper_header += '\n'
-            enum_string_helper_header += '#include <vulkan/vulkan.h>\n'
-            enum_string_helper_header += '\n'
-            enum_string_helper_header += self.enum_output
-            enum_string_helper_header += self.DeIndexPhysDevFeatures()
-            return enum_string_helper_header
-    #
-    # Helper function for declaring a counter variable only once
-    def DeclareCounter(self, string_var, declare_flag):
-        if declare_flag == False:
-            string_var += '        uint32_t i = 0;\n'
-            declare_flag = True
-        return string_var, declare_flag
-    #
-    # Combine safe struct helper header file preamble with body text and return
-    def GenerateSafeStructHelperHeader(self):
-        safe_struct_helper_header = '\n'
-        safe_struct_helper_header += '#pragma once\n'
-        safe_struct_helper_header += '#include <vulkan/vulkan.h>\n'
-        safe_struct_helper_header += '\n'
-        safe_struct_helper_header += self.GenerateSafeStructHeader()
-        return safe_struct_helper_header
-    #
-    # safe_struct header: build function prototypes for header file
-    def GenerateSafeStructHeader(self):
-        safe_struct_header = ''
-        for item in self.structMembers:
-            if self.NeedSafeStruct(item) == True:
-                safe_struct_header += '\n'
-                if item.ifdef_protect != None:
-                    safe_struct_header += '#ifdef %s\n' % item.ifdef_protect
-                safe_struct_header += 'struct safe_%s {\n' % (item.name)
-                for member in item.members:
-                    if member.type in self.structNames:
-                        member_index = next((i for i, v in enumerate(self.structMembers) if v[0] == member.type), None)
-                        if member_index is not None and self.NeedSafeStruct(self.structMembers[member_index]) == True:
-                            if member.ispointer:
-                                safe_struct_header += '    safe_%s* %s;\n' % (member.type, member.name)
-                            else:
-                                safe_struct_header += '    safe_%s %s;\n' % (member.type, member.name)
-                            continue
-                    if member.len is not None and (self.TypeContainsObjectHandle(member.type, True) or self.TypeContainsObjectHandle(member.type, False)):
-                            safe_struct_header += '    %s* %s;\n' % (member.type, member.name)
-                    else:
-                        safe_struct_header += '%s;\n' % member.cdecl
-                safe_struct_header += '    safe_%s(const %s* in_struct%s);\n' % (item.name, item.name, self.custom_construct_params.get(item.name, ''))
-                safe_struct_header += '    safe_%s(const safe_%s& src);\n' % (item.name, item.name)
-                safe_struct_header += '    safe_%s& operator=(const safe_%s& src);\n' % (item.name, item.name)
-                safe_struct_header += '    safe_%s();\n' % item.name
-                safe_struct_header += '    ~safe_%s();\n' % item.name
-                safe_struct_header += '    void initialize(const %s* in_struct%s);\n' % (item.name, self.custom_construct_params.get(item.name, ''))
-                safe_struct_header += '    void initialize(const safe_%s* src);\n' % (item.name)
-                safe_struct_header += '    %s *ptr() { return reinterpret_cast<%s *>(this); }\n' % (item.name, item.name)
-                safe_struct_header += '    %s const *ptr() const { return reinterpret_cast<%s const *>(this); }\n' % (item.name, item.name)
-                safe_struct_header += '};\n'
-                if item.ifdef_protect != None:
-                    safe_struct_header += '#endif // %s\n' % item.ifdef_protect
-        return safe_struct_header
-    #
-    # Generate extension helper header file
-    def GenerateExtensionHelperHeader(self):
-
-        V_1_0_instance_extensions_promoted_to_core = [
-            'vk_khr_device_group_creation',
-            'vk_khr_external_memory_capabilities',
-            'vk_khr_external_fence_capabilities',
-            'vk_khr_external_semaphore_capabilities',
-            'vk_khr_get_physical_device_properties_2',
-            ]
-
-        V_1_0_device_extensions_promoted_to_core = [
-            'vk_khr_bind_memory_2',
-            'vk_khr_device_group',
-            'vk_khr_descriptor_update_template',
-            'vk_khr_sampler_ycbcr_conversion',
-            'vk_khr_get_memory_requirements_2',
-            'vk_khr_maintenance3',
-            'vk_khr_maintenance1',
-            'vk_khr_multiview',
-            'vk_khr_external_memory',
-            'vk_khr_external_semaphore',
-            'vk_khr_16bit_storage',
-            'vk_khr_external_fence',
-            'vk_khr_maintenance2',
-            'vk_khr_variable_pointers',
-            'vk_khr_dedicated_allocation',
-            ]
-
-        extension_helper_header = '\n'
-        extension_helper_header += '#ifndef VK_EXTENSION_HELPER_H_\n'
-        extension_helper_header += '#define VK_EXTENSION_HELPER_H_\n'
-        struct  = '\n'
-        extension_helper_header += '#include <vulkan/vulkan.h>\n'
-        extension_helper_header += '#include <string.h>\n'
-        extension_helper_header += '#include <utility>\n'
-        extension_helper_header += '\n'
-        extension_helper_header += '\n'
-        extension_dict = dict()
-        promoted_ext_list = []
-        for type in ['Instance', 'Device']:
-            if type == 'Instance':
-                extension_dict = self.instance_extension_info
-                promoted_ext_list = V_1_0_instance_extensions_promoted_to_core
-                struct += 'struct InstanceExtensions { \n'
-            else:
-                extension_dict = self.device_extension_info
-                promoted_ext_list = V_1_0_device_extensions_promoted_to_core
-                struct += 'struct DeviceExtensions : public InstanceExtensions { \n'
-            for ext_name, ifdef in extension_dict.items():
-                bool_name = ext_name.lower()
-                bool_name = re.sub('_extension_name', '', bool_name)
-                struct += '    bool %s{false};\n' % bool_name
-            struct += '\n'
-            if type == 'Instance':
-                struct += '    uint32_t NormalizeApiVersion(uint32_t specified_version) {\n'
-                struct += '        uint32_t api_version = (specified_version < VK_API_VERSION_1_1) ? VK_API_VERSION_1_0 : VK_API_VERSION_1_1;\n'
-                struct += '        return api_version;\n'
-                struct += '    }\n'
-                struct += '\n'
-
-                struct += '    uint32_t InitFromInstanceCreateInfo(uint32_t requested_api_version, const VkInstanceCreateInfo *pCreateInfo) {\n'
-            else:
-                struct += '    uint32_t InitFromDeviceCreateInfo(const InstanceExtensions *instance_extensions, uint32_t requested_api_version, const VkDeviceCreateInfo *pCreateInfo) {\n'
-            struct += '\n'
-
-            struct += '        static const std::vector<const char *> V_1_0_promoted_%s_extensions = {\n' % type.lower()
-            for ext_name in promoted_ext_list:
-                struct += '            %s_EXTENSION_NAME,\n' % ext_name.upper()
-            struct += '        };\n'
-            struct += '\n'
-            struct += '        static const std::pair<char const *, bool %sExtensions::*> known_extensions[]{\n' % type
-            for ext_name, ifdef in extension_dict.items():
-                if ifdef is not None:
-                    struct += '#ifdef %s\n' % ifdef
-                bool_name = ext_name.lower()
-                bool_name = re.sub('_extension_name', '', bool_name)
-                struct += '            {%s, &%sExtensions::%s},\n' % (ext_name, type, bool_name)
-                if ifdef is not None:
-                    struct += '#endif\n'
-            struct += '        };\n'
-            struct += '\n'
-            struct += '        // Initialize struct data\n'
-
-            for ext_name, ifdef in self.instance_extension_info.items():
-                bool_name = ext_name.lower()
-                bool_name = re.sub('_extension_name', '', bool_name)
-                if type == 'Device':
-                    struct += '        %s = instance_extensions->%s;\n' % (bool_name, bool_name)
-            struct += '\n'
-            struct += '        for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) {\n'
-            struct += '            for (auto ext : known_extensions) {\n'
-            struct += '                if (!strcmp(ext.first, pCreateInfo->ppEnabledExtensionNames[i])) {\n'
-            struct += '                    this->*(ext.second) = true;\n'
-            struct += '                    break;\n'
-            struct += '                }\n'
-            struct += '            }\n'
-            struct += '        }\n'
-            struct += '        uint32_t api_version = NormalizeApiVersion(requested_api_version);\n'
-            struct += '        if (api_version >= VK_API_VERSION_1_1) {\n'
-            struct += '            for (auto promoted_ext : V_1_0_promoted_%s_extensions) {\n' % type.lower()
-            struct += '                for (auto ext : known_extensions) {\n'
-            struct += '                    if (!strcmp(ext.first, promoted_ext)) {\n'
-            struct += '                        this->*(ext.second) = true;\n'
-            struct += '                        break;\n'
-            struct += '                    }\n'
-            struct += '                }\n'
-            struct += '            }\n'
-            struct += '        }\n'
-            struct += '        return api_version;\n'
-            struct += '    }\n'
-            struct += '};\n'
-            struct += '\n'
-            # Output reference lists of instance/device extension names
-            struct += 'static const char * const k%sExtensionNames = \n' % type
-            for ext_name, ifdef in extension_dict.items():
-                if ifdef is not None:
-                    struct += '#ifdef %s\n' % ifdef
-                struct += '    %s\n' % ext_name
-                if ifdef is not None:
-                    struct += '#endif\n'
-            struct += ';\n\n'
-        extension_helper_header += struct
-        extension_helper_header += '\n'
-        extension_helper_header += '#endif // VK_EXTENSION_HELPER_H_\n'
-        return extension_helper_header
-    #
-    # Combine object types helper header file preamble with body text and return
-    def GenerateObjectTypesHelperHeader(self):
-        object_types_helper_header = '\n'
-        object_types_helper_header += '#pragma once\n'
-        object_types_helper_header += '\n'
-        object_types_helper_header += '#include <vulkan/vulkan.h>\n\n'
-        object_types_helper_header += self.GenerateObjectTypesHeader()
-        return object_types_helper_header
-    #
-    # Object types header: create object enum type header file
-    def GenerateObjectTypesHeader(self):
-        object_types_header = ''
-        object_types_header += '// Object Type enum for validation layer internal object handling\n'
-        object_types_header += 'typedef enum VulkanObjectType {\n'
-        object_types_header += '    kVulkanObjectTypeUnknown = 0,\n'
-        enum_num = 1
-        type_list = [];
-        enum_entry_map = {}
-
-        # Output enum definition as each handle is processed, saving the names to use for the conversion routine
-        for item in self.object_types:
-            fixup_name = item[2:]
-            enum_entry = 'kVulkanObjectType%s' % fixup_name
-            enum_entry_map[item] = enum_entry
-            object_types_header += '    ' + enum_entry
-            object_types_header += ' = %d,\n' % enum_num
-            enum_num += 1
-            type_list.append(enum_entry)
-        object_types_header += '    kVulkanObjectTypeMax = %d,\n' % enum_num
-        object_types_header += '    // Aliases for backwards compatibilty of "promoted" types\n'
-        for (name, alias) in self.object_type_aliases:
-            fixup_name = name[2:]
-            object_types_header += '    kVulkanObjectType{} = {},\n'.format(fixup_name, enum_entry_map[alias])
-        object_types_header += '} VulkanObjectType;\n\n'
-
-        # Output name string helper
-        object_types_header += '// Array of object name strings for OBJECT_TYPE enum conversion\n'
-        object_types_header += 'static const char * const object_string[kVulkanObjectTypeMax] = {\n'
-        object_types_header += '    "Unknown",\n'
-        for item in self.object_types:
-            fixup_name = item[2:]
-            object_types_header += '    "%s",\n' % fixup_name
-        object_types_header += '};\n'
-
-        # Key creation helper for map comprehensions that convert between k<Name> and VK<Name> symbols
-        def to_key(regex, raw_key): return re.search(regex, raw_key).group(1).lower().replace("_","")
-
-        # Output a conversion routine from the layer object definitions to the debug report definitions
-        # As the VK_DEBUG_REPORT types are not being updated, specify UNKNOWN for unmatched types
-        object_types_header += '\n'
-        object_types_header += '// Helper array to get Vulkan VK_EXT_debug_report object type enum from the internal layers version\n'
-        object_types_header += 'const VkDebugReportObjectTypeEXT get_debug_report_enum[] = {\n'
-        object_types_header += '    VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, // kVulkanObjectTypeUnknown\n'
-
-        dbg_re = '^VK_DEBUG_REPORT_OBJECT_TYPE_(.*)_EXT$'
-        dbg_map = {to_key(dbg_re, dbg) : dbg for dbg in self.debug_report_object_types}
-        dbg_default = 'VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT'
-        for object_type in type_list:
-            vk_object_type = dbg_map.get(object_type.replace("kVulkanObjectType", "").lower(), dbg_default)
-            object_types_header += '    %s,   // %s\n' % (vk_object_type, object_type)
-        object_types_header += '};\n'
-
-        # Output a conversion routine from the layer object definitions to the core object type definitions
-        # This will intentionally *fail* for unmatched types as the VK_OBJECT_TYPE list should match the kVulkanObjectType list
-        object_types_header += '\n'
-        object_types_header += '// Helper array to get Official Vulkan VkObjectType enum from the internal layers version\n'
-        object_types_header += 'const VkObjectType get_object_type_enum[] = {\n'
-        object_types_header += '    VK_OBJECT_TYPE_UNKNOWN, // kVulkanObjectTypeUnknown\n'
-
-        vko_re = '^VK_OBJECT_TYPE_(.*)'
-        vko_map = {to_key(vko_re, vko) : vko for vko in self.core_object_types}
-        for object_type in type_list:
-            vk_object_type = vko_map[object_type.replace("kVulkanObjectType", "").lower()]
-            object_types_header += '    %s,   // %s\n' % (vk_object_type, object_type)
-        object_types_header += '};\n'
-
-        # Create a function to convert from VkDebugReportObjectTypeEXT to VkObjectType
-        object_types_header += '\n'
-        object_types_header += '// Helper function to convert from VkDebugReportObjectTypeEXT to VkObjectType\n'
-        object_types_header += 'static inline VkObjectType convertDebugReportObjectToCoreObject(VkDebugReportObjectTypeEXT debug_report_obj){\n'
-        object_types_header += '    if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT) {\n'
-        object_types_header += '        return VK_OBJECT_TYPE_UNKNOWN;\n'
-        for core_object_type in self.core_object_types:
-            core_target_type = core_object_type.replace("VK_OBJECT_TYPE_", "").lower()
-            core_target_type = core_target_type.replace("_", "")
-            for dr_object_type in self.debug_report_object_types:
-                dr_target_type = dr_object_type.replace("VK_DEBUG_REPORT_OBJECT_TYPE_", "").lower()
-                dr_target_type = dr_target_type[:-4]
-                dr_target_type = dr_target_type.replace("_", "")
-                if core_target_type == dr_target_type:
-                    object_types_header += '    } else if (debug_report_obj == %s) {\n' % dr_object_type
-                    object_types_header += '        return %s;\n' % core_object_type
-                    break
-        object_types_header += '    }\n'
-        object_types_header += '    return VK_OBJECT_TYPE_UNKNOWN;\n'
-        object_types_header += '}\n'
-
-        # Create a function to convert from VkObjectType to VkDebugReportObjectTypeEXT
-        object_types_header += '\n'
-        object_types_header += '// Helper function to convert from VkDebugReportObjectTypeEXT to VkObjectType\n'
-        object_types_header += 'static inline VkDebugReportObjectTypeEXT convertCoreObjectToDebugReportObject(VkObjectType core_report_obj){\n'
-        object_types_header += '    if (core_report_obj == VK_OBJECT_TYPE_UNKNOWN) {\n'
-        object_types_header += '        return VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT;\n'
-        for core_object_type in self.core_object_types:
-            core_target_type = core_object_type.replace("VK_OBJECT_TYPE_", "").lower()
-            core_target_type = core_target_type.replace("_", "")
-            for dr_object_type in self.debug_report_object_types:
-                dr_target_type = dr_object_type.replace("VK_DEBUG_REPORT_OBJECT_TYPE_", "").lower()
-                dr_target_type = dr_target_type[:-4]
-                dr_target_type = dr_target_type.replace("_", "")
-                if core_target_type == dr_target_type:
-                    object_types_header += '    } else if (core_report_obj == %s) {\n' % core_object_type
-                    object_types_header += '        return %s;\n' % dr_object_type
-                    break
-        object_types_header += '    }\n'
-        object_types_header += '    return VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT;\n'
-        object_types_header += '}\n'
-        return object_types_header
-    #
-    # Determine if a structure needs a safe_struct helper function
-    # That is, it has an sType or one of its members is a pointer
-    def NeedSafeStruct(self, structure):
-        if 'sType' == structure.name:
-            return True
-        for member in structure.members:
-            if member.ispointer == True:
-                return True
-        return False
-    #
-    # Combine safe struct helper source file preamble with body text and return
-    def GenerateSafeStructHelperSource(self):
-        safe_struct_helper_source = '\n'
-        safe_struct_helper_source += '#include "vk_safe_struct.h"\n'
-        safe_struct_helper_source += '#include <string.h>\n'
-        safe_struct_helper_source += '#ifdef VK_USE_PLATFORM_ANDROID_KHR\n'
-        safe_struct_helper_source += '#if __ANDROID_API__ < __ANDROID_API_O__\n'
-        safe_struct_helper_source += 'struct AHardwareBuffer {};\n'
-        safe_struct_helper_source += '#endif\n'
-        safe_struct_helper_source += '#endif\n'
-
-        safe_struct_helper_source += '\n'
-        safe_struct_helper_source += self.GenerateSafeStructSource()
-        return safe_struct_helper_source
-    #
-    # safe_struct source -- create bodies of safe struct helper functions
-    def GenerateSafeStructSource(self):
-        safe_struct_body = []
-        wsi_structs = ['VkXlibSurfaceCreateInfoKHR',
-                       'VkXcbSurfaceCreateInfoKHR',
-                       'VkWaylandSurfaceCreateInfoKHR',
-                       'VkMirSurfaceCreateInfoKHR',
-                       'VkAndroidSurfaceCreateInfoKHR',
-                       'VkWin32SurfaceCreateInfoKHR'
-                       ]
-        for item in self.structMembers:
-            if self.NeedSafeStruct(item) == False:
-                continue
-            if item.name in wsi_structs:
-                continue
-            if item.ifdef_protect != None:
-                safe_struct_body.append("#ifdef %s\n" % item.ifdef_protect)
-            ss_name = "safe_%s" % item.name
-            init_list = ''          # list of members in struct constructor initializer
-            default_init_list = ''  # Default constructor just inits ptrs to nullptr in initializer
-            init_func_txt = ''      # Txt for initialize() function that takes struct ptr and inits members
-            construct_txt = ''      # Body of constuctor as well as body of initialize() func following init_func_txt
-            destruct_txt = ''
-
-            custom_construct_txt = {
-                # VkWriteDescriptorSet is special case because pointers may be non-null but ignored
-                'VkWriteDescriptorSet' :
-                    '    switch (descriptorType) {\n'
-                    '        case VK_DESCRIPTOR_TYPE_SAMPLER:\n'
-                    '        case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:\n'
-                    '        case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:\n'
-                    '        case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:\n'
-                    '        case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:\n'
-                    '        if (descriptorCount && in_struct->pImageInfo) {\n'
-                    '            pImageInfo = new VkDescriptorImageInfo[descriptorCount];\n'
-                    '            for (uint32_t i=0; i<descriptorCount; ++i) {\n'
-                    '                pImageInfo[i] = in_struct->pImageInfo[i];\n'
-                    '            }\n'
-                    '        }\n'
-                    '        break;\n'
-                    '        case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:\n'
-                    '        case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:\n'
-                    '        case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:\n'
-                    '        case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC:\n'
-                    '        if (descriptorCount && in_struct->pBufferInfo) {\n'
-                    '            pBufferInfo = new VkDescriptorBufferInfo[descriptorCount];\n'
-                    '            for (uint32_t i=0; i<descriptorCount; ++i) {\n'
-                    '                pBufferInfo[i] = in_struct->pBufferInfo[i];\n'
-                    '            }\n'
-                    '        }\n'
-                    '        break;\n'
-                    '        case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:\n'
-                    '        case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:\n'
-                    '        if (descriptorCount && in_struct->pTexelBufferView) {\n'
-                    '            pTexelBufferView = new VkBufferView[descriptorCount];\n'
-                    '            for (uint32_t i=0; i<descriptorCount; ++i) {\n'
-                    '                pTexelBufferView[i] = in_struct->pTexelBufferView[i];\n'
-                    '            }\n'
-                    '        }\n'
-                    '        break;\n'
-                    '        default:\n'
-                    '        break;\n'
-                    '    }\n',
-                'VkShaderModuleCreateInfo' :
-                    '    if (in_struct->pCode) {\n'
-                    '        pCode = reinterpret_cast<uint32_t *>(new uint8_t[codeSize]);\n'
-                    '        memcpy((void *)pCode, (void *)in_struct->pCode, codeSize);\n'
-                    '    }\n',
-                # VkGraphicsPipelineCreateInfo is special case because its pointers may be non-null but ignored
-                'VkGraphicsPipelineCreateInfo' :
-                    '    if (stageCount && in_struct->pStages) {\n'
-                    '        pStages = new safe_VkPipelineShaderStageCreateInfo[stageCount];\n'
-                    '        for (uint32_t i=0; i<stageCount; ++i) {\n'
-                    '            pStages[i].initialize(&in_struct->pStages[i]);\n'
-                    '        }\n'
-                    '    }\n'
-                    '    if (in_struct->pVertexInputState)\n'
-                    '        pVertexInputState = new safe_VkPipelineVertexInputStateCreateInfo(in_struct->pVertexInputState);\n'
-                    '    else\n'
-                    '        pVertexInputState = NULL;\n'
-                    '    if (in_struct->pInputAssemblyState)\n'
-                    '        pInputAssemblyState = new safe_VkPipelineInputAssemblyStateCreateInfo(in_struct->pInputAssemblyState);\n'
-                    '    else\n'
-                    '        pInputAssemblyState = NULL;\n'
-                    '    bool has_tessellation_stage = false;\n'
-                    '    if (stageCount && pStages)\n'
-                    '        for (uint32_t i=0; i<stageCount && !has_tessellation_stage; ++i)\n'
-                    '            if (pStages[i].stage == VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT || pStages[i].stage == VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)\n'
-                    '                has_tessellation_stage = true;\n'
-                    '    if (in_struct->pTessellationState && has_tessellation_stage)\n'
-                    '        pTessellationState = new safe_VkPipelineTessellationStateCreateInfo(in_struct->pTessellationState);\n'
-                    '    else\n'
-                    '        pTessellationState = NULL; // original pTessellationState pointer ignored\n'
-                    '    bool has_rasterization = in_struct->pRasterizationState ? !in_struct->pRasterizationState->rasterizerDiscardEnable : false;\n'
-                    '    if (in_struct->pViewportState && has_rasterization) {\n'
-                    '        bool is_dynamic_viewports = false;\n'
-                    '        bool is_dynamic_scissors = false;\n'
-                    '        if (in_struct->pDynamicState && in_struct->pDynamicState->pDynamicStates) {\n'
-                    '            for (uint32_t i = 0; i < in_struct->pDynamicState->dynamicStateCount && !is_dynamic_viewports; ++i)\n'
-                    '                if (in_struct->pDynamicState->pDynamicStates[i] == VK_DYNAMIC_STATE_VIEWPORT)\n'
-                    '                    is_dynamic_viewports = true;\n'
-                    '            for (uint32_t i = 0; i < in_struct->pDynamicState->dynamicStateCount && !is_dynamic_scissors; ++i)\n'
-                    '                if (in_struct->pDynamicState->pDynamicStates[i] == VK_DYNAMIC_STATE_SCISSOR)\n'
-                    '                    is_dynamic_scissors = true;\n'
-                    '        }\n'
-                    '        pViewportState = new safe_VkPipelineViewportStateCreateInfo(in_struct->pViewportState, is_dynamic_viewports, is_dynamic_scissors);\n'
-                    '    } else\n'
-                    '        pViewportState = NULL; // original pViewportState pointer ignored\n'
-                    '    if (in_struct->pRasterizationState)\n'
-                    '        pRasterizationState = new safe_VkPipelineRasterizationStateCreateInfo(in_struct->pRasterizationState);\n'
-                    '    else\n'
-                    '        pRasterizationState = NULL;\n'
-                    '    if (in_struct->pMultisampleState && has_rasterization)\n'
-                    '        pMultisampleState = new safe_VkPipelineMultisampleStateCreateInfo(in_struct->pMultisampleState);\n'
-                    '    else\n'
-                    '        pMultisampleState = NULL; // original pMultisampleState pointer ignored\n'
-                    '    // needs a tracked subpass state uses_depthstencil_attachment\n'
-                    '    if (in_struct->pDepthStencilState && has_rasterization && uses_depthstencil_attachment)\n'
-                    '        pDepthStencilState = new safe_VkPipelineDepthStencilStateCreateInfo(in_struct->pDepthStencilState);\n'
-                    '    else\n'
-                    '        pDepthStencilState = NULL; // original pDepthStencilState pointer ignored\n'
-                    '    // needs a tracked subpass state usesColorAttachment\n'
-                    '    if (in_struct->pColorBlendState && has_rasterization && uses_color_attachment)\n'
-                    '        pColorBlendState = new safe_VkPipelineColorBlendStateCreateInfo(in_struct->pColorBlendState);\n'
-                    '    else\n'
-                    '        pColorBlendState = NULL; // original pColorBlendState pointer ignored\n'
-                    '    if (in_struct->pDynamicState)\n'
-                    '        pDynamicState = new safe_VkPipelineDynamicStateCreateInfo(in_struct->pDynamicState);\n'
-                    '    else\n'
-                    '        pDynamicState = NULL;\n',
-                 # VkPipelineViewportStateCreateInfo is special case because its pointers may be non-null but ignored
-                'VkPipelineViewportStateCreateInfo' :
-                    '    if (in_struct->pViewports && !is_dynamic_viewports) {\n'
-                    '        pViewports = new VkViewport[in_struct->viewportCount];\n'
-                    '        memcpy ((void *)pViewports, (void *)in_struct->pViewports, sizeof(VkViewport)*in_struct->viewportCount);\n'
-                    '    }\n'
-                    '    else\n'
-                    '        pViewports = NULL;\n'
-                    '    if (in_struct->pScissors && !is_dynamic_scissors) {\n'
-                    '        pScissors = new VkRect2D[in_struct->scissorCount];\n'
-                    '        memcpy ((void *)pScissors, (void *)in_struct->pScissors, sizeof(VkRect2D)*in_struct->scissorCount);\n'
-                    '    }\n'
-                    '    else\n'
-                    '        pScissors = NULL;\n',
-                # VkDescriptorSetLayoutBinding is special case because its pImmutableSamplers pointer may be non-null but ignored
-                'VkDescriptorSetLayoutBinding' :
-                    '    const bool sampler_type = in_struct->descriptorType == VK_DESCRIPTOR_TYPE_SAMPLER || in_struct->descriptorType == VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;\n'
-                    '    if (descriptorCount && in_struct->pImmutableSamplers && sampler_type) {\n'
-                    '        pImmutableSamplers = new VkSampler[descriptorCount];\n'
-                    '        for (uint32_t i=0; i<descriptorCount; ++i) {\n'
-                    '            pImmutableSamplers[i] = in_struct->pImmutableSamplers[i];\n'
-                    '        }\n'
-                    '    }\n',
-            }
-
-            custom_copy_txt = {
-                # VkGraphicsPipelineCreateInfo is special case because it has custom construct parameters
-                'VkGraphicsPipelineCreateInfo' :
-                    '    if (stageCount && src.pStages) {\n'
-                    '        pStages = new safe_VkPipelineShaderStageCreateInfo[stageCount];\n'
-                    '        for (uint32_t i=0; i<stageCount; ++i) {\n'
-                    '            pStages[i].initialize(&src.pStages[i]);\n'
-                    '        }\n'
-                    '    }\n'
-                    '    if (src.pVertexInputState)\n'
-                    '        pVertexInputState = new safe_VkPipelineVertexInputStateCreateInfo(*src.pVertexInputState);\n'
-                    '    else\n'
-                    '        pVertexInputState = NULL;\n'
-                    '    if (src.pInputAssemblyState)\n'
-                    '        pInputAssemblyState = new safe_VkPipelineInputAssemblyStateCreateInfo(*src.pInputAssemblyState);\n'
-                    '    else\n'
-                    '        pInputAssemblyState = NULL;\n'
-                    '    bool has_tessellation_stage = false;\n'
-                    '    if (stageCount && pStages)\n'
-                    '        for (uint32_t i=0; i<stageCount && !has_tessellation_stage; ++i)\n'
-                    '            if (pStages[i].stage == VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT || pStages[i].stage == VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)\n'
-                    '                has_tessellation_stage = true;\n'
-                    '    if (src.pTessellationState && has_tessellation_stage)\n'
-                    '        pTessellationState = new safe_VkPipelineTessellationStateCreateInfo(*src.pTessellationState);\n'
-                    '    else\n'
-                    '        pTessellationState = NULL; // original pTessellationState pointer ignored\n'
-                    '    bool has_rasterization = src.pRasterizationState ? !src.pRasterizationState->rasterizerDiscardEnable : false;\n'
-                    '    if (src.pViewportState && has_rasterization) {\n'
-                    '        pViewportState = new safe_VkPipelineViewportStateCreateInfo(*src.pViewportState);\n'
-                    '    } else\n'
-                    '        pViewportState = NULL; // original pViewportState pointer ignored\n'
-                    '    if (src.pRasterizationState)\n'
-                    '        pRasterizationState = new safe_VkPipelineRasterizationStateCreateInfo(*src.pRasterizationState);\n'
-                    '    else\n'
-                    '        pRasterizationState = NULL;\n'
-                    '    if (src.pMultisampleState && has_rasterization)\n'
-                    '        pMultisampleState = new safe_VkPipelineMultisampleStateCreateInfo(*src.pMultisampleState);\n'
-                    '    else\n'
-                    '        pMultisampleState = NULL; // original pMultisampleState pointer ignored\n'
-                    '    if (src.pDepthStencilState && has_rasterization)\n'
-                    '        pDepthStencilState = new safe_VkPipelineDepthStencilStateCreateInfo(*src.pDepthStencilState);\n'
-                    '    else\n'
-                    '        pDepthStencilState = NULL; // original pDepthStencilState pointer ignored\n'
-                    '    if (src.pColorBlendState && has_rasterization)\n'
-                    '        pColorBlendState = new safe_VkPipelineColorBlendStateCreateInfo(*src.pColorBlendState);\n'
-                    '    else\n'
-                    '        pColorBlendState = NULL; // original pColorBlendState pointer ignored\n'
-                    '    if (src.pDynamicState)\n'
-                    '        pDynamicState = new safe_VkPipelineDynamicStateCreateInfo(*src.pDynamicState);\n'
-                    '    else\n'
-                    '        pDynamicState = NULL;\n',
-                 # VkPipelineViewportStateCreateInfo is special case because it has custom construct parameters
-                'VkPipelineViewportStateCreateInfo' :
-                    '    if (src.pViewports) {\n'
-                    '        pViewports = new VkViewport[src.viewportCount];\n'
-                    '        memcpy ((void *)pViewports, (void *)src.pViewports, sizeof(VkViewport)*src.viewportCount);\n'
-                    '    }\n'
-                    '    else\n'
-                    '        pViewports = NULL;\n'
-                    '    if (src.pScissors) {\n'
-                    '        pScissors = new VkRect2D[src.scissorCount];\n'
-                    '        memcpy ((void *)pScissors, (void *)src.pScissors, sizeof(VkRect2D)*src.scissorCount);\n'
-                    '    }\n'
-                    '    else\n'
-                    '        pScissors = NULL;\n',
-            }
-
-            custom_destruct_txt = {'VkShaderModuleCreateInfo' :
-                                   '    if (pCode)\n'
-                                   '        delete[] reinterpret_cast<const uint8_t *>(pCode);\n' }
-
-            for member in item.members:
-                m_type = member.type
-                if member.type in self.structNames:
-                    member_index = next((i for i, v in enumerate(self.structMembers) if v[0] == member.type), None)
-                    if member_index is not None and self.NeedSafeStruct(self.structMembers[member_index]) == True:
-                        m_type = 'safe_%s' % member.type
-                if member.ispointer and 'safe_' not in m_type and self.TypeContainsObjectHandle(member.type, False) == False:
-                    # Ptr types w/o a safe_struct, for non-null case need to allocate new ptr and copy data in
-                    if m_type in ['void', 'char']:
-                        # For these exceptions just copy initial value over for now
-                        init_list += '\n    %s(in_struct->%s),' % (member.name, member.name)
-                        init_func_txt += '    %s = in_struct->%s;\n' % (member.name, member.name)
-                    else:
-                        default_init_list += '\n    %s(nullptr),' % (member.name)
-                        init_list += '\n    %s(nullptr),' % (member.name)
-                        init_func_txt += '    %s = nullptr;\n' % (member.name)
-                        if 'pNext' != member.name and 'void' not in m_type:
-                            if not member.isstaticarray and (member.len is None or '/' in member.len):
-                                construct_txt += '    if (in_struct->%s) {\n' % member.name
-                                construct_txt += '        %s = new %s(*in_struct->%s);\n' % (member.name, m_type, member.name)
-                                construct_txt += '    }\n'
-                                destruct_txt += '    if (%s)\n' % member.name
-                                destruct_txt += '        delete %s;\n' % member.name
-                            else:
-                                construct_txt += '    if (in_struct->%s) {\n' % member.name
-                                construct_txt += '        %s = new %s[in_struct->%s];\n' % (member.name, m_type, member.len)
-                                construct_txt += '        memcpy ((void *)%s, (void *)in_struct->%s, sizeof(%s)*in_struct->%s);\n' % (member.name, member.name, m_type, member.len)
-                                construct_txt += '    }\n'
-                                destruct_txt += '    if (%s)\n' % member.name
-                                destruct_txt += '        delete[] %s;\n' % member.name
-                elif member.isstaticarray or member.len is not None:
-                    if member.len is None:
-                        # Extract length of static array by grabbing val between []
-                        static_array_size = re.match(r"[^[]*\[([^]]*)\]", member.cdecl)
-                        construct_txt += '    for (uint32_t i=0; i<%s; ++i) {\n' % static_array_size.group(1)
-                        construct_txt += '        %s[i] = in_struct->%s[i];\n' % (member.name, member.name)
-                        construct_txt += '    }\n'
-                    else:
-                        # Init array ptr to NULL
-                        default_init_list += '\n    %s(nullptr),' % member.name
-                        init_list += '\n    %s(nullptr),' % member.name
-                        init_func_txt += '    %s = nullptr;\n' % member.name
-                        array_element = 'in_struct->%s[i]' % member.name
-                        if member.type in self.structNames:
-                            member_index = next((i for i, v in enumerate(self.structMembers) if v[0] == member.type), None)
-                            if member_index is not None and self.NeedSafeStruct(self.structMembers[member_index]) == True:
-                                array_element = '%s(&in_struct->safe_%s[i])' % (member.type, member.name)
-                        construct_txt += '    if (%s && in_struct->%s) {\n' % (member.len, member.name)
-                        construct_txt += '        %s = new %s[%s];\n' % (member.name, m_type, member.len)
-                        destruct_txt += '    if (%s)\n' % member.name
-                        destruct_txt += '        delete[] %s;\n' % member.name
-                        construct_txt += '        for (uint32_t i=0; i<%s; ++i) {\n' % (member.len)
-                        if 'safe_' in m_type:
-                            construct_txt += '            %s[i].initialize(&in_struct->%s[i]);\n' % (member.name, member.name)
-                        else:
-                            construct_txt += '            %s[i] = %s;\n' % (member.name, array_element)
-                        construct_txt += '        }\n'
-                        construct_txt += '    }\n'
-                elif member.ispointer == True:
-                    construct_txt += '    if (in_struct->%s)\n' % member.name
-                    construct_txt += '        %s = new %s(in_struct->%s);\n' % (member.name, m_type, member.name)
-                    construct_txt += '    else\n'
-                    construct_txt += '        %s = NULL;\n' % member.name
-                    destruct_txt += '    if (%s)\n' % member.name
-                    destruct_txt += '        delete %s;\n' % member.name
-                elif 'safe_' in m_type:
-                    init_list += '\n    %s(&in_struct->%s),' % (member.name, member.name)
-                    init_func_txt += '    %s.initialize(&in_struct->%s);\n' % (member.name, member.name)
-                else:
-                    init_list += '\n    %s(in_struct->%s),' % (member.name, member.name)
-                    init_func_txt += '    %s = in_struct->%s;\n' % (member.name, member.name)
-            if '' != init_list:
-                init_list = init_list[:-1] # hack off final comma
-            if item.name in custom_construct_txt:
-                construct_txt = custom_construct_txt[item.name]
-            if item.name in custom_destruct_txt:
-                destruct_txt = custom_destruct_txt[item.name]
-            safe_struct_body.append("\n%s::%s(const %s* in_struct%s) :%s\n{\n%s}" % (ss_name, ss_name, item.name, self.custom_construct_params.get(item.name, ''), init_list, construct_txt))
-            if '' != default_init_list:
-                default_init_list = " :%s" % (default_init_list[:-1])
-            safe_struct_body.append("\n%s::%s()%s\n{}" % (ss_name, ss_name, default_init_list))
-            # Create slight variation of init and construct txt for copy constructor that takes a src object reference vs. struct ptr
-            copy_construct_init = init_func_txt.replace('in_struct->', 'src.')
-            copy_construct_txt = construct_txt.replace(' (in_struct->', ' (src.')     # Exclude 'if' blocks from next line
-            copy_construct_txt = copy_construct_txt.replace('(in_struct->', '(*src.') # Pass object to copy constructors
-            copy_construct_txt = copy_construct_txt.replace('in_struct->', 'src.')    # Modify remaining struct refs for src object
-            if item.name in custom_copy_txt:
-                copy_construct_txt = custom_copy_txt[item.name]
-            copy_assign_txt = '    if (&src == this) return *this;\n\n' + destruct_txt + '\n' + copy_construct_init + copy_construct_txt + '\n    return *this;'
-            safe_struct_body.append("\n%s::%s(const %s& src)\n{\n%s%s}" % (ss_name, ss_name, ss_name, copy_construct_init, copy_construct_txt)) # Copy constructor
-            safe_struct_body.append("\n%s& %s::operator=(const %s& src)\n{\n%s\n}" % (ss_name, ss_name, ss_name, copy_assign_txt)) # Copy assignment operator
-            safe_struct_body.append("\n%s::~%s()\n{\n%s}" % (ss_name, ss_name, destruct_txt))
-            safe_struct_body.append("\nvoid %s::initialize(const %s* in_struct%s)\n{\n%s%s}" % (ss_name, item.name, self.custom_construct_params.get(item.name, ''), init_func_txt, construct_txt))
-            # Copy initializer uses same txt as copy constructor but has a ptr and not a reference
-            init_copy = copy_construct_init.replace('src.', 'src->')
-            init_construct = copy_construct_txt.replace('src.', 'src->')
-            safe_struct_body.append("\nvoid %s::initialize(const %s* src)\n{\n%s%s}" % (ss_name, ss_name, init_copy, init_construct))
-            if item.ifdef_protect != None:
-                safe_struct_body.append("#endif // %s\n" % item.ifdef_protect)
-        return "\n".join(safe_struct_body)
-    #
-    # Generate the type map
-    def GenerateTypeMapHelperHeader(self):
-        prefix = 'Lvl'
-        fprefix = 'lvl_'
-        typemap = prefix + 'TypeMap'
-        idmap = prefix + 'STypeMap'
-        type_member = 'Type'
-        id_member = 'kSType'
-        id_decl = 'static const VkStructureType '
-        generic_header = prefix + 'GenericHeader'
-        typename_func = fprefix + 'typename'
-        idname_func = fprefix + 'stype_name'
-        find_func = fprefix + 'find_in_chain'
-        init_func = fprefix + 'init_struct'
-
-        explanatory_comment = '\n'.join((
-                '// These empty generic templates are specialized for each type with sType',
-                '// members and for each sType -- providing a two way map between structure',
-                '// types and sTypes'))
-
-        empty_typemap = 'template <typename T> struct ' + typemap + ' {};'
-        typemap_format  = 'template <> struct {template}<{typename}> {{\n'
-        typemap_format += '    {id_decl}{id_member} = {id_value};\n'
-        typemap_format += '}};\n'
-
-        empty_idmap = 'template <VkStructureType id> struct ' + idmap + ' {};'
-        idmap_format = ''.join((
-            'template <> struct {template}<{id_value}> {{\n',
-            '    typedef {typename} {typedef};\n',
-            '}};\n'))
-
-        # Define the utilities (here so any renaming stays consistent), if this grows large, refactor to a fixed .h file
-        utilities_format = '\n'.join((
-            '// Header "base class" for pNext chain traversal',
-            'struct {header} {{',
-            '   VkStructureType sType;',
-            '   const {header} *pNext;',
-            '}};',
-            '',
-            '// Find an entry of the given type in the pNext chain',
-            'template <typename T> const T *{find_func}(const void *next) {{',
-            '    const {header} *current = reinterpret_cast<const {header} *>(next);',
-            '    const T *found = nullptr;',
-            '    while (current) {{',
-            '        if ({type_map}<T>::{id_member} == current->sType) {{',
-            '            found = reinterpret_cast<const T*>(current);',
-            '            current = nullptr;',
-            '        }} else {{',
-            '            current = current->pNext;',
-            '        }}',
-            '    }}',
-            '    return found;',
-            '}}',
-            '',
-            '// Init the header of an sType struct with pNext',
-            'template <typename T> T {init_func}(void *p_next) {{',
-            '    T out = {{}};',
-            '    out.sType = {type_map}<T>::kSType;',
-            '    out.pNext = p_next;',
-            '    return out;',
-            '}}',
-                        '',
-            '// Init the header of an sType struct',
-            'template <typename T> T {init_func}() {{',
-            '    T out = {{}};',
-            '    out.sType = {type_map}<T>::kSType;',
-            '    return out;',
-            '}}',
-
-            ''))
-
-        code = []
-
-        # Generate header
-        code.append('\n'.join((
-            '#pragma once',
-            '#include <vulkan/vulkan.h>\n',
-            explanatory_comment, '',
-            empty_idmap,
-            empty_typemap, '')))
-
-        # Generate the specializations for each type and stype
-        for item in self.structMembers:
-            typename = item.name
-            info = self.structTypes.get(typename)
-            if not info:
-                continue
-
-            if item.ifdef_protect != None:
-                code.append('#ifdef %s' % item.ifdef_protect)
-
-            code.append('// Map type {} to id {}'.format(typename, info.value))
-            code.append(typemap_format.format(template=typemap, typename=typename, id_value=info.value,
-                id_decl=id_decl, id_member=id_member))
-            code.append(idmap_format.format(template=idmap, typename=typename, id_value=info.value, typedef=type_member))
-
-            if item.ifdef_protect != None:
-                code.append('#endif // %s' % item.ifdef_protect)
-
-        # Generate utilities for all types
-        code.append('\n'.join((
-            utilities_format.format(id_member=id_member, id_map=idmap, type_map=typemap,
-                type_member=type_member, header=generic_header, typename_func=typename_func, idname_func=idname_func,
-                find_func=find_func, init_func=init_func), ''
-            )))
-
-        return "\n".join(code)
-
-    #
-    # Create a helper file and return it as a string
-    def OutputDestFile(self):
-        if self.helper_file_type == 'enum_string_header':
-            return self.GenerateEnumStringHelperHeader()
-        elif self.helper_file_type == 'safe_struct_header':
-            return self.GenerateSafeStructHelperHeader()
-        elif self.helper_file_type == 'safe_struct_source':
-            return self.GenerateSafeStructHelperSource()
-        elif self.helper_file_type == 'object_types_header':
-            return self.GenerateObjectTypesHelperHeader()
-        elif self.helper_file_type == 'extension_helper_header':
-            return self.GenerateExtensionHelperHeader()
-        elif self.helper_file_type == 'typemap_helper_header':
-            return self.GenerateTypeMapHelperHeader()
-        else:
-            return 'Bad Helper File Generator Option %s' % self.helper_file_type
-
diff --git a/scripts/loader_extension_generator.py b/scripts/loader_extension_generator.py
deleted file mode 100644
index d9f5564..0000000
--- a/scripts/loader_extension_generator.py
+++ /dev/null
@@ -1,1494 +0,0 @@
-#!/usr/bin/python3 -i
-#
-# Copyright (c) 2015-2017 The Khronos Group Inc.
-# Copyright (c) 2015-2017 Valve Corporation
-# Copyright (c) 2015-2017 LunarG, Inc.
-# Copyright (c) 2015-2017 Google Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# Author: Mark Young <marky@lunarg.com>
-# Author: Mark Lobodzinski <mark@lunarg.com>
-
-import os,re,sys
-import xml.etree.ElementTree as etree
-from generator import *
-from collections import namedtuple
-from common_codegen import *
-
-
-WSI_EXT_NAMES = ['VK_KHR_surface',
-                 'VK_KHR_display',
-                 'VK_KHR_xlib_surface',
-                 'VK_KHR_xcb_surface',
-                 'VK_KHR_wayland_surface',
-                 'VK_KHR_mir_surface',
-                 'VK_KHR_win32_surface',
-                 'VK_KHR_android_surface',
-                 'VK_MVK_macos_surface',
-                 'VK_MVK_ios_surface',
-                 'VK_KHR_swapchain',
-                 'VK_KHR_display_swapchain']
-
-ADD_INST_CMDS = ['vkCreateInstance',
-                 'vkEnumerateInstanceExtensionProperties',
-                 'vkEnumerateInstanceLayerProperties',
-                 'vkEnumerateInstanceVersion']
-
-AVOID_EXT_NAMES = ['VK_EXT_debug_report']
-
-AVOID_CMD_NAMES = ['vkCreateDebugUtilsMessengerEXT',
-                   'vkDestroyDebugUtilsMessengerEXT',
-                   'vkSubmitDebugUtilsMessageEXT']
-
-DEVICE_CMDS_NEED_TERM = ['vkGetDeviceProcAddr',
-                         'vkCreateSwapchainKHR',
-                         'vkCreateSharedSwapchainsKHR',
-                         'vkGetDeviceGroupSurfacePresentModesKHR',
-                         'vkDebugMarkerSetObjectTagEXT',
-                         'vkDebugMarkerSetObjectNameEXT',
-                         'vkSetDebugUtilsObjectNameEXT',
-                         'vkSetDebugUtilsObjectTagEXT']
-                         
-ALIASED_CMDS = {
-    'vkEnumeratePhysicalDeviceGroupsKHR':                   'vkEnumeratePhysicalDeviceGroups',
-    'vkGetPhysicalDeviceFeatures2KHR':                      'vkGetPhysicalDeviceFeatures2',
-    'vkGetPhysicalDeviceProperties2KHR':                    'vkGetPhysicalDeviceProperties2',
-    'vkGetPhysicalDeviceFormatProperties2KHR':              'vkGetPhysicalDeviceFormatProperties2',
-    'vkGetPhysicalDeviceImageFormatProperties2KHR':         'vkGetPhysicalDeviceImageFormatProperties2',
-    'vkGetPhysicalDeviceQueueFamilyProperties2KHR':         'vkGetPhysicalDeviceQueueFamilyProperties2',
-    'vkGetPhysicalDeviceMemoryProperties2KHR':              'vkGetPhysicalDeviceMemoryProperties2',
-    'vkGetPhysicalDeviceSparseImageFormatProperties2KHR':   'vkGetPhysicalDeviceSparseImageFormatProperties2',
-    'vkGetPhysicalDeviceExternalBufferPropertiesKHR':       'vkGetPhysicalDeviceExternalBufferProperties',
-    'vkGetPhysicalDeviceExternalSemaphorePropertiesKHR':    'vkGetPhysicalDeviceExternalSemaphoreProperties',
-    'vkGetPhysicalDeviceExternalFencePropertiesKHR':        'vkGetPhysicalDeviceExternalFenceProperties',
-}
-
-PRE_INSTANCE_FUNCTIONS = ['vkEnumerateInstanceExtensionProperties',
-                          'vkEnumerateInstanceLayerProperties',
-                          'vkEnumerateInstanceVersion']
-
-#
-# LoaderExtensionGeneratorOptions - subclass of GeneratorOptions.
-class LoaderExtensionGeneratorOptions(GeneratorOptions):
-    def __init__(self,
-                 filename = None,
-                 directory = '.',
-                 apiname = None,
-                 profile = None,
-                 versions = '.*',
-                 emitversions = '.*',
-                 defaultExtensions = None,
-                 addExtensions = None,
-                 removeExtensions = None,
-                 emitExtensions = None,
-                 sortProcedure = regSortFeatures,
-                 prefixText = "",
-                 genFuncPointers = True,
-                 protectFile = True,
-                 protectFeature = True,
-                 apicall = '',
-                 apientry = '',
-                 apientryp = '',
-                 indentFuncProto = True,
-                 indentFuncPointer = False,
-                 alignFuncParam = 0,
-                 expandEnumerants = True):
-        GeneratorOptions.__init__(self, filename, directory, apiname, profile,
-                                  versions, emitversions, defaultExtensions,
-                                  addExtensions, removeExtensions, emitExtensions, sortProcedure)
-        self.prefixText      = prefixText
-        self.prefixText      = None
-        self.apicall         = apicall
-        self.apientry        = apientry
-        self.apientryp       = apientryp
-        self.alignFuncParam  = alignFuncParam
-        self.expandEnumerants = expandEnumerants
-
-#
-# LoaderExtensionOutputGenerator - subclass of OutputGenerator.
-# Generates dispatch table helper header files for LVL
-class LoaderExtensionOutputGenerator(OutputGenerator):
-    """Generate dispatch table helper header based on XML element attributes"""
-    def __init__(self,
-                 errFile = sys.stderr,
-                 warnFile = sys.stderr,
-                 diagFile = sys.stdout):
-        OutputGenerator.__init__(self, errFile, warnFile, diagFile)
-
-        # Internal state - accumulators for different inner block text
-        self.ext_instance_dispatch_list = []  # List of extension entries for instance dispatch list
-        self.ext_device_dispatch_list = []    # List of extension entries for device dispatch list
-        self.core_commands = []               # List of CommandData records for core Vulkan commands
-        self.ext_commands = []                # List of CommandData records for extension Vulkan commands
-        self.CommandParam = namedtuple('CommandParam', ['type', 'name', 'cdecl'])
-        self.CommandData = namedtuple('CommandData', ['name', 'ext_name', 'ext_type', 'protect', 'return_type', 'handle_type', 'params', 'cdecl'])
-        self.instanceExtensions = []
-        self.ExtensionData = namedtuple('ExtensionData', ['name', 'type', 'protect', 'define', 'num_commands'])
-
-    #
-    # Called once at the beginning of each run
-    def beginFile(self, genOpts):
-        OutputGenerator.beginFile(self, genOpts)
-
-        # User-supplied prefix text, if any (list of strings)
-        if (genOpts.prefixText):
-            for s in genOpts.prefixText:
-                write(s, file=self.outFile)
-
-        # File Comment
-        file_comment = '// *** THIS FILE IS GENERATED - DO NOT EDIT ***\n'
-        file_comment += '// See loader_extension_generator.py for modifications\n'
-        write(file_comment, file=self.outFile)
-
-        # Copyright Notice
-        copyright =  '/*\n'
-        copyright += ' * Copyright (c) 2015-2017 The Khronos Group Inc.\n'
-        copyright += ' * Copyright (c) 2015-2017 Valve Corporation\n'
-        copyright += ' * Copyright (c) 2015-2017 LunarG, Inc.\n'
-        copyright += ' *\n'
-        copyright += ' * Licensed under the Apache License, Version 2.0 (the "License");\n'
-        copyright += ' * you may not use this file except in compliance with the License.\n'
-        copyright += ' * You may obtain a copy of the License at\n'
-        copyright += ' *\n'
-        copyright += ' *     http://www.apache.org/licenses/LICENSE-2.0\n'
-        copyright += ' *\n'
-        copyright += ' * Unless required by applicable law or agreed to in writing, software\n'
-        copyright += ' * distributed under the License is distributed on an "AS IS" BASIS,\n'
-        copyright += ' * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n'
-        copyright += ' * See the License for the specific language governing permissions and\n'
-        copyright += ' * limitations under the License.\n'
-        copyright += ' *\n'
-        copyright += ' * Author: Mark Lobodzinski <mark@lunarg.com>\n'
-        copyright += ' * Author: Mark Young <marky@lunarg.com>\n'
-        copyright += ' */\n'
-
-        preamble = ''
-
-        if self.genOpts.filename == 'vk_loader_extensions.h':
-            preamble += '#pragma once\n'
-
-        elif self.genOpts.filename == 'vk_loader_extensions.c':
-            preamble += '#define _GNU_SOURCE\n'
-            preamble += '#include <stdio.h>\n'
-            preamble += '#include <stdlib.h>\n'
-            preamble += '#include <string.h>\n'
-            preamble += '#include "vk_loader_platform.h"\n'
-            preamble += '#include "loader.h"\n'
-            preamble += '#include "vk_loader_extensions.h"\n'
-            preamble += '#include <vulkan/vk_icd.h>\n'
-            preamble += '#include "wsi.h"\n'
-            preamble += '#include "debug_utils.h"\n'
-            preamble += '#include "extension_manual.h"\n'
-
-        elif self.genOpts.filename == 'vk_layer_dispatch_table.h':
-            preamble += '#pragma once\n'
-            preamble += '\n'
-            preamble += 'typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_GetPhysicalDeviceProcAddr)(VkInstance instance, const char* pName);\n'
-
-        write(copyright, file=self.outFile)
-        write(preamble, file=self.outFile)
-
-    #
-    # Write generate and write dispatch tables to output file
-    def endFile(self):
-        file_data = ''
-
-        if self.genOpts.filename == 'vk_loader_extensions.h':
-            file_data += self.OutputPrototypesInHeader()
-            file_data += self.OutputLoaderTerminators()
-            file_data += self.OutputIcdDispatchTable()
-            file_data += self.OutputIcdExtensionEnableUnion()
-
-        elif self.genOpts.filename == 'vk_loader_extensions.c':
-            file_data += self.OutputUtilitiesInSource()
-            file_data += self.OutputIcdDispatchTableInit()
-            file_data += self.OutputLoaderDispatchTables()
-            file_data += self.OutputLoaderLookupFunc()
-            file_data += self.CreateTrampTermFuncs()
-            file_data += self.InstExtensionGPA()
-            file_data += self.InstantExtensionCreate()
-            file_data += self.DeviceExtensionGetTerminator()
-            file_data += self.InitInstLoaderExtensionDispatchTable()
-            file_data += self.OutputInstantExtensionWhitelistArray()
-
-        elif self.genOpts.filename == 'vk_layer_dispatch_table.h':
-            file_data += self.OutputLayerInstanceDispatchTable()
-            file_data += self.OutputLayerDeviceDispatchTable()
-
-        write(file_data, file=self.outFile);
-
-        # Finish processing in superclass
-        OutputGenerator.endFile(self)
-
-    def beginFeature(self, interface, emit):
-        # Start processing in superclass
-        OutputGenerator.beginFeature(self, interface, emit)
-        self.featureExtraProtect = GetFeatureProtect(interface)
-
-        enums = interface[0].findall('enum')
-        self.currentExtension = ''
-        self.name_definition = ''
-
-        for item in enums:
-            name_definition = item.get('name')
-            if 'EXTENSION_NAME' in name_definition:
-                self.name_definition = name_definition
-
-        self.type = interface.get('type')
-        self.num_commands = 0
-        name = interface.get('name')
-        self.currentExtension = name 
-
-    #
-    # Process commands, adding to appropriate dispatch tables
-    def genCmd(self, cmdinfo, name, alias):
-        OutputGenerator.genCmd(self, cmdinfo, name, alias)
-
-        # Get first param type
-        params = cmdinfo.elem.findall('param')
-        info = self.getTypeNameTuple(params[0])
-
-        self.num_commands += 1
-
-        if 'android' not in name:
-            self.AddCommandToDispatchList(self.currentExtension, self.type, name, cmdinfo, info[0])
-
-    def endFeature(self):
-
-        if 'android' not in self.currentExtension:
-            self.instanceExtensions.append(self.ExtensionData(name=self.currentExtension,
-                                                              type=self.type,
-                                                              protect=self.featureExtraProtect,
-                                                              define=self.name_definition,
-                                                              num_commands=self.num_commands))
-
-        # Finish processing in superclass
-        OutputGenerator.endFeature(self)
-
-    #
-    # Retrieve the value of the len tag
-    def getLen(self, param):
-        result = None
-        len = param.attrib.get('len')
-        if len and len != 'null-terminated':
-            # For string arrays, 'len' can look like 'count,null-terminated',
-            # indicating that we have a null terminated array of strings.  We
-            # strip the null-terminated from the 'len' field and only return
-            # the parameter specifying the string count
-            if 'null-terminated' in len:
-                result = len.split(',')[0]
-            else:
-                result = len
-            result = str(result).replace('::', '->')
-        return result
-
-    #
-    # Determine if this API should be ignored or added to the instance or device dispatch table
-    def AddCommandToDispatchList(self, extension_name, extension_type, name, cmdinfo, handle_type):
-        handle = self.registry.tree.find("types/type/[name='" + handle_type + "'][@category='handle']")
-
-        return_type =  cmdinfo.elem.find('proto/type')
-        if (return_type != None and return_type.text == 'void'):
-           return_type = None
-
-        cmd_params = []
-
-        # Generate a list of commands for use in printing the necessary
-        # core instance terminator prototypes
-        params = cmdinfo.elem.findall('param')
-        lens = set()
-        for param in params:
-            len = self.getLen(param)
-            if len:
-                lens.add(len)
-        paramsInfo = []
-        for param in params:
-            paramInfo = self.getTypeNameTuple(param)
-            param_type = paramInfo[0]
-            param_name = paramInfo[1]
-            param_cdecl = self.makeCParamDecl(param, 0)
-            cmd_params.append(self.CommandParam(type=param_type, name=param_name,
-                                                cdecl=param_cdecl))
-
-        if handle != None and handle_type != 'VkInstance' and handle_type != 'VkPhysicalDevice':
-            # The Core Vulkan code will be wrapped in a feature called VK_VERSION_#_#
-            # For example: VK_VERSION_1_0 wraps the core 1.0 Vulkan functionality
-            if 'VK_VERSION_' in extension_name:
-                self.core_commands.append(
-                    self.CommandData(name=name, ext_name=extension_name,
-                                     ext_type='device',
-                                     protect=self.featureExtraProtect,
-                                     return_type = return_type,
-                                     handle_type = handle_type,
-                                     params = cmd_params,
-                                     cdecl=self.makeCDecls(cmdinfo.elem)[0]))
-            else:
-                self.ext_device_dispatch_list.append((name, self.featureExtraProtect))
-                self.ext_commands.append(
-                    self.CommandData(name=name, ext_name=extension_name,
-                                     ext_type=extension_type,
-                                     protect=self.featureExtraProtect,
-                                     return_type = return_type,
-                                     handle_type = handle_type,
-                                     params = cmd_params,
-                                     cdecl=self.makeCDecls(cmdinfo.elem)[0]))
-        else:
-            # The Core Vulkan code will be wrapped in a feature called VK_VERSION_#_#
-            # For example: VK_VERSION_1_0 wraps the core 1.0 Vulkan functionality
-            if 'VK_VERSION_' in extension_name:
-                self.core_commands.append(
-                    self.CommandData(name=name, ext_name=extension_name,
-                                     ext_type='instance',
-                                     protect=self.featureExtraProtect,
-                                     return_type = return_type,
-                                     handle_type = handle_type,
-                                     params = cmd_params,
-                                     cdecl=self.makeCDecls(cmdinfo.elem)[0]))
-
-            else:
-                self.ext_instance_dispatch_list.append((name, self.featureExtraProtect))
-                self.ext_commands.append(
-                    self.CommandData(name=name, ext_name=extension_name,
-                                     ext_type=extension_type,
-                                     protect=self.featureExtraProtect,
-                                     return_type = return_type,
-                                     handle_type = handle_type,
-                                     params = cmd_params,
-                                     cdecl=self.makeCDecls(cmdinfo.elem)[0]))
-
-    #
-    # Retrieve the type and name for a parameter
-    def getTypeNameTuple(self, param):
-        type = ''
-        name = ''
-        for elem in param:
-            if elem.tag == 'type':
-                type = noneStr(elem.text)
-            elif elem.tag == 'name':
-                name = noneStr(elem.text)
-        return (type, name)
-
-    def OutputPrototypesInHeader(self):
-        protos = ''
-        protos += '// Structures defined externally, but used here\n'
-        protos += 'struct loader_instance;\n'
-        protos += 'struct loader_device;\n'
-        protos += 'struct loader_icd_term;\n'
-        protos += 'struct loader_dev_dispatch_table;\n'
-        protos += '\n'
-        protos += '// Device extension error function\n'
-        protos += 'VKAPI_ATTR VkResult VKAPI_CALL vkDevExtError(VkDevice dev);\n'
-        protos += '\n'
-        protos += '// Extension interception for vkGetInstanceProcAddr function, so we can return\n'
-        protos += '// the appropriate information for any instance extensions we know about.\n'
-        protos += 'bool extension_instance_gpa(struct loader_instance *ptr_instance, const char *name, void **addr);\n'
-        protos += '\n'
-        protos += '// Extension interception for vkCreateInstance function, so we can properly\n'
-        protos += '// detect and enable any instance extension information for extensions we know\n'
-        protos += '// about.\n'
-        protos += 'void extensions_create_instance(struct loader_instance *ptr_instance, const VkInstanceCreateInfo *pCreateInfo);\n'
-        protos += '\n'
-        protos += '// Extension interception for vkGetDeviceProcAddr function, so we can return\n'
-        protos += '// an appropriate terminator if this is one of those few device commands requiring\n'
-        protos += '// a terminator.\n'
-        protos += 'PFN_vkVoidFunction get_extension_device_proc_terminator(struct loader_device *dev, const char *pName);\n'
-        protos += '\n'
-        protos += '// Dispatch table properly filled in with appropriate terminators for the\n'
-        protos += '// supported extensions.\n'
-        protos += 'extern const VkLayerInstanceDispatchTable instance_disp;\n'
-        protos += '\n'
-        protos += '// Array of extension strings for instance extensions we support.\n'
-        protos += 'extern const char *const LOADER_INSTANCE_EXTENSIONS[];\n'
-        protos += '\n'
-        protos += 'VKAPI_ATTR bool VKAPI_CALL loader_icd_init_entries(struct loader_icd_term *icd_term, VkInstance inst,\n'
-        protos += '                                                   const PFN_vkGetInstanceProcAddr fp_gipa);\n'
-        protos += '\n'
-        protos += '// Init Device function pointer dispatch table with core commands\n'
-        protos += 'VKAPI_ATTR void VKAPI_CALL loader_init_device_dispatch_table(struct loader_dev_dispatch_table *dev_table, PFN_vkGetDeviceProcAddr gpa,\n'
-        protos += '                                                             VkDevice dev);\n'
-        protos += '\n'
-        protos += '// Init Device function pointer dispatch table with extension commands\n'
-        protos += 'VKAPI_ATTR void VKAPI_CALL loader_init_device_extension_dispatch_table(struct loader_dev_dispatch_table *dev_table,\n'
-        protos += '                                                                       PFN_vkGetDeviceProcAddr gpa, VkDevice dev);\n'
-        protos += '\n'
-        protos += '// Init Instance function pointer dispatch table with core commands\n'
-        protos += 'VKAPI_ATTR void VKAPI_CALL loader_init_instance_core_dispatch_table(VkLayerInstanceDispatchTable *table, PFN_vkGetInstanceProcAddr gpa,\n'
-        protos += '                                                                    VkInstance inst);\n'
-        protos += '\n'
-        protos += '// Init Instance function pointer dispatch table with core commands\n'
-        protos += 'VKAPI_ATTR void VKAPI_CALL loader_init_instance_extension_dispatch_table(VkLayerInstanceDispatchTable *table, PFN_vkGetInstanceProcAddr gpa,\n'
-        protos += '                                                                         VkInstance inst);\n'
-        protos += '\n'
-        protos += '// Device command lookup function\n'
-        protos += 'VKAPI_ATTR void* VKAPI_CALL loader_lookup_device_dispatch_table(const VkLayerDispatchTable *table, const char *name);\n'
-        protos += '\n'
-        protos += '// Instance command lookup function\n'
-        protos += 'VKAPI_ATTR void* VKAPI_CALL loader_lookup_instance_dispatch_table(const VkLayerInstanceDispatchTable *table, const char *name,\n'
-        protos += '                                                                  bool *found_name);\n'
-        protos += '\n'
-        protos += 'VKAPI_ATTR bool VKAPI_CALL loader_icd_init_entries(struct loader_icd_term *icd_term, VkInstance inst,\n'
-        protos += '                                                   const PFN_vkGetInstanceProcAddr fp_gipa);\n'
-        protos += '\n'
-        return protos
-
-    def OutputUtilitiesInSource(self):
-        protos = ''
-        protos += '// Device extension error function\n'
-        protos += 'VKAPI_ATTR VkResult VKAPI_CALL vkDevExtError(VkDevice dev) {\n'
-        protos += '    struct loader_device *found_dev;\n'
-        protos += '    // The device going in is a trampoline device\n'
-        protos += '    struct loader_icd_term *icd_term = loader_get_icd_and_device(dev, &found_dev, NULL);\n'
-        protos += '\n'
-        protos += '    if (icd_term)\n'
-        protos += '        loader_log(icd_term->this_instance, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0,\n'
-        protos += '                   "Bad destination in loader trampoline dispatch,"\n'
-        protos += '                   "Are layers and extensions that you are calling enabled?");\n'
-        protos += '    return VK_ERROR_EXTENSION_NOT_PRESENT;\n'
-        protos += '}\n\n'
-        return protos
-
-    #
-    # Create a layer instance dispatch table from the appropriate list and return it as a string
-    def OutputLayerInstanceDispatchTable(self):
-        commands = []
-        table = ''
-        cur_extension_name = ''
-
-        table += '// Instance function pointer dispatch table\n'
-        table += 'typedef struct VkLayerInstanceDispatchTable_ {\n'
-
-        # First add in an entry for GetPhysicalDeviceProcAddr.  This will not
-        # ever show up in the XML or header, so we have to manually add it.
-        table += '    // Manually add in GetPhysicalDeviceProcAddr entry\n'
-        table += '    PFN_GetPhysicalDeviceProcAddr GetPhysicalDeviceProcAddr;\n'
-
-        for x in range(0, 2):
-            if x == 0:
-                commands = self.core_commands
-            else:
-                commands = self.ext_commands
-
-            for cur_cmd in commands:
-                is_inst_handle_type = cur_cmd.name in ADD_INST_CMDS or cur_cmd.handle_type == 'VkInstance' or cur_cmd.handle_type == 'VkPhysicalDevice'
-                if is_inst_handle_type:
-
-                    if cur_cmd.ext_name != cur_extension_name:
-                        if 'VK_VERSION_' in cur_cmd.ext_name:
-                            table += '\n    // ---- Core %s commands\n' % cur_cmd.ext_name[11:]
-                        else:
-                            table += '\n    // ---- %s extension commands\n' % cur_cmd.ext_name
-                        cur_extension_name = cur_cmd.ext_name
-
-                    # Remove 'vk' from proto name
-                    base_name = cur_cmd.name[2:]
-
-                    if cur_cmd.protect is not None:
-                        table += '#ifdef %s\n' % cur_cmd.protect
-
-                    table += '    PFN_%s %s;\n' % (cur_cmd.name, base_name)
-
-                    if cur_cmd.protect is not None:
-                        table += '#endif // %s\n' % cur_cmd.protect
-
-        table += '} VkLayerInstanceDispatchTable;\n\n'
-        return table
-
-    #
-    # Create a layer device dispatch table from the appropriate list and return it as a string
-    def OutputLayerDeviceDispatchTable(self):
-        commands = []
-        table = ''
-        cur_extension_name = ''
-
-        table += '// Device function pointer dispatch table\n'
-        table += 'typedef struct VkLayerDispatchTable_ {\n'
-
-        for x in range(0, 2):
-            if x == 0:
-                commands = self.core_commands
-            else:
-                commands = self.ext_commands
-
-            for cur_cmd in commands:
-                is_inst_handle_type = cur_cmd.name in ADD_INST_CMDS or cur_cmd.handle_type == 'VkInstance' or cur_cmd.handle_type == 'VkPhysicalDevice'
-                if not is_inst_handle_type:
-
-                    if cur_cmd.ext_name != cur_extension_name:
-                        if 'VK_VERSION_' in cur_cmd.ext_name:
-                            table += '\n    // ---- Core %s commands\n' % cur_cmd.ext_name[11:]
-                        else:
-                            table += '\n    // ---- %s extension commands\n' % cur_cmd.ext_name
-                        cur_extension_name = cur_cmd.ext_name
-
-                    # Remove 'vk' from proto name
-                    base_name = cur_cmd.name[2:]
-
-                    if cur_cmd.protect is not None:
-                        table += '#ifdef %s\n' % cur_cmd.protect
-
-                    table += '    PFN_%s %s;\n' % (cur_cmd.name, base_name)
-
-                    if cur_cmd.protect is not None:
-                        table += '#endif // %s\n' % cur_cmd.protect
-
-        table += '} VkLayerDispatchTable;\n\n'
-        return table
-
-    #
-    # Create a dispatch table from the appropriate list and return it as a string
-    def OutputIcdDispatchTable(self):
-        commands = []
-        table = ''
-        cur_extension_name = ''
-
-        table += '// ICD function pointer dispatch table\n'
-        table += 'struct loader_icd_term_dispatch {\n'
-
-        for x in range(0, 2):
-            if x == 0:
-                commands = self.core_commands
-            else:
-                commands = self.ext_commands
-
-            for cur_cmd in commands:
-                is_inst_handle_type = cur_cmd.name in ADD_INST_CMDS or cur_cmd.handle_type == 'VkInstance' or cur_cmd.handle_type == 'VkPhysicalDevice'
-                if ((is_inst_handle_type or cur_cmd.name in DEVICE_CMDS_NEED_TERM) and
-                    (cur_cmd.name != 'vkGetInstanceProcAddr' and cur_cmd.name != 'vkEnumerateDeviceLayerProperties')):
-
-                    if cur_cmd.ext_name != cur_extension_name:
-                        if 'VK_VERSION_' in cur_cmd.ext_name:
-                            table += '\n    // ---- Core %s commands\n' % cur_cmd.ext_name[11:]
-                        else:
-                            table += '\n    // ---- %s extension commands\n' % cur_cmd.ext_name
-                        cur_extension_name = cur_cmd.ext_name
-
-                    # Remove 'vk' from proto name
-                    base_name = cur_cmd.name[2:]
-
-                    if cur_cmd.protect is not None:
-                        table += '#ifdef %s\n' % cur_cmd.protect
-
-                    table += '    PFN_%s %s;\n' % (cur_cmd.name, base_name)
-
-                    if cur_cmd.protect is not None:
-                        table += '#endif // %s\n' % cur_cmd.protect
-
-        table += '};\n\n'
-        return table
-
-    #
-    # Init a dispatch table from the appropriate list and return it as a string
-    def OutputIcdDispatchTableInit(self):
-        commands = []
-        cur_extension_name = ''
-
-        table = ''
-        table += 'VKAPI_ATTR bool VKAPI_CALL loader_icd_init_entries(struct loader_icd_term *icd_term, VkInstance inst,\n'
-        table += '                                                   const PFN_vkGetInstanceProcAddr fp_gipa) {\n'
-        table += '\n'
-        table += '#define LOOKUP_GIPA(func, required)                                                        \\\n'
-        table += '    do {                                                                                   \\\n'
-        table += '        icd_term->dispatch.func = (PFN_vk##func)fp_gipa(inst, "vk" #func);                 \\\n'
-        table += '        if (!icd_term->dispatch.func && required) {                                        \\\n'
-        table += '            loader_log((struct loader_instance *)inst, VK_DEBUG_REPORT_WARNING_BIT_EXT, 0, \\\n'
-        table += '                       loader_platform_get_proc_address_error("vk" #func));                \\\n'
-        table += '            return false;                                                                  \\\n'
-        table += '        }                                                                                  \\\n'
-        table += '    } while (0)\n'
-        table += '\n'
-
-        skip_gipa_commands = ['vkGetInstanceProcAddr',
-                              'vkEnumerateDeviceLayerProperties',
-                              'vkCreateInstance',
-                              'vkEnumerateInstanceExtensionProperties',
-                              'vkEnumerateInstanceLayerProperties',
-                              'vkEnumerateInstanceVersion',
-                             ]
-
-        for x in range(0, 2):
-            if x == 0:
-                commands = self.core_commands
-            else:
-                commands = self.ext_commands
-
-            required = False
-            for cur_cmd in commands:
-                is_inst_handle_type = cur_cmd.handle_type == 'VkInstance' or cur_cmd.handle_type == 'VkPhysicalDevice'
-                if ((is_inst_handle_type or cur_cmd.name in DEVICE_CMDS_NEED_TERM) and (cur_cmd.name not in skip_gipa_commands)):
-
-                    if cur_cmd.ext_name != cur_extension_name:
-                        if 'VK_VERSION_' in cur_cmd.ext_name:
-                            table += '\n    // ---- Core %s\n' % cur_cmd.ext_name[11:]
-                            required = cur_cmd.ext_name == 'VK_VERSION_1_0'
-                        else:
-                            table += '\n    // ---- %s extension commands\n' % cur_cmd.ext_name
-                            required = False
-                        cur_extension_name = cur_cmd.ext_name
-
-                    # Remove 'vk' from proto name
-                    base_name = cur_cmd.name[2:]
-
-                    if cur_cmd.protect is not None:
-                        table += '#ifdef %s\n' % cur_cmd.protect
-
-                    # The Core Vulkan code will be wrapped in a feature called VK_VERSION_#_#
-                    # For example: VK_VERSION_1_0 wraps the core 1.0 Vulkan functionality
-                    table += '    LOOKUP_GIPA(%s, %s);\n' % (base_name, 'true' if required else 'false')
-
-                    if cur_cmd.protect is not None:
-                        table += '#endif // %s\n' % cur_cmd.protect
-
-        table += '\n'
-        table += '#undef LOOKUP_GIPA\n'
-        table += '\n'
-        table += '    return true;\n'
-        table += '};\n\n'
-        return table
-
-    #
-    # Create the extension enable union
-    def OutputIcdExtensionEnableUnion(self):
-        extensions = self.instanceExtensions
-
-        union = ''
-        union += 'union loader_instance_extension_enables {\n'
-        union += '    struct {\n'
-        for ext in extensions:
-            if ('VK_VERSION_' in ext.name or ext.name in WSI_EXT_NAMES or
-                ext.type == 'device' or ext.num_commands == 0):
-                continue
-
-            union += '        uint8_t %s : 1;\n' % ext.name[3:].lower()
-
-        union += '    };\n'
-        union += '    uint64_t padding[4];\n'
-        union += '};\n\n'
-        return union
-
-    #
-    # Creates the prototypes for the loader's core instance command terminators
-    def OutputLoaderTerminators(self):
-        terminators = ''
-        terminators += '// Loader core instance terminators\n'
-
-        for cur_cmd in self.core_commands:
-            is_inst_handle_type = cur_cmd.name in ADD_INST_CMDS or cur_cmd.handle_type == 'VkInstance' or cur_cmd.handle_type == 'VkPhysicalDevice'
-            if is_inst_handle_type:
-                mod_string = ''
-                new_terminator = cur_cmd.cdecl
-                mod_string = new_terminator.replace("VKAPI_CALL vk", "VKAPI_CALL terminator_")
-
-                if cur_cmd.name in PRE_INSTANCE_FUNCTIONS:
-                    mod_string = mod_string.replace(cur_cmd.name[2:] + '(\n', cur_cmd.name[2:] + '(\n    const Vk' + cur_cmd.name[2:] + 'Chain* chain,\n')
-
-                if (cur_cmd.protect != None):
-                    terminators += '#ifdef %s\n' % cur_cmd.protect
-
-                terminators += mod_string
-                terminators += '\n'
-
-                if (cur_cmd.protect != None):
-                    terminators += '#endif // %s\n' % cur_cmd.protect
-
-        terminators += '\n'
-        return terminators
-
-    #
-    # Creates code to initialize the various dispatch tables
-    def OutputLoaderDispatchTables(self):
-        commands = []
-        tables = ''
-        gpa_param = ''
-        cur_type = ''
-        cur_extension_name = ''
-
-        for x in range(0, 4):
-            if x == 0:
-                cur_type = 'device'
-                gpa_param = 'dev'
-                commands = self.core_commands
-
-                tables += '// Init Device function pointer dispatch table with core commands\n'
-                tables += 'VKAPI_ATTR void VKAPI_CALL loader_init_device_dispatch_table(struct loader_dev_dispatch_table *dev_table, PFN_vkGetDeviceProcAddr gpa,\n'
-                tables += '                                                             VkDevice dev) {\n'
-                tables += '    VkLayerDispatchTable *table = &dev_table->core_dispatch;\n'
-                tables += '    for (uint32_t i = 0; i < MAX_NUM_UNKNOWN_EXTS; i++) dev_table->ext_dispatch.dev_ext[i] = (PFN_vkDevExt)vkDevExtError;\n'
-
-            elif x == 1:
-                cur_type = 'device'
-                gpa_param = 'dev'
-                commands = self.ext_commands
-
-                tables += '// Init Device function pointer dispatch table with extension commands\n'
-                tables += 'VKAPI_ATTR void VKAPI_CALL loader_init_device_extension_dispatch_table(struct loader_dev_dispatch_table *dev_table,\n'
-                tables += '                                                                       PFN_vkGetDeviceProcAddr gpa, VkDevice dev) {\n'
-                tables += '    VkLayerDispatchTable *table = &dev_table->core_dispatch;\n'
-
-            elif x == 2:
-                cur_type = 'instance'
-                gpa_param = 'inst'
-                commands = self.core_commands
-
-                tables += '// Init Instance function pointer dispatch table with core commands\n'
-                tables += 'VKAPI_ATTR void VKAPI_CALL loader_init_instance_core_dispatch_table(VkLayerInstanceDispatchTable *table, PFN_vkGetInstanceProcAddr gpa,\n'
-                tables += '                                                                    VkInstance inst) {\n'
-
-            else:
-                cur_type = 'instance'
-                gpa_param = 'inst'
-                commands = self.ext_commands
-
-                tables += '// Init Instance function pointer dispatch table with core commands\n'
-                tables += 'VKAPI_ATTR void VKAPI_CALL loader_init_instance_extension_dispatch_table(VkLayerInstanceDispatchTable *table, PFN_vkGetInstanceProcAddr gpa,\n'
-                tables += '                                                                        VkInstance inst) {\n'
-
-            for cur_cmd in commands:
-                is_inst_handle_type = cur_cmd.handle_type == 'VkInstance' or cur_cmd.handle_type == 'VkPhysicalDevice'
-                if ((cur_type == 'instance' and is_inst_handle_type) or (cur_type == 'device' and not is_inst_handle_type)):
-                    if cur_cmd.ext_name != cur_extension_name:
-                        if 'VK_VERSION_' in cur_cmd.ext_name:
-                            tables += '\n    // ---- Core %s commands\n' % cur_cmd.ext_name[11:]
-                        else:
-                            tables += '\n    // ---- %s extension commands\n' % cur_cmd.ext_name
-                        cur_extension_name = cur_cmd.ext_name
-
-                    # Remove 'vk' from proto name
-                    base_name = cur_cmd.name[2:]
-
-                    # Names to skip
-                    if (base_name == 'CreateInstance' or base_name == 'CreateDevice' or
-                        base_name == 'EnumerateInstanceExtensionProperties' or
-                        base_name == 'EnumerateInstanceLayerProperties' or
-                        base_name == 'EnumerateInstanceVersion'):
-                        continue
-
-                    if cur_cmd.protect is not None:
-                        tables += '#ifdef %s\n' % cur_cmd.protect
-
-                    # If we're looking for the proc we are passing in, just point the table to it.  This fixes the issue where
-                    # a layer overrides the function name for the loader.
-                    if (x <= 1 and base_name == 'GetDeviceProcAddr'):
-                        tables += '    table->GetDeviceProcAddr = gpa;\n'
-                    elif (x > 1 and base_name == 'GetInstanceProcAddr'):
-                        tables += '    table->GetInstanceProcAddr = gpa;\n'
-                    else:
-                        tables += '    table->%s = (PFN_%s)gpa(%s, "%s");\n' % (base_name, cur_cmd.name, gpa_param, cur_cmd.name)
-
-                    if cur_cmd.protect is not None:
-                        tables += '#endif // %s\n' % cur_cmd.protect
-
-            tables += '}\n\n'
-        return tables
-
-    #
-    # Create a lookup table function from the appropriate list of entrypoints and
-    # return it as a string
-    def OutputLoaderLookupFunc(self):
-        commands = []
-        tables = ''
-        cur_type = ''
-        cur_extension_name = ''
-
-        for x in range(0, 2):
-            if x == 0:
-                cur_type = 'device'
-
-                tables += '// Device command lookup function\n'
-                tables += 'VKAPI_ATTR void* VKAPI_CALL loader_lookup_device_dispatch_table(const VkLayerDispatchTable *table, const char *name) {\n'
-                tables += '    if (!name || name[0] != \'v\' || name[1] != \'k\') return NULL;\n'
-                tables += '\n'
-                tables += '    name += 2;\n'
-            else:
-                cur_type = 'instance'
-
-                tables += '// Instance command lookup function\n'
-                tables += 'VKAPI_ATTR void* VKAPI_CALL loader_lookup_instance_dispatch_table(const VkLayerInstanceDispatchTable *table, const char *name,\n'
-                tables += '                                                                 bool *found_name) {\n'
-                tables += '    if (!name || name[0] != \'v\' || name[1] != \'k\') {\n'
-                tables += '        *found_name = false;\n'
-                tables += '        return NULL;\n'
-                tables += '    }\n'
-                tables += '\n'
-                tables += '    *found_name = true;\n'
-                tables += '    name += 2;\n'
-
-            for y in range(0, 2):
-                if y == 0:
-                    commands = self.core_commands
-                else:
-                    commands = self.ext_commands
-
-                for cur_cmd in commands:
-                    is_inst_handle_type = cur_cmd.handle_type == 'VkInstance' or cur_cmd.handle_type == 'VkPhysicalDevice'
-                    if ((cur_type == 'instance' and is_inst_handle_type) or (cur_type == 'device' and not is_inst_handle_type)):
-
-                        if cur_cmd.ext_name != cur_extension_name:
-                            if 'VK_VERSION_' in cur_cmd.ext_name:
-                                tables += '\n    // ---- Core %s commands\n' % cur_cmd.ext_name[11:]
-                            else:
-                                tables += '\n    // ---- %s extension commands\n' % cur_cmd.ext_name
-                            cur_extension_name = cur_cmd.ext_name
-
-                        # Remove 'vk' from proto name
-                        base_name = cur_cmd.name[2:]
-
-                        if (base_name == 'CreateInstance' or base_name == 'CreateDevice' or
-                            base_name == 'EnumerateInstanceExtensionProperties' or
-                            base_name == 'EnumerateInstanceLayerProperties' or
-                            base_name == 'EnumerateInstanceVersion'):
-                            continue
-
-                        if cur_cmd.protect is not None:
-                            tables += '#ifdef %s\n' % cur_cmd.protect
-
-                        tables += '    if (!strcmp(name, "%s")) return (void *)table->%s;\n' % (base_name, base_name)
-
-                        if cur_cmd.protect is not None:
-                            tables += '#endif // %s\n' % cur_cmd.protect
-
-            tables += '\n'
-            if x == 1:
-                tables += '    *found_name = false;\n'
-            tables += '    return NULL;\n'
-            tables += '}\n\n'
-        return tables
-
-    #
-    # Create the appropriate trampoline (and possibly terminator) functinos
-    def CreateTrampTermFuncs(self):
-        entries = []
-        funcs = ''
-        cur_extension_name = ''
-
-        # Some extensions have to be manually added.  Skip those in the automatic
-        # generation.  They will be manually added later.
-        manual_ext_commands = ['vkEnumeratePhysicalDeviceGroupsKHR',
-                               'vkGetPhysicalDeviceExternalImageFormatPropertiesNV',
-                               'vkGetPhysicalDeviceFeatures2KHR',
-                               'vkGetPhysicalDeviceProperties2KHR',
-                               'vkGetPhysicalDeviceFormatProperties2KHR',
-                               'vkGetPhysicalDeviceImageFormatProperties2KHR',
-                               'vkGetPhysicalDeviceQueueFamilyProperties2KHR',
-                               'vkGetPhysicalDeviceMemoryProperties2KHR',
-                               'vkGetPhysicalDeviceSparseImageFormatProperties2KHR',
-                               'vkGetPhysicalDeviceSurfaceCapabilities2KHR',
-                               'vkGetPhysicalDeviceSurfaceFormats2KHR',
-                               'vkGetPhysicalDeviceSurfaceCapabilities2EXT',
-                               'vkReleaseDisplayEXT',
-                               'vkAcquireXlibDisplayEXT',
-                               'vkGetRandROutputDisplayEXT',
-                               'vkGetPhysicalDeviceExternalBufferPropertiesKHR',
-                               'vkGetPhysicalDeviceExternalSemaphorePropertiesKHR',
-                               'vkGetPhysicalDeviceExternalFencePropertiesKHR']
-
-        for ext_cmd in self.ext_commands:
-            if (ext_cmd.ext_name in WSI_EXT_NAMES or
-                ext_cmd.ext_name in AVOID_EXT_NAMES or
-                ext_cmd.name in AVOID_CMD_NAMES or
-                ext_cmd.name in manual_ext_commands):
-                continue
-
-            if ext_cmd.ext_name != cur_extension_name:
-                if 'VK_VERSION_' in ext_cmd.ext_name:
-                    funcs += '\n// ---- Core %s trampoline/terminators\n\n' % ext_cmd.ext_name[11:]
-                else:
-                    funcs += '\n// ---- %s extension trampoline/terminators\n\n' % ext_cmd.ext_name
-                cur_extension_name = ext_cmd.ext_name
-
-            if ext_cmd.protect is not None:
-                funcs += '#ifdef %s\n' % ext_cmd.protect
-
-            func_header = ext_cmd.cdecl.replace(";", " {\n")
-            tramp_header = func_header.replace("VKAPI_CALL vk", "VKAPI_CALL ")
-            return_prefix = '    '
-            base_name = ext_cmd.name[2:]
-            has_surface = 0
-            update_structure_surface = 0
-            update_structure_string = ''
-            requires_terminator = 0
-            surface_var_name = ''
-            phys_dev_var_name = ''
-            has_return_type = False
-            always_use_param_name = True
-            surface_type_to_replace = ''
-            surface_name_replacement = ''
-            physdev_type_to_replace = ''
-            physdev_name_replacement = ''
-
-            for param in ext_cmd.params:
-                if param.type == 'VkSurfaceKHR':
-                    has_surface = 1
-                    surface_var_name = param.name
-                    requires_terminator = 1
-                    always_use_param_name = False
-                    surface_type_to_replace = 'VkSurfaceKHR'
-                    surface_name_replacement = 'icd_surface->real_icd_surfaces[icd_index]'
-                if param.type == 'VkPhysicalDeviceSurfaceInfo2KHR':
-                    has_surface = 1
-                    surface_var_name = param.name + '->surface'
-                    requires_terminator = 1
-                    update_structure_surface = 1
-                    update_structure_string = '        VkPhysicalDeviceSurfaceInfo2KHR info_copy = *pSurfaceInfo;\n'
-                    update_structure_string += '        info_copy.surface = icd_surface->real_icd_surfaces[icd_index];\n'
-                    always_use_param_name = False
-                    surface_type_to_replace = 'VkPhysicalDeviceSurfaceInfo2KHR'
-                    surface_name_replacement = '&info_copy'
-                if param.type == 'VkPhysicalDevice':
-                    requires_terminator = 1
-                    phys_dev_var_name = param.name
-                    always_use_param_name = False
-                    physdev_type_to_replace = 'VkPhysicalDevice'
-                    physdev_name_replacement = 'phys_dev_term->phys_dev'
-
-            if (ext_cmd.return_type != None):
-                return_prefix += 'return '
-                has_return_type = True
-
-            if (ext_cmd.handle_type == 'VkInstance' or ext_cmd.handle_type == 'VkPhysicalDevice' or
-                'DebugMarkerSetObject' in ext_cmd.name or 'SetDebugUtilsObject' in ext_cmd.name or
-                ext_cmd.name in DEVICE_CMDS_NEED_TERM):
-                requires_terminator = 1
-
-            if requires_terminator == 1:
-                term_header = tramp_header.replace("VKAPI_CALL ", "VKAPI_CALL terminator_")
-
-                funcs += tramp_header
-
-                if ext_cmd.handle_type == 'VkPhysicalDevice':
-                    funcs += '    const VkLayerInstanceDispatchTable *disp;\n'
-                    funcs += '    VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(%s);\n' % (phys_dev_var_name)
-                    funcs += '    disp = loader_get_instance_layer_dispatch(%s);\n' % (phys_dev_var_name)
-                elif ext_cmd.handle_type == 'VkInstance':
-                    funcs += '#error("Not implemented. Likely needs to be manually generated!");\n'
-                else:
-                    funcs += '    const VkLayerDispatchTable *disp = loader_get_dispatch('
-                    funcs += ext_cmd.params[0].name
-                    funcs += ');\n'
-
-                if 'DebugMarkerSetObjectName' in ext_cmd.name:
-                    funcs += '    VkDebugMarkerObjectNameInfoEXT local_name_info;\n'
-                    funcs += '    memcpy(&local_name_info, pNameInfo, sizeof(VkDebugMarkerObjectNameInfoEXT));\n'
-                    funcs += '    // If this is a physical device, we have to replace it with the proper one for the next call.\n'
-                    funcs += '    if (pNameInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT) {\n'
-                    funcs += '        struct loader_physical_device_tramp *phys_dev_tramp = (struct loader_physical_device_tramp *)(uintptr_t)pNameInfo->object;\n'
-                    funcs += '        local_name_info.object = (uint64_t)(uintptr_t)phys_dev_tramp->phys_dev;\n'
-                    funcs += '    }\n'
-                elif 'DebugMarkerSetObjectTag' in ext_cmd.name:
-                    funcs += '    VkDebugMarkerObjectTagInfoEXT local_tag_info;\n'
-                    funcs += '    memcpy(&local_tag_info, pTagInfo, sizeof(VkDebugMarkerObjectTagInfoEXT));\n'
-                    funcs += '    // If this is a physical device, we have to replace it with the proper one for the next call.\n'
-                    funcs += '    if (pTagInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT) {\n'
-                    funcs += '        struct loader_physical_device_tramp *phys_dev_tramp = (struct loader_physical_device_tramp *)(uintptr_t)pTagInfo->object;\n'
-                    funcs += '        local_tag_info.object = (uint64_t)(uintptr_t)phys_dev_tramp->phys_dev;\n'
-                    funcs += '    }\n'
-                elif 'SetDebugUtilsObjectName' in ext_cmd.name:
-                    funcs += '    VkDebugUtilsObjectNameInfoEXT local_name_info;\n'
-                    funcs += '    memcpy(&local_name_info, pNameInfo, sizeof(VkDebugUtilsObjectNameInfoEXT));\n'
-                    funcs += '    // If this is a physical device, we have to replace it with the proper one for the next call.\n'
-                    funcs += '    if (pNameInfo->objectType == VK_OBJECT_TYPE_PHYSICAL_DEVICE) {\n'
-                    funcs += '        struct loader_physical_device_tramp *phys_dev_tramp = (struct loader_physical_device_tramp *)(uintptr_t)pNameInfo->objectHandle;\n'
-                    funcs += '        local_name_info.objectHandle = (uint64_t)(uintptr_t)phys_dev_tramp->phys_dev;\n'
-                    funcs += '    }\n'
-                elif 'SetDebugUtilsObjectTag' in ext_cmd.name:
-                    funcs += '    VkDebugUtilsObjectTagInfoEXT local_tag_info;\n'
-                    funcs += '    memcpy(&local_tag_info, pTagInfo, sizeof(VkDebugUtilsObjectTagInfoEXT));\n'
-                    funcs += '    // If this is a physical device, we have to replace it with the proper one for the next call.\n'
-                    funcs += '    if (pTagInfo->objectType == VK_OBJECT_TYPE_PHYSICAL_DEVICE) {\n'
-                    funcs += '        struct loader_physical_device_tramp *phys_dev_tramp = (struct loader_physical_device_tramp *)(uintptr_t)pTagInfo->objectHandle;\n'
-                    funcs += '        local_tag_info.objectHandle = (uint64_t)(uintptr_t)phys_dev_tramp->phys_dev;\n'
-                    funcs += '    }\n'
-
-                funcs += return_prefix
-                funcs += 'disp->'
-                funcs += base_name
-                funcs += '('
-                count = 0
-                for param in ext_cmd.params:
-                    if count != 0:
-                        funcs += ', '
-
-                    if param.type == 'VkPhysicalDevice':
-                        funcs += 'unwrapped_phys_dev'
-                    elif ('DebugMarkerSetObject' in ext_cmd.name or 'SetDebugUtilsObject' in ext_cmd.name) and param.name == 'pNameInfo':
-                            funcs += '&local_name_info'
-                    elif ('DebugMarkerSetObject' in ext_cmd.name or 'SetDebugUtilsObject' in ext_cmd.name) and param.name == 'pTagInfo':
-                            funcs += '&local_tag_info'
-                    else:
-                        funcs += param.name
-
-                    count += 1
-                funcs += ');\n'
-                funcs += '}\n\n'
-
-                funcs += term_header
-                if ext_cmd.handle_type == 'VkPhysicalDevice':
-                    funcs += '    struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)%s;\n' % (phys_dev_var_name)
-                    funcs += '    struct loader_icd_term *icd_term = phys_dev_term->this_icd_term;\n'
-                    funcs += '    if (NULL == icd_term->dispatch.'
-                    funcs += base_name
-                    funcs += ') {\n'
-                    funcs += '        loader_log(icd_term->this_instance, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0,\n'
-                    funcs += '                   "ICD associated with VkPhysicalDevice does not support '
-                    funcs += base_name
-                    funcs += '");\n'
-                    funcs += '    }\n'
-
-                    if has_surface == 1:
-                        funcs += '    VkIcdSurface *icd_surface = (VkIcdSurface *)(%s);\n' % (surface_var_name)
-                        funcs += '    uint8_t icd_index = phys_dev_term->icd_index;\n'
-                        funcs += '    if (NULL != icd_surface->real_icd_surfaces && NULL != (void *)icd_surface->real_icd_surfaces[icd_index]) {\n'
-
-                        # If there's a structure with a surface, we need to update its internals with the correct surface for the ICD
-                        if update_structure_surface == 1:
-                            funcs += update_structure_string
-
-                        funcs += '    ' + return_prefix + 'icd_term->dispatch.'
-                        funcs += base_name
-                        funcs += '('
-                        count = 0
-                        for param in ext_cmd.params:
-                            if count != 0:
-                                funcs += ', '
-
-                            if not always_use_param_name:
-                                if surface_type_to_replace and surface_type_to_replace == param.type:
-                                    funcs += surface_name_replacement
-                                elif physdev_type_to_replace and physdev_type_to_replace == param.type:
-                                    funcs += physdev_name_replacement
-                                else:
-                                    funcs += param.name
-                            else:
-                                funcs += param.name
-
-                            count += 1
-                        funcs += ');\n'
-                        if not has_return_type:
-                            funcs += '        return;\n'
-                        funcs += '    }\n'
-
-                    funcs += return_prefix
-                    funcs += 'icd_term->dispatch.'
-                    funcs += base_name
-                    funcs += '('
-                    count = 0
-                    for param in ext_cmd.params:
-                        if count != 0:
-                            funcs += ', '
-
-                        if param.type == 'VkPhysicalDevice':
-                            funcs += 'phys_dev_term->phys_dev'
-                        else:
-                            funcs += param.name
-
-                        count += 1
-                    funcs += ');\n'
-
-                elif has_surface == 1 and not (ext_cmd.handle_type == 'VkPhysicalDevice' or ext_cmd.handle_type == 'VkInstance'):
-                    funcs += '    uint32_t icd_index = 0;\n'
-                    funcs += '    struct loader_device *dev;\n'
-                    funcs += '    struct loader_icd_term *icd_term = loader_get_icd_and_device(device, &dev, &icd_index);\n'
-                    funcs += '    if (NULL != icd_term && NULL != icd_term->dispatch.%s) {\n' % base_name
-                    funcs += '        VkIcdSurface *icd_surface = (VkIcdSurface *)(uintptr_t)%s;\n' % (surface_var_name)
-                    funcs += '        if (NULL != icd_surface->real_icd_surfaces && (VkSurfaceKHR)NULL != icd_surface->real_icd_surfaces[icd_index]) {\n'
-                    funcs += '        %sicd_term->dispatch.%s(' % (return_prefix, base_name)
-                    count = 0
-                    for param in ext_cmd.params:
-                        if count != 0:
-                            funcs += ', '
-
-                        if param.type == 'VkSurfaceKHR':
-                            funcs += 'icd_surface->real_icd_surfaces[icd_index]'
-                        else:
-                            funcs += param.name
-
-                        count += 1
-                    funcs += ');\n'
-                    if not has_return_type:
-                        funcs += '                return;\n'
-                    funcs += '        }\n'
-                    funcs += '    %sicd_term->dispatch.%s(' % (return_prefix, base_name)
-                    count = 0
-                    for param in ext_cmd.params:
-                        if count != 0:
-                            funcs += ', '
-                        funcs += param.name
-                        count += 1
-                    funcs += ');\n'
-                    funcs += '    }\n'
-                    if has_return_type:
-                        funcs += '    return VK_SUCCESS;\n'
-
-                elif ext_cmd.handle_type == 'VkInstance':
-                    funcs += '#error("Not implemented. Likely needs to be manually generated!");\n'
-                elif 'DebugMarkerSetObject' in ext_cmd.name or 'SetDebugUtilsObject' in ext_cmd.name:
-                    funcs += '    uint32_t icd_index = 0;\n'
-                    funcs += '    struct loader_device *dev;\n'
-                    funcs += '    struct loader_icd_term *icd_term = loader_get_icd_and_device(%s, &dev, &icd_index);\n' % (ext_cmd.params[0].name)
-                    funcs += '    if (NULL != icd_term && NULL != icd_term->dispatch.'
-                    funcs += base_name
-                    funcs += ') {\n'
-                    if 'DebugMarkerSetObjectName' in ext_cmd.name:
-                        funcs += '        VkDebugMarkerObjectNameInfoEXT local_name_info;\n'
-                        funcs += '        memcpy(&local_name_info, pNameInfo, sizeof(VkDebugMarkerObjectNameInfoEXT));\n'
-                        funcs += '        // If this is a physical device, we have to replace it with the proper one for the next call.\n'
-                        funcs += '        if (pNameInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT) {\n'
-                        funcs += '            struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)(uintptr_t)pNameInfo->object;\n'
-                        funcs += '            local_name_info.object = (uint64_t)(uintptr_t)phys_dev_term->phys_dev;\n'
-                        funcs += '        // If this is a KHR_surface, and the ICD has created its own, we have to replace it with the proper one for the next call.\n'
-                        funcs += '        } else if (pNameInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT) {\n'
-                        funcs += '            if (NULL != icd_term && NULL != icd_term->dispatch.CreateSwapchainKHR) {\n'
-                        funcs += '                VkIcdSurface *icd_surface = (VkIcdSurface *)(uintptr_t)pNameInfo->object;\n'
-                        funcs += '                if (NULL != icd_surface->real_icd_surfaces) {\n'
-                        funcs += '                    local_name_info.object = (uint64_t)icd_surface->real_icd_surfaces[icd_index];\n'
-                        funcs += '                }\n'
-                    elif 'DebugMarkerSetObjectTag' in ext_cmd.name:
-                        funcs += '        VkDebugMarkerObjectTagInfoEXT local_tag_info;\n'
-                        funcs += '        memcpy(&local_tag_info, pTagInfo, sizeof(VkDebugMarkerObjectTagInfoEXT));\n'
-                        funcs += '        // If this is a physical device, we have to replace it with the proper one for the next call.\n'
-                        funcs += '        if (pTagInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT) {\n'
-                        funcs += '            struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)(uintptr_t)pTagInfo->object;\n'
-                        funcs += '            local_tag_info.object = (uint64_t)(uintptr_t)phys_dev_term->phys_dev;\n'
-                        funcs += '        // If this is a KHR_surface, and the ICD has created its own, we have to replace it with the proper one for the next call.\n'
-                        funcs += '        } else if (pTagInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT) {\n'
-                        funcs += '            if (NULL != icd_term && NULL != icd_term->dispatch.CreateSwapchainKHR) {\n'
-                        funcs += '                VkIcdSurface *icd_surface = (VkIcdSurface *)(uintptr_t)pTagInfo->object;\n'
-                        funcs += '                if (NULL != icd_surface->real_icd_surfaces) {\n'
-                        funcs += '                    local_tag_info.object = (uint64_t)icd_surface->real_icd_surfaces[icd_index];\n'
-                        funcs += '                }\n'
-                    elif 'SetDebugUtilsObjectName' in ext_cmd.name:
-                        funcs += '        VkDebugUtilsObjectNameInfoEXT local_name_info;\n'
-                        funcs += '        memcpy(&local_name_info, pNameInfo, sizeof(VkDebugUtilsObjectNameInfoEXT));\n'
-                        funcs += '        // If this is a physical device, we have to replace it with the proper one for the next call.\n'
-                        funcs += '        if (pNameInfo->objectType == VK_OBJECT_TYPE_PHYSICAL_DEVICE) {\n'
-                        funcs += '            struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)(uintptr_t)pNameInfo->objectHandle;\n'
-                        funcs += '            local_name_info.objectHandle = (uint64_t)(uintptr_t)phys_dev_term->phys_dev;\n'
-                        funcs += '        // If this is a KHR_surface, and the ICD has created its own, we have to replace it with the proper one for the next call.\n'
-                        funcs += '        } else if (pNameInfo->objectType == VK_OBJECT_TYPE_SURFACE_KHR) {\n'
-                        funcs += '            if (NULL != icd_term && NULL != icd_term->dispatch.CreateSwapchainKHR) {\n'
-                        funcs += '                VkIcdSurface *icd_surface = (VkIcdSurface *)(uintptr_t)pNameInfo->objectHandle;\n'
-                        funcs += '                if (NULL != icd_surface->real_icd_surfaces) {\n'
-                        funcs += '                    local_name_info.objectHandle = (uint64_t)icd_surface->real_icd_surfaces[icd_index];\n'
-                        funcs += '                }\n'
-                    elif 'SetDebugUtilsObjectTag' in ext_cmd.name:
-                        funcs += '        VkDebugUtilsObjectTagInfoEXT local_tag_info;\n'
-                        funcs += '        memcpy(&local_tag_info, pTagInfo, sizeof(VkDebugUtilsObjectTagInfoEXT));\n'
-                        funcs += '        // If this is a physical device, we have to replace it with the proper one for the next call.\n'
-                        funcs += '        if (pTagInfo->objectType == VK_OBJECT_TYPE_PHYSICAL_DEVICE) {\n'
-                        funcs += '            struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)(uintptr_t)pTagInfo->objectHandle;\n'
-                        funcs += '            local_tag_info.objectHandle = (uint64_t)(uintptr_t)phys_dev_term->phys_dev;\n'
-                        funcs += '        // If this is a KHR_surface, and the ICD has created its own, we have to replace it with the proper one for the next call.\n'
-                        funcs += '        } else if (pTagInfo->objectType == VK_OBJECT_TYPE_SURFACE_KHR) {\n'
-                        funcs += '            if (NULL != icd_term && NULL != icd_term->dispatch.CreateSwapchainKHR) {\n'
-                        funcs += '                VkIcdSurface *icd_surface = (VkIcdSurface *)(uintptr_t)pTagInfo->objectHandle;\n'
-                        funcs += '                if (NULL != icd_surface->real_icd_surfaces) {\n'
-                        funcs += '                    local_tag_info.objectHandle = (uint64_t)icd_surface->real_icd_surfaces[icd_index];\n'
-                        funcs += '                }\n'
-                    else:
-                        funcs += '        if (%s->objectType == VK_OBJECT_TYPE_PHYSICAL_DEVICE) {\n' % (ext_cmd.params[1].name)
-                        funcs += '            struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)(uintptr_t)%s->objectHandle;\n' % (ext_cmd.params[1].name)
-                        funcs += '            %s->objectHandle = (uint64_t)(uintptr_t)phys_dev_term->phys_dev;\n' % (ext_cmd.params[1].name)
-                        funcs += '        // If this is a KHR_surface, and the ICD has created its own, we have to replace it with the proper one for the next call.\n'
-                        funcs += '        } else if (%s->objectType == VK_OBJECT_TYPE_SURFACE_KHR) {\n' % (ext_cmd.params[1].name)
-                        funcs += '            if (NULL != icd_term && NULL != icd_term->dispatch.CreateSwapchainKHR) {\n'
-                        funcs += '                VkIcdSurface *icd_surface = (VkIcdSurface *)(uintptr_t)%s->objectHandle;\n' % (ext_cmd.params[1].name)
-                        funcs += '                if (NULL != icd_surface->real_icd_surfaces) {\n'
-                        funcs += '                    %s->objectHandle = (uint64_t)icd_surface->real_icd_surfaces[icd_index];\n' % (ext_cmd.params[1].name)
-                        funcs += '                }\n'
-                    funcs += '            }\n'
-                    funcs += '        }\n'
-                    funcs += '        return icd_term->dispatch.'
-                    funcs += base_name
-                    funcs += '('
-                    count = 0
-                    for param in ext_cmd.params:
-                        if count != 0:
-                            funcs += ', '
-
-                        if param.type == 'VkPhysicalDevice':
-                            funcs += 'phys_dev_term->phys_dev'
-                        elif param.type == 'VkSurfaceKHR':
-                            funcs += 'icd_surface->real_icd_surfaces[icd_index]'
-                        elif ('DebugMarkerSetObject' in ext_cmd.name or 'SetDebugUtilsObject' in ext_cmd.name) and param.name == 'pNameInfo':
-                            funcs += '&local_name_info'
-                        elif ('DebugMarkerSetObject' in ext_cmd.name or 'SetDebugUtilsObject' in ext_cmd.name) and param.name == 'pTagInfo':
-                            funcs += '&local_tag_info'
-                        else:
-                            funcs += param.name
-                        count += 1
-
-                    funcs += ');\n'
-                    funcs += '    } else {\n'
-                    funcs += '        return VK_SUCCESS;\n'
-                    funcs += '    }\n'
-
-                else:
-                    funcs += '#error("Unknown error path!");\n'
-
-                funcs += '}\n\n'
-            else:
-                funcs += tramp_header
-
-                funcs += '    const VkLayerDispatchTable *disp = loader_get_dispatch('
-                funcs += ext_cmd.params[0].name
-                funcs += ');\n'
-
-                funcs += return_prefix
-                funcs += 'disp->'
-                funcs += base_name
-                funcs += '('
-                count = 0
-                for param in ext_cmd.params:
-                    if count != 0:
-                        funcs += ', '
-                    funcs += param.name
-                    count += 1
-                funcs += ');\n'
-                funcs += '}\n\n'
-
-            if ext_cmd.protect is not None:
-                funcs += '#endif // %s\n' % ext_cmd.protect
-
-        return funcs
-
-
-    #
-    # Create a function for the extension GPA call
-    def InstExtensionGPA(self):
-        entries = []
-        gpa_func = ''
-        cur_extension_name = ''
-
-        gpa_func += '// GPA helpers for extensions\n'
-        gpa_func += 'bool extension_instance_gpa(struct loader_instance *ptr_instance, const char *name, void **addr) {\n'
-        gpa_func += '    *addr = NULL;\n\n'
-
-        for cur_cmd in self.ext_commands:
-            if ('VK_VERSION_' in cur_cmd.ext_name or
-                cur_cmd.ext_name in WSI_EXT_NAMES or
-                cur_cmd.ext_name in AVOID_EXT_NAMES or
-                cur_cmd.name in AVOID_CMD_NAMES ):
-                continue
-
-            if cur_cmd.ext_name != cur_extension_name:
-                gpa_func += '\n    // ---- %s extension commands\n' % cur_cmd.ext_name
-                cur_extension_name = cur_cmd.ext_name
-
-            if cur_cmd.protect is not None:
-                gpa_func += '#ifdef %s\n' % cur_cmd.protect
-
-            #base_name = cur_cmd.name[2:]
-            base_name = ALIASED_CMDS[cur_cmd.name] if cur_cmd.name in ALIASED_CMDS else cur_cmd.name[2:]
-
-            if (cur_cmd.ext_type == 'instance'):
-                gpa_func += '    if (!strcmp("%s", name)) {\n' % (cur_cmd.name)
-                gpa_func += '        *addr = (ptr_instance->enabled_known_extensions.'
-                gpa_func += cur_cmd.ext_name[3:].lower()
-                gpa_func += ' == 1)\n'
-                gpa_func += '                     ? (void *)%s\n' % (base_name)
-                gpa_func += '                     : NULL;\n'
-                gpa_func += '        return true;\n'
-                gpa_func += '    }\n'
-            else:
-                gpa_func += '    if (!strcmp("%s", name)) {\n' % (cur_cmd.name)
-                gpa_func += '        *addr = (void *)%s;\n' % (base_name)
-                gpa_func += '        return true;\n'
-                gpa_func += '    }\n'
-
-            if cur_cmd.protect is not None:
-                gpa_func += '#endif // %s\n' % cur_cmd.protect
-
-        gpa_func += '    return false;\n'
-        gpa_func += '}\n\n'
-
-        return gpa_func
-
-    #
-    # Create the extension name init function
-    def InstantExtensionCreate(self):
-        entries = []
-        entries = self.instanceExtensions
-        count = 0
-        cur_extension_name = ''
-
-        create_func = ''
-        create_func += '// A function that can be used to query enabled extensions during a vkCreateInstance call\n'
-        create_func += 'void extensions_create_instance(struct loader_instance *ptr_instance, const VkInstanceCreateInfo *pCreateInfo) {\n'
-        create_func += '    for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) {\n'
-        for ext in entries:
-            if ('VK_VERSION_' in ext.name or ext.name in WSI_EXT_NAMES or
-                ext.name in AVOID_EXT_NAMES or ext.name in AVOID_CMD_NAMES or
-                ext.type == 'device' or ext.num_commands == 0):
-                continue
-
-            if ext.name != cur_extension_name:
-                create_func += '\n    // ---- %s extension commands\n' % ext.name
-                cur_extension_name = ext.name
-
-            if ext.protect is not None:
-                create_func += '#ifdef %s\n' % ext.protect
-            if count == 0:
-                create_func += '        if (0 == strcmp(pCreateInfo->ppEnabledExtensionNames[i], '
-            else:
-                create_func += '        } else if (0 == strcmp(pCreateInfo->ppEnabledExtensionNames[i], '
-
-            create_func += ext.define + ')) {\n'
-            create_func += '            ptr_instance->enabled_known_extensions.'
-            create_func += ext.name[3:].lower()
-            create_func += ' = 1;\n'
-
-            if ext.protect is not None:
-                create_func += '#endif // %s\n' % ext.protect
-            count += 1
-
-        create_func += '        }\n'
-        create_func += '    }\n'
-        create_func += '}\n\n'
-        return create_func
-
-    #
-    # Create code to initialize a dispatch table from the appropriate list of
-    # extension entrypoints and return it as a string
-    def DeviceExtensionGetTerminator(self):
-        term_func = ''
-        cur_extension_name = ''
-
-        term_func += '// Some device commands still need a terminator because the loader needs to unwrap something about them.\n'
-        term_func += '// In many cases, the item needing unwrapping is a VkPhysicalDevice or VkSurfaceKHR object.  But there may be other items\n'
-        term_func += '// in the future.\n'
-        term_func += 'PFN_vkVoidFunction get_extension_device_proc_terminator(struct loader_device *dev, const char *pName) {\n'
-        term_func += '    PFN_vkVoidFunction addr = NULL;\n'
-
-        count = 0
-        is_extension = False
-        for ext_cmd in self.ext_commands:
-            if ext_cmd.name in DEVICE_CMDS_NEED_TERM:
-                if ext_cmd.ext_name != cur_extension_name:
-                    if count > 0:
-                        count = 0;
-                        term_func += '        }\n'
-                    if is_extension:
-                        term_func += '    }\n'
-                        is_extension = False
-
-                    if 'VK_VERSION_' in ext_cmd.ext_name:
-                        term_func += '\n    // ---- Core %s commands\n' % ext_cmd.ext_name[11:]
-                    else:
-                        term_func += '\n    // ---- %s extension commands\n' % ext_cmd.ext_name
-                        term_func += '    if (dev->extensions.%s_enabled) {\n' % ext_cmd.ext_name[3:].lower()
-                        is_extension = True
-                    cur_extension_name = ext_cmd.ext_name
-
-                if ext_cmd.protect is not None:
-                    term_func += '#ifdef %s\n' % ext_cmd.protect
-
-                if count == 0:
-                    term_func += '        if'
-                else:
-                    term_func += '        } else if'
-                term_func += '(!strcmp(pName, "%s")) {\n' % (ext_cmd.name)
-                term_func += '            addr = (PFN_vkVoidFunction)terminator_%s;\n' % (ext_cmd.name[2:])
-
-                if ext_cmd.protect is not None:
-                    term_func += '#endif // %s\n' % ext_cmd.protect
-
-                count += 1
-
-        if count > 0:
-            term_func += '        }\n'
-        if is_extension:
-            term_func += '    }\n'
-
-        term_func += '    return addr;\n'
-        term_func += '}\n\n'
-
-        return term_func
-
-    #
-    # Create code to initialize a dispatch table from the appropriate list of
-    # core and extension entrypoints and return it as a string
-    def InitInstLoaderExtensionDispatchTable(self):
-        commands = []
-        table = ''
-        cur_extension_name = ''
-
-        table += '// This table contains the loader\'s instance dispatch table, which contains\n'
-        table += '// default functions if no instance layers are activated.  This contains\n'
-        table += '// pointers to "terminator functions".\n'
-        table += 'const VkLayerInstanceDispatchTable instance_disp = {\n'
-
-        for x in range(0, 2):
-            if x == 0:
-                commands = self.core_commands
-            else:
-                commands = self.ext_commands
-
-            for cur_cmd in commands:
-                
-                if cur_cmd.handle_type == 'VkInstance' or cur_cmd.handle_type == 'VkPhysicalDevice':
-                    if cur_cmd.ext_name != cur_extension_name:
-                        if 'VK_VERSION_' in cur_cmd.ext_name:
-                            table += '\n    // ---- Core %s commands\n' % cur_cmd.ext_name[11:]
-                        else:
-                            table += '\n    // ---- %s extension commands\n' % cur_cmd.ext_name
-                        cur_extension_name = cur_cmd.ext_name
-
-                    # Remove 'vk' from proto name
-                    base_name = cur_cmd.name[2:]
-                    aliased_name = ALIASED_CMDS[cur_cmd.name][2:] if cur_cmd.name in ALIASED_CMDS else base_name
-
-                    if (base_name == 'CreateInstance' or base_name == 'CreateDevice' or
-                        base_name == 'EnumerateInstanceExtensionProperties' or
-                        base_name == 'EnumerateInstanceLayerProperties' or
-                        base_name == 'EnumerateInstanceVersion'):
-                        continue
-
-                    if cur_cmd.protect is not None:
-                        table += '#ifdef %s\n' % cur_cmd.protect
-
-                    if base_name == 'GetInstanceProcAddr':
-                        table += '    .%s = %s,\n' % (base_name, cur_cmd.name)
-                    else:
-                        table += '    .%s = terminator_%s,\n' % (base_name, aliased_name)
-
-                    if cur_cmd.protect is not None:
-                        table += '#endif // %s\n' % cur_cmd.protect
-        table += '};\n\n'
-
-        return table
-
-    #
-    # Create the extension name whitelist array
-    def OutputInstantExtensionWhitelistArray(self):
-        extensions = self.instanceExtensions
-
-        table = ''
-        table += '// A null-terminated list of all of the instance extensions supported by the loader.\n'
-        table += '// If an instance extension name is not in this list, but it is exported by one or more of the\n'
-        table += '// ICDs detected by the loader, then the extension name not in the list will be filtered out\n'
-        table += '// before passing the list of extensions to the application.\n'
-        table += 'const char *const LOADER_INSTANCE_EXTENSIONS[] = {\n'
-        for ext in extensions:
-            if ext.type == 'device' or 'VK_VERSION_' in ext.name:
-                continue
-
-            if ext.protect is not None:
-                table += '#ifdef %s\n' % ext.protect
-            table += '                                                  '
-            table += ext.define + ',\n'
-
-            if ext.protect is not None:
-                table += '#endif // %s\n' % ext.protect
-        table += '                                                  NULL };\n'
-        return table
-
diff --git a/scripts/object_tracker_generator.py b/scripts/object_tracker_generator.py
deleted file mode 100644
index 96dabc7..0000000
--- a/scripts/object_tracker_generator.py
+++ /dev/null
@@ -1,993 +0,0 @@
-#!/usr/bin/python3 -i
-#
-# Copyright (c) 2015-2017 The Khronos Group Inc.
-# Copyright (c) 2015-2017 Valve Corporation
-# Copyright (c) 2015-2017 LunarG, Inc.
-# Copyright (c) 2015-2017 Google Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# Author: Mark Lobodzinski <mark@lunarg.com>
-
-import os,re,sys,string
-import xml.etree.ElementTree as etree
-from generator import *
-from collections import namedtuple
-from vuid_mapping import *
-from common_codegen import *
-
-# This is a workaround to use a Python 2.7 and 3.x compatible syntax.
-from io import open
-
-# ObjectTrackerGeneratorOptions - subclass of GeneratorOptions.
-#
-# Adds options used by ObjectTrackerOutputGenerator objects during
-# object_tracker layer generation.
-#
-# Additional members
-#   prefixText - list of strings to prefix generated header with
-#     (usually a copyright statement + calling convention macros).
-#   protectFile - True if multiple inclusion protection should be
-#     generated (based on the filename) around the entire header.
-#   protectFeature - True if #ifndef..#endif protection should be
-#     generated around a feature interface in the header file.
-#   genFuncPointers - True if function pointer typedefs should be
-#     generated
-#   protectProto - If conditional protection should be generated
-#     around prototype declarations, set to either '#ifdef'
-#     to require opt-in (#ifdef protectProtoStr) or '#ifndef'
-#     to require opt-out (#ifndef protectProtoStr). Otherwise
-#     set to None.
-#   protectProtoStr - #ifdef/#ifndef symbol to use around prototype
-#     declarations, if protectProto is set
-#   apicall - string to use for the function declaration prefix,
-#     such as APICALL on Windows.
-#   apientry - string to use for the calling convention macro,
-#     in typedefs, such as APIENTRY.
-#   apientryp - string to use for the calling convention macro
-#     in function pointer typedefs, such as APIENTRYP.
-#   indentFuncProto - True if prototype declarations should put each
-#     parameter on a separate line
-#   indentFuncPointer - True if typedefed function pointers should put each
-#     parameter on a separate line
-#   alignFuncParam - if nonzero and parameters are being put on a
-#     separate line, align parameter names at the specified column
-class ObjectTrackerGeneratorOptions(GeneratorOptions):
-    def __init__(self,
-                 filename = None,
-                 directory = '.',
-                 apiname = None,
-                 profile = None,
-                 versions = '.*',
-                 emitversions = '.*',
-                 defaultExtensions = None,
-                 addExtensions = None,
-                 removeExtensions = None,
-                 emitExtensions = None,
-                 sortProcedure = regSortFeatures,
-                 prefixText = "",
-                 genFuncPointers = True,
-                 protectFile = True,
-                 protectFeature = True,
-                 apicall = '',
-                 apientry = '',
-                 apientryp = '',
-                 indentFuncProto = True,
-                 indentFuncPointer = False,
-                 alignFuncParam = 0,
-                 expandEnumerants = True):
-        GeneratorOptions.__init__(self, filename, directory, apiname, profile,
-                                  versions, emitversions, defaultExtensions,
-                                  addExtensions, removeExtensions, emitExtensions, sortProcedure)
-        self.prefixText      = prefixText
-        self.genFuncPointers = genFuncPointers
-        self.protectFile     = protectFile
-        self.protectFeature  = protectFeature
-        self.apicall         = apicall
-        self.apientry        = apientry
-        self.apientryp       = apientryp
-        self.indentFuncProto = indentFuncProto
-        self.indentFuncPointer = indentFuncPointer
-        self.alignFuncParam  = alignFuncParam
-        self.expandEnumerants = expandEnumerants
-
-
-# ObjectTrackerOutputGenerator - subclass of OutputGenerator.
-# Generates object_tracker layer object validation code
-#
-# ---- methods ----
-# ObjectTrackerOutputGenerator(errFile, warnFile, diagFile) - args as for OutputGenerator. Defines additional internal state.
-# ---- methods overriding base class ----
-# beginFile(genOpts)
-# endFile()
-# beginFeature(interface, emit)
-# endFeature()
-# genCmd(cmdinfo)
-# genStruct()
-# genType()
-class ObjectTrackerOutputGenerator(OutputGenerator):
-    """Generate ObjectTracker code based on XML element attributes"""
-    # This is an ordered list of sections in the header file.
-    ALL_SECTIONS = ['command']
-    def __init__(self,
-                 errFile = sys.stderr,
-                 warnFile = sys.stderr,
-                 diagFile = sys.stdout):
-        OutputGenerator.__init__(self, errFile, warnFile, diagFile)
-        self.INDENT_SPACES = 4
-        self.intercepts = []
-        self.instance_extensions = []
-        self.device_extensions = []
-        # Commands which are not autogenerated but still intercepted
-        self.no_autogen_list = [
-            'vkDestroyInstance',
-            'vkDestroyDevice',
-            'vkUpdateDescriptorSets',
-            'vkDestroyDebugReportCallbackEXT',
-            'vkDebugReportMessageEXT',
-            'vkGetPhysicalDeviceQueueFamilyProperties',
-            'vkFreeCommandBuffers',
-            'vkDestroySwapchainKHR',
-            'vkDestroyDescriptorPool',
-            'vkDestroyCommandPool',
-            'vkGetPhysicalDeviceQueueFamilyProperties2',
-            'vkGetPhysicalDeviceQueueFamilyProperties2KHR',
-            'vkResetDescriptorPool',
-            'vkBeginCommandBuffer',
-            'vkCreateDebugReportCallbackEXT',
-            'vkEnumerateInstanceLayerProperties',
-            'vkEnumerateDeviceLayerProperties',
-            'vkEnumerateInstanceExtensionProperties',
-            'vkEnumerateDeviceExtensionProperties',
-            'vkCreateDevice',
-            'vkCreateInstance',
-            'vkEnumeratePhysicalDevices',
-            'vkAllocateCommandBuffers',
-            'vkAllocateDescriptorSets',
-            'vkFreeDescriptorSets',
-            'vkCmdPushDescriptorSetKHR',
-            'vkDebugMarkerSetObjectNameEXT',
-            'vkGetPhysicalDeviceProcAddr',
-            'vkGetDeviceProcAddr',
-            'vkGetInstanceProcAddr',
-            'vkEnumerateInstanceExtensionProperties',
-            'vkEnumerateInstanceLayerProperties',
-            'vkEnumerateDeviceLayerProperties',
-            'vkGetDeviceProcAddr',
-            'vkGetInstanceProcAddr',
-            'vkEnumerateDeviceExtensionProperties',
-            'vk_layerGetPhysicalDeviceProcAddr',
-            'vkNegotiateLoaderLayerInterfaceVersion',
-            'vkCreateComputePipelines',
-            'vkGetDeviceQueue',
-            'vkGetDeviceQueue2',
-            'vkGetSwapchainImagesKHR',
-            'vkCreateDescriptorSetLayout',
-            'vkCreateDebugUtilsMessengerEXT',
-            'vkDestroyDebugUtilsMessengerEXT',
-            'vkSubmitDebugUtilsMessageEXT',
-            'vkSetDebugUtilsObjectNameEXT',
-            'vkSetDebugUtilsObjectTagEXT',
-            'vkQueueBeginDebugUtilsLabelEXT',
-            'vkQueueEndDebugUtilsLabelEXT',
-            'vkQueueInsertDebugUtilsLabelEXT',
-            'vkCmdBeginDebugUtilsLabelEXT',
-            'vkCmdEndDebugUtilsLabelEXT',
-            'vkCmdInsertDebugUtilsLabelEXT',
-            ]
-        # These VUIDS are not implicit, but are best handled in this layer. Codegen for vkDestroy calls will generate a key
-        # which is translated here into a good VU.  Saves ~40 checks.
-        self.manual_vuids = dict()
-        self.manual_vuids = {
-            "fence-compatalloc": "VALIDATION_ERROR_24e008c2",
-            "fence-nullalloc": "VALIDATION_ERROR_24e008c4",
-            "event-compatalloc": "VALIDATION_ERROR_24c008f4",
-            "event-nullalloc": "VALIDATION_ERROR_24c008f6",
-            "buffer-compatalloc": "VALIDATION_ERROR_23c00736",
-            "buffer-nullalloc": "VALIDATION_ERROR_23c00738",
-            "image-compatalloc": "VALIDATION_ERROR_252007d2",
-            "image-nullalloc": "VALIDATION_ERROR_252007d4",
-            "shaderModule-compatalloc": "VALIDATION_ERROR_26a00888",
-            "shaderModule-nullalloc": "VALIDATION_ERROR_26a0088a",
-            "pipeline-compatalloc": "VALIDATION_ERROR_25c005fc",
-            "pipeline-nullalloc": "VALIDATION_ERROR_25c005fe",
-            "sampler-compatalloc": "VALIDATION_ERROR_26600876",
-            "sampler-nullalloc": "VALIDATION_ERROR_26600878",
-            "renderPass-compatalloc": "VALIDATION_ERROR_264006d4",
-            "renderPass-nullalloc": "VALIDATION_ERROR_264006d6",
-            "descriptorUpdateTemplate-compatalloc": "VALIDATION_ERROR_248002c8",
-            "descriptorUpdateTemplate-nullalloc": "VALIDATION_ERROR_248002ca",
-            "imageView-compatalloc": "VALIDATION_ERROR_25400806",
-            "imageView-nullalloc": "VALIDATION_ERROR_25400808",
-            "pipelineCache-compatalloc": "VALIDATION_ERROR_25e00606",
-            "pipelineCache-nullalloc": "VALIDATION_ERROR_25e00608",
-            "pipelineLayout-compatalloc": "VALIDATION_ERROR_26000256",
-            "pipelineLayout-nullalloc": "VALIDATION_ERROR_26000258",
-            "descriptorSetLayout-compatalloc": "VALIDATION_ERROR_24600238",
-            "descriptorSetLayout-nullalloc": "VALIDATION_ERROR_2460023a",
-            "semaphore-compatalloc": "VALIDATION_ERROR_268008e4",
-            "semaphore-nullalloc": "VALIDATION_ERROR_268008e6",
-            "queryPool-compatalloc": "VALIDATION_ERROR_26200634",
-            "queryPool-nullalloc": "VALIDATION_ERROR_26200636",
-            "bufferView-compatalloc": "VALIDATION_ERROR_23e00752",
-            "bufferView-nullalloc": "VALIDATION_ERROR_23e00754",
-            "surface-compatalloc": "VALIDATION_ERROR_26c009e6",
-            "surface-nullalloc": "VALIDATION_ERROR_26c009e8",
-            "framebuffer-compatalloc": "VALIDATION_ERROR_250006fa",
-            "framebuffer-nullalloc": "VALIDATION_ERROR_250006fc",
-           }
-
-        # Commands shadowed by interface functions and are not implemented
-        self.interface_functions = [
-            ]
-        self.headerVersion = None
-        # Internal state - accumulators for different inner block text
-        self.sections = dict([(section, []) for section in self.ALL_SECTIONS])
-        self.cmdMembers = []
-        self.cmd_feature_protect = []  # Save ifdef's for each command
-        self.cmd_info_data = []        # Save the cmdinfo data for validating the handles when processing is complete
-        self.structMembers = []        # List of StructMemberData records for all Vulkan structs
-        self.extension_structs = []    # List of all structs or sister-structs containing handles
-                                       # A sister-struct may contain no handles but shares <validextensionstructs> with one that does
-        self.structTypes = dict()      # Map of Vulkan struct typename to required VkStructureType
-        self.struct_member_dict = dict()
-        # Named tuples to store struct and command data
-        self.StructType = namedtuple('StructType', ['name', 'value'])
-        self.CmdMemberData = namedtuple('CmdMemberData', ['name', 'members'])
-        self.CmdInfoData = namedtuple('CmdInfoData', ['name', 'cmdinfo'])
-        self.CmdExtraProtect = namedtuple('CmdExtraProtect', ['name', 'extra_protect'])
-        self.CommandParam = namedtuple('CommandParam', ['type', 'name', 'ispointer', 'isconst', 'isoptional', 'iscount', 'len', 'extstructs', 'cdecl', 'islocal', 'iscreate', 'isdestroy', 'feature_protect'])
-        self.StructMemberData = namedtuple('StructMemberData', ['name', 'members'])
-        self.object_types = []         # List of all handle types
-        self.valid_vuids = set()       # Set of all valid VUIDs
-        self.vuid_file = None
-        # Cover cases where file is built from scripts directory, Lin/Win, or Android build structure
-        # Set cwd to the script directory to more easily locate the header.
-        previous_dir = os.getcwd()
-        os.chdir(os.path.dirname(sys.argv[0]))
-        vuid_filename_locations = [
-            './vk_validation_error_messages.h',
-            '../layers/vk_validation_error_messages.h',
-            '../../layers/vk_validation_error_messages.h',
-            '../../../layers/vk_validation_error_messages.h',
-            ]
-        for vuid_filename in vuid_filename_locations:
-            if os.path.isfile(vuid_filename):
-                self.vuid_file = open(vuid_filename, "r", encoding="utf8")
-                break
-        if self.vuid_file == None:
-            print("Error: Could not find vk_validation_error_messages.h")
-            sys.exit(1)
-        os.chdir(previous_dir)
-    #
-    # Check if the parameter passed in is optional
-    def paramIsOptional(self, param):
-        # See if the handle is optional
-        isoptional = False
-        # Simple, if it's optional, return true
-        optString = param.attrib.get('optional')
-        if optString:
-            if optString == 'true':
-                isoptional = True
-            elif ',' in optString:
-                opts = []
-                for opt in optString.split(','):
-                    val = opt.strip()
-                    if val == 'true':
-                        opts.append(True)
-                    elif val == 'false':
-                        opts.append(False)
-                    else:
-                        print('Unrecognized len attribute value',val)
-                isoptional = opts
-        if not isoptional:
-            # Matching logic in parameter validation and ValidityOutputGenerator.isHandleOptional
-            optString = param.attrib.get('noautovalidity')
-            if optString and optString == 'true':
-                isoptional = True;
-        return isoptional
-    #
-    # Convert decimal number to 8 digit hexadecimal lower-case representation
-    def IdToHex(self, dec_num):
-        if dec_num > 4294967295:
-            print ("ERROR: Decimal # %d can't be represented in 8 hex digits" % (dec_num))
-            sys.exit()
-        hex_num = hex(dec_num)
-        return hex_num[2:].zfill(8)
-    #
-    # Get VUID identifier from implicit VUID tag
-    def GetVuid(self, vuid_string):
-        if '->' in vuid_string:
-           return "VALIDATION_ERROR_UNDEFINED"
-        vuid_num = self.IdToHex(convertVUID(vuid_string))
-        if vuid_num in self.valid_vuids:
-            vuid = "VALIDATION_ERROR_%s" % vuid_num
-        else:
-            vuid = "VALIDATION_ERROR_UNDEFINED"
-        return vuid
-    #
-    # Increases indent by 4 spaces and tracks it globally
-    def incIndent(self, indent):
-        inc = ' ' * self.INDENT_SPACES
-        if indent:
-            return indent + inc
-        return inc
-    #
-    # Decreases indent by 4 spaces and tracks it globally
-    def decIndent(self, indent):
-        if indent and (len(indent) > self.INDENT_SPACES):
-            return indent[:-self.INDENT_SPACES]
-        return ''
-    #
-    # Override makeProtoName to drop the "vk" prefix
-    def makeProtoName(self, name, tail):
-        return self.genOpts.apientry + name[2:] + tail
-    #
-    # Check if the parameter passed in is a pointer to an array
-    def paramIsArray(self, param):
-        return param.attrib.get('len') is not None
-
-    #
-    # Generate the object tracker undestroyed object validation function
-    def GenReportFunc(self):
-        output_func = ''
-        output_func += 'void ReportUndestroyedObjects(VkDevice device, enum UNIQUE_VALIDATION_ERROR_CODE error_code) {\n'
-        output_func += '    DeviceReportUndestroyedObjects(device, kVulkanObjectTypeCommandBuffer, error_code);\n'
-        for handle in self.object_types:
-            if self.isHandleTypeNonDispatchable(handle):
-                output_func += '    DeviceReportUndestroyedObjects(device, %s, error_code);\n' % (self.GetVulkanObjType(handle))
-        output_func += '}\n'
-        return output_func
-
-    #
-    # Generate the object tracker undestroyed object destruction function
-    def GenDestroyFunc(self):
-        output_func = ''
-        output_func += 'void DestroyUndestroyedObjects(VkDevice device) {\n'
-        output_func += '    DeviceDestroyUndestroyedObjects(device, kVulkanObjectTypeCommandBuffer);\n'
-        for handle in self.object_types:
-            if self.isHandleTypeNonDispatchable(handle):
-                output_func += '    DeviceDestroyUndestroyedObjects(device, %s);\n' % (self.GetVulkanObjType(handle))
-        output_func += '}\n'
-        return output_func
-
-    #
-    # Called at beginning of processing as file is opened
-    def beginFile(self, genOpts):
-        OutputGenerator.beginFile(self, genOpts)
-        # Open vk_validation_error_messages.h file to verify computed VUIDs
-        for line in self.vuid_file:
-            # Grab hex number from enum definition
-            vuid_list = line.split('0x')
-            # If this is a valid enumeration line, remove trailing comma and CR
-            if len(vuid_list) == 2:
-                vuid_num = vuid_list[1][:-2]
-                # Make sure this is a good hex number before adding to set
-                if len(vuid_num) == 8 and all(c in string.hexdigits for c in vuid_num):
-                    self.valid_vuids.add(vuid_num)
-        # File Comment
-        file_comment = '// *** THIS FILE IS GENERATED - DO NOT EDIT ***\n'
-        file_comment += '// See object_tracker_generator.py for modifications\n'
-        write(file_comment, file=self.outFile)
-        # Copyright Statement
-        copyright = ''
-        copyright += '\n'
-        copyright += '/***************************************************************************\n'
-        copyright += ' *\n'
-        copyright += ' * Copyright (c) 2015-2017 The Khronos Group Inc.\n'
-        copyright += ' * Copyright (c) 2015-2017 Valve Corporation\n'
-        copyright += ' * Copyright (c) 2015-2017 LunarG, Inc.\n'
-        copyright += ' * Copyright (c) 2015-2017 Google Inc.\n'
-        copyright += ' *\n'
-        copyright += ' * Licensed under the Apache License, Version 2.0 (the "License");\n'
-        copyright += ' * you may not use this file except in compliance with the License.\n'
-        copyright += ' * You may obtain a copy of the License at\n'
-        copyright += ' *\n'
-        copyright += ' *     http://www.apache.org/licenses/LICENSE-2.0\n'
-        copyright += ' *\n'
-        copyright += ' * Unless required by applicable law or agreed to in writing, software\n'
-        copyright += ' * distributed under the License is distributed on an "AS IS" BASIS,\n'
-        copyright += ' * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n'
-        copyright += ' * See the License for the specific language governing permissions and\n'
-        copyright += ' * limitations under the License.\n'
-        copyright += ' *\n'
-        copyright += ' * Author: Mark Lobodzinski <mark@lunarg.com>\n'
-        copyright += ' *\n'
-        copyright += ' ****************************************************************************/\n'
-        write(copyright, file=self.outFile)
-        # Namespace
-        self.newline()
-        write('#include "object_tracker.h"', file = self.outFile)
-        self.newline()
-        write('namespace object_tracker {', file = self.outFile)
-    #
-    # Now that the data is all collected and complete, generate and output the object validation routines
-    def endFile(self):
-        self.struct_member_dict = dict(self.structMembers)
-        # Generate the list of APIs that might need to handle wrapped extension structs
-        # self.GenerateCommandWrapExtensionList()
-        self.WrapCommands()
-        # Build undestroyed objects reporting function
-        report_func = self.GenReportFunc()
-        self.newline()
-        # Build undestroyed objects destruction function
-        destroy_func = self.GenDestroyFunc()
-        self.newline()
-        write('// ObjectTracker undestroyed objects validation function', file=self.outFile)
-        write('%s' % report_func, file=self.outFile)
-        write('%s' % destroy_func, file=self.outFile)
-        # Actually write the interface to the output file.
-        if (self.emit):
-            self.newline()
-            if (self.featureExtraProtect != None):
-                write('#ifdef', self.featureExtraProtect, file=self.outFile)
-            # Write the object_tracker code to the file
-            if (self.sections['command']):
-                write('\n'.join(self.sections['command']), end=u'', file=self.outFile)
-            if (self.featureExtraProtect != None):
-                write('\n#endif //', self.featureExtraProtect, file=self.outFile)
-            else:
-                self.newline()
-
-        # Record intercepted procedures
-        write('// Map of all APIs to be intercepted by this layer', file=self.outFile)
-        write('const std::unordered_map<std::string, void*> name_to_funcptr_map = {', file=self.outFile)
-        write('\n'.join(self.intercepts), file=self.outFile)
-        write('};\n', file=self.outFile)
-        self.newline()
-        write('} // namespace object_tracker', file=self.outFile)
-        # Finish processing in superclass
-        OutputGenerator.endFile(self)
-    #
-    # Processing point at beginning of each extension definition
-    def beginFeature(self, interface, emit):
-        # Start processing in superclass
-        OutputGenerator.beginFeature(self, interface, emit)
-        self.headerVersion = None
-        self.featureExtraProtect = GetFeatureProtect(interface)
-
-        if self.featureName != 'VK_VERSION_1_0' and self.featureName != 'VK_VERSION_1_1':
-            white_list_entry = []
-            if (self.featureExtraProtect != None):
-                white_list_entry += [ '#ifdef %s' % self.featureExtraProtect ]
-            white_list_entry += [ '"%s"' % self.featureName ]
-            if (self.featureExtraProtect != None):
-                white_list_entry += [ '#endif' ]
-            featureType = interface.get('type')
-            if featureType == 'instance':
-                self.instance_extensions += white_list_entry
-            elif featureType == 'device':
-                self.device_extensions += white_list_entry
-    #
-    # Processing point at end of each extension definition
-    def endFeature(self):
-        # Finish processing in superclass
-        OutputGenerator.endFeature(self)
-    #
-    # Process enums, structs, etc.
-    def genType(self, typeinfo, name, alias):
-        OutputGenerator.genType(self, typeinfo, name, alias)
-        typeElem = typeinfo.elem
-        # If the type is a struct type, traverse the imbedded <member> tags generating a structure.
-        # Otherwise, emit the tag text.
-        category = typeElem.get('category')
-        if (category == 'struct' or category == 'union'):
-            self.genStruct(typeinfo, name, alias)
-        if category == 'handle':
-            self.object_types.append(name)
-    #
-    # Append a definition to the specified section
-    def appendSection(self, section, text):
-        # self.sections[section].append('SECTION: ' + section + '\n')
-        self.sections[section].append(text)
-    #
-    # Check if the parameter passed in is a pointer
-    def paramIsPointer(self, param):
-        ispointer = False
-        for elem in param:
-            if ((elem.tag is not 'type') and (elem.tail is not None)) and '*' in elem.tail:
-                ispointer = True
-        return ispointer
-    #
-    # Get the category of a type
-    def getTypeCategory(self, typename):
-        types = self.registry.tree.findall("types/type")
-        for elem in types:
-            if (elem.find("name") is not None and elem.find('name').text == typename) or elem.attrib.get('name') == typename:
-                return elem.attrib.get('category')
-    #
-    # Check if a parent object is dispatchable or not
-    def isHandleTypeObject(self, handletype):
-        handle = self.registry.tree.find("types/type/[name='" + handletype + "'][@category='handle']")
-        if handle is not None:
-            return True
-        else:
-            return False
-    #
-    # Check if a parent object is dispatchable or not
-    def isHandleTypeNonDispatchable(self, handletype):
-        handle = self.registry.tree.find("types/type/[name='" + handletype + "'][@category='handle']")
-        if handle is not None and handle.find('type').text == 'VK_DEFINE_NON_DISPATCHABLE_HANDLE':
-            return True
-        else:
-            return False
-    #
-    # Retrieve the type and name for a parameter
-    def getTypeNameTuple(self, param):
-        type = ''
-        name = ''
-        for elem in param:
-            if elem.tag == 'type':
-                type = noneStr(elem.text)
-            elif elem.tag == 'name':
-                name = noneStr(elem.text)
-        return (type, name)
-    #
-    # Retrieve the value of the len tag
-    def getLen(self, param):
-        result = None
-        len = param.attrib.get('len')
-        if len and len != 'null-terminated':
-            # For string arrays, 'len' can look like 'count,null-terminated', indicating that we
-            # have a null terminated array of strings.  We strip the null-terminated from the
-            # 'len' field and only return the parameter specifying the string count
-            if 'null-terminated' in len:
-                result = len.split(',')[0]
-            else:
-                result = len
-            # Spec has now notation for len attributes, using :: instead of platform specific pointer symbol
-            result = str(result).replace('::', '->')
-        return result
-    #
-    # Generate a VkStructureType based on a structure typename
-    def genVkStructureType(self, typename):
-        # Add underscore between lowercase then uppercase
-        value = re.sub('([a-z0-9])([A-Z])', r'\1_\2', typename)
-        # Change to uppercase
-        value = value.upper()
-        # Add STRUCTURE_TYPE_
-        return re.sub('VK_', 'VK_STRUCTURE_TYPE_', value)
-    #
-    # Struct parameter check generation.
-    # This is a special case of the <type> tag where the contents are interpreted as a set of
-    # <member> tags instead of freeform C type declarations. The <member> tags are just like
-    # <param> tags - they are a declaration of a struct or union member. Only simple member
-    # declarations are supported (no nested structs etc.)
-    def genStruct(self, typeinfo, typeName, alias):
-        OutputGenerator.genStruct(self, typeinfo, typeName, alias)
-        members = typeinfo.elem.findall('.//member')
-        # Iterate over members once to get length parameters for arrays
-        lens = set()
-        for member in members:
-            len = self.getLen(member)
-            if len:
-                lens.add(len)
-        # Generate member info
-        membersInfo = []
-        for member in members:
-            # Get the member's type and name
-            info = self.getTypeNameTuple(member)
-            type = info[0]
-            name = info[1]
-            cdecl = self.makeCParamDecl(member, 0)
-            # Process VkStructureType
-            if type == 'VkStructureType':
-                # Extract the required struct type value from the comments
-                # embedded in the original text defining the 'typeinfo' element
-                rawXml = etree.tostring(typeinfo.elem).decode('ascii')
-                result = re.search(r'VK_STRUCTURE_TYPE_\w+', rawXml)
-                if result:
-                    value = result.group(0)
-                else:
-                    value = self.genVkStructureType(typeName)
-                # Store the required type value
-                self.structTypes[typeName] = self.StructType(name=name, value=value)
-            # Store pointer/array/string info
-            extstructs = member.attrib.get('validextensionstructs') if name == 'pNext' else None
-            membersInfo.append(self.CommandParam(type=type,
-                                                 name=name,
-                                                 ispointer=self.paramIsPointer(member),
-                                                 isconst=True if 'const' in cdecl else False,
-                                                 isoptional=self.paramIsOptional(member),
-                                                 iscount=True if name in lens else False,
-                                                 len=self.getLen(member),
-                                                 extstructs=extstructs,
-                                                 cdecl=cdecl,
-                                                 islocal=False,
-                                                 iscreate=False,
-                                                 isdestroy=False,
-                                                 feature_protect=self.featureExtraProtect))
-        self.structMembers.append(self.StructMemberData(name=typeName, members=membersInfo))
-    #
-    # Insert a lock_guard line
-    def lock_guard(self, indent):
-        return '%sstd::lock_guard<std::mutex> lock(global_lock);\n' % indent
-    #
-    # Determine if a struct has an object as a member or an embedded member
-    def struct_contains_object(self, struct_item):
-        struct_member_dict = dict(self.structMembers)
-        struct_members = struct_member_dict[struct_item]
-
-        for member in struct_members:
-            if self.isHandleTypeObject(member.type):
-                return True
-            elif member.type in struct_member_dict:
-                if self.struct_contains_object(member.type) == True:
-                    return True
-        return False
-    #
-    # Return list of struct members which contain, or whose sub-structures contain an obj in a given list of parameters or members
-    def getParmeterStructsWithObjects(self, item_list):
-        struct_list = set()
-        for item in item_list:
-            paramtype = item.find('type')
-            typecategory = self.getTypeCategory(paramtype.text)
-            if typecategory == 'struct':
-                if self.struct_contains_object(paramtype.text) == True:
-                    struct_list.add(item)
-        return struct_list
-    #
-    # Return list of objects from a given list of parameters or members
-    def getObjectsInParameterList(self, item_list, create_func):
-        object_list = set()
-        if create_func == True:
-            member_list = item_list[0:-1]
-        else:
-            member_list = item_list
-        for item in member_list:
-            if self.isHandleTypeObject(paramtype.text):
-                object_list.add(item)
-        return object_list
-    #
-    # Construct list of extension structs containing handles, or extension structs that share a <validextensionstructs>
-    # tag WITH an extension struct containing handles. 
-    def GenerateCommandWrapExtensionList(self):
-        for struct in self.structMembers:
-            if (len(struct.members) > 1) and struct.members[1].extstructs is not None:
-                found = False;
-                for item in struct.members[1].extstructs.split(','):
-                    if item != '' and self.struct_contains_object(item) == True:
-                        found = True
-                if found == True:
-                    for item in struct.members[1].extstructs.split(','):
-                        if item != '' and item not in self.extension_structs:
-                            self.extension_structs.append(item)
-    #
-    # Returns True if a struct may have a pNext chain containing an object
-    def StructWithExtensions(self, struct_type):
-        if struct_type in self.struct_member_dict:
-            param_info = self.struct_member_dict[struct_type]
-            if (len(param_info) > 1) and param_info[1].extstructs is not None:
-                for item in param_info[1].extstructs.split(','):
-                    if item in self.extension_structs:
-                        return True
-        return False
-    #
-    # Generate VulkanObjectType from object type
-    def GetVulkanObjType(self, type):
-        return 'kVulkanObjectType%s' % type[2:]
-    #
-    # Return correct dispatch table type -- instance or device
-    def GetDispType(self, type):
-        return 'instance' if type in ['VkInstance', 'VkPhysicalDevice'] else 'device'
-    #
-    # Generate source for creating a Vulkan object
-    def generate_create_object_code(self, indent, proto, params, cmd_info):
-        create_obj_code = ''
-        handle_type = params[-1].find('type')
-        if self.isHandleTypeObject(handle_type.text):
-            # Check for special case where multiple handles are returned
-            object_array = False
-            if cmd_info[-1].len is not None:
-                object_array = True;
-            handle_name = params[-1].find('name')
-            create_obj_code += '%sif (VK_SUCCESS == result) {\n' % (indent)
-            indent = self.incIndent(indent)
-            create_obj_code += '%sstd::lock_guard<std::mutex> lock(global_lock);\n' % (indent)
-            object_dest = '*%s' % handle_name.text
-            if object_array == True:
-                create_obj_code += '%sfor (uint32_t index = 0; index < %s; index++) {\n' % (indent, cmd_info[-1].len)
-                indent = self.incIndent(indent)
-                object_dest = '%s[index]' % cmd_info[-1].name
-            create_obj_code += '%sCreateObject(%s, %s, %s, pAllocator);\n' % (indent, params[0].find('name').text, object_dest, self.GetVulkanObjType(cmd_info[-1].type))
-            if object_array == True:
-                indent = self.decIndent(indent)
-                create_obj_code += '%s}\n' % indent
-            indent = self.decIndent(indent)
-            create_obj_code += '%s}\n' % (indent)
-        return create_obj_code
-    #
-    # Generate source for destroying a non-dispatchable object
-    def generate_destroy_object_code(self, indent, proto, cmd_info):
-        destroy_obj_code = ''
-        object_array = False
-        if True in [destroy_txt in proto.text for destroy_txt in ['Destroy', 'Free']]:
-            # Check for special case where multiple handles are returned
-            if cmd_info[-1].len is not None:
-                object_array = True;
-                param = -1
-            else:
-                param = -2
-            compatalloc_vuid_string = '%s-compatalloc' % cmd_info[param].name
-            nullalloc_vuid_string = '%s-nullalloc' % cmd_info[param].name
-            compatalloc_vuid = self.manual_vuids.get(compatalloc_vuid_string, "VALIDATION_ERROR_UNDEFINED")
-            nullalloc_vuid = self.manual_vuids.get(nullalloc_vuid_string, "VALIDATION_ERROR_UNDEFINED")
-            if self.isHandleTypeObject(cmd_info[param].type) == True:
-                if object_array == True:
-                    # This API is freeing an array of handles -- add loop control
-                    destroy_obj_code += 'HEY, NEED TO DESTROY AN ARRAY\n'
-                else:
-                    # Call Destroy a single time
-                    destroy_obj_code += '%sif (skip) return;\n' % indent
-                    destroy_obj_code += '%s{\n' % indent
-                    destroy_obj_code += '%s    std::lock_guard<std::mutex> lock(global_lock);\n' % indent
-                    destroy_obj_code += '%s    DestroyObject(%s, %s, %s, pAllocator, %s, %s);\n' % (indent, cmd_info[0].name, cmd_info[param].name, self.GetVulkanObjType(cmd_info[param].type), compatalloc_vuid, nullalloc_vuid)
-                    destroy_obj_code += '%s}\n' % indent
-        return object_array, destroy_obj_code
-    #
-    # Output validation for a single object (obj_count is NULL) or a counted list of objects
-    def outputObjects(self, obj_type, obj_name, obj_count, prefix, index, indent, destroy_func, destroy_array, disp_name, parent_name, null_allowed, top_level):
-        decl_code = ''
-        pre_call_code = ''
-        post_call_code = ''
-        param_vuid_string = 'VUID-%s-%s-parameter' % (parent_name, obj_name)
-        parent_vuid_string = 'VUID-%s-%s-parent' % (parent_name, obj_name)
-        param_vuid = self.GetVuid(param_vuid_string)
-        parent_vuid = self.GetVuid(parent_vuid_string)
-        # If no parent VUID for this member, look for a commonparent VUID
-        if parent_vuid == 'VALIDATION_ERROR_UNDEFINED':
-            commonparent_vuid_string = 'VUID-%s-commonparent' % parent_name
-            parent_vuid = self.GetVuid(commonparent_vuid_string)
-        if obj_count is not None:
-            pre_call_code += '%s    for (uint32_t %s = 0; %s < %s; ++%s) {\n' % (indent, index, index, obj_count, index)
-            indent = self.incIndent(indent)
-            pre_call_code += '%s    skip |= ValidateObject(%s, %s%s[%s], %s, %s, %s, %s);\n' % (indent, disp_name, prefix, obj_name, index, self.GetVulkanObjType(obj_type), null_allowed, param_vuid, parent_vuid)
-            indent = self.decIndent(indent)
-            pre_call_code += '%s    }\n' % indent
-        else:
-            pre_call_code += '%s    skip |= ValidateObject(%s, %s%s, %s, %s, %s, %s);\n' % (indent, disp_name, prefix, obj_name, self.GetVulkanObjType(obj_type), null_allowed, param_vuid, parent_vuid)
-        return decl_code, pre_call_code, post_call_code
-    #
-    # first_level_param indicates if elements are passed directly into the function else they're below a ptr/struct
-    # create_func means that this is API creates or allocates objects
-    # destroy_func indicates that this API destroys or frees objects
-    # destroy_array means that the destroy_func operated on an array of objects
-    def validate_objects(self, members, indent, prefix, array_index, create_func, destroy_func, destroy_array, disp_name, parent_name, first_level_param):
-        decls = ''
-        pre_code = ''
-        post_code = ''
-        index = 'index%s' % str(array_index)
-        array_index += 1
-        # Process any objects in this structure and recurse for any sub-structs in this struct
-        for member in members:
-            # Handle objects
-            if member.iscreate and first_level_param and member == members[-1]:
-                continue
-            if self.isHandleTypeObject(member.type) == True:
-                count_name = member.len
-                if (count_name is not None):
-                    count_name = '%s%s' % (prefix, member.len)
-                null_allowed = member.isoptional
-                (tmp_decl, tmp_pre, tmp_post) = self.outputObjects(member.type, member.name, count_name, prefix, index, indent, destroy_func, destroy_array, disp_name, parent_name, str(null_allowed).lower(), first_level_param)
-                decls += tmp_decl
-                pre_code += tmp_pre
-                post_code += tmp_post
-            # Handle Structs that contain objects at some level
-            elif member.type in self.struct_member_dict:
-                # Structs at first level will have an object
-                if self.struct_contains_object(member.type) == True:
-                    struct_info = self.struct_member_dict[member.type]
-                    # Struct Array
-                    if member.len is not None:
-                        # Update struct prefix
-                        new_prefix = '%s%s' % (prefix, member.name)
-                        pre_code += '%s    if (%s%s) {\n' % (indent, prefix, member.name)
-                        indent = self.incIndent(indent)
-                        pre_code += '%s    for (uint32_t %s = 0; %s < %s%s; ++%s) {\n' % (indent, index, index, prefix, member.len, index)
-                        indent = self.incIndent(indent)
-                        local_prefix = '%s[%s].' % (new_prefix, index)
-                        # Process sub-structs in this struct
-                        (tmp_decl, tmp_pre, tmp_post) = self.validate_objects(struct_info, indent, local_prefix, array_index, create_func, destroy_func, destroy_array, disp_name, member.type, False)
-                        decls += tmp_decl
-                        pre_code += tmp_pre
-                        post_code += tmp_post
-                        indent = self.decIndent(indent)
-                        pre_code += '%s    }\n' % indent
-                        indent = self.decIndent(indent)
-                        pre_code += '%s    }\n' % indent
-                    # Single Struct
-                    else:
-                        # Update struct prefix
-                        new_prefix = '%s%s->' % (prefix, member.name)
-                        # Declare safe_VarType for struct
-                        pre_code += '%s    if (%s%s) {\n' % (indent, prefix, member.name)
-                        indent = self.incIndent(indent)
-                        # Process sub-structs in this struct
-                        (tmp_decl, tmp_pre, tmp_post) = self.validate_objects(struct_info, indent, new_prefix, array_index, create_func, destroy_func, destroy_array, disp_name, member.type, False)
-                        decls += tmp_decl
-                        pre_code += tmp_pre
-                        post_code += tmp_post
-                        indent = self.decIndent(indent)
-                        pre_code += '%s    }\n' % indent
-        return decls, pre_code, post_code
-    #
-    # For a particular API, generate the object handling code
-    def generate_wrapping_code(self, cmd):
-        indent = '    '
-        proto = cmd.find('proto/name')
-        params = cmd.findall('param')
-        if proto.text is not None:
-            cmd_member_dict = dict(self.cmdMembers)
-            cmd_info = cmd_member_dict[proto.text]
-            disp_name = cmd_info[0].name
-            # Handle object create operations
-            if cmd_info[0].iscreate:
-                create_obj_code = self.generate_create_object_code(indent, proto, params, cmd_info)
-            else:
-                create_obj_code = ''
-            # Handle object destroy operations
-            if cmd_info[0].isdestroy:
-                (destroy_array, destroy_object_code) = self.generate_destroy_object_code(indent, proto, cmd_info)
-            else:
-                destroy_array = False
-                destroy_object_code = ''
-            paramdecl = ''
-            param_pre_code = ''
-            param_post_code = ''
-            create_func = True if create_obj_code else False
-            destroy_func = True if destroy_object_code else False
-            (paramdecl, param_pre_code, param_post_code) = self.validate_objects(cmd_info, indent, '', 0, create_func, destroy_func, destroy_array, disp_name, proto.text, True)
-            param_post_code += create_obj_code
-            if destroy_object_code:
-                if destroy_array == True:
-                    param_post_code += destroy_object_code
-                else:
-                    param_pre_code += destroy_object_code
-            if param_pre_code:
-                if (not destroy_func) or (destroy_array):
-                    param_pre_code = '%s{\n%s%s%s%s}\n' % ('    ', indent, self.lock_guard(indent), param_pre_code, indent)
-        return paramdecl, param_pre_code, param_post_code
-    #
-    # Capture command parameter info needed to create, destroy, and validate objects
-    def genCmd(self, cmdinfo, cmdname, alias):
-
-        # Add struct-member type information to command parameter information
-        OutputGenerator.genCmd(self, cmdinfo, cmdname, alias)
-        members = cmdinfo.elem.findall('.//param')
-        # Iterate over members once to get length parameters for arrays
-        lens = set()
-        for member in members:
-            len = self.getLen(member)
-            if len:
-                lens.add(len)
-        struct_member_dict = dict(self.structMembers)
-        # Generate member info
-        membersInfo = []
-        constains_extension_structs = False
-        for member in members:
-            # Get type and name of member
-            info = self.getTypeNameTuple(member)
-            type = info[0]
-            name = info[1]
-            cdecl = self.makeCParamDecl(member, 0)
-            # Check for parameter name in lens set
-            iscount = True if name in lens else False
-            len = self.getLen(member)
-            isconst = True if 'const' in cdecl else False
-            ispointer = self.paramIsPointer(member)
-            # Mark param as local if it is an array of objects
-            islocal = False;
-            if self.isHandleTypeObject(type) == True:
-                if (len is not None) and (isconst == True):
-                    islocal = True
-            # Or if it's a struct that contains an object
-            elif type in struct_member_dict:
-                if self.struct_contains_object(type) == True:
-                    islocal = True
-            isdestroy = True if True in [destroy_txt in cmdname for destroy_txt in ['Destroy', 'Free']] else False
-            iscreate = True if True in [create_txt in cmdname for create_txt in ['Create', 'Allocate', 'Enumerate', 'RegisterDeviceEvent', 'RegisterDisplayEvent']] or ('vkGet' in cmdname and member == members[-1] and ispointer == True)  else False
-            extstructs = member.attrib.get('validextensionstructs') if name == 'pNext' else None
-            membersInfo.append(self.CommandParam(type=type,
-                                                 name=name,
-                                                 ispointer=ispointer,
-                                                 isconst=isconst,
-                                                 isoptional=self.paramIsOptional(member),
-                                                 iscount=iscount,
-                                                 len=len,
-                                                 extstructs=extstructs,
-                                                 cdecl=cdecl,
-                                                 islocal=islocal,
-                                                 iscreate=iscreate,
-                                                 isdestroy=isdestroy,
-                                                 feature_protect=self.featureExtraProtect))
-        self.cmdMembers.append(self.CmdMemberData(name=cmdname, members=membersInfo))
-        self.cmd_info_data.append(self.CmdInfoData(name=cmdname, cmdinfo=cmdinfo))
-        self.cmd_feature_protect.append(self.CmdExtraProtect(name=cmdname, extra_protect=self.featureExtraProtect))
-    #
-    # Create code Create, Destroy, and validate Vulkan objects
-    def WrapCommands(self):
-        cmd_member_dict = dict(self.cmdMembers)
-        cmd_info_dict = dict(self.cmd_info_data)
-        cmd_protect_dict = dict(self.cmd_feature_protect)
-        for api_call in self.cmdMembers:
-            cmdname = api_call.name
-            cmdinfo = cmd_info_dict[api_call.name]
-            if cmdname in self.interface_functions:
-                continue
-            if cmdname in self.no_autogen_list:
-                decls = self.makeCDecls(cmdinfo.elem)
-                self.appendSection('command', '')
-                self.appendSection('command', '// Declare only')
-                self.appendSection('command', decls[0])
-                self.intercepts += [ '    {"%s", (void *)%s},' % (cmdname,cmdname[2:]) ]
-                continue
-            # Generate object handling code
-            (api_decls, api_pre, api_post) = self.generate_wrapping_code(cmdinfo.elem)
-            # If API doesn't contain any object handles, don't fool with it
-            if not api_decls and not api_pre and not api_post:
-                continue
-            feature_extra_protect = cmd_protect_dict[api_call.name]
-            if (feature_extra_protect != None):
-                self.appendSection('command', '')
-                self.appendSection('command', '#ifdef '+ feature_extra_protect)
-                self.intercepts += [ '#ifdef %s' % feature_extra_protect ]
-            # Add intercept to procmap
-            self.intercepts += [ '    {"%s", (void*)%s},' % (cmdname,cmdname[2:]) ]
-            decls = self.makeCDecls(cmdinfo.elem)
-            self.appendSection('command', '')
-            self.appendSection('command', decls[0][:-1])
-            self.appendSection('command', '{')
-            self.appendSection('command', '    bool skip = false;')
-            # Handle return values, if any
-            resulttype = cmdinfo.elem.find('proto/type')
-            if (resulttype != None and resulttype.text == 'void'):
-              resulttype = None
-            if (resulttype != None):
-                assignresult = resulttype.text + ' result = '
-            else:
-                assignresult = ''
-            # Pre-pend declarations and pre-api-call codegen
-            if api_decls:
-                self.appendSection('command', "\n".join(str(api_decls).rstrip().split("\n")))
-            if api_pre:
-                self.appendSection('command', "\n".join(str(api_pre).rstrip().split("\n")))
-            # Generate the API call itself
-            # Gather the parameter items
-            params = cmdinfo.elem.findall('param/name')
-            # Pull out the text for each of the parameters, separate them by commas in a list
-            paramstext = ', '.join([str(param.text) for param in params])
-            # Use correct dispatch table
-            disp_type = cmdinfo.elem.find('param/type').text
-            disp_name = cmdinfo.elem.find('param/name').text
-            dispatch_table = 'get_dispatch_table(ot_%s_table_map, %s)->' % (self.GetDispType(disp_type), disp_name)
-            API = cmdinfo.elem.attrib.get('name').replace('vk', dispatch_table, 1)
-            # Put all this together for the final down-chain call
-            if assignresult != '':
-                if resulttype.text == 'VkResult':
-                    self.appendSection('command', '    if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;')
-                elif resulttype.text == 'VkBool32':
-                    self.appendSection('command', '    if (skip) return VK_FALSE;')
-                else:
-                    raise Exception('Unknown result type ' + resulttype.text)
-            else:
-                self.appendSection('command', '    if (skip) return;')
-            self.appendSection('command', '    ' + assignresult + API + '(' + paramstext + ');')
-            # And add the post-API-call codegen
-            self.appendSection('command', "\n".join(str(api_post).rstrip().split("\n")))
-            # Handle the return result variable, if any
-            if (resulttype != None):
-                self.appendSection('command', '    return result;')
-            self.appendSection('command', '}')
-            if (feature_extra_protect != None):
-                self.appendSection('command', '#endif // '+ feature_extra_protect)
-                self.intercepts += [ '#endif' ]
diff --git a/scripts/parameter_validation_generator.py b/scripts/parameter_validation_generator.py
deleted file mode 100644
index 44c6576..0000000
--- a/scripts/parameter_validation_generator.py
+++ /dev/null
@@ -1,1242 +0,0 @@
-#!/usr/bin/python3 -i
-#
-# Copyright (c) 2015-2016 The Khronos Group Inc.
-# Copyright (c) 2015-2016 Valve Corporation
-# Copyright (c) 2015-2016 LunarG, Inc.
-# Copyright (c) 2015-2016 Google Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# Author: Dustin Graves <dustin@lunarg.com>
-# Author: Mark Lobodzinski <mark@lunarg.com>
-
-import os,re,sys,string
-import xml.etree.ElementTree as etree
-from generator import *
-from collections import namedtuple
-from vuid_mapping import *
-from common_codegen import *
-
-# This is a workaround to use a Python 2.7 and 3.x compatible syntax.
-from io import open
-
-# ParameterValidationGeneratorOptions - subclass of GeneratorOptions.
-#
-# Adds options used by ParameterValidationOutputGenerator object during Parameter validation layer generation.
-#
-# Additional members
-#   prefixText - list of strings to prefix generated header with
-#     (usually a copyright statement + calling convention macros).
-#   protectFile - True if multiple inclusion protection should be
-#     generated (based on the filename) around the entire header.
-#   protectFeature - True if #ifndef..#endif protection should be
-#     generated around a feature interface in the header file.
-#   genFuncPointers - True if function pointer typedefs should be
-#     generated
-#   protectProto - If conditional protection should be generated
-#     around prototype declarations, set to either '#ifdef'
-#     to require opt-in (#ifdef protectProtoStr) or '#ifndef'
-#     to require opt-out (#ifndef protectProtoStr). Otherwise
-#     set to None.
-#   protectProtoStr - #ifdef/#ifndef symbol to use around prototype
-#     declarations, if protectProto is set
-#   apicall - string to use for the function declaration prefix,
-#     such as APICALL on Windows.
-#   apientry - string to use for the calling convention macro,
-#     in typedefs, such as APIENTRY.
-#   apientryp - string to use for the calling convention macro
-#     in function pointer typedefs, such as APIENTRYP.
-#   indentFuncProto - True if prototype declarations should put each
-#     parameter on a separate line
-#   indentFuncPointer - True if typedefed function pointers should put each
-#     parameter on a separate line
-#   alignFuncParam - if nonzero and parameters are being put on a
-#     separate line, align parameter names at the specified column
-class ParameterValidationGeneratorOptions(GeneratorOptions):
-    def __init__(self,
-                 filename = None,
-                 directory = '.',
-                 apiname = None,
-                 profile = None,
-                 versions = '.*',
-                 emitversions = '.*',
-                 defaultExtensions = None,
-                 addExtensions = None,
-                 removeExtensions = None,
-                 emitExtensions = None,
-                 sortProcedure = regSortFeatures,
-                 prefixText = "",
-                 apicall = '',
-                 apientry = '',
-                 apientryp = '',
-                 indentFuncProto = True,
-                 indentFuncPointer = False,
-                 alignFuncParam = 0,
-                 expandEnumerants = True):
-        GeneratorOptions.__init__(self, filename, directory, apiname, profile,
-                                  versions, emitversions, defaultExtensions,
-                                  addExtensions, removeExtensions, emitExtensions, sortProcedure)
-        self.prefixText      = prefixText
-        self.apicall         = apicall
-        self.apientry        = apientry
-        self.apientryp       = apientryp
-        self.indentFuncProto = indentFuncProto
-        self.indentFuncPointer = indentFuncPointer
-        self.alignFuncParam  = alignFuncParam
-        self.expandEnumerants = expandEnumerants
-
-# ParameterValidationOutputGenerator - subclass of OutputGenerator.
-# Generates param checker layer code.
-#
-# ---- methods ----
-# ParamCheckerOutputGenerator(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 ParameterValidationOutputGenerator(OutputGenerator):
-    """Generate Parameter Validation code based on XML element attributes"""
-    # This is an ordered list of sections in the header file.
-    ALL_SECTIONS = ['command']
-    def __init__(self,
-                 errFile = sys.stderr,
-                 warnFile = sys.stderr,
-                 diagFile = sys.stdout):
-        OutputGenerator.__init__(self, errFile, warnFile, diagFile)
-        self.INDENT_SPACES = 4
-        self.intercepts = []
-        self.declarations = []
-        # Commands to ignore
-        self.blacklist = [
-            'vkGetInstanceProcAddr',
-            'vkGetDeviceProcAddr',
-            'vkEnumerateInstanceVersion',
-            'vkEnumerateInstanceLayerProperties',
-            'vkEnumerateInstanceExtensionProperties',
-            'vkEnumerateDeviceLayerProperties',
-            'vkEnumerateDeviceExtensionProperties',
-            'vkCmdDebugMarkerEndEXT',
-            ]
-        self.validate_only = [
-            'vkCreateInstance',
-            'vkDestroyInstance',
-            'vkCreateDevice',
-            'vkDestroyDevice',
-            'vkCreateQueryPool',
-            'vkCreateDebugReportCallbackEXT',
-            'vkDestroyDebugReportCallbackEXT',
-            'vkCreateCommandPool',
-            'vkCreateRenderPass',
-            'vkDestroyRenderPass',
-            'vkCreateDebugUtilsMessengerEXT',
-            'vkDestroyDebugUtilsMessengerEXT',
-            ]
-        # Structure fields to ignore
-        self.structMemberBlacklist = { 'VkWriteDescriptorSet' : ['dstSet'] }
-        # Validation conditions for some special case struct members that are conditionally validated
-        self.structMemberValidationConditions = { 'VkPipelineColorBlendStateCreateInfo' : { 'logicOp' : '{}logicOpEnable == VK_TRUE' } }
-        # Header version
-        self.headerVersion = None
-        # Internal state - accumulators for different inner block text
-        self.validation = []                              # Text comprising the main per-api parameter validation routines
-        self.structNames = []                             # List of Vulkan struct typenames
-        self.stypes = []                                  # Values from the VkStructureType enumeration
-        self.structTypes = dict()                         # Map of Vulkan struct typename to required VkStructureType
-        self.handleTypes = set()                          # Set of handle type names
-        self.commands = []                                # List of CommandData records for all Vulkan commands
-        self.structMembers = []                           # List of StructMemberData records for all Vulkan structs
-        self.validatedStructs = dict()                    # Map of structs type names to generated validation code for that struct type
-        self.enumRanges = dict()                          # Map of enum name to BEGIN/END range values
-        self.enumValueLists = ''                          # String containing enumerated type map definitions
-        self.func_pointers = ''                           # String containing function pointers for manual PV functions
-        self.typedefs = ''                                # String containing function pointer typedefs
-        self.flags = set()                                # Map of flags typenames
-        self.flagBits = dict()                            # Map of flag bits typename to list of values
-        self.newFlags = set()                             # Map of flags typenames /defined in the current feature/
-        self.required_extensions = dict()                 # Dictionary of required extensions for each item in the current extension
-        self.extension_type = ''                          # Type of active feature (extension), device or instance
-        self.extension_names = dict()                     # Dictionary of extension names to extension name defines
-        self.valid_vuids = set()                          # Set of all valid VUIDs
-        # Named tuples to store struct and command data
-        self.StructType = namedtuple('StructType', ['name', 'value'])
-        self.CommandParam = namedtuple('CommandParam', ['type', 'name', 'ispointer', 'isstaticarray', 'isbool', 'israngedenum',
-                                                        'isconst', 'isoptional', 'iscount', 'noautovalidity', 'len', 'extstructs',
-                                                        'condition', 'cdecl'])
-        self.CommandData = namedtuple('CommandData', ['name', 'params', 'cdecl', 'extension_type', 'result'])
-        self.StructMemberData = namedtuple('StructMemberData', ['name', 'members'])
-
-        self.vuid_file = None
-        # Cover cases where file is built from scripts directory, Lin/Win, or Android build structure
-        # Set cwd to the script directory to more easily locate the header.
-        previous_dir = os.getcwd()
-        os.chdir(os.path.dirname(sys.argv[0]))
-        vuid_filename_locations = [
-            './vk_validation_error_messages.h',
-            '../layers/vk_validation_error_messages.h',
-            '../../layers/vk_validation_error_messages.h',
-            '../../../layers/vk_validation_error_messages.h',
-            ]
-        for vuid_filename in vuid_filename_locations:
-            if os.path.isfile(vuid_filename):
-                self.vuid_file = open(vuid_filename, "r", encoding="utf8")
-                break
-        if self.vuid_file == None:
-            print("Error: Could not find vk_validation_error_messages.h")
-            sys.exit(1)
-        os.chdir(previous_dir)
-    #
-    # Generate Copyright comment block for file
-    def GenerateCopyright(self):
-        copyright  = '/* *** THIS FILE IS GENERATED - DO NOT EDIT! ***\n'
-        copyright += ' * See parameter_validation_generator.py for modifications\n'
-        copyright += ' *\n'
-        copyright += ' * Copyright (c) 2015-2017 The Khronos Group Inc.\n'
-        copyright += ' * Copyright (c) 2015-2017 LunarG, Inc.\n'
-        copyright += ' * Copyright (C) 2015-2017 Google Inc.\n'
-        copyright += ' *\n'
-        copyright += ' * Licensed under the Apache License, Version 2.0 (the "License");\n'
-        copyright += ' * you may not use this file except in compliance with the License.\n'
-        copyright += ' * Copyright (c) 2015-2017 Valve Corporation\n'
-        copyright += ' * You may obtain a copy of the License at\n'
-        copyright += ' *\n'
-        copyright += ' *     http://www.apache.org/licenses/LICENSE-2.0\n'
-        copyright += ' *\n'
-        copyright += ' * Unless required by applicable law or agreed to in writing, software\n'
-        copyright += ' * distributed under the License is distributed on an "AS IS" BASIS,\n'
-        copyright += ' * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n'
-        copyright += ' * See the License for the specific language governing permissions and\n'
-        copyright += ' * limitations under the License.\n'
-        copyright += ' *\n'
-        copyright += ' * Author: Mark Lobodzinski <mark@LunarG.com>\n'
-        copyright += ' */\n\n'
-        return copyright
-    #
-    # Increases the global indent variable
-    def incIndent(self, indent):
-        inc = ' ' * self.INDENT_SPACES
-        if indent:
-            return indent + inc
-        return inc
-    #
-    # Decreases the global indent variable
-    def decIndent(self, indent):
-        if indent and (len(indent) > self.INDENT_SPACES):
-            return indent[:-self.INDENT_SPACES]
-        return ''
-    #
-    # Convert decimal number to 8 digit hexadecimal lower-case representation
-    def IdToHex(self, dec_num):
-        if dec_num > 4294967295:
-            print ("ERROR: Decimal # %d can't be represented in 8 hex digits" % (dec_num))
-            sys.exit(1)
-        hex_num = hex(dec_num)
-        return hex_num[2:].zfill(8)
-    #
-    # Called at file creation time
-    def beginFile(self, genOpts):
-        OutputGenerator.beginFile(self, genOpts)
-        # C-specific
-        #
-        # Open vk_validation_error_messages.h file to verify computed VUIDs
-        for line in self.vuid_file:
-            # Grab hex number from enum definition
-            vuid_list = line.split('0x')
-            # If this is a valid enumeration line, remove trailing comma and CR
-            if len(vuid_list) == 2:
-                vuid_num = vuid_list[1][:-2]
-                # Make sure this is a good hex number before adding to set
-                if len(vuid_num) == 8 and all(c in string.hexdigits for c in vuid_num):
-                    self.valid_vuids.add(vuid_num)
-        #
-        # User-supplied prefix text, if any (list of strings)
-        s = self.GenerateCopyright()
-        write(s, file=self.outFile)
-        #
-        # Headers
-        write('#include <string>', file=self.outFile)
-        self.newline()
-        write('#include "vk_loader_platform.h"', file=self.outFile)
-        write('#include "vulkan/vulkan.h"', file=self.outFile)
-        write('#include "vk_layer_extension_utils.h"', file=self.outFile)
-        write('#include "parameter_validation.h"', file=self.outFile)
-        #
-        # Macros
-        self.newline()
-        write('#ifndef UNUSED_PARAMETER', file=self.outFile)
-        write('#define UNUSED_PARAMETER(x) (void)(x)', file=self.outFile)
-        write('#endif // UNUSED_PARAMETER', file=self.outFile)
-        #
-        # Namespace
-        self.newline()
-        write('namespace parameter_validation {', file = self.outFile)
-        self.newline()
-        write('extern std::mutex global_lock;', file = self.outFile)
-        write('extern std::unordered_map<void *, layer_data *> layer_data_map;', file = self.outFile)
-        write('extern std::unordered_map<void *, instance_layer_data *> instance_layer_data_map;', file = self.outFile)
-        self.newline()
-        #
-        # FuncPtrMap
-        self.func_pointers += 'std::unordered_map<std::string, void *> custom_functions = {\n'
-    #
-    # Called at end-time for final content output
-    def endFile(self):
-        # C-specific
-        self.newline()
-        write(self.enumValueLists, file=self.outFile)
-        self.newline()
-        write(self.typedefs, file=self.outFile)
-        self.newline()
-        self.func_pointers += '};\n'
-        write(self.func_pointers, file=self.outFile)
-        self.newline()
-        ext_template  = 'template <typename T>\n'
-        ext_template += 'bool OutputExtensionError(const T *layer_data, const std::string &api_name, const std::string &extension_name) {\n'
-        ext_template += '    return log_msg(layer_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0,\n'
-        ext_template += '                   EXTENSION_NOT_ENABLED, "Attemped to call %s() but its required extension %s has not been enabled\\n",\n'
-        ext_template += '                   api_name.c_str(), extension_name.c_str());\n'
-        ext_template += '}\n'
-        write(ext_template, file=self.outFile)
-        self.newline()
-        commands_text = '\n'.join(self.validation)
-        write(commands_text, file=self.outFile)
-        self.newline()
-        # Output declarations and record intercepted procedures
-        write('// Declarations', file=self.outFile)
-        write('\n'.join(self.declarations), file=self.outFile)
-        write('// Map of all APIs to be intercepted by this layer', file=self.outFile)
-        write('const std::unordered_map<std::string, void*> name_to_funcptr_map = {', file=self.outFile)
-        write('\n'.join(self.intercepts), file=self.outFile)
-        write('};\n', file=self.outFile)
-        self.newline()
-        # Namespace
-        write('} // namespace parameter_validation', file = self.outFile)
-        # Finish processing in superclass
-        OutputGenerator.endFile(self)
-    #
-    # Processing at beginning of each feature or extension
-    def beginFeature(self, interface, emit):
-        # Start processing in superclass
-        OutputGenerator.beginFeature(self, interface, emit)
-        # C-specific
-        # Accumulate includes, defines, types, enums, function pointer typedefs, end function prototypes separately for this
-        # feature. They're only printed in endFeature().
-        self.headerVersion = None
-        self.structNames = []
-        self.stypes = []
-        self.commands = []
-        self.structMembers = []
-        self.newFlags = set()
-        self.featureExtraProtect = GetFeatureProtect(interface)
-        # Get base list of extension dependencies for all items in this extension
-        base_required_extensions = []
-        if "VK_VERSION_1" not in self.featureName:
-            # Save Name Define to get correct enable name later
-            nameElem = interface[0][1]
-            name = nameElem.get('name')
-            self.extension_names[self.featureName] = name
-            # This extension is the first dependency for this command
-            base_required_extensions.append(self.featureName)
-        # Add any defined extension dependencies to the base dependency list for this extension
-        requires = interface.get('requires')
-        if requires is not None:
-            base_required_extensions.extend(requires.split(','))
-        # Build dictionary of extension dependencies for each item in this extension
-        self.required_extensions = dict()
-        for require_element in interface.findall('require'):
-            # Copy base extension dependency list
-            required_extensions = list(base_required_extensions)
-            # Add any additional extension dependencies specified in this require block
-            additional_extensions = require_element.get('extension')
-            if additional_extensions:
-                required_extensions.extend(additional_extensions.split(','))
-            # Save full extension list for all named items
-            for element in require_element.findall('*[@name]'):
-                self.required_extensions[element.get('name')] = required_extensions
-
-        # And note if this is an Instance or Device extension
-        self.extension_type = interface.get('type')
-    #
-    # Called at the end of each extension (feature)
-    def endFeature(self):
-        # C-specific
-        # Actually write the interface to the output file.
-        if (self.emit):
-            # If type declarations are needed by other features based on this one, it may be necessary to suppress the ExtraProtect,
-            # or move it below the 'for section...' loop.
-            ifdef = ''
-            if (self.featureExtraProtect != None):
-                ifdef = '#ifdef %s\n' % self.featureExtraProtect
-                self.validation.append(ifdef)
-            # Generate the struct member checking code from the captured data
-            self.processStructMemberData()
-            # Generate the command parameter checking code from the captured data
-            self.processCmdData()
-            # Write the declaration for the HeaderVersion
-            if self.headerVersion:
-                write('const uint32_t GeneratedHeaderVersion = {};'.format(self.headerVersion), file=self.outFile)
-                self.newline()
-            # Write the declarations for the VkFlags values combining all flag bits
-            for flag in sorted(self.newFlags):
-                flagBits = flag.replace('Flags', 'FlagBits')
-                if flagBits in self.flagBits:
-                    bits = self.flagBits[flagBits]
-                    decl = 'const {} All{} = {}'.format(flag, flagBits, bits[0])
-                    for bit in bits[1:]:
-                        decl += '|' + bit
-                    decl += ';'
-                    write(decl, file=self.outFile)
-            endif = '\n'
-            if (self.featureExtraProtect != None):
-                endif = '#endif // %s\n' % self.featureExtraProtect
-            self.validation.append(endif)
-        # Finish processing in superclass
-        OutputGenerator.endFeature(self)
-    #
-    # Type generation
-    def genType(self, typeinfo, name, alias):
-        OutputGenerator.genType(self, typeinfo, name, alias)
-        typeElem = typeinfo.elem
-        # If the type is a struct type, traverse the imbedded <member> tags generating a structure. Otherwise, emit the tag text.
-        category = typeElem.get('category')
-        if (category == 'struct' or category == 'union'):
-            self.structNames.append(name)
-            self.genStruct(typeinfo, name, alias)
-        elif (category == 'handle'):
-            self.handleTypes.add(name)
-        elif (category == 'bitmask'):
-            self.flags.add(name)
-            self.newFlags.add(name)
-        elif (category == 'define'):
-            if name == 'VK_HEADER_VERSION':
-                nameElem = typeElem.find('name')
-                self.headerVersion = noneStr(nameElem.tail).strip()
-    #
-    # Struct parameter check generation.
-    # This is a special case of the <type> tag where the contents are interpreted as a set of <member> tags instead of freeform C
-    # type declarations. The <member> tags are just like <param> tags - they are a declaration of a struct or union member.
-    # Only simple member declarations are supported (no nested structs etc.)
-    def genStruct(self, typeinfo, typeName, alias):
-        OutputGenerator.genStruct(self, typeinfo, typeName, alias)
-        conditions = self.structMemberValidationConditions[typeName] if typeName in self.structMemberValidationConditions else None
-        members = typeinfo.elem.findall('.//member')
-        #
-        # Iterate over members once to get length parameters for arrays
-        lens = set()
-        for member in members:
-            len = self.getLen(member)
-            if len:
-                lens.add(len)
-        #
-        # Generate member info
-        membersInfo = []
-        for member in members:
-            # Get the member's type and name
-            info = self.getTypeNameTuple(member)
-            type = info[0]
-            name = info[1]
-            stypeValue = ''
-            cdecl = self.makeCParamDecl(member, 0)
-            # Process VkStructureType
-            if type == 'VkStructureType':
-                # Extract the required struct type value from the comments embedded in the original text defining the
-                # 'typeinfo' element
-                rawXml = etree.tostring(typeinfo.elem).decode('ascii')
-                result = re.search(r'VK_STRUCTURE_TYPE_\w+', rawXml)
-                if result:
-                    value = result.group(0)
-                else:
-                    value = self.genVkStructureType(typeName)
-                # Store the required type value
-                self.structTypes[typeName] = self.StructType(name=name, value=value)
-            #
-            # Store pointer/array/string info -- Check for parameter name in lens set
-            iscount = False
-            if name in lens:
-                iscount = True
-            # The pNext members are not tagged as optional, but are treated as optional for parameter NULL checks.  Static array
-            # members are also treated as optional to skip NULL pointer validation, as they won't be NULL.
-            isstaticarray = self.paramIsStaticArray(member)
-            isoptional = False
-            if self.paramIsOptional(member) or (name == 'pNext') or (isstaticarray):
-                isoptional = True
-            # Determine if value should be ignored by code generation.
-            noautovalidity = False
-            if (member.attrib.get('noautovalidity') is not None) or ((typeName in self.structMemberBlacklist) and (name in self.structMemberBlacklist[typeName])):
-                noautovalidity = True
-            membersInfo.append(self.CommandParam(type=type, name=name,
-                                                ispointer=self.paramIsPointer(member),
-                                                isstaticarray=isstaticarray,
-                                                isbool=True if type == 'VkBool32' else False,
-                                                israngedenum=True if type in self.enumRanges else False,
-                                                isconst=True if 'const' in cdecl else False,
-                                                isoptional=isoptional,
-                                                iscount=iscount,
-                                                noautovalidity=noautovalidity,
-                                                len=self.getLen(member),
-                                                extstructs=self.registry.validextensionstructs[typeName] if name == 'pNext' else None,
-                                                condition=conditions[name] if conditions and name in conditions else None,
-                                                cdecl=cdecl))
-        self.structMembers.append(self.StructMemberData(name=typeName, members=membersInfo))
-    #
-    # Capture group (e.g. C "enum" type) info to be used for param check code generation.
-    # These are concatenated together with other types.
-    def genGroup(self, groupinfo, groupName, alias):
-        OutputGenerator.genGroup(self, groupinfo, groupName, alias)
-        groupElem = groupinfo.elem
-        # Store the sType values
-        if groupName == 'VkStructureType':
-            for elem in groupElem.findall('enum'):
-                self.stypes.append(elem.get('name'))
-        elif 'FlagBits' in groupName:
-            bits = []
-            for elem in groupElem.findall('enum'):
-                bits.append(elem.get('name'))
-            if bits:
-                self.flagBits[groupName] = bits
-        else:
-            # Determine if begin/end ranges are needed (we don't do this for VkStructureType, which has a more finely grained check)
-            expandName = re.sub(r'([0-9a-z_])([A-Z0-9][^A-Z0-9]?)',r'\1_\2',groupName).upper()
-            expandPrefix = expandName
-            expandSuffix = ''
-            expandSuffixMatch = re.search(r'[A-Z][A-Z]+$',groupName)
-            if expandSuffixMatch:
-                expandSuffix = '_' + expandSuffixMatch.group()
-                # Strip off the suffix from the prefix
-                expandPrefix = expandName.rsplit(expandSuffix, 1)[0]
-            isEnum = ('FLAG_BITS' not in expandPrefix)
-            if isEnum:
-                self.enumRanges[groupName] = (expandPrefix + '_BEGIN_RANGE' + expandSuffix, expandPrefix + '_END_RANGE' + expandSuffix)
-                # Create definition for a list containing valid enum values for this enumerated type
-                enum_entry = 'const std::vector<%s> All%sEnums = {' % (groupName, groupName)
-                for enum in groupElem:
-                    name = enum.get('name')
-                    if name is not None and enum.get('supported') != 'disabled':
-                        enum_entry += '%s, ' % name
-                enum_entry += '};\n'
-                self.enumValueLists += enum_entry
-    #
-    # Capture command parameter info to be used for param check code generation.
-    def genCmd(self, cmdinfo, name, alias):
-        OutputGenerator.genCmd(self, cmdinfo, name, alias)
-        decls = self.makeCDecls(cmdinfo.elem)
-        typedef = decls[1]
-        typedef = typedef.split(')',1)[1]
-        if name not in self.blacklist:
-            if (self.featureExtraProtect != None):
-                self.declarations += [ '#ifdef %s' % self.featureExtraProtect ]
-                self.intercepts += [ '#ifdef %s' % self.featureExtraProtect ]
-                if (name not in self.validate_only):
-                    self.func_pointers += '#ifdef %s\n' % self.featureExtraProtect
-                    self.typedefs += '#ifdef %s\n' % self.featureExtraProtect
-            if (name not in self.validate_only):
-                self.typedefs += 'typedef bool (*PFN_manual_%s)%s\n' % (name, typedef)
-                self.func_pointers += '    {"%s", nullptr},\n' % name
-            self.intercepts += [ '    {"%s", (void*)%s},' % (name,name) ]
-            # Strip off 'vk' from API name
-            self.declarations += [ '%s' % decls[0].replace("VKAPI_CALL vk", "VKAPI_CALL ") ]
-            if (self.featureExtraProtect != None):
-                self.intercepts += [ '#endif' ]
-                self.declarations += [ '#endif' ]
-                if (name not in self.validate_only):
-                    self.func_pointers += '#endif\n'
-                    self.typedefs += '#endif\n'
-        if name not in self.blacklist:
-            params = cmdinfo.elem.findall('param')
-            # Get list of array lengths
-            lens = set()
-            for param in params:
-                len = self.getLen(param)
-                if len:
-                    lens.add(len)
-            # Get param info
-            paramsInfo = []
-            for param in params:
-                paramInfo = self.getTypeNameTuple(param)
-                cdecl = self.makeCParamDecl(param, 0)
-                # Check for parameter name in lens set
-                iscount = False
-                if paramInfo[1] in lens:
-                    iscount = True
-                paramsInfo.append(self.CommandParam(type=paramInfo[0], name=paramInfo[1],
-                                                    ispointer=self.paramIsPointer(param),
-                                                    isstaticarray=self.paramIsStaticArray(param),
-                                                    isbool=True if paramInfo[0] == 'VkBool32' else False,
-                                                    israngedenum=True if paramInfo[0] in self.enumRanges else False,
-                                                    isconst=True if 'const' in cdecl else False,
-                                                    isoptional=self.paramIsOptional(param),
-                                                    iscount=iscount,
-                                                    noautovalidity=True if param.attrib.get('noautovalidity') is not None else False,
-                                                    len=self.getLen(param),
-                                                    extstructs=None,
-                                                    condition=None,
-                                                    cdecl=cdecl))
-            # Save return value information, if any
-            result_type = ''
-            resultinfo = cmdinfo.elem.find('proto/type')
-            if (resultinfo != None and resultinfo.text != 'void'):
-                result_type = resultinfo.text
-            self.commands.append(self.CommandData(name=name, params=paramsInfo, cdecl=self.makeCDecls(cmdinfo.elem)[0], extension_type=self.extension_type, result=result_type))
-    #
-    # Check if the parameter passed in is a pointer
-    def paramIsPointer(self, param):
-        ispointer = 0
-        paramtype = param.find('type')
-        if (paramtype.tail is not None) and ('*' in paramtype.tail):
-            ispointer = paramtype.tail.count('*')
-        elif paramtype.text[:4] == 'PFN_':
-            # Treat function pointer typedefs as a pointer to a single value
-            ispointer = 1
-        return ispointer
-    #
-    # Check if the parameter passed in is a static array
-    def paramIsStaticArray(self, param):
-        isstaticarray = 0
-        paramname = param.find('name')
-        if (paramname.tail is not None) and ('[' in paramname.tail):
-            isstaticarray = paramname.tail.count('[')
-        return isstaticarray
-    #
-    # Check if the parameter passed in is optional
-    # Returns a list of Boolean values for comma separated len attributes (len='false,true')
-    def paramIsOptional(self, param):
-        # See if the handle is optional
-        isoptional = False
-        # Simple, if it's optional, return true
-        optString = param.attrib.get('optional')
-        if optString:
-            if optString == 'true':
-                isoptional = True
-            elif ',' in optString:
-                opts = []
-                for opt in optString.split(','):
-                    val = opt.strip()
-                    if val == 'true':
-                        opts.append(True)
-                    elif val == 'false':
-                        opts.append(False)
-                    else:
-                        print('Unrecognized len attribute value',val)
-                isoptional = opts
-        return isoptional
-    #
-    # Check if the handle passed in is optional
-    # Uses the same logic as ValidityOutputGenerator.isHandleOptional
-    def isHandleOptional(self, param, lenParam):
-        # Simple, if it's optional, return true
-        if param.isoptional:
-            return True
-        # If no validity is being generated, it usually means that validity is complex and not absolute, so let's say yes.
-        if param.noautovalidity:
-            return True
-        # If the parameter is an array and we haven't already returned, find out if any of the len parameters are optional
-        if lenParam and lenParam.isoptional:
-            return True
-        return False
-    #
-    # Generate a VkStructureType based on a structure typename
-    def genVkStructureType(self, typename):
-        # Add underscore between lowercase then uppercase
-        value = re.sub('([a-z0-9])([A-Z])', r'\1_\2', typename)
-        value = value.replace('D3_D12', 'D3D12')
-        value = value.replace('Device_IDProp', 'Device_ID_Prop')
-        # Change to uppercase
-        value = value.upper()
-        # Add STRUCTURE_TYPE_
-        return re.sub('VK_', 'VK_STRUCTURE_TYPE_', value)
-    #
-    # Get the cached VkStructureType value for the specified struct typename, or generate a VkStructureType
-    # value assuming the struct is defined by a different feature
-    def getStructType(self, typename):
-        value = None
-        if typename in self.structTypes:
-            value = self.structTypes[typename].value
-        else:
-            value = self.genVkStructureType(typename)
-            self.logMsg('diag', 'ParameterValidation: Generating {} for {} structure type that was not defined by the current feature'.format(value, typename))
-        return value
-    #
-    # Retrieve the value of the len tag
-    def getLen(self, param):
-        result = None
-        len = param.attrib.get('len')
-        if len and len != 'null-terminated':
-            # For string arrays, 'len' can look like 'count,null-terminated', indicating that we have a null terminated array of
-            # strings.  We strip the null-terminated from the 'len' field and only return the parameter specifying the string count
-            if 'null-terminated' in len:
-                result = len.split(',')[0]
-            else:
-                result = len
-            result = str(result).replace('::', '->')
-        return result
-    #
-    # Retrieve the type and name for a parameter
-    def getTypeNameTuple(self, param):
-        type = ''
-        name = ''
-        for elem in param:
-            if elem.tag == 'type':
-                type = noneStr(elem.text)
-            elif elem.tag == 'name':
-                name = noneStr(elem.text)
-        return (type, name)
-    #
-    # Find a named parameter in a parameter list
-    def getParamByName(self, params, name):
-        for param in params:
-            if param.name == name:
-                return param
-        return None
-    #
-    # Extract length values from latexmath.  Currently an inflexible solution that looks for specific
-    # patterns that are found in vk.xml.  Will need to be updated when new patterns are introduced.
-    def parseLateXMath(self, source):
-        name = 'ERROR'
-        decoratedName = 'ERROR'
-        if 'mathit' in source:
-            # Matches expressions similar to 'latexmath:[\lceil{\mathit{rasterizationSamples} \over 32}\rceil]'
-            match = re.match(r'latexmath\s*\:\s*\[\s*\\l(\w+)\s*\{\s*\\mathit\s*\{\s*(\w+)\s*\}\s*\\over\s*(\d+)\s*\}\s*\\r(\w+)\s*\]', source)
-            if not match or match.group(1) != match.group(4):
-                raise 'Unrecognized latexmath expression'
-            name = match.group(2)
-            decoratedName = '{}({}/{})'.format(*match.group(1, 2, 3))
-        else:
-            # Matches expressions similar to 'latexmath : [dataSize \over 4]'
-            match = re.match(r'latexmath\s*\:\s*\[\s*(\w+)\s*\\over\s*(\d+)\s*\]', source)
-            name = match.group(1)
-            decoratedName = '{}/{}'.format(*match.group(1, 2))
-        return name, decoratedName
-    #
-    # Get the length paramater record for the specified parameter name
-    def getLenParam(self, params, name):
-        lenParam = None
-        if name:
-            if '->' in name:
-                # The count is obtained by dereferencing a member of a struct parameter
-                lenParam = self.CommandParam(name=name, iscount=True, ispointer=False, isbool=False, israngedenum=False, isconst=False,
-                                             isstaticarray=None, isoptional=False, type=None, noautovalidity=False, len=None, extstructs=None,
-                                             condition=None, cdecl=None)
-            elif 'latexmath' in name:
-                lenName, decoratedName = self.parseLateXMath(name)
-                lenParam = self.getParamByName(params, lenName)
-            else:
-                lenParam = self.getParamByName(params, name)
-        return lenParam
-    #
-    # Convert a vulkan.h command declaration into a parameter_validation.h definition
-    def getCmdDef(self, cmd):
-        # Strip the trailing ';' and split into individual lines
-        lines = cmd.cdecl[:-1].split('\n')
-        cmd_hdr = '\n'.join(lines)
-        return cmd_hdr
-    #
-    # Generate the code to check for a NULL dereference before calling the
-    # validation function
-    def genCheckedLengthCall(self, name, exprs):
-        count = name.count('->')
-        if count:
-            checkedExpr = []
-            localIndent = ''
-            elements = name.split('->')
-            # Open the if expression blocks
-            for i in range(0, count):
-                checkedExpr.append(localIndent + 'if ({} != NULL) {{\n'.format('->'.join(elements[0:i+1])))
-                localIndent = self.incIndent(localIndent)
-            # Add the validation expression
-            for expr in exprs:
-                checkedExpr.append(localIndent + expr)
-            # Close the if blocks
-            for i in range(0, count):
-                localIndent = self.decIndent(localIndent)
-                checkedExpr.append(localIndent + '}\n')
-            return [checkedExpr]
-        # No if statements were required
-        return exprs
-    #
-    # Generate code to check for a specific condition before executing validation code
-    def genConditionalCall(self, prefix, condition, exprs):
-        checkedExpr = []
-        localIndent = ''
-        formattedCondition = condition.format(prefix)
-        checkedExpr.append(localIndent + 'if ({})\n'.format(formattedCondition))
-        checkedExpr.append(localIndent + '{\n')
-        localIndent = self.incIndent(localIndent)
-        for expr in exprs:
-            checkedExpr.append(localIndent + expr)
-        localIndent = self.decIndent(localIndent)
-        checkedExpr.append(localIndent + '}\n')
-        return [checkedExpr]
-    #
-    # Get VUID identifier from implicit VUID tag
-    def GetVuid(self, vuid_string):
-        if '->' in vuid_string:
-           return "VALIDATION_ERROR_UNDEFINED"
-        vuid_num = self.IdToHex(convertVUID(vuid_string))
-        if vuid_num in self.valid_vuids:
-            vuid = "VALIDATION_ERROR_%s" % vuid_num
-        else:
-            vuid = "VALIDATION_ERROR_UNDEFINED"
-        return vuid
-    #
-    # Generate the sType check string
-    def makeStructTypeCheck(self, prefix, value, lenValue, valueRequired, lenValueRequired, lenPtrRequired, funcPrintName, lenPrintName, valuePrintName, postProcSpec, struct_type_name):
-        checkExpr = []
-        stype = self.structTypes[value.type]
-        if lenValue:
-            vuid_name = struct_type_name if struct_type_name is not None else funcPrintName
-            vuid = self.GetVuid("VUID-%s-%s-parameter" % (vuid_name, value.name))
-            # This is an array with a pointer to a count value
-            if lenValue.ispointer:
-                # When the length parameter is a pointer, there is an extra Boolean parameter in the function call to indicate if it is required
-                checkExpr.append('skip |= validate_struct_type_array(local_data->report_data, "{}", {ppp}"{ldn}"{pps}, {ppp}"{dn}"{pps}, "{sv}", {pf}{ln}, {pf}{vn}, {sv}, {}, {}, {}, {});\n'.format(
-                    funcPrintName, lenPtrRequired, lenValueRequired, valueRequired, vuid, ln=lenValue.name, ldn=lenPrintName, dn=valuePrintName, vn=value.name, sv=stype.value, pf=prefix, **postProcSpec))
-            # This is an array with an integer count value
-            else:
-                checkExpr.append('skip |= validate_struct_type_array(local_data->report_data, "{}", {ppp}"{ldn}"{pps}, {ppp}"{dn}"{pps}, "{sv}", {pf}{ln}, {pf}{vn}, {sv}, {}, {}, {});\n'.format(
-                    funcPrintName, lenValueRequired, valueRequired, vuid, ln=lenValue.name, ldn=lenPrintName, dn=valuePrintName, vn=value.name, sv=stype.value, pf=prefix, **postProcSpec))
-        # This is an individual struct
-        else:
-            vuid = self.GetVuid("VUID-%s-sType-sType" % value.type)
-            checkExpr.append('skip |= validate_struct_type(local_data->report_data, "{}", {ppp}"{}"{pps}, "{sv}", {}{vn}, {sv}, {}, {});\n'.format(
-                funcPrintName, valuePrintName, prefix, valueRequired, vuid, vn=value.name, sv=stype.value, vt=value.type, **postProcSpec))
-        return checkExpr
-    #
-    # Generate the handle check string
-    def makeHandleCheck(self, prefix, value, lenValue, valueRequired, lenValueRequired, funcPrintName, lenPrintName, valuePrintName, postProcSpec):
-        checkExpr = []
-        if lenValue:
-            if lenValue.ispointer:
-                # This is assumed to be an output array with a pointer to a count value
-                raise('Unsupported parameter validation case: Output handle array elements are not NULL checked')
-            else:
-                # This is an array with an integer count value
-                checkExpr.append('skip |= validate_handle_array(local_data->report_data, "{}", {ppp}"{ldn}"{pps}, {ppp}"{dn}"{pps}, {pf}{ln}, {pf}{vn}, {}, {});\n'.format(
-                    funcPrintName, lenValueRequired, valueRequired, ln=lenValue.name, ldn=lenPrintName, dn=valuePrintName, vn=value.name, pf=prefix, **postProcSpec))
-        else:
-            # This is assumed to be an output handle pointer
-            raise('Unsupported parameter validation case: Output handles are not NULL checked')
-        return checkExpr
-    #
-    # Generate check string for an array of VkFlags values
-    def makeFlagsArrayCheck(self, prefix, value, lenValue, valueRequired, lenValueRequired, funcPrintName, lenPrintName, valuePrintName, postProcSpec):
-        checkExpr = []
-        flagBitsName = value.type.replace('Flags', 'FlagBits')
-        if not flagBitsName in self.flagBits:
-            raise('Unsupported parameter validation case: array of reserved VkFlags')
-        else:
-            allFlags = 'All' + flagBitsName
-            checkExpr.append('skip |= validate_flags_array(local_data->report_data, "{}", {ppp}"{}"{pps}, {ppp}"{}"{pps}, "{}", {}, {pf}{}, {pf}{}, {}, {});\n'.format(funcPrintName, lenPrintName, valuePrintName, flagBitsName, allFlags, lenValue.name, value.name, lenValueRequired, valueRequired, pf=prefix, **postProcSpec))
-        return checkExpr
-    #
-    # Generate pNext check string
-    def makeStructNextCheck(self, prefix, value, funcPrintName, valuePrintName, postProcSpec, struct_type_name):
-        checkExpr = []
-        # Generate an array of acceptable VkStructureType values for pNext
-        extStructCount = 0
-        extStructVar = 'NULL'
-        extStructNames = 'NULL'
-        vuid = self.GetVuid("VUID-%s-pNext-pNext" % struct_type_name)
-        if value.extstructs:
-            extStructVar = 'allowed_structs_{}'.format(struct_type_name)
-            extStructCount = 'ARRAY_SIZE({})'.format(extStructVar)
-            extStructNames = '"' + ', '.join(value.extstructs) + '"'
-            checkExpr.append('const VkStructureType {}[] = {{ {} }};\n'.format(extStructVar, ', '.join([self.getStructType(s) for s in value.extstructs])))
-        checkExpr.append('skip |= validate_struct_pnext(local_data->report_data, "{}", {ppp}"{}"{pps}, {}, {}{}, {}, {}, GeneratedHeaderVersion, {});\n'.format(
-            funcPrintName, valuePrintName, extStructNames, prefix, value.name, extStructCount, extStructVar, vuid, **postProcSpec))
-        return checkExpr
-    #
-    # Generate the pointer check string
-    def makePointerCheck(self, prefix, value, lenValue, valueRequired, lenValueRequired, lenPtrRequired, funcPrintName, lenPrintName, valuePrintName, postProcSpec, struct_type_name):
-        checkExpr = []
-        vuid_tag_name = struct_type_name if struct_type_name is not None else funcPrintName
-        if lenValue:
-            count_required_vuid = self.GetVuid("VUID-%s-%s-arraylength" % (vuid_tag_name, lenValue.name))
-            array_required_vuid = self.GetVuid("VUID-%s-%s-parameter" % (vuid_tag_name, value.name))
-            # This is an array with a pointer to a count value
-            if lenValue.ispointer:
-                # If count and array parameters are optional, there will be no validation
-                if valueRequired == 'true' or lenPtrRequired == 'true' or lenValueRequired == 'true':
-                    # When the length parameter is a pointer, there is an extra Boolean parameter in the function call to indicate if it is required
-                    checkExpr.append('skip |= validate_array(local_data->report_data, "{}", {ppp}"{ldn}"{pps}, {ppp}"{dn}"{pps}, {pf}{ln}, &{pf}{vn}, {}, {}, {}, {}, {});\n'.format(
-                        funcPrintName, lenPtrRequired, lenValueRequired, valueRequired, count_required_vuid, array_required_vuid, ln=lenValue.name, ldn=lenPrintName, dn=valuePrintName, vn=value.name, pf=prefix, **postProcSpec))
-            # This is an array with an integer count value
-            else:
-                # If count and array parameters are optional, there will be no validation
-                if valueRequired == 'true' or lenValueRequired == 'true':
-                    if value.type != 'char':
-                        checkExpr.append('skip |= validate_array(local_data->report_data, "{}", {ppp}"{ldn}"{pps}, {ppp}"{dn}"{pps}, {pf}{ln}, &{pf}{vn}, {}, {}, {}, {});\n'.format(
-                            funcPrintName, lenValueRequired, valueRequired, count_required_vuid, array_required_vuid, ln=lenValue.name, ldn=lenPrintName, dn=valuePrintName, vn=value.name, pf=prefix, **postProcSpec))
-                    else:
-                        # Arrays of strings receive special processing
-                        checkExpr.append('skip |= validate_string_array(local_data->report_data, "{}", {ppp}"{ldn}"{pps}, {ppp}"{dn}"{pps}, {pf}{ln}, {pf}{vn}, {}, {}, {}, {});\n'.format(
-                            funcPrintName, lenValueRequired, valueRequired, count_required_vuid, array_required_vuid, ln=lenValue.name, ldn=lenPrintName, dn=valuePrintName, vn=value.name, pf=prefix, **postProcSpec))
-            if checkExpr:
-                if lenValue and ('->' in lenValue.name):
-                    # Add checks to ensure the validation call does not dereference a NULL pointer to obtain the count
-                    checkExpr = self.genCheckedLengthCall(lenValue.name, checkExpr)
-        # This is an individual struct that is not allowed to be NULL
-        elif not value.isoptional:
-            # Function pointers need a reinterpret_cast to void*
-            ptr_required_vuid = self.GetVuid("VUID-%s-%s-parameter" % (vuid_tag_name, value.name))
-            if value.type[:4] == 'PFN_':
-                allocator_dict = {'pfnAllocation': '002004f0',
-                                  'pfnReallocation': '002004f2',
-                                  'pfnFree': '002004f4',
-                                  'pfnInternalAllocation': '002004f6'
-                                 }
-                vuid = allocator_dict.get(value.name)
-                if vuid is not None:
-                    ptr_required_vuid = 'VALIDATION_ERROR_%s' % vuid
-                checkExpr.append('skip |= validate_required_pointer(local_data->report_data, "{}", {ppp}"{}"{pps}, reinterpret_cast<const void*>({}{}), {});\n'.format(funcPrintName, valuePrintName, prefix, value.name, ptr_required_vuid, **postProcSpec))
-            else:
-                checkExpr.append('skip |= validate_required_pointer(local_data->report_data, "{}", {ppp}"{}"{pps}, {}{}, {});\n'.format(funcPrintName, valuePrintName, prefix, value.name, ptr_required_vuid, **postProcSpec))
-        return checkExpr
-    #
-    # Process struct member validation code, performing name suibstitution if required
-    def processStructMemberCode(self, line, funcName, memberNamePrefix, memberDisplayNamePrefix, postProcSpec):
-        # Build format specifier list
-        kwargs = {}
-        if '{postProcPrefix}' in line:
-            # If we have a tuple that includes a format string and format parameters, need to use ParameterName class
-            if type(memberDisplayNamePrefix) is tuple:
-                kwargs['postProcPrefix'] = 'ParameterName('
-            else:
-                kwargs['postProcPrefix'] = postProcSpec['ppp']
-        if '{postProcSuffix}' in line:
-            # If we have a tuple that includes a format string and format parameters, need to use ParameterName class
-            if type(memberDisplayNamePrefix) is tuple:
-                kwargs['postProcSuffix'] = ', ParameterName::IndexVector{{ {}{} }})'.format(postProcSpec['ppi'], memberDisplayNamePrefix[1])
-            else:
-                kwargs['postProcSuffix'] = postProcSpec['pps']
-        if '{postProcInsert}' in line:
-            # If we have a tuple that includes a format string and format parameters, need to use ParameterName class
-            if type(memberDisplayNamePrefix) is tuple:
-                kwargs['postProcInsert'] = '{}{}, '.format(postProcSpec['ppi'], memberDisplayNamePrefix[1])
-            else:
-                kwargs['postProcInsert'] = postProcSpec['ppi']
-        if '{funcName}' in line:
-            kwargs['funcName'] = funcName
-        if '{valuePrefix}' in line:
-            kwargs['valuePrefix'] = memberNamePrefix
-        if '{displayNamePrefix}' in line:
-            # Check for a tuple that includes a format string and format parameters to be used with the ParameterName class
-            if type(memberDisplayNamePrefix) is tuple:
-                kwargs['displayNamePrefix'] = memberDisplayNamePrefix[0]
-            else:
-                kwargs['displayNamePrefix'] = memberDisplayNamePrefix
-
-        if kwargs:
-            # Need to escape the C++ curly braces
-            if 'IndexVector' in line:
-                line = line.replace('IndexVector{ ', 'IndexVector{{ ')
-                line = line.replace(' }),', ' }}),')
-            return line.format(**kwargs)
-        return line
-    #
-    # Process struct validation code for inclusion in function or parent struct validation code
-    def expandStructCode(self, lines, funcName, memberNamePrefix, memberDisplayNamePrefix, indent, output, postProcSpec):
-        for line in lines:
-            if output:
-                output[-1] += '\n'
-            if type(line) is list:
-                for sub in line:
-                    output.append(self.processStructMemberCode(indent + sub, funcName, memberNamePrefix, memberDisplayNamePrefix, postProcSpec))
-            else:
-                output.append(self.processStructMemberCode(indent + line, funcName, memberNamePrefix, memberDisplayNamePrefix, postProcSpec))
-        return output
-    #
-    # Process struct pointer/array validation code, perfoeming name substitution if required
-    def expandStructPointerCode(self, prefix, value, lenValue, funcName, valueDisplayName, postProcSpec):
-        expr = []
-        expr.append('if ({}{} != NULL)\n'.format(prefix, value.name))
-        expr.append('{')
-        indent = self.incIndent(None)
-        if lenValue:
-            # Need to process all elements in the array
-            indexName = lenValue.name.replace('Count', 'Index')
-            expr[-1] += '\n'
-            if lenValue.ispointer:
-                # If the length value is a pointer, de-reference it for the count.
-                expr.append(indent + 'for (uint32_t {iname} = 0; {iname} < *{}{}; ++{iname})\n'.format(prefix, lenValue.name, iname=indexName))
-            else:
-                expr.append(indent + 'for (uint32_t {iname} = 0; {iname} < {}{}; ++{iname})\n'.format(prefix, lenValue.name, iname=indexName))
-            expr.append(indent + '{')
-            indent = self.incIndent(indent)
-            # Prefix for value name to display in error message
-            if value.ispointer == 2:
-                memberNamePrefix = '{}{}[{}]->'.format(prefix, value.name, indexName)
-                memberDisplayNamePrefix = ('{}[%i]->'.format(valueDisplayName), indexName)
-            else:
-                memberNamePrefix = '{}{}[{}].'.format(prefix, value.name, indexName)
-                memberDisplayNamePrefix = ('{}[%i].'.format(valueDisplayName), indexName)
-        else:
-            memberNamePrefix = '{}{}->'.format(prefix, value.name)
-            memberDisplayNamePrefix = '{}->'.format(valueDisplayName)
-        # Expand the struct validation lines
-        expr = self.expandStructCode(self.validatedStructs[value.type], funcName, memberNamePrefix, memberDisplayNamePrefix, indent, expr, postProcSpec)
-        if lenValue:
-            # Close if and for scopes
-            indent = self.decIndent(indent)
-            expr.append(indent + '}\n')
-        expr.append('}\n')
-        return expr
-    #
-    # Generate the parameter checking code
-    def genFuncBody(self, funcName, values, valuePrefix, displayNamePrefix, structTypeName):
-        lines = []    # Generated lines of code
-        unused = []   # Unused variable names
-        for value in values:
-            usedLines = []
-            lenParam = None
-            #
-            # Prefix and suffix for post processing of parameter names for struct members.  Arrays of structures need special processing to include the array index in the full parameter name.
-            postProcSpec = {}
-            postProcSpec['ppp'] = '' if not structTypeName else '{postProcPrefix}'
-            postProcSpec['pps'] = '' if not structTypeName else '{postProcSuffix}'
-            postProcSpec['ppi'] = '' if not structTypeName else '{postProcInsert}'
-            #
-            # Generate the full name of the value, which will be printed in the error message, by adding the variable prefix to the value name
-            valueDisplayName = '{}{}'.format(displayNamePrefix, value.name)
-            #
-            # Check for NULL pointers, ignore the inout count parameters that
-            # will be validated with their associated array
-            if (value.ispointer or value.isstaticarray) and not value.iscount:
-                # Parameters for function argument generation
-                req = 'true'    # Paramerter cannot be NULL
-                cpReq = 'true'  # Count pointer cannot be NULL
-                cvReq = 'true'  # Count value cannot be 0
-                lenDisplayName = None # Name of length parameter to print with validation messages; parameter name with prefix applied
-                # Generate required/optional parameter strings for the pointer and count values
-                if value.isoptional:
-                    req = 'false'
-                if value.len:
-                    # The parameter is an array with an explicit count parameter
-                    lenParam = self.getLenParam(values, value.len)
-                    lenDisplayName = '{}{}'.format(displayNamePrefix, lenParam.name)
-                    if lenParam.ispointer:
-                        # Count parameters that are pointers are inout
-                        if type(lenParam.isoptional) is list:
-                            if lenParam.isoptional[0]:
-                                cpReq = 'false'
-                            if lenParam.isoptional[1]:
-                                cvReq = 'false'
-                        else:
-                            if lenParam.isoptional:
-                                cpReq = 'false'
-                    else:
-                        if lenParam.isoptional:
-                            cvReq = 'false'
-                #
-                # The parameter will not be processes when tagged as 'noautovalidity'
-                # For the pointer to struct case, the struct pointer will not be validated, but any
-                # members not tagged as 'noatuvalidity' will be validated
-                if value.noautovalidity:
-                    # Log a diagnostic message when validation cannot be automatically generated and must be implemented manually
-                    self.logMsg('diag', 'ParameterValidation: No validation for {} {}'.format(structTypeName if structTypeName else funcName, value.name))
-                else:
-                    # If this is a pointer to a struct with an sType field, verify the type
-                    if value.type in self.structTypes:
-                        usedLines += self.makeStructTypeCheck(valuePrefix, value, lenParam, req, cvReq, cpReq, funcName, lenDisplayName, valueDisplayName, postProcSpec, structTypeName)
-                    # If this is an input handle array that is not allowed to contain NULL handles, verify that none of the handles are VK_NULL_HANDLE
-                    elif value.type in self.handleTypes and value.isconst and not self.isHandleOptional(value, lenParam):
-                        usedLines += self.makeHandleCheck(valuePrefix, value, lenParam, req, cvReq, funcName, lenDisplayName, valueDisplayName, postProcSpec)
-                    elif value.type in self.flags and value.isconst:
-                        usedLines += self.makeFlagsArrayCheck(valuePrefix, value, lenParam, req, cvReq, funcName, lenDisplayName, valueDisplayName, postProcSpec)
-                    elif value.isbool and value.isconst:
-                        usedLines.append('skip |= validate_bool32_array(local_data->report_data, "{}", {ppp}"{}"{pps}, {ppp}"{}"{pps}, {pf}{}, {pf}{}, {}, {});\n'.format(funcName, lenDisplayName, valueDisplayName, lenParam.name, value.name, cvReq, req, pf=valuePrefix, **postProcSpec))
-                    elif value.israngedenum and value.isconst:
-                        enum_value_list = 'All%sEnums' % value.type
-                        usedLines.append('skip |= validate_ranged_enum_array(local_data->report_data, "{}", {ppp}"{}"{pps}, {ppp}"{}"{pps}, "{}", {}, {pf}{}, {pf}{}, {}, {});\n'.format(funcName, lenDisplayName, valueDisplayName, value.type, enum_value_list, lenParam.name, value.name, cvReq, req, pf=valuePrefix, **postProcSpec))
-                    elif value.name == 'pNext':
-                        # We need to ignore VkDeviceCreateInfo and VkInstanceCreateInfo, as the loader manipulates them in a way that is not documented in vk.xml
-                        if not structTypeName in ['VkDeviceCreateInfo', 'VkInstanceCreateInfo']:
-                            usedLines += self.makeStructNextCheck(valuePrefix, value, funcName, valueDisplayName, postProcSpec, structTypeName)
-                    else:
-                        usedLines += self.makePointerCheck(valuePrefix, value, lenParam, req, cvReq, cpReq, funcName, lenDisplayName, valueDisplayName, postProcSpec, structTypeName)
-                    # If this is a pointer to a struct (input), see if it contains members that need to be checked
-                    if value.type in self.validatedStructs and value.isconst:
-                        usedLines.append(self.expandStructPointerCode(valuePrefix, value, lenParam, funcName, valueDisplayName, postProcSpec))
-            # Non-pointer types
-            else:
-                # The parameter will not be processes when tagged as 'noautovalidity'
-                # For the struct case, the struct type will not be validated, but any
-                # members not tagged as 'noatuvalidity' will be validated
-                if value.noautovalidity:
-                    # Log a diagnostic message when validation cannot be automatically generated and must be implemented manually
-                    self.logMsg('diag', 'ParameterValidation: No validation for {} {}'.format(structTypeName if structTypeName else funcName, value.name))
-                else:
-                    vuid_name_tag = structTypeName if structTypeName is not None else funcName
-                    if value.type in self.structTypes:
-                        stype = self.structTypes[value.type]
-                        vuid = self.GetVuid("VUID-%s-sType-sType" % value.type)
-                        usedLines.append('skip |= validate_struct_type(local_data->report_data, "{}", {ppp}"{}"{pps}, "{sv}", &({}{vn}), {sv}, false, {});\n'.format(
-                            funcName, valueDisplayName, valuePrefix, vuid, vn=value.name, sv=stype.value, vt=value.type, **postProcSpec))
-                    elif value.type in self.handleTypes:
-                        if not self.isHandleOptional(value, None):
-                            usedLines.append('skip |= validate_required_handle(local_data->report_data, "{}", {ppp}"{}"{pps}, {}{});\n'.format(funcName, valueDisplayName, valuePrefix, value.name, **postProcSpec))
-                    elif value.type in self.flags:
-                        flagBitsName = value.type.replace('Flags', 'FlagBits')
-                        if not flagBitsName in self.flagBits:
-                            vuid = self.GetVuid("VUID-%s-%s-zerobitmask" % (vuid_name_tag, value.name))
-                            usedLines.append('skip |= validate_reserved_flags(local_data->report_data, "{}", {ppp}"{}"{pps}, {pf}{}, {});\n'.format(funcName, valueDisplayName, value.name, vuid, pf=valuePrefix, **postProcSpec))
-                        else:
-                            if value.isoptional:
-                                flagsRequired = 'false'
-                                vuid = self.GetVuid("VUID-%s-%s-parameter" % (vuid_name_tag, value.name))
-                            else:
-                                flagsRequired = 'true'
-                                vuid = self.GetVuid("VUID-%s-%s-requiredbitmask" % (vuid_name_tag, value.name))
-                            allFlagsName = 'All' + flagBitsName
-                            usedLines.append('skip |= validate_flags(local_data->report_data, "{}", {ppp}"{}"{pps}, "{}", {}, {pf}{}, {}, false, {});\n'.format(funcName, valueDisplayName, flagBitsName, allFlagsName, value.name, flagsRequired, vuid, pf=valuePrefix, **postProcSpec))
-                    elif value.type in self.flagBits:
-                        flagsRequired = 'false' if value.isoptional else 'true'
-                        allFlagsName = 'All' + value.type
-                        vuid = self.GetVuid("VUID-%s-%s-parameter" % (vuid_name_tag, value.name))
-                        usedLines.append('skip |= validate_flags(local_data->report_data, "{}", {ppp}"{}"{pps}, "{}", {}, {pf}{}, {}, true, {});\n'.format(funcName, valueDisplayName, value.type, allFlagsName, value.name, flagsRequired, vuid, pf=valuePrefix, **postProcSpec))
-                    elif value.isbool:
-                        usedLines.append('skip |= validate_bool32(local_data->report_data, "{}", {ppp}"{}"{pps}, {}{});\n'.format(funcName, valueDisplayName, valuePrefix, value.name, **postProcSpec))
-                    elif value.israngedenum:
-                        vuid = self.GetVuid("VUID-%s-%s-parameter" % (vuid_name_tag, value.name))
-                        enum_value_list = 'All%sEnums' % value.type
-                        usedLines.append('skip |= validate_ranged_enum(local_data->report_data, "{}", {ppp}"{}"{pps}, "{}", {}, {}{}, {});\n'.format(funcName, valueDisplayName, value.type, enum_value_list, valuePrefix, value.name, vuid, **postProcSpec))
-                    # If this is a struct, see if it contains members that need to be checked
-                    if value.type in self.validatedStructs:
-                        memberNamePrefix = '{}{}.'.format(valuePrefix, value.name)
-                        memberDisplayNamePrefix = '{}.'.format(valueDisplayName)
-                        usedLines.append(self.expandStructCode(self.validatedStructs[value.type], funcName, memberNamePrefix, memberDisplayNamePrefix, '', [], postProcSpec))
-            # Append the parameter check to the function body for the current command
-            if usedLines:
-                # Apply special conditional checks
-                if value.condition:
-                    usedLines = self.genConditionalCall(valuePrefix, value.condition, usedLines)
-                lines += usedLines
-            elif not value.iscount:
-                # If no expression was generated for this value, it is unreferenced by the validation function, unless
-                # it is an array count, which is indirectly referenced for array valiadation.
-                unused.append(value.name)
-        if not lines:
-            lines.append('// No xml-driven validation\n')
-        return lines, unused
-    #
-    # Generate the struct member check code from the captured data
-    def processStructMemberData(self):
-        indent = self.incIndent(None)
-        for struct in self.structMembers:
-            #
-            # The string returned by genFuncBody will be nested in an if check for a NULL pointer, so needs its indent incremented
-            lines, unused = self.genFuncBody('{funcName}', struct.members, '{valuePrefix}', '{displayNamePrefix}', struct.name)
-            if lines:
-                self.validatedStructs[struct.name] = lines
-    #
-    # Generate the command param check code from the captured data
-    def processCmdData(self):
-        indent = self.incIndent(None)
-        for command in self.commands:
-            just_validate = False
-            if command.name in self.validate_only:
-                just_validate = True
-            # Skip first parameter if it is a dispatch handle (everything except vkCreateInstance)
-            startIndex = 0 if command.name == 'vkCreateInstance' else 1
-            lines, unused = self.genFuncBody(command.name, command.params[startIndex:], '', '', None)
-            # Cannot validate extension dependencies for device extension APIs having a physical device as their dispatchable object
-            if (command.name in self.required_extensions) and (self.extension_type != 'device' or command.params[0].type != 'VkPhysicalDevice'):
-                ext_test = ''
-                for ext in self.required_extensions[command.name]:
-                    ext_name_define = ''
-                    ext_enable_name = ''
-                    for extension in self.registry.extensions:
-                        if extension.attrib['name'] == ext:
-                            ext_name_define = extension[0][1].get('name')
-                            ext_enable_name = ext_name_define.lower()
-                            ext_enable_name = re.sub('_extension_name', '', ext_enable_name)
-                            break
-                    ext_test = 'if (!local_data->extensions.%s) skip |= OutputExtensionError(local_data, "%s", %s);\n' % (ext_enable_name, command.name, ext_name_define)
-                    lines.insert(0, ext_test)
-            if lines:
-                cmdDef = self.getCmdDef(command) + '\n'
-                # For a validation-only routine, change the function declaration
-                if just_validate:
-                    jv_def = '// Generated function handles validation only -- API definition is in non-generated source\n'
-                    jv_def += 'extern %s\n\n' % command.cdecl
-                    cmdDef = 'bool parameter_validation_' + cmdDef.split('VKAPI_CALL ',1)[1]
-                    if command.name == 'vkCreateInstance':
-                        cmdDef = cmdDef.replace('(\n', '(\n    VkInstance instance,\n')
-                    cmdDef = jv_def + cmdDef
-                cmdDef += '{\n'
-
-                # Add list of commands to skip -- just generate the routine signature and put the manual source in parameter_validation_utils.cpp
-                if command.params[0].type in ["VkInstance", "VkPhysicalDevice"] or command.name == 'vkCreateInstance':
-                    map_name = 'instance_layer_data_map'
-                    map_type = 'instance_layer_data'
-                else:
-                    map_name = 'layer_data_map'
-                    map_type = 'layer_data'
-                instance_param = command.params[0].name
-                if command.name == 'vkCreateInstance':
-                    instance_param = 'instance'
-                layer_data = '    %s *local_data = GetLayerDataPtr(get_dispatch_key(%s), %s);\n' % (map_type, instance_param, map_name)
-                cmdDef += layer_data
-                cmdDef += '%sbool skip = false;\n' % indent
-                if not just_validate:
-                    if command.result != '':
-                        if command.result == "VkResult":
-                            cmdDef += indent + '%s result = VK_ERROR_VALIDATION_FAILED_EXT;\n' % command.result
-                        elif command.result == "VkBool32":
-                            cmdDef += indent + '%s result = VK_FALSE;\n' % command.result
-                        else:
-                            raise Exception("Unknown result type: " + command.result)
-
-                    cmdDef += '%sstd::unique_lock<std::mutex> lock(global_lock);\n' % indent
-                for line in lines:
-                    cmdDef += '\n'
-                    if type(line) is list:
-                        for sub in line:
-                            cmdDef += indent + sub
-                    else:
-                        cmdDef += indent + line
-                cmdDef += '\n'
-                if not just_validate:
-                    # Generate parameter list for manual fcn and down-chain calls
-                    params_text = ''
-                    for param in command.params:
-                        params_text += '%s, ' % param.name
-                    params_text = params_text[:-2]
-                    # Generate call to manual function if its function pointer is non-null
-                    cmdDef += '%sPFN_manual_%s custom_func = (PFN_manual_%s)custom_functions["%s"];\n' % (indent, command.name, command.name, command.name)
-                    cmdDef += '%sif (custom_func != nullptr) {\n' % indent
-                    cmdDef += '    %sskip |= custom_func(%s);\n' % (indent, params_text)
-                    cmdDef += '%s}\n\n' % indent
-                    # Release the validation lock
-                    cmdDef += '%slock.unlock();\n' % indent
-                    # Generate skip check and down-chain call
-                    cmdDef += '%sif (!skip) {\n'  % indent
-                    down_chain_call = '    %s' % indent
-                    if command.result != '':
-                        down_chain_call += '    result = '
-                    # Generate down-chain API call
-                    api_call = '%s(%s);' % (command.name, params_text)
-                    down_chain_call += 'local_data->dispatch_table.%s\n' % api_call[2:]
-                    cmdDef += down_chain_call
-                    cmdDef += '%s}\n' % indent
-                    if command.result != '':
-                        cmdDef += '%sreturn result;\n' % indent
-                else:
-                    cmdDef += '%sreturn skip;\n' % indent
-                cmdDef += '}\n'
-                self.validation.append(cmdDef)
diff --git a/scripts/spec.py b/scripts/spec.py
deleted file mode 100644
index 2c9507f..0000000
--- a/scripts/spec.py
+++ /dev/null
@@ -1,328 +0,0 @@
-#!/usr/bin/python -i
-
-import sys
-try:
-    import urllib.request as urllib2
-except ImportError:
-    import urllib2
-from bs4 import BeautifulSoup
-import json
-import vuid_mapping
-import re
-
-#############################
-# spec.py script
-#
-# Overview - this script is intended to generate validation error codes and message strings from the json spec file
-#  that contains all of the valid usage statements. In addition to generating the header file, it provides a number of
-#  corrollary services to aid in generating/updating the header.
-#
-# Ideal flow - Pull the valid usage text and IDs from the spec json, pull the IDs from the validation error database,
-#  then update the database with any new IDs from the json file and generate new database and header file.
-#
-# TODO:
-#  1. When VUs go away (in error DB, but not in json) need to report them and remove from DB as deleted
-#
-#############################
-
-
-out_filename = "../layers/vk_validation_error_messages.h" # can override w/ '-out <filename>' option
-db_filename = "../layers/vk_validation_error_database.txt" # can override w/ '-gendb <filename>' option
-json_filename = "../scripts/validusage.json" # can override w/ '-json-file <filename> option
-gen_db = False # set to True when '-gendb <filename>' option provided
-json_compare = False # compare existing DB to json file input
-# This is the root spec link that is used in error messages to point users to spec sections
-#old_spec_url = "https://www.khronos.org/registry/vulkan/specs/1.0/xhtml/vkspec.html"
-spec_url = "https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html"
-core_url = "https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html"
-ext_url = "https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html"
-# After the custom validation error message, this is the prefix for the standard message that includes the
-#  spec valid usage language as well as the link to nearest section of spec to that language
-error_msg_prefix = "The spec valid usage text states "
-validation_error_enum_name = "VALIDATION_ERROR_"
-
-def printHelp():
-    print ("Usage: python spec.py [-out <headerfile.h>] [-gendb <databasefile.txt>] [-update] [-json-file <json_file>] [-help]")
-    print ("\n Default script behavior is to parse the specfile and generate a header of unique error enums and corresponding error messages based on the specfile.\n")
-    print ("  Default specfile is from online at %s" % (spec_url))
-    print ("  Default headerfile is %s" % (out_filename))
-    print ("  Default databasefile is %s" % (db_filename))
-    print ("\nIf '-gendb' option is specified then a database file is generated to default file or <databasefile.txt> if supplied. The database file stores")
-    print ("  the list of enums and their error messages.")
-    print ("\nIf '-update' option is specified this triggers the master flow to automate updating header and database files using default db file as baseline")
-    print ("  and online spec file as the latest. The default header and database files will be updated in-place for review and commit to the git repo.")
-    print ("\nIf '-json-file' option is specified, it will override the default json file location")
-
-def get8digithex(dec_num):
-    """Convert a decimal # into an 8-digit hex"""
-    if dec_num > 4294967295:
-        print ("ERROR: Decimal # %d can't be represented in 8 hex digits" % (dec_num))
-        sys.exit()
-    hex_num = hex(dec_num)
-    return hex_num[2:].zfill(8)
-
-class Specification:
-    def __init__(self):
-        self.tree   = None
-        self.error_db_dict = {} # dict of previous error values read in from database file
-        self.delimiter = '~^~' # delimiter for db file
-        # Global dicts used for tracking spec updates from old to new VUs
-        self.orig_no_link_msg_dict = {} # Pair of API,Original msg w/o spec link to ID list mapping
-        self.orig_core_msg_dict = {} # Pair of API,Original core msg (no link or section) to ID list mapping
-        self.last_mapped_id = -10 # start as negative so we don't hit an accidental sequence
-        self.orig_test_imp_enums = set() # Track old enums w/ tests and/or implementation to flag any that aren't carried fwd
-        # Dict of data from json DB
-        # Key is API,<short_msg> which leads to dict w/ following values
-        #   'ext' -> <core|<ext_name>>
-        #   'string_vuid' -> <string_vuid>
-        #   'number_vuid' -> <numerical_vuid>
-        self.json_db = {}
-        self.json_missing = 0
-        self.struct_to_func_map = {} # Map structs to the API func that they fall under in the spec
-        self.duplicate_json_key_count = 0
-        self.copyright = """/* THIS FILE IS GENERATED.  DO NOT EDIT. */
-
-/*
- * Vulkan
- *
- * Copyright (c) 2016 Google Inc.
- * Copyright (c) 2016 LunarG, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * Author: Tobin Ehlis <tobine@google.com>
- */"""
-
-    def readJSON(self):
-        """Read in JSON file"""
-        if json_filename is not None:
-            with open(json_filename) as jsf:
-                self.json_data = json.load(jsf, encoding='utf-8')
-        else:
-            response = urllib2.urlopen(json_url).read().decode('utf-8')
-            self.json_data = json.loads(response)
-
-    def parseJSON(self):
-        """Parse JSON VUIDs into data struct"""
-        # Format of JSON file is:
-        # "API": { "core|EXT": [ {"vuid": "<id>", "text": "<VU txt>"}]},
-        # "VK_KHX_external_memory" & "VK_KHX_device_group" - extension case (vs. "core")
-        for top_level in sorted(self.json_data):
-            if "validation" == top_level:
-                for api in sorted(self.json_data[top_level]):
-                    for ext in sorted(self.json_data[top_level][api]):
-                        for vu_txt_dict in self.json_data[top_level][api][ext]:
-                            print ("Looking at dict for api:ext entry %s:%s" % (api, ext))
-                            vuid = vu_txt_dict['vuid']
-                            vutxt = vu_txt_dict['text']
-                            # strip asciidoc xref from vu text
-                            vutxt = re.sub('&amp;amp;lt;&amp;amp;lt;([^&]*,\\s*|)(.*?)&amp;amp;gt;&amp;amp;gt;', '\\2', vutxt)
-                            #print ("%s:%s:%s:%s" % (api, ext, vuid, vutxt))
-                            #print ("VUTXT orig:%s" % (vutxt))
-                            just_txt = BeautifulSoup(vutxt, 'html.parser')
-                            #print ("VUTXT only:%s" % (just_txt.get_text()))
-                            num_vuid = vuid_mapping.convertVUID(vuid)
-                            self.json_db[vuid] = {}
-                            self.json_db[vuid]['ext'] = ext
-                            self.json_db[vuid]['number_vuid'] = num_vuid
-                            self.json_db[vuid]['struct_func'] = api
-                            just_txt = just_txt.get_text().strip()
-                            unicode_map = {
-                            u"\u2019" : "'",
-                            u"\u201c" : "\"",
-                            u"\u201d" : "\"",
-                            u"\u2192" : "->",
-                            }
-                            for um in unicode_map:
-                                just_txt = just_txt.replace(um, unicode_map[um])
-                            self.json_db[vuid]['vu_txt'] = just_txt.replace("\\", "")
-                            print ("Spec vu txt:%s" % (self.json_db[vuid]['vu_txt']))
-        #sys.exit()
-
-    def compareJSON(self):
-        """Compare parsed json file with existing data read in from DB file"""
-        # update database for all json vuids
-        for vuid, vuid_json_data in self.json_db.items():
-            # convert vuid to error enum
-            error_enum = "%s%s" % (validation_error_enum_name, get8digithex(vuid_json_data['number_vuid']))
-            # create database entry if one doesn't exist
-            if error_enum not in self.error_db_dict:
-                self.error_db_dict[error_enum] = {'check_implemented': 'N',
-                                                  'testname': 'None',
-                                                  'note': ''}
-            # update database entry with data from json file
-            vuid_db_data = self.error_db_dict[error_enum]
-            if 'core' == vuid_json_data['ext'] or '!' in vuid_json_data['ext']:
-                spec_link = "%s#%s" % (core_url, vuid)
-            else:
-                spec_link = "%s#%s" % (ext_url, vuid)
-            vuid_db_data['api'] = vuid_json_data['struct_func']
-            vuid_db_data['vuid_string'] = vuid
-            vuid_db_data['error_msg'] = "%s'%s' (%s)" % (error_msg_prefix, vuid_json_data['vu_txt'], spec_link)
-            vuid_db_data['ext'] = vuid_json_data['ext']
-            last_segment = vuid.split("-")[-1]
-            vuid_db_data['implicit'] = not last_segment.isdigit()
-
-        # remove missing vuids from database
-        for enum in list(self.error_db_dict):
-            vuid = self.error_db_dict[enum]['vuid_string']
-            if vuid not in self.json_db:
-                print ("WARN: Couldn't find vuid_string in json db:%s" % (vuid))
-                del self.error_db_dict[enum]
-
-    def genHeader(self, header_file):
-        """Generate a header file based on the contents of a parsed spec"""
-        print ("Generating header %s..." % (header_file))
-        file_contents = []
-        file_contents.append(self.copyright)
-        file_contents.append('\n#pragma once')
-        file_contents.append('\n// Disable auto-formatting for generated file')
-        file_contents.append('// clang-format off')
-        file_contents.append('\n#include <string>')
-        file_contents.append('#include <unordered_map>')
-        file_contents.append('\n// enum values for unique validation error codes')
-        file_contents.append('//  Corresponding validation error message for each enum is given in the mapping table below')
-        file_contents.append('//  When a given error occurs, these enum values should be passed to the as the messageCode')
-        file_contents.append('//  parameter to the PFN_vkDebugReportCallbackEXT function')
-        enum_decl = ['enum UNIQUE_VALIDATION_ERROR_CODE {\n    VALIDATION_ERROR_UNDEFINED = -1,']
-        vuid_int_to_error_map = ['static std::unordered_map<int, char const *const> validation_error_map{']
-        vuid_string_to_error_map = ['static std::unordered_map<std::string, int> validation_error_text_map{']
-        enum_value = 0
-        max_enum_val = 0
-        for enum in sorted(self.error_db_dict):
-            enum_decl.append('    %s = 0x%s,' % (enum, enum[-8:]))
-            vuid_int_to_error_map.append('    {%s, "%s"},' % (enum, self.error_db_dict[enum]['error_msg'].replace('"', '\\"')))
-            vuid_str = self.error_db_dict[enum]['vuid_string']
-            vuid_string_to_error_map.append('    {"%s", %s},' % (vuid_str, enum))
-            max_enum_val = max(max_enum_val, enum_value)
-        enum_decl.append('    %sMAX_ENUM = %d,' % (validation_error_enum_name, max_enum_val + 1))
-        enum_decl.append('};')
-        vuid_int_to_error_map.append('};\n')
-        vuid_string_to_error_map.append('};\n')
-        file_contents.extend(enum_decl)
-        file_contents.append('\n// Mapping from unique validation error enum to the corresponding spec text')
-        file_contents.extend(vuid_int_to_error_map)
-        file_contents.append('\n// Mapping from spec validation error text string to unique validation error enum')
-        file_contents.extend(vuid_string_to_error_map)
-        #print ("File contents: %s" % (file_contents))
-        with open(header_file, "w") as outfile:
-            outfile.write("\n".join(file_contents))
-    def genDB(self, db_file):
-        """Generate a database of check_enum, check_coded?, testname, API, VUID_string, core|ext, error_string, notes"""
-        db_lines = []
-        # Write header for database file
-        db_lines.append("# This is a database file with validation error check information")
-        db_lines.append("# Comments are denoted with '#' char")
-        db_lines.append("# The format of the lines is:")
-        db_lines.append("# <error_enum>%s<check_implemented>%s<testname>%s<api>%s<vuid_string>%s<core|ext>%s<errormsg>%s<note>" % (self.delimiter, self.delimiter, self.delimiter, self.delimiter, self.delimiter, self.delimiter, self.delimiter))
-        db_lines.append("# error_enum: Unique error enum for this check of format %s<uniqueid>" % validation_error_enum_name)
-        db_lines.append("# check_implemented: 'Y' if check has been implemented in layers, or 'N' for not implemented")
-        db_lines.append("# testname: Name of validation test for this check, 'Unknown' for unknown, 'None' if not implemented, or 'NotTestable' if cannot be implemented")
-        db_lines.append("# api: Vulkan API function that this check is related to")
-        db_lines.append("# vuid_string: Unique string to identify this check")
-        db_lines.append("# core|ext: Either 'core' for core spec or some extension string that indicates the extension required for this VU to be relevant")
-        db_lines.append("# errormsg: The unique error message for this check that includes spec language and link")
-        db_lines.append("# note: Free txt field with any custom notes related to the check in question")
-        for enum in sorted(self.error_db_dict):
-            print ("Gen DB for enum %s" % (enum))
-            implicit = self.error_db_dict[enum]['implicit']
-            implemented = self.error_db_dict[enum]['check_implemented']
-            testname = self.error_db_dict[enum]['testname']
-            note = self.error_db_dict[enum]['note']
-            core_ext = self.error_db_dict[enum]['ext']
-            self.error_db_dict[enum]['vuid_string'] = self.error_db_dict[enum]['vuid_string']
-            if implicit and 'implicit' not in note: # add implicit note
-                if '' != note:
-                    note = "implicit, %s" % (note)
-                else:
-                    note = "implicit"
-            db_lines.append("%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s" % (enum, self.delimiter, implemented, self.delimiter, testname, self.delimiter, self.error_db_dict[enum]['api'], self.delimiter, self.error_db_dict[enum]['vuid_string'], self.delimiter, core_ext, self.delimiter, self.error_db_dict[enum]['error_msg'], self.delimiter, note))
-        db_lines.append("\n") # newline at end of file
-        print ("Generating database file %s" % (db_file))
-        with open(db_file, "w") as outfile:
-            outfile.write("\n".join(db_lines))
-    def readDB(self, db_file):
-        """Read a db file into a dict, refer to genDB function above for format of each line"""
-        with open(db_file, "r", encoding='utf-8') as infile:
-            for line in infile:
-                line = line.strip()
-                if line.startswith('#') or '' == line:
-                    continue
-                db_line = line.split(self.delimiter)
-                if len(db_line) != 8:
-                    print ("ERROR: Bad database line doesn't have 8 elements: %s" % (line))
-                error_enum = db_line[0]
-                implemented = db_line[1]
-                testname = db_line[2]
-                api = db_line[3]
-                vuid_str = db_line[4]
-                core_ext = db_line[5]
-                error_str = db_line[6]
-                note = db_line[7]
-                # Also read complete database contents into our class var for later use
-                self.error_db_dict[error_enum] = {}
-                self.error_db_dict[error_enum]['check_implemented'] = implemented
-                self.error_db_dict[error_enum]['testname'] = testname
-                self.error_db_dict[error_enum]['api'] = api
-                self.error_db_dict[error_enum]['vuid_string'] = vuid_str
-                self.error_db_dict[error_enum]['ext'] = core_ext
-                self.error_db_dict[error_enum]['error_msg'] = error_str
-                self.error_db_dict[error_enum]['note'] = note
-                implicit = False
-                last_segment = vuid_str.split("-")[-1]
-                if last_segment in vuid_mapping.implicit_type_map:
-                    implicit = True
-                elif not last_segment.isdigit(): # Explicit ids should only have digits in last segment
-                    print ("ERROR: Found last segment of val error ID that isn't in implicit map and doesn't have numbers in last segment: %s" % (last_segment))
-                    sys.exit()
-                self.error_db_dict[error_enum]['implicit'] = implicit
-if __name__ == "__main__":
-    i = 1
-    use_online = True # Attempt to grab spec from online by default
-    while (i < len(sys.argv)):
-        arg = sys.argv[i]
-        i = i + 1
-        if (arg == '-json-file'):
-            json_filename = sys.argv[i]
-            i = i + 1
-        elif (arg == '-json-compare'):
-            json_compare = True
-        elif (arg == '-out'):
-            out_filename = sys.argv[i]
-            i = i + 1
-        elif (arg == '-gendb'):
-            gen_db = True
-            # Set filename if supplied, else use default
-            if i < len(sys.argv) and not sys.argv[i].startswith('-'):
-                db_filename = sys.argv[i]
-                i = i + 1
-        elif (arg == '-update'):
-            json_compare = True
-            gen_db = True
-        elif (arg in ['-help', '-h']):
-            printHelp()
-            sys.exit()
-    spec = Specification()
-    spec.readJSON()
-    spec.parseJSON()
-    if (json_compare):
-        # Read in current spec info from db file
-        (orig_err_msg_dict) = spec.readDB(db_filename)
-        spec.compareJSON()
-        print ("Found %d missing db entries in json db" % (spec.json_missing))
-        print ("Found %d duplicate json entries" % (spec.duplicate_json_key_count))
-        spec.genDB(db_filename)
-    if (gen_db):
-        spec.genDB(db_filename)
-    print ("Writing out file (-out) to '%s'" % (out_filename))
-    spec.genHeader(out_filename)
diff --git a/scripts/threading_generator.py b/scripts/threading_generator.py
deleted file mode 100644
index 5cfb4d7..0000000
--- a/scripts/threading_generator.py
+++ /dev/null
@@ -1,458 +0,0 @@
-#!/usr/bin/python3 -i
-#
-# Copyright (c) 2015-2016 The Khronos Group Inc.
-# Copyright (c) 2015-2016 Valve Corporation
-# Copyright (c) 2015-2016 LunarG, Inc.
-# Copyright (c) 2015-2016 Google Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# Author: Mike Stroyan <stroyan@google.com>
-# Author: Mark Lobodzinski <mark@lunarg.com>
-
-import os,re,sys
-from generator import *
-from common_codegen import *
-
-# ThreadGeneratorOptions - subclass of GeneratorOptions.
-#
-# Adds options used by ThreadOutputGenerator objects during threading
-# layer generation.
-#
-# Additional members
-#   prefixText - list of strings to prefix generated header with
-#     (usually a copyright statement + calling convention macros).
-#   protectFile - True if multiple inclusion protection should be
-#     generated (based on the filename) around the entire header.
-#   protectFeature - True if #ifndef..#endif protection should be
-#     generated around a feature interface in the header file.
-#   genFuncPointers - True if function pointer typedefs should be
-#     generated
-#   protectProto - If conditional protection should be generated
-#     around prototype declarations, set to either '#ifdef'
-#     to require opt-in (#ifdef protectProtoStr) or '#ifndef'
-#     to require opt-out (#ifndef protectProtoStr). Otherwise
-#     set to None.
-#   protectProtoStr - #ifdef/#ifndef symbol to use around prototype
-#     declarations, if protectProto is set
-#   apicall - string to use for the function declaration prefix,
-#     such as APICALL on Windows.
-#   apientry - string to use for the calling convention macro,
-#     in typedefs, such as APIENTRY.
-#   apientryp - string to use for the calling convention macro
-#     in function pointer typedefs, such as APIENTRYP.
-#   indentFuncProto - True if prototype declarations should put each
-#     parameter on a separate line
-#   indentFuncPointer - True if typedefed function pointers should put each
-#     parameter on a separate line
-#   alignFuncParam - if nonzero and parameters are being put on a
-#     separate line, align parameter names at the specified column
-class ThreadGeneratorOptions(GeneratorOptions):
-    def __init__(self,
-                 filename = None,
-                 directory = '.',
-                 apiname = None,
-                 profile = None,
-                 versions = '.*',
-                 emitversions = '.*',
-                 defaultExtensions = None,
-                 addExtensions = None,
-                 removeExtensions = None,
-                 emitExtensions = None,
-                 sortProcedure = regSortFeatures,
-                 prefixText = "",
-                 genFuncPointers = True,
-                 protectFile = True,
-                 protectFeature = True,
-                 apicall = '',
-                 apientry = '',
-                 apientryp = '',
-                 indentFuncProto = True,
-                 indentFuncPointer = False,
-                 alignFuncParam = 0,
-                 expandEnumerants = True):
-        GeneratorOptions.__init__(self, filename, directory, apiname, profile,
-                                  versions, emitversions, defaultExtensions,
-                                  addExtensions, removeExtensions, emitExtensions, sortProcedure)
-        self.prefixText      = prefixText
-        self.genFuncPointers = genFuncPointers
-        self.protectFile     = protectFile
-        self.protectFeature  = protectFeature
-        self.apicall         = apicall
-        self.apientry        = apientry
-        self.apientryp       = apientryp
-        self.indentFuncProto = indentFuncProto
-        self.indentFuncPointer = indentFuncPointer
-        self.alignFuncParam  = alignFuncParam
-        self.expandEnumerants = expandEnumerants
-
-
-# ThreadOutputGenerator - subclass of OutputGenerator.
-# Generates Thread checking framework
-#
-# ---- methods ----
-# ThreadOutputGenerator(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 ThreadOutputGenerator(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 + ['command']
-    def __init__(self,
-                 errFile = sys.stderr,
-                 warnFile = sys.stderr,
-                 diagFile = sys.stdout):
-        OutputGenerator.__init__(self, errFile, warnFile, diagFile)
-        # Internal state - accumulators for different inner block text
-        self.sections = dict([(section, []) for section in self.ALL_SECTIONS])
-        self.intercepts = []
-
-    # Check if the parameter passed in is a pointer to an array
-    def paramIsArray(self, param):
-        return param.attrib.get('len') is not None
-
-    # Check if the parameter passed in is a pointer
-    def paramIsPointer(self, param):
-        ispointer = False
-        for elem in param:
-            if ((elem.tag is not 'type') and (elem.tail is not None)) and '*' in elem.tail:
-                ispointer = True
-        return ispointer
-
-    # Check if an object is a non-dispatchable handle
-    def isHandleTypeNonDispatchable(self, handletype):
-        handle = self.registry.tree.find("types/type/[name='" + handletype + "'][@category='handle']")
-        if handle is not None and handle.find('type').text == 'VK_DEFINE_NON_DISPATCHABLE_HANDLE':
-            return True
-        else:
-            return False
-
-    # Check if an object is a dispatchable handle
-    def isHandleTypeDispatchable(self, handletype):
-        handle = self.registry.tree.find("types/type/[name='" + handletype + "'][@category='handle']")
-        if handle is not None and handle.find('type').text == 'VK_DEFINE_HANDLE':
-            return True
-        else:
-            return False
-
-    def makeThreadUseBlock(self, cmd, functionprefix):
-        """Generate C function pointer typedef for <command> Element"""
-        paramdecl = ''
-        # Find and add any parameters that are thread unsafe
-        params = cmd.findall('param')
-        for param in params:
-            paramname = param.find('name')
-            if False: # self.paramIsPointer(param):
-                paramdecl += '    // not watching use of pointer ' + paramname.text + '\n'
-            else:
-                externsync = param.attrib.get('externsync')
-                if externsync == 'true':
-                    if self.paramIsArray(param):
-                        paramdecl += '    for (uint32_t index=0;index<' + param.attrib.get('len') + ';index++) {\n'
-                        paramdecl += '        ' + functionprefix + 'WriteObject(my_data, ' + paramname.text + '[index]);\n'
-                        paramdecl += '    }\n'
-                    else:
-                        paramdecl += '    ' + functionprefix + 'WriteObject(my_data, ' + paramname.text + ');\n'
-                elif (param.attrib.get('externsync')):
-                    if self.paramIsArray(param):
-                        # Externsync can list pointers to arrays of members to synchronize
-                        paramdecl += '    for (uint32_t index=0;index<' + param.attrib.get('len') + ';index++) {\n'
-                        for member in externsync.split(","):
-                            # Replace first empty [] in member name with index
-                            element = member.replace('[]','[index]',1)
-                            if '[]' in element:
-                                # Replace any second empty [] in element name with
-                                # inner array index based on mapping array names like
-                                # "pSomeThings[]" to "someThingCount" array size.
-                                # This could be more robust by mapping a param member
-                                # name to a struct type and "len" attribute.
-                                limit = element[0:element.find('s[]')] + 'Count'
-                                dotp = limit.rfind('.p')
-                                limit = limit[0:dotp+1] + limit[dotp+2:dotp+3].lower() + limit[dotp+3:]
-                                paramdecl += '        for(uint32_t index2=0;index2<'+limit+';index2++)\n'
-                                element = element.replace('[]','[index2]')
-                            paramdecl += '            ' + functionprefix + 'WriteObject(my_data, ' + element + ');\n'
-                        paramdecl += '    }\n'
-                    else:
-                        # externsync can list members to synchronize
-                        for member in externsync.split(","):
-                            member = str(member).replace("::", "->")
-                            member = str(member).replace(".", "->")
-                            paramdecl += '    ' + functionprefix + 'WriteObject(my_data, ' + member + ');\n'
-                else:
-                    paramtype = param.find('type')
-                    if paramtype is not None:
-                        paramtype = paramtype.text
-                    else:
-                        paramtype = 'None'
-                    if (self.isHandleTypeDispatchable(paramtype) or self.isHandleTypeNonDispatchable(paramtype)) and paramtype != 'VkPhysicalDevice':
-                        if self.paramIsArray(param) and ('pPipelines' != paramname.text):
-                            # Add pointer dereference for array counts that are pointer values
-                            dereference = ''
-                            for candidate in params:
-                                if param.attrib.get('len') == candidate.find('name').text:
-                                    if self.paramIsPointer(candidate):
-                                        dereference = '*'
-                            param_len = str(param.attrib.get('len')).replace("::", "->")
-                            paramdecl += '    for (uint32_t index = 0; index < ' + dereference + param_len + '; index++) {\n'
-                            paramdecl += '        ' + functionprefix + 'ReadObject(my_data, ' + paramname.text + '[index]);\n'
-                            paramdecl += '    }\n'
-                        elif not self.paramIsPointer(param):
-                            # Pointer params are often being created.
-                            # They are not being read from.
-                            paramdecl += '    ' + functionprefix + 'ReadObject(my_data, ' + paramname.text + ');\n'
-        explicitexternsyncparams = cmd.findall("param[@externsync]")
-        if (explicitexternsyncparams is not None):
-            for param in explicitexternsyncparams:
-                externsyncattrib = param.attrib.get('externsync')
-                paramname = param.find('name')
-                paramdecl += '    // Host access to '
-                if externsyncattrib == 'true':
-                    if self.paramIsArray(param):
-                        paramdecl += 'each member of ' + paramname.text
-                    elif self.paramIsPointer(param):
-                        paramdecl += 'the object referenced by ' + paramname.text
-                    else:
-                        paramdecl += paramname.text
-                else:
-                    paramdecl += externsyncattrib
-                paramdecl += ' must be externally synchronized\n'
-
-        # Find and add any "implicit" parameters that are thread unsafe
-        implicitexternsyncparams = cmd.find('implicitexternsyncparams')
-        if (implicitexternsyncparams is not None):
-            for elem in implicitexternsyncparams:
-                paramdecl += '    // '
-                paramdecl += elem.text
-                paramdecl += ' must be externally synchronized between host accesses\n'
-
-        if (paramdecl == ''):
-            return None
-        else:
-            return paramdecl
-    def beginFile(self, genOpts):
-        OutputGenerator.beginFile(self, genOpts)
-        # C-specific
-        #
-        # Multiple inclusion protection & C++ namespace.
-        if (genOpts.protectFile and self.genOpts.filename):
-            headerSym = '__' + re.sub('\.h', '_h_', os.path.basename(self.genOpts.filename))
-            write('#ifndef', headerSym, file=self.outFile)
-            write('#define', headerSym, '1', file=self.outFile)
-            self.newline()
-        write('namespace threading {', file=self.outFile)
-        self.newline()
-        #
-        # User-supplied prefix text, if any (list of strings)
-        if (genOpts.prefixText):
-            for s in genOpts.prefixText:
-                write(s, file=self.outFile)
-    def endFile(self):
-        # C-specific
-        # Finish C++ namespace and multiple inclusion protection
-        self.newline()
-        # record intercepted procedures
-        write('// Map of all APIs to be intercepted by this layer', file=self.outFile)
-        write('static const std::unordered_map<std::string, void*> name_to_funcptr_map = {', file=self.outFile)
-        write('\n'.join(self.intercepts), file=self.outFile)
-        write('};\n', file=self.outFile)
-        self.newline()
-        write('} // namespace threading', file=self.outFile)
-        if (self.genOpts.protectFile and self.genOpts.filename):
-            self.newline()
-            write('#endif', file=self.outFile)
-        # Finish processing in superclass
-        OutputGenerator.endFile(self)
-    def beginFeature(self, interface, emit):
-        #write('// starting beginFeature', file=self.outFile)
-        # Start processing in superclass
-        OutputGenerator.beginFeature(self, interface, emit)
-        # C-specific
-        # Accumulate includes, defines, types, enums, function pointer typedefs,
-        # end function prototypes separately for this feature. They're only
-        # printed in endFeature().
-        self.featureExtraProtect = GetFeatureProtect(interface)
-        self.sections = dict([(section, []) for section in self.ALL_SECTIONS])
-        #write('// ending beginFeature', file=self.outFile)
-    def endFeature(self):
-        # C-specific
-        # Actually write the interface to the output file.
-        #write('// starting endFeature', file=self.outFile)
-        if (self.emit):
-            self.newline()
-            if (self.genOpts.protectFeature):
-                write('#ifndef', self.featureName, file=self.outFile)
-            # If type declarations are needed by other features based on
-            # this one, it may be necessary to suppress the ExtraProtect,
-            # or move it below the 'for section...' loop.
-            #write('// endFeature looking at self.featureExtraProtect', file=self.outFile)
-            if (self.featureExtraProtect != None):
-                write('#ifdef', self.featureExtraProtect, file=self.outFile)
-            #write('#define', self.featureName, '1', file=self.outFile)
-            for section in self.TYPE_SECTIONS:
-                #write('// endFeature writing section'+section, file=self.outFile)
-                contents = self.sections[section]
-                if contents:
-                    write('\n'.join(contents), file=self.outFile)
-                    self.newline()
-            #write('// endFeature looking at self.sections[command]', file=self.outFile)
-            if (self.sections['command']):
-                write('\n'.join(self.sections['command']), end=u'', file=self.outFile)
-                self.newline()
-            if (self.featureExtraProtect != None):
-                write('#endif /*', self.featureExtraProtect, '*/', file=self.outFile)
-            if (self.genOpts.protectFeature):
-                write('#endif /*', self.featureName, '*/', file=self.outFile)
-        # Finish processing in superclass
-        OutputGenerator.endFeature(self)
-        #write('// ending endFeature', file=self.outFile)
-    #
-    # Append a definition to the specified section
-    def appendSection(self, section, text):
-        # self.sections[section].append('SECTION: ' + section + '\n')
-        self.sections[section].append(text)
-    #
-    # Type generation
-    def genType(self, typeinfo, name, alias):
-        pass
-    #
-    # Struct (e.g. C "struct" type) generation.
-    # This is a special case of the <type> tag where the contents are
-    # interpreted as a set of <member> tags instead of freeform C
-    # C type declarations. The <member> tags are just like <param>
-    # tags - they are a declaration of a struct or union member.
-    # Only simple member declarations are supported (no nested
-    # structs etc.)
-    def genStruct(self, typeinfo, typeName, alias):
-        OutputGenerator.genStruct(self, typeinfo, typeName, alias)
-        body = 'typedef ' + typeinfo.elem.get('category') + ' ' + typeName + ' {\n'
-        # paramdecl = self.makeCParamDecl(typeinfo.elem, self.genOpts.alignFuncParam)
-        for member in typeinfo.elem.findall('.//member'):
-            body += self.makeCParamDecl(member, self.genOpts.alignFuncParam)
-            body += ';\n'
-        body += '} ' + typeName + ';\n'
-        self.appendSection('struct', body)
-    #
-    # Group (e.g. C "enum" type) generation.
-    # These are concatenated together with other types.
-    def genGroup(self, groupinfo, groupName, alias):
-        pass
-    # Enumerant generation
-    # <enum> tags may specify their values in several ways, but are usually
-    # just integers.
-    def genEnum(self, enuminfo, name, alias):
-        pass
-    #
-    # Command generation
-    def genCmd(self, cmdinfo, name, alias):
-        # Commands shadowed by interface functions and are not implemented
-        special_functions = [
-            'vkGetDeviceProcAddr',
-            'vkGetInstanceProcAddr',
-            'vkCreateDevice',
-            'vkDestroyDevice',
-            'vkCreateInstance',
-            'vkDestroyInstance',
-            'vkAllocateCommandBuffers',
-            'vkFreeCommandBuffers',
-            'vkCreateDebugReportCallbackEXT',
-            'vkDestroyDebugReportCallbackEXT',
-            'vkAllocateDescriptorSets',
-            'vkGetSwapchainImagesKHR',
-            'vkEnumerateInstanceLayerProperties',
-            'vkEnumerateInstanceExtensionProperties',
-            'vkEnumerateDeviceLayerProperties',
-            'vkEnumerateDeviceExtensionProperties',
-            'vkCreateDebugUtilsMessengerEXT',
-            'vkDestroyDebugUtilsMessengerEXT',
-        ]
-        if name in special_functions:
-            decls = self.makeCDecls(cmdinfo.elem)
-            self.appendSection('command', '')
-            self.appendSection('command', '// declare only')
-            self.appendSection('command', decls[0])
-            self.intercepts += [ '    {"%s", (void*)%s},' % (name,name[2:]) ]
-            return
-        if "QueuePresentKHR" in name or (("DebugMarker" in name or "DebugUtilsObject" in name) and "EXT" in name):
-            self.appendSection('command', '// TODO - not wrapping EXT function ' + name)
-            return
-        # Determine first if this function needs to be intercepted
-        startthreadsafety = self.makeThreadUseBlock(cmdinfo.elem, 'start')
-        if startthreadsafety is None:
-            return
-        finishthreadsafety = self.makeThreadUseBlock(cmdinfo.elem, 'finish')
-        # record that the function will be intercepted
-        if (self.featureExtraProtect != None):
-            self.intercepts += [ '#ifdef %s' % self.featureExtraProtect ]
-        self.intercepts += [ '    {"%s", (void*)%s},' % (name,name[2:]) ]
-        if (self.featureExtraProtect != None):
-            self.intercepts += [ '#endif' ]
-
-        OutputGenerator.genCmd(self, cmdinfo, name, alias)
-        #
-        decls = self.makeCDecls(cmdinfo.elem)
-        self.appendSection('command', '')
-        self.appendSection('command', decls[0][:-1])
-        self.appendSection('command', '{')
-        # setup common to call wrappers
-        # first parameter is always dispatchable
-        dispatchable_type = cmdinfo.elem.find('param/type').text
-        dispatchable_name = cmdinfo.elem.find('param/name').text
-        self.appendSection('command', '    dispatch_key key = get_dispatch_key('+dispatchable_name+');')
-        self.appendSection('command', '    layer_data *my_data = GetLayerDataPtr(key, layer_data_map);')
-        if dispatchable_type in ["VkPhysicalDevice", "VkInstance"]:
-            self.appendSection('command', '    VkLayerInstanceDispatchTable *pTable = my_data->instance_dispatch_table;')
-        else:
-            self.appendSection('command', '    VkLayerDispatchTable *pTable = my_data->device_dispatch_table;')
-        # Declare result variable, if any.
-        resulttype = cmdinfo.elem.find('proto/type')
-        if (resulttype != None and resulttype.text == 'void'):
-          resulttype = None
-        if (resulttype != None):
-            self.appendSection('command', '    ' + resulttype.text + ' result;')
-            assignresult = 'result = '
-        else:
-            assignresult = ''
-
-        self.appendSection('command', '    bool threadChecks = startMultiThread();')
-        self.appendSection('command', '    if (threadChecks) {')
-        self.appendSection('command', "    "+"\n    ".join(str(startthreadsafety).rstrip().split("\n")))
-        self.appendSection('command', '    }')
-        params = cmdinfo.elem.findall('param/name')
-        paramstext = ','.join([str(param.text) for param in params])
-        API = cmdinfo.elem.attrib.get('name').replace('vk','pTable->',1)
-        self.appendSection('command', '    ' + assignresult + API + '(' + paramstext + ');')
-        self.appendSection('command', '    if (threadChecks) {')
-        self.appendSection('command', "    "+"\n    ".join(str(finishthreadsafety).rstrip().split("\n")))
-        self.appendSection('command', '    } else {')
-        self.appendSection('command', '        finishMultiThread();')
-        self.appendSection('command', '    }')
-        # Return result variable, if any.
-        if (resulttype != None):
-            self.appendSection('command', '    return result;')
-        self.appendSection('command', '}')
-    #
-    # override makeProtoName to drop the "vk" prefix
-    def makeProtoName(self, name, tail):
-        return self.genOpts.apientry + name[2:] + tail
diff --git a/scripts/unique_objects_generator.py b/scripts/unique_objects_generator.py
deleted file mode 100644
index abe8df4..0000000
--- a/scripts/unique_objects_generator.py
+++ /dev/null
@@ -1,922 +0,0 @@
-#!/usr/bin/python3 -i
-#
-# Copyright (c) 2015-2016 The Khronos Group Inc.
-# Copyright (c) 2015-2016 Valve Corporation
-# Copyright (c) 2015-2016 LunarG, Inc.
-# Copyright (c) 2015-2016 Google Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# Author: Tobin Ehlis <tobine@google.com>
-# Author: Mark Lobodzinski <mark@lunarg.com>
-
-import os,re,sys
-import xml.etree.ElementTree as etree
-from generator import *
-from collections import namedtuple
-from common_codegen import *
-
-# UniqueObjectsGeneratorOptions - subclass of GeneratorOptions.
-#
-# Adds options used by UniqueObjectsOutputGenerator objects during
-# unique objects layer generation.
-#
-# Additional members
-#   prefixText - list of strings to prefix generated header with
-#     (usually a copyright statement + calling convention macros).
-#   protectFile - True if multiple inclusion protection should be
-#     generated (based on the filename) around the entire header.
-#   protectFeature - True if #ifndef..#endif protection should be
-#     generated around a feature interface in the header file.
-#   genFuncPointers - True if function pointer typedefs should be
-#     generated
-#   protectProto - If conditional protection should be generated
-#     around prototype declarations, set to either '#ifdef'
-#     to require opt-in (#ifdef protectProtoStr) or '#ifndef'
-#     to require opt-out (#ifndef protectProtoStr). Otherwise
-#     set to None.
-#   protectProtoStr - #ifdef/#ifndef symbol to use around prototype
-#     declarations, if protectProto is set
-#   apicall - string to use for the function declaration prefix,
-#     such as APICALL on Windows.
-#   apientry - string to use for the calling convention macro,
-#     in typedefs, such as APIENTRY.
-#   apientryp - string to use for the calling convention macro
-#     in function pointer typedefs, such as APIENTRYP.
-#   indentFuncProto - True if prototype declarations should put each
-#     parameter on a separate line
-#   indentFuncPointer - True if typedefed function pointers should put each
-#     parameter on a separate line
-#   alignFuncParam - if nonzero and parameters are being put on a
-#     separate line, align parameter names at the specified column
-class UniqueObjectsGeneratorOptions(GeneratorOptions):
-    def __init__(self,
-                 filename = None,
-                 directory = '.',
-                 apiname = None,
-                 profile = None,
-                 versions = '.*',
-                 emitversions = '.*',
-                 defaultExtensions = None,
-                 addExtensions = None,
-                 removeExtensions = None,
-                 emitExtensions = None,
-                 sortProcedure = regSortFeatures,
-                 prefixText = "",
-                 genFuncPointers = True,
-                 protectFile = True,
-                 protectFeature = True,
-                 apicall = '',
-                 apientry = '',
-                 apientryp = '',
-                 indentFuncProto = True,
-                 indentFuncPointer = False,
-                 alignFuncParam = 0,
-                 expandEnumerants = True):
-        GeneratorOptions.__init__(self, filename, directory, apiname, profile,
-                                  versions, emitversions, defaultExtensions,
-                                  addExtensions, removeExtensions, emitExtensions, sortProcedure)
-        self.prefixText      = prefixText
-        self.genFuncPointers = genFuncPointers
-        self.protectFile     = protectFile
-        self.protectFeature  = protectFeature
-        self.apicall         = apicall
-        self.apientry        = apientry
-        self.apientryp       = apientryp
-        self.indentFuncProto = indentFuncProto
-        self.indentFuncPointer = indentFuncPointer
-        self.alignFuncParam   = alignFuncParam
-        self.expandEnumerants = expandEnumerants
-
-
-# UniqueObjectsOutputGenerator - subclass of OutputGenerator.
-# Generates unique objects layer non-dispatchable handle-wrapping code.
-#
-# ---- methods ----
-# UniqueObjectsOutputGenerator(errFile, warnFile, diagFile) - args as for OutputGenerator. Defines additional internal state.
-# ---- methods overriding base class ----
-# beginFile(genOpts)
-# endFile()
-# beginFeature(interface, emit)
-# endFeature()
-# genCmd(cmdinfo)
-# genStruct()
-# genType()
-class UniqueObjectsOutputGenerator(OutputGenerator):
-    """Generate UniqueObjects code based on XML element attributes"""
-    # This is an ordered list of sections in the header file.
-    ALL_SECTIONS = ['command']
-    def __init__(self,
-                 errFile = sys.stderr,
-                 warnFile = sys.stderr,
-                 diagFile = sys.stdout):
-        OutputGenerator.__init__(self, errFile, warnFile, diagFile)
-        self.INDENT_SPACES = 4
-        self.intercepts = []
-        self.instance_extensions = []
-        self.device_extensions = []
-        # Commands which are not autogenerated but still intercepted
-        self.no_autogen_list = [
-            'vkGetDeviceProcAddr',
-            'vkGetInstanceProcAddr',
-            'vkCreateInstance',
-            'vkDestroyInstance',
-            'vkCreateDevice',
-            'vkDestroyDevice',
-            'vkCreateComputePipelines',
-            'vkCreateGraphicsPipelines',
-            'vkCreateSwapchainKHR',
-            'vkCreateSharedSwapchainsKHR',
-            'vkGetSwapchainImagesKHR',
-            'vkDestroySwapchainKHR',
-            'vkQueuePresentKHR',
-            'vkEnumerateInstanceLayerProperties',
-            'vkEnumerateDeviceLayerProperties',
-            'vkEnumerateInstanceExtensionProperties',
-            'vkCreateDescriptorUpdateTemplate',
-            'vkCreateDescriptorUpdateTemplateKHR',
-            'vkDestroyDescriptorUpdateTemplate',
-            'vkDestroyDescriptorUpdateTemplateKHR',
-            'vkUpdateDescriptorSetWithTemplate',
-            'vkUpdateDescriptorSetWithTemplateKHR',
-            'vkCmdPushDescriptorSetWithTemplateKHR',
-            'vkDebugMarkerSetObjectTagEXT',
-            'vkDebugMarkerSetObjectNameEXT',
-            'vkCreateRenderPass',
-            'vkDestroyRenderPass',
-            'vkSetDebugUtilsObjectNameEXT',
-            'vkSetDebugUtilsObjectTagEXT',
-            ]
-        # Commands shadowed by interface functions and are not implemented
-        self.interface_functions = [
-            'vkGetPhysicalDeviceDisplayPropertiesKHR',
-            'vkGetPhysicalDeviceDisplayPlanePropertiesKHR',
-            'vkGetDisplayPlaneSupportedDisplaysKHR',
-            'vkGetDisplayModePropertiesKHR',
-            'vkGetDisplayPlaneCapabilitiesKHR',
-            # VK_EXT_debug_report APIs are hooked, but handled separately in the source file
-            'vkCreateDebugReportCallbackEXT',
-            'vkDestroyDebugReportCallbackEXT',
-            'vkDebugReportMessageEXT',
-            # VK_EXT_debug_utils APIs are hooked, but handled separately in the source file
-            'vkCreateDebugUtilsMessengerEXT',
-            'vkDestroyDebugUtilsMessengerEXT',
-            'vkSubmitDebugUtilsMessageEXT',
-            ]
-        self.headerVersion = None
-        # Internal state - accumulators for different inner block text
-        self.sections = dict([(section, []) for section in self.ALL_SECTIONS])
-
-        self.cmdMembers = []
-        self.cmd_feature_protect = []  # Save ifdef's for each command
-        self.cmd_info_data = []        # Save the cmdinfo data for wrapping the handles when processing is complete
-        self.structMembers = []        # List of StructMemberData records for all Vulkan structs
-        self.extension_structs = []    # List of all structs or sister-structs containing handles
-                                       # A sister-struct may contain no handles but shares a structextends attribute with one that does
-        self.structTypes = dict()      # Map of Vulkan struct typename to required VkStructureType
-        self.struct_member_dict = dict()
-        # Named tuples to store struct and command data
-        self.StructType = namedtuple('StructType', ['name', 'value'])
-        self.CmdMemberData = namedtuple('CmdMemberData', ['name', 'members'])
-        self.CmdInfoData = namedtuple('CmdInfoData', ['name', 'cmdinfo'])
-        self.CmdExtraProtect = namedtuple('CmdExtraProtect', ['name', 'extra_protect'])
-
-        self.CommandParam = namedtuple('CommandParam', ['type', 'name', 'ispointer', 'isconst', 'iscount', 'len', 'extstructs', 'cdecl', 'islocal', 'iscreate', 'isdestroy', 'feature_protect'])
-        self.StructMemberData = namedtuple('StructMemberData', ['name', 'members'])
-    #
-    def incIndent(self, indent):
-        inc = ' ' * self.INDENT_SPACES
-        if indent:
-            return indent + inc
-        return inc
-    #
-    def decIndent(self, indent):
-        if indent and (len(indent) > self.INDENT_SPACES):
-            return indent[:-self.INDENT_SPACES]
-        return ''
-    #
-    # Override makeProtoName to drop the "vk" prefix
-    def makeProtoName(self, name, tail):
-        return self.genOpts.apientry + name[2:] + tail
-    #
-    # Check if the parameter passed in is a pointer to an array
-    def paramIsArray(self, param):
-        return param.attrib.get('len') is not None
-    #
-    def beginFile(self, genOpts):
-        OutputGenerator.beginFile(self, genOpts)
-        # User-supplied prefix text, if any (list of strings)
-        if (genOpts.prefixText):
-            for s in genOpts.prefixText:
-                write(s, file=self.outFile)
-        # Namespace
-        self.newline()
-        write('namespace unique_objects {', file = self.outFile)
-    # Now that the data is all collected and complete, generate and output the wrapping/unwrapping routines
-    def endFile(self):
-
-        self.struct_member_dict = dict(self.structMembers)
-
-        # Generate the list of APIs that might need to handle wrapped extension structs
-        self.GenerateCommandWrapExtensionList()
-        # Write out wrapping/unwrapping functions
-        self.WrapCommands()
-        # Build and write out pNext processing function
-        extension_proc = self.build_extension_processing_func()
-        self.newline()
-        write('// Unique Objects pNext extension handling function', file=self.outFile)
-        write('%s' % extension_proc, file=self.outFile)
-
-        # Actually write the interface to the output file.
-        if (self.emit):
-            self.newline()
-            if (self.featureExtraProtect != None):
-                write('#ifdef', self.featureExtraProtect, file=self.outFile)
-            # Write the unique_objects code to the file
-            if (self.sections['command']):
-                write('\n'.join(self.sections['command']), end=u'', file=self.outFile)
-            if (self.featureExtraProtect != None):
-                write('\n#endif //', self.featureExtraProtect, file=self.outFile)
-            else:
-                self.newline()
-
-        # Record intercepted procedures
-        write('// Map of all APIs to be intercepted by this layer', file=self.outFile)
-        write('static const std::unordered_map<std::string, void*> name_to_funcptr_map = {', file=self.outFile)
-        write('\n'.join(self.intercepts), file=self.outFile)
-        write('};\n', file=self.outFile)
-        self.newline()
-        write('} // namespace unique_objects', file=self.outFile)
-        # Finish processing in superclass
-        OutputGenerator.endFile(self)
-    #
-    def beginFeature(self, interface, emit):
-        # Start processing in superclass
-        OutputGenerator.beginFeature(self, interface, emit)
-        self.headerVersion = None
-        self.featureExtraProtect = GetFeatureProtect(interface)
-        if self.featureName != 'VK_VERSION_1_0' and self.featureName != 'VK_VERSION_1_1':
-            white_list_entry = []
-            if (self.featureExtraProtect != None):
-                white_list_entry += [ '#ifdef %s' % self.featureExtraProtect ]
-            white_list_entry += [ '"%s"' % self.featureName ]
-            if (self.featureExtraProtect != None):
-                white_list_entry += [ '#endif' ]
-            featureType = interface.get('type')
-            if featureType == 'instance':
-                self.instance_extensions += white_list_entry
-            elif featureType == 'device':
-                self.device_extensions += white_list_entry
-    #
-    def endFeature(self):
-        # Finish processing in superclass
-        OutputGenerator.endFeature(self)
-    #
-    def genType(self, typeinfo, name, alias):
-        OutputGenerator.genType(self, typeinfo, name, alias)
-        typeElem = typeinfo.elem
-        # If the type is a struct type, traverse the imbedded <member> tags generating a structure.
-        # Otherwise, emit the tag text.
-        category = typeElem.get('category')
-        if (category == 'struct' or category == 'union'):
-            self.genStruct(typeinfo, name, alias)
-    #
-    # Append a definition to the specified section
-    def appendSection(self, section, text):
-        # self.sections[section].append('SECTION: ' + section + '\n')
-        self.sections[section].append(text)
-    #
-    # Check if the parameter passed in is a pointer
-    def paramIsPointer(self, param):
-        ispointer = False
-        for elem in param:
-            if ((elem.tag is not 'type') and (elem.tail is not None)) and '*' in elem.tail:
-                ispointer = True
-        return ispointer
-    #
-    # Get the category of a type
-    def getTypeCategory(self, typename):
-        types = self.registry.tree.findall("types/type")
-        for elem in types:
-            if (elem.find("name") is not None and elem.find('name').text == typename) or elem.attrib.get('name') == typename:
-                return elem.attrib.get('category')
-    #
-    # Check if a parent object is dispatchable or not
-    def isHandleTypeNonDispatchable(self, handletype):
-        handle = self.registry.tree.find("types/type/[name='" + handletype + "'][@category='handle']")
-        if handle is not None and handle.find('type').text == 'VK_DEFINE_NON_DISPATCHABLE_HANDLE':
-            return True
-        else:
-            return False
-    #
-    # Retrieve the type and name for a parameter
-    def getTypeNameTuple(self, param):
-        type = ''
-        name = ''
-        for elem in param:
-            if elem.tag == 'type':
-                type = noneStr(elem.text)
-            elif elem.tag == 'name':
-                name = noneStr(elem.text)
-        return (type, name)
-    #
-    # Retrieve the value of the len tag
-    def getLen(self, param):
-        result = None
-        len = param.attrib.get('len')
-        if len and len != 'null-terminated':
-            # For string arrays, 'len' can look like 'count,null-terminated', indicating that we
-            # have a null terminated array of strings.  We strip the null-terminated from the
-            # 'len' field and only return the parameter specifying the string count
-            if 'null-terminated' in len:
-                result = len.split(',')[0]
-            else:
-                result = len
-            # Spec has now notation for len attributes, using :: instead of platform specific pointer symbol
-            result = str(result).replace('::', '->')
-        return result
-    #
-    # Generate a VkStructureType based on a structure typename
-    def genVkStructureType(self, typename):
-        # Add underscore between lowercase then uppercase
-        value = re.sub('([a-z0-9])([A-Z])', r'\1_\2', typename)
-        # Change to uppercase
-        value = value.upper()
-        # Add STRUCTURE_TYPE_
-        return re.sub('VK_', 'VK_STRUCTURE_TYPE_', value)
-    #
-    # Struct parameter check generation.
-    # This is a special case of the <type> tag where the contents are interpreted as a set of
-    # <member> tags instead of freeform C type declarations. The <member> tags are just like
-    # <param> tags - they are a declaration of a struct or union member. Only simple member
-    # declarations are supported (no nested structs etc.)
-    def genStruct(self, typeinfo, typeName, alias):
-        OutputGenerator.genStruct(self, typeinfo, typeName, alias)
-        members = typeinfo.elem.findall('.//member')
-        # Iterate over members once to get length parameters for arrays
-        lens = set()
-        for member in members:
-            len = self.getLen(member)
-            if len:
-                lens.add(len)
-        # Generate member info
-        membersInfo = []
-        for member in members:
-            # Get the member's type and name
-            info = self.getTypeNameTuple(member)
-            type = info[0]
-            name = info[1]
-            cdecl = self.makeCParamDecl(member, 0)
-            # Process VkStructureType
-            if type == 'VkStructureType':
-                # Extract the required struct type value from the comments
-                # embedded in the original text defining the 'typeinfo' element
-                rawXml = etree.tostring(typeinfo.elem).decode('ascii')
-                result = re.search(r'VK_STRUCTURE_TYPE_\w+', rawXml)
-                if result:
-                    value = result.group(0)
-                else:
-                    value = self.genVkStructureType(typeName)
-                # Store the required type value
-                self.structTypes[typeName] = self.StructType(name=name, value=value)
-            # Store pointer/array/string info
-            extstructs = self.registry.validextensionstructs[typeName] if name == 'pNext' else None
-            membersInfo.append(self.CommandParam(type=type,
-                                                 name=name,
-                                                 ispointer=self.paramIsPointer(member),
-                                                 isconst=True if 'const' in cdecl else False,
-                                                 iscount=True if name in lens else False,
-                                                 len=self.getLen(member),
-                                                 extstructs=extstructs,
-                                                 cdecl=cdecl,
-                                                 islocal=False,
-                                                 iscreate=False,
-                                                 isdestroy=False,
-                                                 feature_protect=self.featureExtraProtect))
-        self.structMembers.append(self.StructMemberData(name=typeName, members=membersInfo))
-
-    #
-    # Insert a lock_guard line
-    def lock_guard(self, indent):
-        return '%sstd::lock_guard<std::mutex> lock(global_lock);\n' % indent
-    #
-    # Determine if a struct has an NDO as a member or an embedded member
-    def struct_contains_ndo(self, struct_item):
-        struct_member_dict = dict(self.structMembers)
-        struct_members = struct_member_dict[struct_item]
-
-        for member in struct_members:
-            if self.isHandleTypeNonDispatchable(member.type):
-                return True
-            elif member.type in struct_member_dict:
-                if self.struct_contains_ndo(member.type) == True:
-                    return True
-        return False
-    #
-    # Return list of struct members which contain, or which sub-structures contain
-    # an NDO in a given list of parameters or members
-    def getParmeterStructsWithNdos(self, item_list):
-        struct_list = set()
-        for item in item_list:
-            paramtype = item.find('type')
-            typecategory = self.getTypeCategory(paramtype.text)
-            if typecategory == 'struct':
-                if self.struct_contains_ndo(paramtype.text) == True:
-                    struct_list.add(item)
-        return struct_list
-    #
-    # Return list of non-dispatchable objects from a given list of parameters or members
-    def getNdosInParameterList(self, item_list, create_func):
-        ndo_list = set()
-        if create_func == True:
-            member_list = item_list[0:-1]
-        else:
-            member_list = item_list
-        for item in member_list:
-            if self.isHandleTypeNonDispatchable(paramtype.text):
-                ndo_list.add(item)
-        return ndo_list
-    #
-    # Construct list of extension structs containing handles, or extension structs that share a structextends attribute
-    # WITH an extension struct containing handles. All extension structs in any pNext chain will have to be copied.
-    # TODO: make this recursive -- structs buried three or more levels deep are not searched for extensions
-    def GenerateCommandWrapExtensionList(self):
-        for struct in self.structMembers:
-            if (len(struct.members) > 1) and struct.members[1].extstructs is not None:
-                found = False;
-                for item in struct.members[1].extstructs:
-                    if item != '' and self.struct_contains_ndo(item) == True:
-                        found = True
-                if found == True:
-                    for item in struct.members[1].extstructs:
-                        if item != '' and item not in self.extension_structs:
-                            self.extension_structs.append(item)
-    #
-    # Returns True if a struct may have a pNext chain containing an NDO
-    def StructWithExtensions(self, struct_type):
-        if struct_type in self.struct_member_dict:
-            param_info = self.struct_member_dict[struct_type]
-            if (len(param_info) > 1) and param_info[1].extstructs is not None:
-                for item in param_info[1].extstructs:
-                    if item in self.extension_structs:
-                        return True
-        return False
-    #
-    # Generate pNext handling function
-    def build_extension_processing_func(self):
-        # Construct helper functions to build and free pNext extension chains
-        pnext_proc = ''
-        pnext_proc += 'void *CreateUnwrappedExtensionStructs(const void *pNext) {\n'
-        pnext_proc += '    void *cur_pnext = const_cast<void *>(pNext);\n'
-        pnext_proc += '    void *head_pnext = NULL;\n'
-        pnext_proc += '    void *prev_ext_struct = NULL;\n'
-        pnext_proc += '    void *cur_ext_struct = NULL;\n\n'
-        pnext_proc += '    while (cur_pnext != NULL) {\n'
-        pnext_proc += '        GenericHeader *header = reinterpret_cast<GenericHeader *>(cur_pnext);\n\n'
-        pnext_proc += '        switch (header->sType) {\n'
-        for item in self.extension_structs:
-            struct_info = self.struct_member_dict[item]
-            if struct_info[0].feature_protect is not None:
-                pnext_proc += '#ifdef %s \n' % struct_info[0].feature_protect
-            pnext_proc += '            case %s: {\n' % self.structTypes[item].value
-            pnext_proc += '                    safe_%s *safe_struct = new safe_%s;\n' % (item, item)
-            pnext_proc += '                    safe_struct->initialize(reinterpret_cast<const %s *>(cur_pnext));\n' % item
-            # Generate code to unwrap the handles
-            indent = '                '
-            (tmp_decl, tmp_pre, tmp_post) = self.uniquify_members(struct_info, indent, 'safe_struct->', 0, False, False, False, False)
-            pnext_proc += tmp_pre
-            pnext_proc += '                    cur_ext_struct = reinterpret_cast<void *>(safe_struct);\n'
-            pnext_proc += '                } break;\n'
-            if struct_info[0].feature_protect is not None:
-                pnext_proc += '#endif // %s \n' % struct_info[0].feature_protect
-            pnext_proc += '\n'
-        pnext_proc += '            default:\n'
-        pnext_proc += '                break;\n'
-        pnext_proc += '        }\n\n'
-        pnext_proc += '        // Save pointer to the first structure in the pNext chain\n'
-        pnext_proc += '        head_pnext = (head_pnext ? head_pnext : cur_ext_struct);\n\n'
-        pnext_proc += '        // For any extension structure but the first, link the last struct\'s pNext to the current ext struct\n'
-        pnext_proc += '        if (prev_ext_struct) {\n'
-        pnext_proc += '            (reinterpret_cast<GenericHeader *>(prev_ext_struct))->pNext = cur_ext_struct;\n'
-        pnext_proc += '        }\n'
-        pnext_proc += '        prev_ext_struct = cur_ext_struct;\n\n'
-        pnext_proc += '        // Process the next structure in the chain\n'
-        pnext_proc += '        cur_pnext = const_cast<void *>(header->pNext);\n'
-        pnext_proc += '    }\n'
-        pnext_proc += '    return head_pnext;\n'
-        pnext_proc += '}\n\n'
-        pnext_proc += '// Free a pNext extension chain\n'
-        pnext_proc += 'void FreeUnwrappedExtensionStructs(void *head) {\n'
-        pnext_proc += '    GenericHeader *curr_ptr = reinterpret_cast<GenericHeader *>(head);\n'
-        pnext_proc += '    while (curr_ptr) {\n'
-        pnext_proc += '        GenericHeader *header = curr_ptr;\n'
-        pnext_proc += '        curr_ptr = reinterpret_cast<GenericHeader *>(header->pNext);\n\n'
-        pnext_proc += '        switch (header->sType) {\n';
-        for item in self.extension_structs:
-            struct_info = self.struct_member_dict[item]
-            if struct_info[0].feature_protect is not None:
-                pnext_proc += '#ifdef %s \n' % struct_info[0].feature_protect
-            pnext_proc += '            case %s:\n' % self.structTypes[item].value
-            pnext_proc += '                delete reinterpret_cast<safe_%s *>(header);\n' % item
-            pnext_proc += '                break;\n'
-            if struct_info[0].feature_protect is not None:
-                pnext_proc += '#endif // %s \n' % struct_info[0].feature_protect
-            pnext_proc += '\n'
-        pnext_proc += '            default:\n'
-        pnext_proc += '                assert(0);\n'
-        pnext_proc += '        }\n'
-        pnext_proc += '    }\n'
-        pnext_proc += '}\n'
-        return pnext_proc
-
-    #
-    # Generate source for creating a non-dispatchable object
-    def generate_create_ndo_code(self, indent, proto, params, cmd_info):
-        create_ndo_code = ''
-        handle_type = params[-1].find('type')
-        if self.isHandleTypeNonDispatchable(handle_type.text):
-            # Check for special case where multiple handles are returned
-            ndo_array = False
-            if cmd_info[-1].len is not None:
-                ndo_array = True;
-            handle_name = params[-1].find('name')
-            create_ndo_code += '%sif (VK_SUCCESS == result) {\n' % (indent)
-            indent = self.incIndent(indent)
-            create_ndo_code += '%sstd::lock_guard<std::mutex> lock(global_lock);\n' % (indent)
-            ndo_dest = '*%s' % handle_name.text
-            if ndo_array == True:
-                create_ndo_code += '%sfor (uint32_t index0 = 0; index0 < %s; index0++) {\n' % (indent, cmd_info[-1].len)
-                indent = self.incIndent(indent)
-                ndo_dest = '%s[index0]' % cmd_info[-1].name
-            create_ndo_code += '%s%s = WrapNew(%s);\n' % (indent, ndo_dest, ndo_dest)
-            if ndo_array == True:
-                indent = self.decIndent(indent)
-                create_ndo_code += '%s}\n' % indent
-            indent = self.decIndent(indent)
-            create_ndo_code += '%s}\n' % (indent)
-        return create_ndo_code
-    #
-    # Generate source for destroying a non-dispatchable object
-    def generate_destroy_ndo_code(self, indent, proto, cmd_info):
-        destroy_ndo_code = ''
-        ndo_array = False
-        if True in [destroy_txt in proto.text for destroy_txt in ['Destroy', 'Free']]:
-            # Check for special case where multiple handles are returned
-            if cmd_info[-1].len is not None:
-                ndo_array = True;
-                param = -1
-            else:
-                param = -2
-            if self.isHandleTypeNonDispatchable(cmd_info[param].type) == True:
-                if ndo_array == True:
-                    # This API is freeing an array of handles.  Remove them from the unique_id map.
-                    destroy_ndo_code += '%sif ((VK_SUCCESS == result) && (%s)) {\n' % (indent, cmd_info[param].name)
-                    indent = self.incIndent(indent)
-                    destroy_ndo_code += '%sstd::unique_lock<std::mutex> lock(global_lock);\n' % (indent)
-                    destroy_ndo_code += '%sfor (uint32_t index0 = 0; index0 < %s; index0++) {\n' % (indent, cmd_info[param].len)
-                    indent = self.incIndent(indent)
-                    destroy_ndo_code += '%s%s handle = %s[index0];\n' % (indent, cmd_info[param].type, cmd_info[param].name)
-                    destroy_ndo_code += '%suint64_t unique_id = reinterpret_cast<uint64_t &>(handle);\n' % (indent)
-                    destroy_ndo_code += '%sunique_id_mapping.erase(unique_id);\n' % (indent)
-                    indent = self.decIndent(indent);
-                    destroy_ndo_code += '%s}\n' % indent
-                    indent = self.decIndent(indent);
-                    destroy_ndo_code += '%s}\n' % indent
-                else:
-                    # Remove a single handle from the map
-                    destroy_ndo_code += '%sstd::unique_lock<std::mutex> lock(global_lock);\n' % (indent)
-                    destroy_ndo_code += '%suint64_t %s_id = reinterpret_cast<uint64_t &>(%s);\n' % (indent, cmd_info[param].name, cmd_info[param].name)
-                    destroy_ndo_code += '%s%s = (%s)unique_id_mapping[%s_id];\n' % (indent, cmd_info[param].name, cmd_info[param].type, cmd_info[param].name)
-                    destroy_ndo_code += '%sunique_id_mapping.erase(%s_id);\n' % (indent, cmd_info[param].name)
-                    destroy_ndo_code += '%slock.unlock();\n' % (indent)
-        return ndo_array, destroy_ndo_code
-
-    #
-    # Clean up local declarations
-    def cleanUpLocalDeclarations(self, indent, prefix, name, len, index, process_pnext):
-        cleanup = '%sif (local_%s%s) {\n' % (indent, prefix, name)
-        if len is not None:
-            if process_pnext:
-                cleanup += '%s    for (uint32_t %s = 0; %s < %s%s; ++%s) {\n' % (indent, index, index, prefix, len, index)
-                cleanup += '%s        FreeUnwrappedExtensionStructs(const_cast<void *>(local_%s%s[%s].pNext));\n' % (indent, prefix, name, index)
-                cleanup += '%s    }\n' % indent
-            cleanup += '%s    delete[] local_%s%s;\n' % (indent, prefix, name)
-        else:
-            if process_pnext:
-                cleanup += '%s    FreeUnwrappedExtensionStructs(const_cast<void *>(local_%s%s->pNext));\n' % (indent, prefix, name)
-            cleanup += '%s    delete local_%s%s;\n' % (indent, prefix, name)
-        cleanup += "%s}\n" % (indent)
-        return cleanup
-    #
-    # Output UO code for a single NDO (ndo_count is NULL) or a counted list of NDOs
-    def outputNDOs(self, ndo_type, ndo_name, ndo_count, prefix, index, indent, destroy_func, destroy_array, top_level):
-        decl_code = ''
-        pre_call_code = ''
-        post_call_code = ''
-        if ndo_count is not None:
-            if top_level == True:
-                decl_code += '%s%s *local_%s%s = NULL;\n' % (indent, ndo_type, prefix, ndo_name)
-            pre_call_code += '%s    if (%s%s) {\n' % (indent, prefix, ndo_name)
-            indent = self.incIndent(indent)
-            if top_level == True:
-                pre_call_code += '%s    local_%s%s = new %s[%s];\n' % (indent, prefix, ndo_name, ndo_type, ndo_count)
-                pre_call_code += '%s    for (uint32_t %s = 0; %s < %s; ++%s) {\n' % (indent, index, index, ndo_count, index)
-                indent = self.incIndent(indent)
-                pre_call_code += '%s    local_%s%s[%s] = Unwrap(%s[%s]);\n' % (indent, prefix, ndo_name, index, ndo_name, index)
-            else:
-                pre_call_code += '%s    for (uint32_t %s = 0; %s < %s; ++%s) {\n' % (indent, index, index, ndo_count, index)
-                indent = self.incIndent(indent)
-                pre_call_code += '%s    %s%s[%s] = Unwrap(%s%s[%s]);\n' % (indent, prefix, ndo_name, index, prefix, ndo_name, index)
-            indent = self.decIndent(indent)
-            pre_call_code += '%s    }\n' % indent
-            indent = self.decIndent(indent)
-            pre_call_code += '%s    }\n' % indent
-            if top_level == True:
-                post_call_code += '%sif (local_%s%s)\n' % (indent, prefix, ndo_name)
-                indent = self.incIndent(indent)
-                post_call_code += '%sdelete[] local_%s;\n' % (indent, ndo_name)
-        else:
-            if top_level == True:
-                if (destroy_func == False) or (destroy_array == True):
-                    pre_call_code += '%s    %s = Unwrap(%s);\n' % (indent, ndo_name, ndo_name)
-            else:
-                # Make temp copy of this var with the 'local' removed. It may be better to not pass in 'local_'
-                # as part of the string and explicitly print it
-                fix = str(prefix).strip('local_');
-                pre_call_code += '%s    if (%s%s) {\n' % (indent, fix, ndo_name)
-                indent = self.incIndent(indent)
-                pre_call_code += '%s    %s%s = Unwrap(%s%s);\n' % (indent, prefix, ndo_name, fix, ndo_name)
-                indent = self.decIndent(indent)
-                pre_call_code += '%s    }\n' % indent
-        return decl_code, pre_call_code, post_call_code
-    #
-    # first_level_param indicates if elements are passed directly into the function else they're below a ptr/struct
-    # create_func means that this is API creates or allocates NDOs
-    # destroy_func indicates that this API destroys or frees NDOs
-    # destroy_array means that the destroy_func operated on an array of NDOs
-    def uniquify_members(self, members, indent, prefix, array_index, create_func, destroy_func, destroy_array, first_level_param):
-        decls = ''
-        pre_code = ''
-        post_code = ''
-        index = 'index%s' % str(array_index)
-        array_index += 1
-        # Process any NDOs in this structure and recurse for any sub-structs in this struct
-        for member in members:
-            process_pnext = self.StructWithExtensions(member.type)
-            # Handle NDOs
-            if self.isHandleTypeNonDispatchable(member.type) == True:
-                count_name = member.len
-                if (count_name is not None):
-                    if first_level_param == False:
-                        count_name = '%s%s' % (prefix, member.len)
-
-                if (first_level_param == False) or (create_func == False):
-                    (tmp_decl, tmp_pre, tmp_post) = self.outputNDOs(member.type, member.name, count_name, prefix, index, indent, destroy_func, destroy_array, first_level_param)
-                    decls += tmp_decl
-                    pre_code += tmp_pre
-                    post_code += tmp_post
-            # Handle Structs that contain NDOs at some level
-            elif member.type in self.struct_member_dict:
-                # Structs at first level will have an NDO, OR, we need a safe_struct for the pnext chain
-                if self.struct_contains_ndo(member.type) == True or process_pnext:
-                    struct_info = self.struct_member_dict[member.type]
-                    # Struct Array
-                    if member.len is not None:
-                        # Update struct prefix
-                        if first_level_param == True:
-                            new_prefix = 'local_%s' % member.name
-                            # Declare safe_VarType for struct
-                            decls += '%ssafe_%s *%s = NULL;\n' % (indent, member.type, new_prefix)
-                        else:
-                            new_prefix = '%s%s' % (prefix, member.name)
-                        pre_code += '%s    if (%s%s) {\n' % (indent, prefix, member.name)
-                        indent = self.incIndent(indent)
-                        if first_level_param == True:
-                            pre_code += '%s    %s = new safe_%s[%s];\n' % (indent, new_prefix, member.type, member.len)
-                        pre_code += '%s    for (uint32_t %s = 0; %s < %s%s; ++%s) {\n' % (indent, index, index, prefix, member.len, index)
-                        indent = self.incIndent(indent)
-                        if first_level_param == True:
-                            pre_code += '%s    %s[%s].initialize(&%s[%s]);\n' % (indent, new_prefix, index, member.name, index)
-                            if process_pnext:
-                                pre_code += '%s    %s[%s].pNext = CreateUnwrappedExtensionStructs(%s[%s].pNext);\n' % (indent, new_prefix, index, new_prefix, index)
-                        local_prefix = '%s[%s].' % (new_prefix, index)
-                        # Process sub-structs in this struct
-                        (tmp_decl, tmp_pre, tmp_post) = self.uniquify_members(struct_info, indent, local_prefix, array_index, create_func, destroy_func, destroy_array, False)
-                        decls += tmp_decl
-                        pre_code += tmp_pre
-                        post_code += tmp_post
-                        indent = self.decIndent(indent)
-                        pre_code += '%s    }\n' % indent
-                        indent = self.decIndent(indent)
-                        pre_code += '%s    }\n' % indent
-                        if first_level_param == True:
-                            post_code += self.cleanUpLocalDeclarations(indent, prefix, member.name, member.len, index, process_pnext)
-                    # Single Struct
-                    else:
-                        # Update struct prefix
-                        if first_level_param == True:
-                            new_prefix = 'local_%s->' % member.name
-                            decls += '%ssafe_%s *local_%s%s = NULL;\n' % (indent, member.type, prefix, member.name)
-                        else:
-                            new_prefix = '%s%s->' % (prefix, member.name)
-                        # Declare safe_VarType for struct
-                        pre_code += '%s    if (%s%s) {\n' % (indent, prefix, member.name)
-                        indent = self.incIndent(indent)
-                        if first_level_param == True:
-                            pre_code += '%s    local_%s%s = new safe_%s(%s);\n' % (indent, prefix, member.name, member.type, member.name)
-                        # Process sub-structs in this struct
-                        (tmp_decl, tmp_pre, tmp_post) = self.uniquify_members(struct_info, indent, new_prefix, array_index, create_func, destroy_func, destroy_array, False)
-                        decls += tmp_decl
-                        pre_code += tmp_pre
-                        post_code += tmp_post
-                        if process_pnext:
-                            pre_code += '%s    local_%s%s->pNext = CreateUnwrappedExtensionStructs(local_%s%s->pNext);\n' % (indent, prefix, member.name, prefix, member.name)
-                        indent = self.decIndent(indent)
-                        pre_code += '%s    }\n' % indent
-                        if first_level_param == True:
-                            post_code += self.cleanUpLocalDeclarations(indent, prefix, member.name, member.len, index, process_pnext)
-        return decls, pre_code, post_code
-    #
-    # For a particular API, generate the non-dispatchable-object wrapping/unwrapping code
-    def generate_wrapping_code(self, cmd):
-        indent = '    '
-        proto = cmd.find('proto/name')
-        params = cmd.findall('param')
-
-        if proto.text is not None:
-            cmd_member_dict = dict(self.cmdMembers)
-            cmd_info = cmd_member_dict[proto.text]
-            # Handle ndo create/allocate operations
-            if cmd_info[0].iscreate:
-                create_ndo_code = self.generate_create_ndo_code(indent, proto, params, cmd_info)
-            else:
-                create_ndo_code = ''
-            # Handle ndo destroy/free operations
-            if cmd_info[0].isdestroy:
-                (destroy_array, destroy_ndo_code) = self.generate_destroy_ndo_code(indent, proto, cmd_info)
-            else:
-                destroy_array = False
-                destroy_ndo_code = ''
-            paramdecl = ''
-            param_pre_code = ''
-            param_post_code = ''
-            create_func = True if create_ndo_code else False
-            destroy_func = True if destroy_ndo_code else False
-            (paramdecl, param_pre_code, param_post_code) = self.uniquify_members(cmd_info, indent, '', 0, create_func, destroy_func, destroy_array, True)
-            param_post_code += create_ndo_code
-            if destroy_ndo_code:
-                if destroy_array == True:
-                    param_post_code += destroy_ndo_code
-                else:
-                    param_pre_code += destroy_ndo_code
-            if param_pre_code:
-                if (not destroy_func) or (destroy_array):
-                    param_pre_code = '%s{\n%s%s%s%s}\n' % ('    ', indent, self.lock_guard(indent), param_pre_code, indent)
-        return paramdecl, param_pre_code, param_post_code
-    #
-    # Capture command parameter info needed to wrap NDOs as well as handling some boilerplate code
-    def genCmd(self, cmdinfo, cmdname, alias):
-
-        # Add struct-member type information to command parameter information
-        OutputGenerator.genCmd(self, cmdinfo, cmdname, alias)
-        members = cmdinfo.elem.findall('.//param')
-        # Iterate over members once to get length parameters for arrays
-        lens = set()
-        for member in members:
-            len = self.getLen(member)
-            if len:
-                lens.add(len)
-        struct_member_dict = dict(self.structMembers)
-        # Generate member info
-        membersInfo = []
-        constains_extension_structs = False
-        for member in members:
-            # Get type and name of member
-            info = self.getTypeNameTuple(member)
-            type = info[0]
-            name = info[1]
-            cdecl = self.makeCParamDecl(member, 0)
-            # Check for parameter name in lens set
-            iscount = True if name in lens else False
-            len = self.getLen(member)
-            isconst = True if 'const' in cdecl else False
-            ispointer = self.paramIsPointer(member)
-            # Mark param as local if it is an array of NDOs
-            islocal = False;
-            if self.isHandleTypeNonDispatchable(type) == True:
-                if (len is not None) and (isconst == True):
-                    islocal = True
-            # Or if it's a struct that contains an NDO
-            elif type in struct_member_dict:
-                if self.struct_contains_ndo(type) == True:
-                    islocal = True
-            isdestroy = True if True in [destroy_txt in cmdname for destroy_txt in ['Destroy', 'Free']] else False
-            iscreate = True if True in [create_txt in cmdname for create_txt in ['Create', 'Allocate', 'GetRandROutputDisplayEXT', 'RegisterDeviceEvent', 'RegisterDisplayEvent']] else False
-            extstructs = self.registry.validextensionstructs[type] if name == 'pNext' else None
-            membersInfo.append(self.CommandParam(type=type,
-                                                 name=name,
-                                                 ispointer=ispointer,
-                                                 isconst=isconst,
-                                                 iscount=iscount,
-                                                 len=len,
-                                                 extstructs=extstructs,
-                                                 cdecl=cdecl,
-                                                 islocal=islocal,
-                                                 iscreate=iscreate,
-                                                 isdestroy=isdestroy,
-                                                 feature_protect=self.featureExtraProtect))
-        self.cmdMembers.append(self.CmdMemberData(name=cmdname, members=membersInfo))
-        self.cmd_info_data.append(self.CmdInfoData(name=cmdname, cmdinfo=cmdinfo))
-        self.cmd_feature_protect.append(self.CmdExtraProtect(name=cmdname, extra_protect=self.featureExtraProtect))
-    #
-    # Create code to wrap NDOs as well as handling some boilerplate code
-    def WrapCommands(self):
-        cmd_member_dict = dict(self.cmdMembers)
-        cmd_info_dict = dict(self.cmd_info_data)
-        cmd_protect_dict = dict(self.cmd_feature_protect)
-
-        for api_call in self.cmdMembers:
-            cmdname = api_call.name
-            cmdinfo = cmd_info_dict[api_call.name]
-            if cmdname in self.interface_functions:
-                continue
-            if cmdname in self.no_autogen_list:
-                decls = self.makeCDecls(cmdinfo.elem)
-                self.appendSection('command', '')
-                self.appendSection('command', '// Declare only')
-                self.appendSection('command', decls[0])
-                self.intercepts += [ '    {"%s", (void *)%s},' % (cmdname,cmdname[2:]) ]
-                continue
-            # Generate NDO wrapping/unwrapping code for all parameters
-            (api_decls, api_pre, api_post) = self.generate_wrapping_code(cmdinfo.elem)
-            # If API doesn't contain an NDO's, don't fool with it
-            if not api_decls and not api_pre and not api_post:
-                continue
-            feature_extra_protect = cmd_protect_dict[api_call.name]
-            if (feature_extra_protect != None):
-                self.appendSection('command', '')
-                self.appendSection('command', '#ifdef '+ feature_extra_protect)
-                self.intercepts += [ '#ifdef %s' % feature_extra_protect ]
-            # Add intercept to procmap
-            self.intercepts += [ '    {"%s", (void*)%s},' % (cmdname,cmdname[2:]) ]
-            decls = self.makeCDecls(cmdinfo.elem)
-            self.appendSection('command', '')
-            self.appendSection('command', decls[0][:-1])
-            self.appendSection('command', '{')
-            # Setup common to call wrappers, first parameter is always dispatchable
-            dispatchable_type = cmdinfo.elem.find('param/type').text
-            dispatchable_name = cmdinfo.elem.find('param/name').text
-            # Generate local instance/pdev/device data lookup
-            if dispatchable_type in ["VkPhysicalDevice", "VkInstance"]:
-                self.appendSection('command', '    instance_layer_data *dev_data = GetLayerDataPtr(get_dispatch_key('+dispatchable_name+'), instance_layer_data_map);')
-            else:
-                self.appendSection('command', '    layer_data *dev_data = GetLayerDataPtr(get_dispatch_key('+dispatchable_name+'), layer_data_map);')
-            # Handle return values, if any
-            resulttype = cmdinfo.elem.find('proto/type')
-            if (resulttype != None and resulttype.text == 'void'):
-              resulttype = None
-            if (resulttype != None):
-                assignresult = resulttype.text + ' result = '
-            else:
-                assignresult = ''
-            # Pre-pend declarations and pre-api-call codegen
-            if api_decls:
-                self.appendSection('command', "\n".join(str(api_decls).rstrip().split("\n")))
-            if api_pre:
-                self.appendSection('command', "\n".join(str(api_pre).rstrip().split("\n")))
-            # Generate the API call itself
-            # Gather the parameter items
-            params = cmdinfo.elem.findall('param/name')
-            # Pull out the text for each of the parameters, separate them by commas in a list
-            paramstext = ', '.join([str(param.text) for param in params])
-            # If any of these paramters has been replaced by a local var, fix up the list
-            params = cmd_member_dict[cmdname]
-            for param in params:
-                if param.islocal == True or self.StructWithExtensions(param.type):
-                    if param.ispointer == True:
-                        paramstext = paramstext.replace(param.name, '(%s %s*)local_%s' % ('const', param.type, param.name))
-                    else:
-                        paramstext = paramstext.replace(param.name, '(%s %s)local_%s' % ('const', param.type, param.name))
-            # Use correct dispatch table
-            API = cmdinfo.elem.attrib.get('name').replace('vk','dev_data->dispatch_table.',1)
-            # Put all this together for the final down-chain call
-            self.appendSection('command', '    ' + assignresult + API + '(' + paramstext + ');')
-            # And add the post-API-call codegen
-            self.appendSection('command', "\n".join(str(api_post).rstrip().split("\n")))
-            # Handle the return result variable, if any
-            if (resulttype != None):
-                self.appendSection('command', '    return result;')
-            self.appendSection('command', '}')
-            if (feature_extra_protect != None):
-                self.appendSection('command', '#endif // '+ feature_extra_protect)
-                self.intercepts += [ '#endif' ]
diff --git a/scripts/validusage.json b/scripts/validusage.json
deleted file mode 100644
index 25ac129..0000000
--- a/scripts/validusage.json
+++ /dev/null
@@ -1,18410 +0,0 @@
-{
-  "version info": {
-    "schema version": 2,
-    "api version": "1.1.72",
-    "comment": "from git branch: master commit: e1c0e426f37e45705273f2c5b6cbb0a0f74e3d75",
-    "date": "2018-04-05 21:58:05Z"
-  },
-  "validation": {
-    "vkGetInstanceProcAddr": {
-      "core": [
-        {
-          "vuid": "VUID-vkGetInstanceProcAddr-instance-parameter",
-          "text": " If <code>instance</code> is not <code>NULL</code>, <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetInstanceProcAddr-pName-parameter",
-          "text": " <code>pName</code> <strong class=\"purple\">must</strong> be a null-terminated UTF-8 string"
-        }
-      ]
-    },
-    "vkGetDeviceProcAddr": {
-      "core": [
-        {
-          "vuid": "VUID-vkGetDeviceProcAddr-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetDeviceProcAddr-pName-parameter",
-          "text": " <code>pName</code> <strong class=\"purple\">must</strong> be a null-terminated UTF-8 string"
-        }
-      ]
-    },
-    "vkEnumerateInstanceVersion": {
-      "(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-vkEnumerateInstanceVersion-pApiVersion-parameter",
-          "text": " <code>pApiVersion</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
-        }
-      ]
-    },
-    "vkCreateInstance": {
-      "core": [
-        {
-          "vuid": "VUID-vkCreateInstance-ppEnabledExtensionNames-01388",
-          "text": " All &amp;amp;lt;&amp;amp;lt;extended-functionality-extensions-dependencies, required extensions&amp;amp;gt;&amp;amp;gt; for each extension in the <a href=\"#VkInstanceCreateInfo\">VkInstanceCreateInfo</a>::<code>ppEnabledExtensionNames</code> list <strong class=\"purple\">must</strong> also be present in that list."
-        },
-        {
-          "vuid": "VUID-vkCreateInstance-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkInstanceCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateInstance-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateInstance-pInstance-parameter",
-          "text": " <code>pInstance</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkInstance</code> handle"
-        }
-      ]
-    },
-    "VkInstanceCreateInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkInstanceCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkInstanceCreateInfo-pNext-pNext",
-          "text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkDebugReportCallbackCreateInfoEXT\">VkDebugReportCallbackCreateInfoEXT</a>, <a href=\"#VkDebugUtilsMessengerCreateInfoEXT\">VkDebugUtilsMessengerCreateInfoEXT</a>, or <a href=\"#VkValidationFlagsEXT\">VkValidationFlagsEXT</a>"
-        },
-        {
-          "vuid": "VUID-VkInstanceCreateInfo-sType-unique",
-          "text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
-        },
-        {
-          "vuid": "VUID-VkInstanceCreateInfo-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkInstanceCreateInfo-pApplicationInfo-parameter",
-          "text": " If <code>pApplicationInfo</code> is not <code>NULL</code>, <code>pApplicationInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkApplicationInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-VkInstanceCreateInfo-ppEnabledLayerNames-parameter",
-          "text": " If <code>enabledLayerCount</code> is not <code>0</code>, <code>ppEnabledLayerNames</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>enabledLayerCount</code> null-terminated UTF-8 strings"
-        },
-        {
-          "vuid": "VUID-VkInstanceCreateInfo-ppEnabledExtensionNames-parameter",
-          "text": " If <code>enabledExtensionCount</code> is not <code>0</code>, <code>ppEnabledExtensionNames</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>enabledExtensionCount</code> null-terminated UTF-8 strings"
-        }
-      ]
-    },
-    "VkValidationFlagsEXT": {
-      "(VK_EXT_validation_flags)": [
-        {
-          "vuid": "VUID-VkValidationFlagsEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkValidationFlagsEXT-pDisabledValidationChecks-parameter",
-          "text": " <code>pDisabledValidationChecks</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>disabledValidationCheckCount</code> <a href=\"#VkValidationCheckEXT\">VkValidationCheckEXT</a> values"
-        },
-        {
-          "vuid": "VUID-VkValidationFlagsEXT-disabledValidationCheckCount-arraylength",
-          "text": " <code>disabledValidationCheckCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ]
-    },
-    "VkApplicationInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkApplicationInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_APPLICATION_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkApplicationInfo-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkApplicationInfo-pApplicationName-parameter",
-          "text": " If <code>pApplicationName</code> is not <code>NULL</code>, <code>pApplicationName</code> <strong class=\"purple\">must</strong> be a null-terminated UTF-8 string"
-        },
-        {
-          "vuid": "VUID-VkApplicationInfo-pEngineName-parameter",
-          "text": " If <code>pEngineName</code> is not <code>NULL</code>, <code>pEngineName</code> <strong class=\"purple\">must</strong> be a null-terminated UTF-8 string"
-        }
-      ]
-    },
-    "vkDestroyInstance": {
-      "core": [
-        {
-          "vuid": "VUID-vkDestroyInstance-instance-00629",
-          "text": " All child objects created using <code>instance</code> <strong class=\"purple\">must</strong> have been destroyed prior to destroying <code>instance</code>"
-        },
-        {
-          "vuid": "VUID-vkDestroyInstance-instance-00630",
-          "text": " If <code>VkAllocationCallbacks</code> were provided when <code>instance</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
-        },
-        {
-          "vuid": "VUID-vkDestroyInstance-instance-00631",
-          "text": " If no <code>VkAllocationCallbacks</code> were provided when <code>instance</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-vkDestroyInstance-instance-parameter",
-          "text": " If <code>instance</code> is not <code>NULL</code>, <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyInstance-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        }
-      ]
-    },
-    "vkEnumeratePhysicalDevices": {
-      "core": [
-        {
-          "vuid": "VUID-vkEnumeratePhysicalDevices-instance-parameter",
-          "text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
-        },
-        {
-          "vuid": "VUID-vkEnumeratePhysicalDevices-pPhysicalDeviceCount-parameter",
-          "text": " <code>pPhysicalDeviceCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
-        },
-        {
-          "vuid": "VUID-vkEnumeratePhysicalDevices-pPhysicalDevices-parameter",
-          "text": " If the value referenced by <code>pPhysicalDeviceCount</code> is not <code>0</code>, and <code>pPhysicalDevices</code> is not <code>NULL</code>, <code>pPhysicalDevices</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pPhysicalDeviceCount</code> <code>VkPhysicalDevice</code> handles"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceProperties": {
-      "core": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceProperties-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceProperties-pProperties-parameter",
-          "text": " <code>pProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkPhysicalDeviceProperties</code> structure"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceProperties2": {
-      "(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceProperties2-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceProperties2-pProperties-parameter",
-          "text": " <code>pProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkPhysicalDeviceProperties2</code> structure"
-        }
-      ]
-    },
-    "VkPhysicalDeviceProperties2": {
-      "(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
-        {
-          "vuid": "VUID-VkPhysicalDeviceProperties2-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2</code>"
-        },
-        {
-          "vuid": "VUID-VkPhysicalDeviceProperties2-pNext-pNext",
-          "text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT\">VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT</a>, <a href=\"#VkPhysicalDeviceConservativeRasterizationPropertiesEXT\">VkPhysicalDeviceConservativeRasterizationPropertiesEXT</a>, <a href=\"#VkPhysicalDeviceDiscardRectanglePropertiesEXT\">VkPhysicalDeviceDiscardRectanglePropertiesEXT</a>, <a href=\"#VkPhysicalDeviceExternalMemoryHostPropertiesEXT\">VkPhysicalDeviceExternalMemoryHostPropertiesEXT</a>, <a href=\"#VkPhysicalDeviceIDProperties\">VkPhysicalDeviceIDProperties</a>, <a href=\"#VkPhysicalDeviceMaintenance3Properties\">VkPhysicalDeviceMaintenance3Properties</a>, <a href=\"#VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX\">VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX</a>, <a href=\"#VkPhysicalDeviceMultiviewProperties\">VkPhysicalDeviceMultiviewProperties</a>, <a href=\"#VkPhysicalDevicePointClippingProperties\">VkPhysicalDevicePointClippingProperties</a>, <a href=\"#VkPhysicalDeviceProtectedMemoryProperties\">VkPhysicalDeviceProtectedMemoryProperties</a>, <a href=\"#VkPhysicalDevicePushDescriptorPropertiesKHR\">VkPhysicalDevicePushDescriptorPropertiesKHR</a>, <a href=\"#VkPhysicalDeviceSampleLocationsPropertiesEXT\">VkPhysicalDeviceSampleLocationsPropertiesEXT</a>, <a href=\"#VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT\">VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT</a>, <a href=\"#VkPhysicalDeviceShaderCorePropertiesAMD\">VkPhysicalDeviceShaderCorePropertiesAMD</a>, <a href=\"#VkPhysicalDeviceSubgroupProperties\">VkPhysicalDeviceSubgroupProperties</a>, or <a href=\"#VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT\">VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT</a>"
-        },
-        {
-          "vuid": "VUID-VkPhysicalDeviceProperties2-sType-unique",
-          "text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
-        }
-      ]
-    },
-    "VkPhysicalDeviceIDProperties": {
-      "(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)+(VK_VERSION_1_1,VK_KHR_external_memory_capabilities,VK_KHR_external_semaphore_capabilities,VK_KHR_external_fence_capabilities)": [
-        {
-          "vuid": "VUID-VkPhysicalDeviceIDProperties-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES</code>"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceQueueFamilyProperties": {
-      "core": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceQueueFamilyProperties-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceQueueFamilyProperties-pQueueFamilyPropertyCount-parameter",
-          "text": " <code>pQueueFamilyPropertyCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceQueueFamilyProperties-pQueueFamilyProperties-parameter",
-          "text": " If the value referenced by <code>pQueueFamilyPropertyCount</code> is not <code>0</code>, and <code>pQueueFamilyProperties</code> is not <code>NULL</code>, <code>pQueueFamilyProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pQueueFamilyPropertyCount</code> <code>VkQueueFamilyProperties</code> structures"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceQueueFamilyProperties2": {
-      "(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceQueueFamilyProperties2-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceQueueFamilyProperties2-pQueueFamilyPropertyCount-parameter",
-          "text": " <code>pQueueFamilyPropertyCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceQueueFamilyProperties2-pQueueFamilyProperties-parameter",
-          "text": " If the value referenced by <code>pQueueFamilyPropertyCount</code> is not <code>0</code>, and <code>pQueueFamilyProperties</code> is not <code>NULL</code>, <code>pQueueFamilyProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pQueueFamilyPropertyCount</code> <code>VkQueueFamilyProperties2</code> structures"
-        }
-      ]
-    },
-    "VkQueueFamilyProperties2": {
-      "(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
-        {
-          "vuid": "VUID-VkQueueFamilyProperties2-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2</code>"
-        },
-        {
-          "vuid": "VUID-VkQueueFamilyProperties2-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        }
-      ]
-    },
-    "vkEnumeratePhysicalDeviceGroups": {
-      "(VK_VERSION_1_1,VK_KHR_device_group_creation)": [
-        {
-          "vuid": "VUID-vkEnumeratePhysicalDeviceGroups-instance-parameter",
-          "text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
-        },
-        {
-          "vuid": "VUID-vkEnumeratePhysicalDeviceGroups-pPhysicalDeviceGroupCount-parameter",
-          "text": " <code>pPhysicalDeviceGroupCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
-        },
-        {
-          "vuid": "VUID-vkEnumeratePhysicalDeviceGroups-pPhysicalDeviceGroupProperties-parameter",
-          "text": " If the value referenced by <code>pPhysicalDeviceGroupCount</code> is not <code>0</code>, and <code>pPhysicalDeviceGroupProperties</code> is not <code>NULL</code>, <code>pPhysicalDeviceGroupProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pPhysicalDeviceGroupCount</code> <code>VkPhysicalDeviceGroupProperties</code> structures"
-        }
-      ]
-    },
-    "vkCreateDevice": {
-      "core": [
-        {
-          "vuid": "VUID-vkCreateDevice-ppEnabledExtensionNames-01387",
-          "text": " All &amp;amp;lt;&amp;amp;lt;extended-functionality-extensions-dependencies, required extensions&amp;amp;gt;&amp;amp;gt; for each extension in the <a href=\"#VkDeviceCreateInfo\">VkDeviceCreateInfo</a>::<code>ppEnabledExtensionNames</code> list <strong class=\"purple\">must</strong> also be present in that list."
-        },
-        {
-          "vuid": "VUID-vkCreateDevice-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateDevice-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDeviceCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateDevice-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateDevice-pDevice-parameter",
-          "text": " <code>pDevice</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkDevice</code> handle"
-        }
-      ]
-    },
-    "VkDeviceCreateInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkDeviceCreateInfo-queueFamilyIndex-00372",
-          "text": ""
-        },
-        {
-          "vuid": "VUID-VkDeviceCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkDeviceCreateInfo-pNext-pNext",
-          "text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkDeviceGroupDeviceCreateInfo\">VkDeviceGroupDeviceCreateInfo</a>, <a href=\"#VkPhysicalDevice16BitStorageFeatures\">VkPhysicalDevice16BitStorageFeatures</a>, <a href=\"#VkPhysicalDeviceDescriptorIndexingFeaturesEXT\">VkPhysicalDeviceDescriptorIndexingFeaturesEXT</a>, <a href=\"#VkPhysicalDeviceFeatures2\">VkPhysicalDeviceFeatures2</a>, <a href=\"#VkPhysicalDeviceMultiviewFeatures\">VkPhysicalDeviceMultiviewFeatures</a>, <a href=\"#VkPhysicalDeviceProtectedMemoryFeatures\">VkPhysicalDeviceProtectedMemoryFeatures</a>, <a href=\"#VkPhysicalDeviceSamplerYcbcrConversionFeatures\">VkPhysicalDeviceSamplerYcbcrConversionFeatures</a>, or <a href=\"#VkPhysicalDeviceVariablePointerFeatures\">VkPhysicalDeviceVariablePointerFeatures</a>"
-        },
-        {
-          "vuid": "VUID-VkDeviceCreateInfo-sType-unique",
-          "text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
-        },
-        {
-          "vuid": "VUID-VkDeviceCreateInfo-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkDeviceCreateInfo-pQueueCreateInfos-parameter",
-          "text": " <code>pQueueCreateInfos</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>queueCreateInfoCount</code> valid <code>VkDeviceQueueCreateInfo</code> structures"
-        },
-        {
-          "vuid": "VUID-VkDeviceCreateInfo-ppEnabledLayerNames-parameter",
-          "text": " If <code>enabledLayerCount</code> is not <code>0</code>, <code>ppEnabledLayerNames</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>enabledLayerCount</code> null-terminated UTF-8 strings"
-        },
-        {
-          "vuid": "VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-parameter",
-          "text": " If <code>enabledExtensionCount</code> is not <code>0</code>, <code>ppEnabledExtensionNames</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>enabledExtensionCount</code> null-terminated UTF-8 strings"
-        },
-        {
-          "vuid": "VUID-VkDeviceCreateInfo-pEnabledFeatures-parameter",
-          "text": " If <code>pEnabledFeatures</code> is not <code>NULL</code>, <code>pEnabledFeatures</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPhysicalDeviceFeatures</code> structure"
-        },
-        {
-          "vuid": "VUID-VkDeviceCreateInfo-queueCreateInfoCount-arraylength",
-          "text": " <code>queueCreateInfoCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
-        {
-          "vuid": "VUID-VkDeviceCreateInfo-pNext-00373",
-          "text": " If the <code>pNext</code> chain includes a <a href=\"#VkPhysicalDeviceFeatures2\">VkPhysicalDeviceFeatures2</a> structure, then <code>pEnabledFeatures</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        }
-      ],
-      "(VK_AMD_negative_viewport_height)+(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-01840",
-          "text": " <code>ppEnabledExtensionNames</code> <strong class=\"purple\">must</strong> not contain <code>VK_AMD_negative_viewport_height</code>"
-        }
-      ],
-      "(VK_AMD_negative_viewport_height)+!(VK_VERSION_1_1)+(VK_VERSION_1_1,VK_KHR_maintenance1)": [
-        {
-          "vuid": "VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-00374",
-          "text": " <code>ppEnabledExtensionNames</code> <strong class=\"purple\">must</strong> not contain both <code><a href=\"#VK_KHR_maintenance1\">VK_KHR_maintenance1</a></code> and <code><a href=\"#VK_AMD_negative_viewport_height\">VK_AMD_negative_viewport_height</a></code>"
-        }
-      ]
-    },
-    "VkDeviceGroupDeviceCreateInfo": {
-      "(VK_VERSION_1_1,VK_KHR_device_group_creation)": [
-        {
-          "vuid": "VUID-VkDeviceGroupDeviceCreateInfo-pPhysicalDevices-00375",
-          "text": " Each element of <code>pPhysicalDevices</code> <strong class=\"purple\">must</strong> be unique"
-        },
-        {
-          "vuid": "VUID-VkDeviceGroupDeviceCreateInfo-pPhysicalDevices-00376",
-          "text": " All elements of <code>pPhysicalDevices</code> <strong class=\"purple\">must</strong> be in the same device group as enumerated by <a href=\"#vkEnumeratePhysicalDeviceGroups\">vkEnumeratePhysicalDeviceGroups</a>"
-        },
-        {
-          "vuid": "VUID-VkDeviceGroupDeviceCreateInfo-physicalDeviceCount-00377",
-          "text": " If <code>physicalDeviceCount</code> is not <code>0</code>, the <code>physicalDevice</code> parameter of <a href=\"#vkCreateDevice\">vkCreateDevice</a> <strong class=\"purple\">must</strong> be an element of <code>pPhysicalDevices</code>."
-        },
-        {
-          "vuid": "VUID-VkDeviceGroupDeviceCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkDeviceGroupDeviceCreateInfo-pPhysicalDevices-parameter",
-          "text": " If <code>physicalDeviceCount</code> is not <code>0</code>, <code>pPhysicalDevices</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>physicalDeviceCount</code> valid <code>VkPhysicalDevice</code> handles"
-        }
-      ]
-    },
-    "vkDestroyDevice": {
-      "core": [
-        {
-          "vuid": "VUID-vkDestroyDevice-device-00378",
-          "text": " All child objects created on <code>device</code> <strong class=\"purple\">must</strong> have been destroyed prior to destroying <code>device</code>"
-        },
-        {
-          "vuid": "VUID-vkDestroyDevice-device-00379",
-          "text": " If <code>VkAllocationCallbacks</code> were provided when <code>device</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
-        },
-        {
-          "vuid": "VUID-vkDestroyDevice-device-00380",
-          "text": " If no <code>VkAllocationCallbacks</code> were provided when <code>device</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-vkDestroyDevice-device-parameter",
-          "text": " If <code>device</code> is not <code>NULL</code>, <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyDevice-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        }
-      ]
-    },
-    "VkDeviceQueueCreateInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkDeviceQueueCreateInfo-queueFamilyIndex-00381",
-          "text": " <code>queueFamilyIndex</code> <strong class=\"purple\">must</strong> be less than <code>pQueueFamilyPropertyCount</code> returned by <code>vkGetPhysicalDeviceQueueFamilyProperties</code>"
-        },
-        {
-          "vuid": "VUID-VkDeviceQueueCreateInfo-queueCount-00382",
-          "text": " <code>queueCount</code> <strong class=\"purple\">must</strong> be less than or equal to the <code>queueCount</code> member of the <code>VkQueueFamilyProperties</code> structure, as returned by <code>vkGetPhysicalDeviceQueueFamilyProperties</code> in the <code>pQueueFamilyProperties</code>[<code>queueFamilyIndex</code>]"
-        },
-        {
-          "vuid": "VUID-VkDeviceQueueCreateInfo-pQueuePriorities-00383",
-          "text": " Each element of <code>pQueuePriorities</code> <strong class=\"purple\">must</strong> be between <code>0.0</code> and <code>1.0</code> inclusive"
-        },
-        {
-          "vuid": "VUID-VkDeviceQueueCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkDeviceQueueCreateInfo-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkDeviceQueueGlobalPriorityCreateInfoEXT\">VkDeviceQueueGlobalPriorityCreateInfoEXT</a>"
-        },
-        {
-          "vuid": "VUID-VkDeviceQueueCreateInfo-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkDeviceQueueCreateFlagBits\">VkDeviceQueueCreateFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkDeviceQueueCreateInfo-pQueuePriorities-parameter",
-          "text": " <code>pQueuePriorities</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>queueCount</code> <code>float</code> values"
-        },
-        {
-          "vuid": "VUID-VkDeviceQueueCreateInfo-queueCount-arraylength",
-          "text": " <code>queueCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ]
-    },
-    "VkDeviceQueueGlobalPriorityCreateInfoEXT": {
-      "(VK_EXT_global_priority)": [
-        {
-          "vuid": "VUID-VkDeviceQueueGlobalPriorityCreateInfoEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkDeviceQueueGlobalPriorityCreateInfoEXT-globalPriority-parameter",
-          "text": " <code>globalPriority</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkQueueGlobalPriorityEXT\">VkQueueGlobalPriorityEXT</a> value"
-        }
-      ]
-    },
-    "vkGetDeviceQueue": {
-      "core": [
-        {
-          "vuid": "VUID-vkGetDeviceQueue-queueFamilyIndex-00384",
-          "text": " <code>queueFamilyIndex</code> <strong class=\"purple\">must</strong> be one of the queue family indices specified when <code>device</code> was created, via the <code>VkDeviceQueueCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-vkGetDeviceQueue-queueIndex-00385",
-          "text": " <code>queueIndex</code> <strong class=\"purple\">must</strong> be less than the number of queues created for the specified queue family index when <code>device</code> was created, via the <code>queueCount</code> member of the <code>VkDeviceQueueCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-vkGetDeviceQueue-flags-01841",
-          "text": " <a href=\"#VkDeviceQueueCreateInfo\">VkDeviceQueueCreateInfo</a>::<code>flags</code> <strong class=\"purple\">must</strong> have been set to zero when <code>device</code> was created"
-        },
-        {
-          "vuid": "VUID-vkGetDeviceQueue-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetDeviceQueue-pQueue-parameter",
-          "text": " <code>pQueue</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkQueue</code> handle"
-        }
-      ]
-    },
-    "vkGetDeviceQueue2": {
-      "(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-vkGetDeviceQueue2-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetDeviceQueue2-pQueueInfo-parameter",
-          "text": " <code>pQueueInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDeviceQueueInfo2</code> structure"
-        },
-        {
-          "vuid": "VUID-vkGetDeviceQueue2-pQueue-parameter",
-          "text": " <code>pQueue</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkQueue</code> handle"
-        }
-      ]
-    },
-    "VkDeviceQueueInfo2": {
-      "(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-VkDeviceQueueInfo2-queueFamilyIndex-01842",
-          "text": " <code>queueFamilyIndex</code> <strong class=\"purple\">must</strong> be one of the queue family indices specified when <code>device</code> was created, via the <code>VkDeviceQueueCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-VkDeviceQueueInfo2-queueIndex-01843",
-          "text": " <code>queueIndex</code> <strong class=\"purple\">must</strong> be less than the number of queues created for the specified queue family index and <code>VkDeviceQueueCreateFlags</code> member <code>flags</code> equal to this <code>flags</code> value when <code>device</code> was created, via the <code>queueCount</code> member of the <code>VkDeviceQueueCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-VkDeviceQueueInfo2-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2</code>"
-        },
-        {
-          "vuid": "VUID-VkDeviceQueueInfo2-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkDeviceQueueInfo2-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkDeviceQueueCreateFlagBits\">VkDeviceQueueCreateFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkDeviceQueueInfo2-flags-requiredbitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        }
-      ]
-    },
-    "vkCreateCommandPool": {
-      "core": [
-        {
-          "vuid": "VUID-vkCreateCommandPool-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateCommandPool-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkCommandPoolCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateCommandPool-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateCommandPool-pCommandPool-parameter",
-          "text": " <code>pCommandPool</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkCommandPool</code> handle"
-        }
-      ]
-    },
-    "VkCommandPoolCreateInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkCommandPoolCreateInfo-queueFamilyIndex-00039",
-          "text": " <code>queueFamilyIndex</code> <strong class=\"purple\">must</strong> be the index of a queue family available in the calling command&#8217;s <code>device</code> parameter"
-        },
-        {
-          "vuid": "VUID-VkCommandPoolCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkCommandPoolCreateInfo-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkCommandPoolCreateInfo-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkCommandPoolCreateFlagBits\">VkCommandPoolCreateFlagBits</a> values"
-        }
-      ]
-    },
-    "vkTrimCommandPool": {
-      "(VK_VERSION_1_1,VK_KHR_maintenance1)": [
-        {
-          "vuid": "VUID-vkTrimCommandPool-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkTrimCommandPool-commandPool-parameter",
-          "text": " <code>commandPool</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandPool</code> handle"
-        },
-        {
-          "vuid": "VUID-vkTrimCommandPool-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkTrimCommandPool-commandPool-parent",
-          "text": " <code>commandPool</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkResetCommandPool": {
-      "core": [
-        {
-          "vuid": "VUID-vkResetCommandPool-commandPool-00040",
-          "text": " All <code>VkCommandBuffer</code> objects allocated from <code>commandPool</code> <strong class=\"purple\">must</strong> not be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, pending state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkResetCommandPool-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkResetCommandPool-commandPool-parameter",
-          "text": " <code>commandPool</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandPool</code> handle"
-        },
-        {
-          "vuid": "VUID-vkResetCommandPool-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkCommandPoolResetFlagBits\">VkCommandPoolResetFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-vkResetCommandPool-commandPool-parent",
-          "text": " <code>commandPool</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkDestroyCommandPool": {
-      "core": [
-        {
-          "vuid": "VUID-vkDestroyCommandPool-commandPool-00041",
-          "text": " All <code>VkCommandBuffer</code> objects allocated from <code>commandPool</code> <strong class=\"purple\">must</strong> not be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, pending state&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-vkDestroyCommandPool-commandPool-00042",
-          "text": " If <code>VkAllocationCallbacks</code> were provided when <code>commandPool</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
-        },
-        {
-          "vuid": "VUID-vkDestroyCommandPool-commandPool-00043",
-          "text": " If no <code>VkAllocationCallbacks</code> were provided when <code>commandPool</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-vkDestroyCommandPool-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyCommandPool-commandPool-parameter",
-          "text": " If <code>commandPool</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>commandPool</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandPool</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyCommandPool-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkDestroyCommandPool-commandPool-parent",
-          "text": " If <code>commandPool</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkAllocateCommandBuffers": {
-      "core": [
-        {
-          "vuid": "VUID-vkAllocateCommandBuffers-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkAllocateCommandBuffers-pAllocateInfo-parameter",
-          "text": " <code>pAllocateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkCommandBufferAllocateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-vkAllocateCommandBuffers-pCommandBuffers-parameter",
-          "text": " <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pAllocateInfo</code>::commandBufferCount <code>VkCommandBuffer</code> handles"
-        }
-      ]
-    },
-    "VkCommandBufferAllocateInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkCommandBufferAllocateInfo-commandBufferCount-00044",
-          "text": " <code>commandBufferCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkCommandBufferAllocateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkCommandBufferAllocateInfo-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkCommandBufferAllocateInfo-commandPool-parameter",
-          "text": " <code>commandPool</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandPool</code> handle"
-        },
-        {
-          "vuid": "VUID-VkCommandBufferAllocateInfo-level-parameter",
-          "text": " <code>level</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBufferLevel\">VkCommandBufferLevel</a> value"
-        }
-      ]
-    },
-    "vkResetCommandBuffer": {
-      "core": [
-        {
-          "vuid": "VUID-vkResetCommandBuffer-commandBuffer-00045",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> not be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, pending state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkResetCommandBuffer-commandBuffer-00046",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> have been allocated from a pool that was created with the <code>VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT</code>"
-        },
-        {
-          "vuid": "VUID-vkResetCommandBuffer-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkResetCommandBuffer-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkCommandBufferResetFlagBits\">VkCommandBufferResetFlagBits</a> values"
-        }
-      ]
-    },
-    "vkFreeCommandBuffers": {
-      "core": [
-        {
-          "vuid": "VUID-vkFreeCommandBuffers-pCommandBuffers-00047",
-          "text": " All elements of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> not be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, pending state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkFreeCommandBuffers-pCommandBuffers-00048",
-          "text": " <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>commandBufferCount</code> <code>VkCommandBuffer</code> handles, each element of which <strong class=\"purple\">must</strong> either be a valid handle or <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-vkFreeCommandBuffers-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkFreeCommandBuffers-commandPool-parameter",
-          "text": " <code>commandPool</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandPool</code> handle"
-        },
-        {
-          "vuid": "VUID-vkFreeCommandBuffers-commandBufferCount-arraylength",
-          "text": " <code>commandBufferCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkFreeCommandBuffers-commandPool-parent",
-          "text": " <code>commandPool</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        },
-        {
-          "vuid": "VUID-vkFreeCommandBuffers-pCommandBuffers-parent",
-          "text": " Each element of <code>pCommandBuffers</code> that is a valid handle <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>commandPool</code>"
-        }
-      ]
-    },
-    "vkBeginCommandBuffer": {
-      "core": [
-        {
-          "vuid": "VUID-vkBeginCommandBuffer-commandBuffer-00049",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> not be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording or pending state&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-vkBeginCommandBuffer-commandBuffer-00050",
-          "text": " If <code>commandBuffer</code> was allocated from a <a href=\"#VkCommandPool\">VkCommandPool</a> which did not have the <code>VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT</code> flag set, <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, initial state&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-vkBeginCommandBuffer-commandBuffer-00051",
-          "text": " If <code>commandBuffer</code> is a secondary command buffer, the <code>pInheritanceInfo</code> member of <code>pBeginInfo</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBufferInheritanceInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-vkBeginCommandBuffer-commandBuffer-00052",
-          "text": " If <code>commandBuffer</code> is a secondary command buffer and either the <code>occlusionQueryEnable</code> member of the <code>pInheritanceInfo</code> member of <code>pBeginInfo</code> is <code>VK_FALSE</code>, or the precise occlusion queries feature is not enabled, the <code>queryFlags</code> member of the <code>pInheritanceInfo</code> member <code>pBeginInfo</code> <strong class=\"purple\">must</strong> not contain <code>VK_QUERY_CONTROL_PRECISE_BIT</code>"
-        },
-        {
-          "vuid": "VUID-vkBeginCommandBuffer-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkBeginCommandBuffer-pBeginInfo-parameter",
-          "text": " <code>pBeginInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkCommandBufferBeginInfo</code> structure"
-        }
-      ]
-    },
-    "VkCommandBufferBeginInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkCommandBufferBeginInfo-flags-00053",
-          "text": " If <code>flags</code> contains <code>VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT</code>, the <code>renderPass</code> member of <code>pInheritanceInfo</code> <strong class=\"purple\">must</strong> be a valid <code>VkRenderPass</code>"
-        },
-        {
-          "vuid": "VUID-VkCommandBufferBeginInfo-flags-00054",
-          "text": " If <code>flags</code> contains <code>VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT</code>, the <code>subpass</code> member of <code>pInheritanceInfo</code> <strong class=\"purple\">must</strong> be a valid subpass index within the <code>renderPass</code> member of <code>pInheritanceInfo</code>"
-        },
-        {
-          "vuid": "VUID-VkCommandBufferBeginInfo-flags-00055",
-          "text": " If <code>flags</code> contains <code>VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT</code>, the <code>framebuffer</code> member of <code>pInheritanceInfo</code> <strong class=\"purple\">must</strong> be either <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, or a valid <code>VkFramebuffer</code> that is compatible with the <code>renderPass</code> member of <code>pInheritanceInfo</code>"
-        },
-        {
-          "vuid": "VUID-VkCommandBufferBeginInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkCommandBufferBeginInfo-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkDeviceGroupCommandBufferBeginInfo\">VkDeviceGroupCommandBufferBeginInfo</a>"
-        },
-        {
-          "vuid": "VUID-VkCommandBufferBeginInfo-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkCommandBufferUsageFlagBits\">VkCommandBufferUsageFlagBits</a> values"
-        }
-      ]
-    },
-    "VkCommandBufferInheritanceInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkCommandBufferInheritanceInfo-occlusionQueryEnable-00056",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-inheritedQueries,inherited queries&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>occlusionQueryEnable</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
-        },
-        {
-          "vuid": "VUID-VkCommandBufferInheritanceInfo-queryFlags-00057",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-inheritedQueries,inherited queries&amp;amp;gt;&amp;amp;gt; feature is enabled, <code>queryFlags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkQueryControlFlagBits\">VkQueryControlFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkCommandBufferInheritanceInfo-pipelineStatistics-00058",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-pipelineStatisticsQuery,pipeline statistics queries&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>pipelineStatistics</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkCommandBufferInheritanceInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkCommandBufferInheritanceInfo-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkCommandBufferInheritanceInfo-commonparent",
-          "text": " Both of <code>framebuffer</code>, and <code>renderPass</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ]
-    },
-    "vkEndCommandBuffer": {
-      "core": [
-        {
-          "vuid": "VUID-vkEndCommandBuffer-commandBuffer-00059",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-vkEndCommandBuffer-commandBuffer-00060",
-          "text": " If <code>commandBuffer</code> is a primary command buffer, there <strong class=\"purple\">must</strong> not be an active render pass instance"
-        },
-        {
-          "vuid": "VUID-vkEndCommandBuffer-commandBuffer-00061",
-          "text": " All queries made &amp;amp;lt;&amp;amp;lt;queries-operation-active,active&amp;amp;gt;&amp;amp;gt; during the recording of <code>commandBuffer</code> <strong class=\"purple\">must</strong> have been made inactive"
-        },
-        {
-          "vuid": "VUID-vkEndCommandBuffer-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        }
-      ],
-      "(VK_EXT_debug_utils)": [
-        {
-          "vuid": "VUID-vkEndCommandBuffer-commandBuffer-01815",
-          "text": " If <code>commandBuffer</code> is a secondary command buffer, there <strong class=\"purple\">must</strong> not be an outstanding <a href=\"#vkCmdBeginDebugUtilsLabelEXT\">vkCmdBeginDebugUtilsLabelEXT</a> command recorded to <code>commandBuffer</code> that has not previously been ended by a call to <a href=\"#vkCmdEndDebugUtilsLabelEXT\">vkCmdEndDebugUtilsLabelEXT</a>."
-        }
-      ],
-      "(VK_EXT_debug_marker)": [
-        {
-          "vuid": "VUID-vkEndCommandBuffer-commandBuffer-00062",
-          "text": " If <code>commandBuffer</code> is a secondary command buffer, there <strong class=\"purple\">must</strong> not be an outstanding <a href=\"#vkCmdDebugMarkerBeginEXT\">vkCmdDebugMarkerBeginEXT</a> command recorded to <code>commandBuffer</code> that has not previously been ended by a call to <a href=\"#vkCmdDebugMarkerEndEXT\">vkCmdDebugMarkerEndEXT</a>."
-        }
-      ]
-    },
-    "vkQueueSubmit": {
-      "core": [
-        {
-          "vuid": "VUID-vkQueueSubmit-fence-00063",
-          "text": " If <code>fence</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>fence</code> <strong class=\"purple\">must</strong> be unsignaled"
-        },
-        {
-          "vuid": "VUID-vkQueueSubmit-fence-00064",
-          "text": " If <code>fence</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>fence</code> <strong class=\"purple\">must</strong> not be associated with any other queue command that has not yet completed execution on that queue"
-        },
-        {
-          "vuid": "VUID-vkQueueSubmit-pCommandBuffers-00065",
-          "text": " Any calls to <a href=\"#vkCmdSetEvent\">vkCmdSetEvent</a>, <a href=\"#vkCmdResetEvent\">vkCmdResetEvent</a> or <a href=\"#vkCmdWaitEvents\">vkCmdWaitEvents</a> that have been recorded into any of the command buffer elements of the <code>pCommandBuffers</code> member of any element of <code>pSubmits</code>, <strong class=\"purple\">must</strong> not reference any <a href=\"#VkEvent\">VkEvent</a> that is referenced by any of those commands in a command buffer that has been submitted to another queue and is still in the <em>pending state</em>."
-        },
-        {
-          "vuid": "VUID-vkQueueSubmit-pWaitDstStageMask-00066",
-          "text": " Any stage flag included in any element of the <code>pWaitDstStageMask</code> member of any element of <code>pSubmits</code> <strong class=\"purple\">must</strong> be a pipeline stage supported by one of the capabilities of <code>queue</code>, as specified in the &amp;amp;lt;&amp;amp;lt;synchronization-pipeline-stages-supported, table of supported pipeline stages&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-vkQueueSubmit-pSignalSemaphores-00067",
-          "text": " Each element of the <code>pSignalSemaphores</code> member of any element of <code>pSubmits</code> <strong class=\"purple\">must</strong> be unsignaled when the semaphore signal operation it defines is executed on the device"
-        },
-        {
-          "vuid": "VUID-vkQueueSubmit-pWaitSemaphores-00068",
-          "text": " When a semaphore unsignal operation defined by any element of the <code>pWaitSemaphores</code> member of any element of <code>pSubmits</code> executes on <code>queue</code>, no other queue <strong class=\"purple\">must</strong> be waiting on the same semaphore."
-        },
-        {
-          "vuid": "VUID-vkQueueSubmit-pWaitSemaphores-00069",
-          "text": " All elements of the <code>pWaitSemaphores</code> member of all elements of <code>pSubmits</code> <strong class=\"purple\">must</strong> be semaphores that are signaled, or have &amp;amp;lt;&amp;amp;lt;synchronization-semaphores-signaling, semaphore signal operations&amp;amp;gt;&amp;amp;gt; previously submitted for execution."
-        },
-        {
-          "vuid": "VUID-vkQueueSubmit-pCommandBuffers-00070",
-          "text": " Each element of the <code>pCommandBuffers</code> member of each element of <code>pSubmits</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, pending or executable state&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-vkQueueSubmit-pCommandBuffers-00071",
-          "text": " If any element of the <code>pCommandBuffers</code> member of any element of <code>pSubmits</code> was not recorded with the <code>VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT</code>, it <strong class=\"purple\">must</strong> not be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, pending state&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-vkQueueSubmit-pCommandBuffers-00072",
-          "text": " Any &amp;amp;lt;&amp;amp;lt;commandbuffers-secondary, secondary command buffers recorded&amp;amp;gt;&amp;amp;gt; into any element of the <code>pCommandBuffers</code> member of any element of <code>pSubmits</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, pending or executable state&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-vkQueueSubmit-pCommandBuffers-00073",
-          "text": " If any &amp;amp;lt;&amp;amp;lt;commandbuffers-secondary, secondary command buffers recorded&amp;amp;gt;&amp;amp;gt; into any element of the <code>pCommandBuffers</code> member of any element of <code>pSubmits</code> was not recorded with the <code>VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT</code>, it <strong class=\"purple\">must</strong> not be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, pending state&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-vkQueueSubmit-pCommandBuffers-00074",
-          "text": " Each element of the <code>pCommandBuffers</code> member of each element of <code>pSubmits</code> <strong class=\"purple\">must</strong> have been allocated from a <code>VkCommandPool</code> that was created for the same queue family <code>queue</code> belongs to."
-        },
-        {
-          "vuid": "VUID-vkQueueSubmit-queue-parameter",
-          "text": " <code>queue</code> <strong class=\"purple\">must</strong> be a valid <code>VkQueue</code> handle"
-        },
-        {
-          "vuid": "VUID-vkQueueSubmit-pSubmits-parameter",
-          "text": " If <code>submitCount</code> is not <code>0</code>, <code>pSubmits</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>submitCount</code> valid <code>VkSubmitInfo</code> structures"
-        },
-        {
-          "vuid": "VUID-vkQueueSubmit-fence-parameter",
-          "text": " If <code>fence</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>fence</code> <strong class=\"purple\">must</strong> be a valid <code>VkFence</code> handle"
-        },
-        {
-          "vuid": "VUID-vkQueueSubmit-commonparent",
-          "text": " Both of <code>fence</code>, and <code>queue</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ]
-    },
-    "VkSubmitInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkSubmitInfo-pCommandBuffers-00075",
-          "text": " Each element of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> not have been allocated with <code>VK_COMMAND_BUFFER_LEVEL_SECONDARY</code>"
-        },
-        {
-          "vuid": "VUID-VkSubmitInfo-pWaitDstStageMask-00076",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-geometryShader,geometry shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, each element of <code>pWaitDstStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkSubmitInfo-pWaitDstStageMask-00077",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-tessellationShader,tessellation shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, each element of <code>pWaitDstStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT</code> or <code>VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkSubmitInfo-pWaitDstStageMask-00078",
-          "text": " Each element of <code>pWaitDstStageMask</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_STAGE_HOST_BIT</code>."
-        },
-        {
-          "vuid": "VUID-VkSubmitInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SUBMIT_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkSubmitInfo-pNext-pNext",
-          "text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkD3D12FenceSubmitInfoKHR\">VkD3D12FenceSubmitInfoKHR</a>, <a href=\"#VkDeviceGroupSubmitInfo\">VkDeviceGroupSubmitInfo</a>, <a href=\"#VkProtectedSubmitInfo\">VkProtectedSubmitInfo</a>, <a href=\"#VkWin32KeyedMutexAcquireReleaseInfoKHR\">VkWin32KeyedMutexAcquireReleaseInfoKHR</a>, or <a href=\"#VkWin32KeyedMutexAcquireReleaseInfoNV\">VkWin32KeyedMutexAcquireReleaseInfoNV</a>"
-        },
-        {
-          "vuid": "VUID-VkSubmitInfo-sType-unique",
-          "text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
-        },
-        {
-          "vuid": "VUID-VkSubmitInfo-pWaitSemaphores-parameter",
-          "text": " If <code>waitSemaphoreCount</code> is not <code>0</code>, <code>pWaitSemaphores</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>waitSemaphoreCount</code> valid <code>VkSemaphore</code> handles"
-        },
-        {
-          "vuid": "VUID-VkSubmitInfo-pWaitDstStageMask-parameter",
-          "text": " If <code>waitSemaphoreCount</code> is not <code>0</code>, <code>pWaitDstStageMask</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>waitSemaphoreCount</code> valid combinations of <a href=\"#VkPipelineStageFlagBits\">VkPipelineStageFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkSubmitInfo-pWaitDstStageMask-requiredbitmask",
-          "text": " Each element of <code>pWaitDstStageMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkSubmitInfo-pCommandBuffers-parameter",
-          "text": " If <code>commandBufferCount</code> is not <code>0</code>, <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>commandBufferCount</code> valid <code>VkCommandBuffer</code> handles"
-        },
-        {
-          "vuid": "VUID-VkSubmitInfo-pSignalSemaphores-parameter",
-          "text": " If <code>signalSemaphoreCount</code> is not <code>0</code>, <code>pSignalSemaphores</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>signalSemaphoreCount</code> valid <code>VkSemaphore</code> handles"
-        },
-        {
-          "vuid": "VUID-VkSubmitInfo-commonparent",
-          "text": " Each of the elements of <code>pCommandBuffers</code>, the elements of <code>pSignalSemaphores</code>, and the elements of <code>pWaitSemaphores</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ]
-    },
-    "VkD3D12FenceSubmitInfoKHR": {
-      "(VK_KHR_external_semaphore_win32)": [
-        {
-          "vuid": "VUID-VkD3D12FenceSubmitInfoKHR-waitSemaphoreValuesCount-00079",
-          "text": " <code>waitSemaphoreValuesCount</code> <strong class=\"purple\">must</strong> be the same value as <code>VkSubmitInfo</code>::<code>waitSemaphoreCount</code>, where <code>VkSubmitInfo</code> is in the <code>pNext</code> chain of this <code>VkD3D12FenceSubmitInfoKHR</code> structure."
-        },
-        {
-          "vuid": "VUID-VkD3D12FenceSubmitInfoKHR-signalSemaphoreValuesCount-00080",
-          "text": " <code>signalSemaphoreValuesCount</code> <strong class=\"purple\">must</strong> be the same value as <code>VkSubmitInfo</code>::<code>signalSemaphoreCount</code>, where <code>VkSubmitInfo</code> is in the <code>pNext</code> chain of this <code>VkD3D12FenceSubmitInfoKHR</code> structure."
-        },
-        {
-          "vuid": "VUID-VkD3D12FenceSubmitInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkD3D12FenceSubmitInfoKHR-pWaitSemaphoreValues-parameter",
-          "text": " If <code>waitSemaphoreValuesCount</code> is not <code>0</code>, and <code>pWaitSemaphoreValues</code> is not <code>NULL</code>, <code>pWaitSemaphoreValues</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>waitSemaphoreValuesCount</code> <code>uint64_t</code> values"
-        },
-        {
-          "vuid": "VUID-VkD3D12FenceSubmitInfoKHR-pSignalSemaphoreValues-parameter",
-          "text": " If <code>signalSemaphoreValuesCount</code> is not <code>0</code>, and <code>pSignalSemaphoreValues</code> is not <code>NULL</code>, <code>pSignalSemaphoreValues</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>signalSemaphoreValuesCount</code> <code>uint64_t</code> values"
-        }
-      ]
-    },
-    "VkWin32KeyedMutexAcquireReleaseInfoKHR": {
-      "(VK_KHR_win32_keyed_mutex)": [
-        {
-          "vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-pAcquireSyncs-00081",
-          "text": " Each member of <code>pAcquireSyncs</code> and <code>pReleaseSyncs</code> <strong class=\"purple\">must</strong> be a device memory object imported by setting <a href=\"#VkImportMemoryWin32HandleInfoKHR\">VkImportMemoryWin32HandleInfoKHR</a>::<code>handleType</code> to <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT</code> or <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT</code>."
-        },
-        {
-          "vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-pAcquireSyncs-parameter",
-          "text": " If <code>acquireCount</code> is not <code>0</code>, <code>pAcquireSyncs</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>acquireCount</code> valid <code>VkDeviceMemory</code> handles"
-        },
-        {
-          "vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-pAcquireKeys-parameter",
-          "text": " If <code>acquireCount</code> is not <code>0</code>, <code>pAcquireKeys</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>acquireCount</code> <code>uint64_t</code> values"
-        },
-        {
-          "vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-pAcquireTimeouts-parameter",
-          "text": " If <code>acquireCount</code> is not <code>0</code>, <code>pAcquireTimeouts</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>acquireCount</code> <code>uint32_t</code> values"
-        },
-        {
-          "vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-pReleaseSyncs-parameter",
-          "text": " If <code>releaseCount</code> is not <code>0</code>, <code>pReleaseSyncs</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>releaseCount</code> valid <code>VkDeviceMemory</code> handles"
-        },
-        {
-          "vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-pReleaseKeys-parameter",
-          "text": " If <code>releaseCount</code> is not <code>0</code>, <code>pReleaseKeys</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>releaseCount</code> <code>uint64_t</code> values"
-        },
-        {
-          "vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-commonparent",
-          "text": " Both of the elements of <code>pAcquireSyncs</code>, and the elements of <code>pReleaseSyncs</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ]
-    },
-    "VkWin32KeyedMutexAcquireReleaseInfoNV": {
-      "(VK_NV_win32_keyed_mutex)": [
-        {
-          "vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoNV-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV</code>"
-        },
-        {
-          "vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoNV-pAcquireSyncs-parameter",
-          "text": " If <code>acquireCount</code> is not <code>0</code>, <code>pAcquireSyncs</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>acquireCount</code> valid <code>VkDeviceMemory</code> handles"
-        },
-        {
-          "vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoNV-pAcquireKeys-parameter",
-          "text": " If <code>acquireCount</code> is not <code>0</code>, <code>pAcquireKeys</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>acquireCount</code> <code>uint64_t</code> values"
-        },
-        {
-          "vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoNV-pAcquireTimeoutMilliseconds-parameter",
-          "text": " If <code>acquireCount</code> is not <code>0</code>, <code>pAcquireTimeoutMilliseconds</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>acquireCount</code> <code>uint32_t</code> values"
-        },
-        {
-          "vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoNV-pReleaseSyncs-parameter",
-          "text": " If <code>releaseCount</code> is not <code>0</code>, <code>pReleaseSyncs</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>releaseCount</code> valid <code>VkDeviceMemory</code> handles"
-        },
-        {
-          "vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoNV-pReleaseKeys-parameter",
-          "text": " If <code>releaseCount</code> is not <code>0</code>, <code>pReleaseKeys</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>releaseCount</code> <code>uint64_t</code> values"
-        },
-        {
-          "vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoNV-commonparent",
-          "text": " Both of the elements of <code>pAcquireSyncs</code>, and the elements of <code>pReleaseSyncs</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ]
-    },
-    "VkProtectedSubmitInfo": {
-      "(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-VkProtectedSubmitInfo-protectedSubmit-01816",
-          "text": " If the protected memory feature is not enabled, <code>protectedSubmit</code> <strong class=\"purple\">must</strong> not be <code>VK_TRUE</code>."
-        },
-        {
-          "vuid": "VUID-VkProtectedSubmitInfo-protectedSubmit-01817",
-          "text": " If <code>protectedSubmit</code> is <code>VK_TRUE</code>, then each element of the <code>pCommandBuffers</code> array <strong class=\"purple\">must</strong> be a protected command buffer."
-        },
-        {
-          "vuid": "VUID-VkProtectedSubmitInfo-protectedSubmit-01818",
-          "text": " If <code>protectedSubmit</code> is <code>VK_FALSE</code>, then each element of the <code>pCommandBuffers</code> array <strong class=\"purple\">must</strong> be an unprotected command buffer."
-        },
-        {
-          "vuid": "VUID-VkProtectedSubmitInfo-pNext-01819",
-          "text": " If the <code>VkSubmitInfo</code>::<code>pNext</code> chain does not include a <code>VkProtectedSubmitInfo</code> structure, then each element of the command buffer of the <code>pCommandBuffers</code> array <strong class=\"purple\">must</strong> be an unprotected command buffer."
-        },
-        {
-          "vuid": "VUID-VkProtectedSubmitInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO</code>"
-        }
-      ]
-    },
-    "VkDeviceGroupSubmitInfo": {
-      "(VK_VERSION_1_1,VK_KHR_device_group)": [
-        {
-          "vuid": "VUID-VkDeviceGroupSubmitInfo-waitSemaphoreCount-00082",
-          "text": " <code>waitSemaphoreCount</code> <strong class=\"purple\">must</strong> equal <a href=\"#VkSubmitInfo\">VkSubmitInfo</a>::<code>waitSemaphoreCount</code>"
-        },
-        {
-          "vuid": "VUID-VkDeviceGroupSubmitInfo-commandBufferCount-00083",
-          "text": " <code>commandBufferCount</code> <strong class=\"purple\">must</strong> equal <a href=\"#VkSubmitInfo\">VkSubmitInfo</a>::<code>commandBufferCount</code>"
-        },
-        {
-          "vuid": "VUID-VkDeviceGroupSubmitInfo-signalSemaphoreCount-00084",
-          "text": " <code>signalSemaphoreCount</code> <strong class=\"purple\">must</strong> equal <a href=\"#VkSubmitInfo\">VkSubmitInfo</a>::<code>signalSemaphoreCount</code>"
-        },
-        {
-          "vuid": "VUID-VkDeviceGroupSubmitInfo-pWaitSemaphoreDeviceIndices-00085",
-          "text": " All elements of <code>pWaitSemaphoreDeviceIndices</code> and <code>pSignalSemaphoreDeviceIndices</code> <strong class=\"purple\">must</strong> be valid device indices"
-        },
-        {
-          "vuid": "VUID-VkDeviceGroupSubmitInfo-pCommandBufferDeviceMasks-00086",
-          "text": " All elements of <code>pCommandBufferDeviceMasks</code> <strong class=\"purple\">must</strong> be valid device masks"
-        },
-        {
-          "vuid": "VUID-VkDeviceGroupSubmitInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkDeviceGroupSubmitInfo-pWaitSemaphoreDeviceIndices-parameter",
-          "text": " If <code>waitSemaphoreCount</code> is not <code>0</code>, <code>pWaitSemaphoreDeviceIndices</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>waitSemaphoreCount</code> <code>uint32_t</code> values"
-        },
-        {
-          "vuid": "VUID-VkDeviceGroupSubmitInfo-pCommandBufferDeviceMasks-parameter",
-          "text": " If <code>commandBufferCount</code> is not <code>0</code>, <code>pCommandBufferDeviceMasks</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>commandBufferCount</code> <code>uint32_t</code> values"
-        },
-        {
-          "vuid": "VUID-VkDeviceGroupSubmitInfo-pSignalSemaphoreDeviceIndices-parameter",
-          "text": " If <code>signalSemaphoreCount</code> is not <code>0</code>, <code>pSignalSemaphoreDeviceIndices</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>signalSemaphoreCount</code> <code>uint32_t</code> values"
-        }
-      ]
-    },
-    "vkCmdExecuteCommands": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdExecuteCommands-commandBuffer-00087",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> have been allocated with a <code>level</code> of <code>VK_COMMAND_BUFFER_LEVEL_PRIMARY</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00088",
-          "text": " Each element of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> have been allocated with a <code>level</code> of <code>VK_COMMAND_BUFFER_LEVEL_SECONDARY</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00089",
-          "text": " Each element of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, pending or executable state&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00090",
-          "text": " If any element of <code>pCommandBuffers</code> was not recorded with the <code>VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT</code> flag, and it was recorded into any other primary command buffer, that primary command buffer <strong class=\"purple\">must</strong> not be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, pending state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00091",
-          "text": " If any element of <code>pCommandBuffers</code> was not recorded with the <code>VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT</code> flag, it <strong class=\"purple\">must</strong> not be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, pending state&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00092",
-          "text": " If any element of <code>pCommandBuffers</code> was not recorded with the <code>VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT</code> flag, it <strong class=\"purple\">must</strong> not have already been recorded to <code>commandBuffer</code>."
-        },
-        {
-          "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00093",
-          "text": " If any element of <code>pCommandBuffers</code> was not recorded with the <code>VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT</code> flag, it <strong class=\"purple\">must</strong> not appear more than once in <code>pCommandBuffers</code>."
-        },
-        {
-          "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00094",
-          "text": " Each element of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> have been allocated from a <code>VkCommandPool</code> that was created for the same queue family as the <code>VkCommandPool</code> from which <code>commandBuffer</code> was allocated"
-        },
-        {
-          "vuid": "VUID-vkCmdExecuteCommands-contents-00095",
-          "text": " If <code>vkCmdExecuteCommands</code> is being called within a render pass instance, that render pass instance <strong class=\"purple\">must</strong> have been begun with the <code>contents</code> parameter of <code>vkCmdBeginRenderPass</code> set to <code>VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00096",
-          "text": " If <code>vkCmdExecuteCommands</code> is being called within a render pass instance, each element of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> have been recorded with the <code>VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00097",
-          "text": " If <code>vkCmdExecuteCommands</code> is being called within a render pass instance, each element of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> have been recorded with <code>VkCommandBufferInheritanceInfo</code>::<code>subpass</code> set to the index of the subpass which the given command buffer will be executed in"
-        },
-        {
-          "vuid": "VUID-vkCmdExecuteCommands-pInheritanceInfo-00098",
-          "text": " If <code>vkCmdExecuteCommands</code> is being called within a render pass instance, the render passes specified in the pname::pBeginInfo::<code>pInheritanceInfo</code>::<code>renderPass</code> members of the <a href=\"#vkBeginCommandBuffer\">vkBeginCommandBuffer</a> commands used to begin recording each element of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> be &amp;amp;lt;&amp;amp;lt;renderpass-compatibility,compatible&amp;amp;gt;&amp;amp;gt; with the current render pass."
-        },
-        {
-          "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00099",
-          "text": " If <code>vkCmdExecuteCommands</code> is being called within a render pass instance, and any element of <code>pCommandBuffers</code> was recorded with <code>VkCommandBufferInheritanceInfo</code>::<code>framebuffer</code> not equal to <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, that <code>VkFramebuffer</code> <strong class=\"purple\">must</strong> match the <code>VkFramebuffer</code> used in the current render pass instance"
-        },
-        {
-          "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00100",
-          "text": " If <code>vkCmdExecuteCommands</code> is not being called within a render pass instance, each element of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> not have been recorded with the <code>VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdExecuteCommands-commandBuffer-00101",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-inheritedQueries,inherited queries&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>commandBuffer</code> <strong class=\"purple\">must</strong> not have any queries &amp;amp;lt;&amp;amp;lt;queries-operation-active,active&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdExecuteCommands-commandBuffer-00102",
-          "text": " If <code>commandBuffer</code> has a <code>VK_QUERY_TYPE_OCCLUSION</code> query &amp;amp;lt;&amp;amp;lt;queries-operation-active,active&amp;amp;gt;&amp;amp;gt;, then each element of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> have been recorded with <code>VkCommandBufferInheritanceInfo</code>::<code>occlusionQueryEnable</code> set to <code>VK_TRUE</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdExecuteCommands-commandBuffer-00103",
-          "text": " If <code>commandBuffer</code> has a <code>VK_QUERY_TYPE_OCCLUSION</code> query &amp;amp;lt;&amp;amp;lt;queries-operation-active,active&amp;amp;gt;&amp;amp;gt;, then each element of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> have been recorded with <code>VkCommandBufferInheritanceInfo</code>::<code>queryFlags</code> having all bits set that are set for the query"
-        },
-        {
-          "vuid": "VUID-vkCmdExecuteCommands-commandBuffer-00104",
-          "text": " If <code>commandBuffer</code> has a <code>VK_QUERY_TYPE_PIPELINE_STATISTICS</code> query &amp;amp;lt;&amp;amp;lt;queries-operation-active,active&amp;amp;gt;&amp;amp;gt;, then each element of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> have been recorded with <code>VkCommandBufferInheritanceInfo</code>::<code>pipelineStatistics</code> having all bits set that are set in the <code>VkQueryPool</code> the query uses"
-        },
-        {
-          "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00105",
-          "text": " Each element of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> not begin any query types that are &amp;amp;lt;&amp;amp;lt;queries-operation-active,active&amp;amp;gt;&amp;amp;gt; in <code>commandBuffer</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdExecuteCommands-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-parameter",
-          "text": " <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>commandBufferCount</code> valid <code>VkCommandBuffer</code> handles"
-        },
-        {
-          "vuid": "VUID-vkCmdExecuteCommands-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdExecuteCommands-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support transfer, graphics, or compute operations"
-        },
-        {
-          "vuid": "VUID-vkCmdExecuteCommands-bufferlevel",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a primary <code>VkCommandBuffer</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdExecuteCommands-commandBufferCount-arraylength",
-          "text": " <code>commandBufferCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdExecuteCommands-commonparent",
-          "text": " Both of <code>commandBuffer</code>, and the elements of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ],
-      "(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-vkCmdExecuteCommands-commandBuffer-01820",
-          "text": " If <code>commandBuffer</code> is a protected command buffer, then each element of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> be a protected command buffer."
-        },
-        {
-          "vuid": "VUID-vkCmdExecuteCommands-commandBuffer-01821",
-          "text": " If <code>commandBuffer</code> is an unprotected command buffer, then each element of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> be an unprotected command buffer."
-        }
-      ]
-    },
-    "VkDeviceGroupCommandBufferBeginInfo": {
-      "(VK_VERSION_1_1,VK_KHR_device_group)": [
-        {
-          "vuid": "VUID-VkDeviceGroupCommandBufferBeginInfo-deviceMask-00106",
-          "text": " <code>deviceMask</code> <strong class=\"purple\">must</strong> be a valid device mask value"
-        },
-        {
-          "vuid": "VUID-VkDeviceGroupCommandBufferBeginInfo-deviceMask-00107",
-          "text": " <code>deviceMask</code> <strong class=\"purple\">must</strong> not be zero"
-        },
-        {
-          "vuid": "VUID-VkDeviceGroupCommandBufferBeginInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO</code>"
-        }
-      ]
-    },
-    "vkCmdSetDeviceMask": {
-      "(VK_VERSION_1_1,VK_KHR_device_group)": [
-        {
-          "vuid": "VUID-vkCmdSetDeviceMask-deviceMask-00108",
-          "text": " <code>deviceMask</code> <strong class=\"purple\">must</strong> be a valid device mask value"
-        },
-        {
-          "vuid": "VUID-vkCmdSetDeviceMask-deviceMask-00109",
-          "text": " <code>deviceMask</code> <strong class=\"purple\">must</strong> not be zero"
-        },
-        {
-          "vuid": "VUID-vkCmdSetDeviceMask-deviceMask-00110",
-          "text": " <code>deviceMask</code> <strong class=\"purple\">must</strong> not include any set bits that were not in the <a href=\"#VkDeviceGroupCommandBufferBeginInfo\">VkDeviceGroupCommandBufferBeginInfo</a>::<code>deviceMask</code> value when the command buffer began recording."
-        },
-        {
-          "vuid": "VUID-vkCmdSetDeviceMask-deviceMask-00111",
-          "text": " If <code>vkCmdSetDeviceMask</code> is called inside a render pass instance, <code>deviceMask</code> <strong class=\"purple\">must</strong> not include any set bits that were not in the <a href=\"#VkDeviceGroupRenderPassBeginInfo\">VkDeviceGroupRenderPassBeginInfo</a>::<code>deviceMask</code> value when the render pass instance began recording."
-        },
-        {
-          "vuid": "VUID-vkCmdSetDeviceMask-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdSetDeviceMask-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdSetDeviceMask-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, compute, or transfer operations"
-        }
-      ]
-    },
-    "vkCreateFence": {
-      "core": [
-        {
-          "vuid": "VUID-vkCreateFence-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateFence-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkFenceCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateFence-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateFence-pFence-parameter",
-          "text": " <code>pFence</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkFence</code> handle"
-        }
-      ]
-    },
-    "VkFenceCreateInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkFenceCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_FENCE_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkFenceCreateInfo-pNext-pNext",
-          "text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkExportFenceCreateInfo\">VkExportFenceCreateInfo</a> or <a href=\"#VkExportFenceWin32HandleInfoKHR\">VkExportFenceWin32HandleInfoKHR</a>"
-        },
-        {
-          "vuid": "VUID-VkFenceCreateInfo-sType-unique",
-          "text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
-        },
-        {
-          "vuid": "VUID-VkFenceCreateInfo-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkFenceCreateFlagBits\">VkFenceCreateFlagBits</a> values"
-        }
-      ]
-    },
-    "VkExportFenceCreateInfo": {
-      "(VK_VERSION_1_1,VK_KHR_external_fence)": [
-        {
-          "vuid": "VUID-VkExportFenceCreateInfo-handleTypes-01446",
-          "text": " The bits in <code>handleTypes</code> must be supported and compatible, as reported by <a href=\"#VkExternalFenceProperties\">VkExternalFenceProperties</a>."
-        },
-        {
-          "vuid": "VUID-VkExportFenceCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkExportFenceCreateInfo-handleTypes-parameter",
-          "text": " <code>handleTypes</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkExternalFenceHandleTypeFlagBits\">VkExternalFenceHandleTypeFlagBits</a> values"
-        }
-      ]
-    },
-    "VkExportFenceWin32HandleInfoKHR": {
-      "(VK_KHR_external_fence_win32)": [
-        {
-          "vuid": "VUID-VkExportFenceWin32HandleInfoKHR-handleTypes-01447",
-          "text": " If <a href=\"#VkExportFenceCreateInfo\">VkExportFenceCreateInfo</a>::<code>handleTypes</code> does not include <code>VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT</code>, VkExportFenceWin32HandleInfoKHR <strong class=\"purple\">must</strong> not be in the <code>pNext</code> chain of <a href=\"#VkFenceCreateInfo\">VkFenceCreateInfo</a>."
-        },
-        {
-          "vuid": "VUID-VkExportFenceWin32HandleInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkExportFenceWin32HandleInfoKHR-pAttributes-parameter",
-          "text": " If <code>pAttributes</code> is not <code>NULL</code>, <code>pAttributes</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>SECURITY_ATTRIBUTES</code> value"
-        }
-      ]
-    },
-    "vkGetFenceWin32HandleKHR": {
-      "(VK_KHR_external_fence_win32)": [
-        {
-          "vuid": "VUID-vkGetFenceWin32HandleKHR-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetFenceWin32HandleKHR-pGetWin32HandleInfo-parameter",
-          "text": " <code>pGetWin32HandleInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkFenceGetWin32HandleInfoKHR</code> structure"
-        },
-        {
-          "vuid": "VUID-vkGetFenceWin32HandleKHR-pHandle-parameter",
-          "text": " <code>pHandle</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>HANDLE</code> value"
-        }
-      ]
-    },
-    "VkFenceGetWin32HandleInfoKHR": {
-      "(VK_KHR_external_fence_win32)": [
-        {
-          "vuid": "VUID-VkFenceGetWin32HandleInfoKHR-handleType-01448",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> have been included in <a href=\"#VkExportFenceCreateInfo\">VkExportFenceCreateInfo</a>::<code>handleTypes</code> when the <code>fence</code>&#8217;s current payload was created."
-        },
-        {
-          "vuid": "VUID-VkFenceGetWin32HandleInfoKHR-handleType-01449",
-          "text": " If <code>handleType</code> is defined as an NT handle, <a href=\"#vkGetFenceWin32HandleKHR\">vkGetFenceWin32HandleKHR</a> <strong class=\"purple\">must</strong> be called no more than once for each valid unique combination of <code>fence</code> and <code>handleType</code>."
-        },
-        {
-          "vuid": "VUID-VkFenceGetWin32HandleInfoKHR-fence-01450",
-          "text": " <code>fence</code> <strong class=\"purple\">must</strong> not currently have its payload replaced by an imported payload as described below in &amp;amp;lt;&amp;amp;lt;synchronization-fences-importing,Importing Fence Payloads&amp;amp;gt;&amp;amp;gt; unless that imported payload&#8217;s handle type was included in <a href=\"#VkExternalFenceProperties\">VkExternalFenceProperties</a>::<code>exportFromImportedHandleTypes</code> for <code>handleType</code>."
-        },
-        {
-          "vuid": "VUID-VkFenceGetWin32HandleInfoKHR-handleType-01451",
-          "text": " If <code>handleType</code> refers to a handle type with copy payload transference semantics, <code>fence</code> <strong class=\"purple\">must</strong> be signaled, or have an associated &amp;amp;lt;&amp;amp;lt;synchronization-fences-signaling,fence signal operation&amp;amp;gt;&amp;amp;gt; pending execution."
-        },
-        {
-          "vuid": "VUID-VkFenceGetWin32HandleInfoKHR-handleType-01452",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> be defined as an NT handle or a global share handle."
-        },
-        {
-          "vuid": "VUID-VkFenceGetWin32HandleInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkFenceGetWin32HandleInfoKHR-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkFenceGetWin32HandleInfoKHR-fence-parameter",
-          "text": " <code>fence</code> <strong class=\"purple\">must</strong> be a valid <code>VkFence</code> handle"
-        },
-        {
-          "vuid": "VUID-VkFenceGetWin32HandleInfoKHR-handleType-parameter",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalFenceHandleTypeFlagBits\">VkExternalFenceHandleTypeFlagBits</a> value"
-        }
-      ]
-    },
-    "vkGetFenceFdKHR": {
-      "(VK_KHR_external_fence_fd)": [
-        {
-          "vuid": "VUID-vkGetFenceFdKHR-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetFenceFdKHR-pGetFdInfo-parameter",
-          "text": " <code>pGetFdInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkFenceGetFdInfoKHR</code> structure"
-        },
-        {
-          "vuid": "VUID-vkGetFenceFdKHR-pFd-parameter",
-          "text": " <code>pFd</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>int</code> value"
-        }
-      ]
-    },
-    "VkFenceGetFdInfoKHR": {
-      "(VK_KHR_external_fence_fd)": [
-        {
-          "vuid": "VUID-VkFenceGetFdInfoKHR-handleType-01453",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> have been included in <a href=\"#VkExportFenceCreateInfo\">VkExportFenceCreateInfo</a>::<code>handleTypes</code> when <code>fence</code>&#8217;s current payload was created."
-        },
-        {
-          "vuid": "VUID-VkFenceGetFdInfoKHR-handleType-01454",
-          "text": " If <code>handleType</code> refers to a handle type with copy payload transference semantics, <code>fence</code> <strong class=\"purple\">must</strong> be signaled, or have an associated &amp;amp;lt;&amp;amp;lt;synchronization-fences-signaling,fence signal operation&amp;amp;gt;&amp;amp;gt; pending execution."
-        },
-        {
-          "vuid": "VUID-VkFenceGetFdInfoKHR-fence-01455",
-          "text": " <code>fence</code> <strong class=\"purple\">must</strong> not currently have its payload replaced by an imported payload as described below in &amp;amp;lt;&amp;amp;lt;synchronization-fences-importing,Importing Fence Payloads&amp;amp;gt;&amp;amp;gt; unless that imported payload&#8217;s handle type was included in <a href=\"#VkExternalFenceProperties\">VkExternalFenceProperties</a>::<code>exportFromImportedHandleTypes</code> for <code>handleType</code>."
-        },
-        {
-          "vuid": "VUID-VkFenceGetFdInfoKHR-handleType-01456",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> be defined as a POSIX file descriptor handle."
-        },
-        {
-          "vuid": "VUID-VkFenceGetFdInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkFenceGetFdInfoKHR-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkFenceGetFdInfoKHR-fence-parameter",
-          "text": " <code>fence</code> <strong class=\"purple\">must</strong> be a valid <code>VkFence</code> handle"
-        },
-        {
-          "vuid": "VUID-VkFenceGetFdInfoKHR-handleType-parameter",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalFenceHandleTypeFlagBits\">VkExternalFenceHandleTypeFlagBits</a> value"
-        }
-      ]
-    },
-    "vkDestroyFence": {
-      "core": [
-        {
-          "vuid": "VUID-vkDestroyFence-fence-01120",
-          "text": " All &amp;amp;lt;&amp;amp;lt;devsandqueues-submission, queue submission&amp;amp;gt;&amp;amp;gt; commands that refer to <code>fence</code> <strong class=\"purple\">must</strong> have completed execution"
-        },
-        {
-          "vuid": "VUID-vkDestroyFence-fence-01121",
-          "text": " If <code>VkAllocationCallbacks</code> were provided when <code>fence</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
-        },
-        {
-          "vuid": "VUID-vkDestroyFence-fence-01122",
-          "text": " If no <code>VkAllocationCallbacks</code> were provided when <code>fence</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-vkDestroyFence-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyFence-fence-parameter",
-          "text": " If <code>fence</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>fence</code> <strong class=\"purple\">must</strong> be a valid <code>VkFence</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyFence-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkDestroyFence-fence-parent",
-          "text": " If <code>fence</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkGetFenceStatus": {
-      "core": [
-        {
-          "vuid": "VUID-vkGetFenceStatus-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetFenceStatus-fence-parameter",
-          "text": " <code>fence</code> <strong class=\"purple\">must</strong> be a valid <code>VkFence</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetFenceStatus-fence-parent",
-          "text": " <code>fence</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkResetFences": {
-      "core": [
-        {
-          "vuid": "VUID-vkResetFences-pFences-01123",
-          "text": " Each element of <code>pFences</code> <strong class=\"purple\">must</strong> not be currently associated with any queue command that has not yet completed execution on that queue"
-        },
-        {
-          "vuid": "VUID-vkResetFences-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkResetFences-pFences-parameter",
-          "text": " <code>pFences</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>fenceCount</code> valid <code>VkFence</code> handles"
-        },
-        {
-          "vuid": "VUID-vkResetFences-fenceCount-arraylength",
-          "text": " <code>fenceCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkResetFences-pFences-parent",
-          "text": " Each element of <code>pFences</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkWaitForFences": {
-      "core": [
-        {
-          "vuid": "VUID-vkWaitForFences-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkWaitForFences-pFences-parameter",
-          "text": " <code>pFences</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>fenceCount</code> valid <code>VkFence</code> handles"
-        },
-        {
-          "vuid": "VUID-vkWaitForFences-fenceCount-arraylength",
-          "text": " <code>fenceCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkWaitForFences-pFences-parent",
-          "text": " Each element of <code>pFences</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkRegisterDeviceEventEXT": {
-      "(VK_EXT_display_control)": [
-        {
-          "vuid": "VUID-vkRegisterDeviceEventEXT-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkRegisterDeviceEventEXT-pDeviceEventInfo-parameter",
-          "text": " <code>pDeviceEventInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDeviceEventInfoEXT</code> structure"
-        },
-        {
-          "vuid": "VUID-vkRegisterDeviceEventEXT-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkRegisterDeviceEventEXT-pFence-parameter",
-          "text": " <code>pFence</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkFence</code> handle"
-        }
-      ]
-    },
-    "VkDeviceEventInfoEXT": {
-      "(VK_EXT_display_control)": [
-        {
-          "vuid": "VUID-VkDeviceEventInfoEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkDeviceEventInfoEXT-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkDeviceEventInfoEXT-deviceEvent-parameter",
-          "text": " <code>deviceEvent</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDeviceEventTypeEXT\">VkDeviceEventTypeEXT</a> value"
-        }
-      ]
-    },
-    "vkRegisterDisplayEventEXT": {
-      "(VK_EXT_display_control)": [
-        {
-          "vuid": "VUID-vkRegisterDisplayEventEXT-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkRegisterDisplayEventEXT-display-parameter",
-          "text": " <code>display</code> <strong class=\"purple\">must</strong> be a valid <code>VkDisplayKHR</code> handle"
-        },
-        {
-          "vuid": "VUID-vkRegisterDisplayEventEXT-pDisplayEventInfo-parameter",
-          "text": " <code>pDisplayEventInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDisplayEventInfoEXT</code> structure"
-        },
-        {
-          "vuid": "VUID-vkRegisterDisplayEventEXT-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkRegisterDisplayEventEXT-pFence-parameter",
-          "text": " <code>pFence</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkFence</code> handle"
-        }
-      ]
-    },
-    "VkDisplayEventInfoEXT": {
-      "(VK_EXT_display_control)": [
-        {
-          "vuid": "VUID-VkDisplayEventInfoEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkDisplayEventInfoEXT-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkDisplayEventInfoEXT-displayEvent-parameter",
-          "text": " <code>displayEvent</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDisplayEventTypeEXT\">VkDisplayEventTypeEXT</a> value"
-        }
-      ]
-    },
-    "vkImportFenceWin32HandleKHR": {
-      "(VK_KHR_external_fence_win32)": [
-        {
-          "vuid": "VUID-vkImportFenceWin32HandleKHR-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkImportFenceWin32HandleKHR-pImportFenceWin32HandleInfo-parameter",
-          "text": " <code>pImportFenceWin32HandleInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkImportFenceWin32HandleInfoKHR</code> structure"
-        }
-      ]
-    },
-    "VkImportFenceWin32HandleInfoKHR": {
-      "(VK_KHR_external_fence_win32)": [
-        {
-          "vuid": "VUID-VkImportFenceWin32HandleInfoKHR-handleType-01457",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a value included in the &amp;amp;lt;&amp;amp;lt;synchronization-fence-handletypes-win32, Handle Types Supported by VkImportFenceWin32HandleInfoKHR&amp;amp;gt;&amp;amp;gt; table."
-        },
-        {
-          "vuid": "VUID-VkImportFenceWin32HandleInfoKHR-handleType-01459",
-          "text": " If <code>handleType</code> is not <code>VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT</code>, <code>name</code> <strong class=\"purple\">must</strong> be <code>NULL</code>."
-        },
-        {
-          "vuid": "VUID-VkImportFenceWin32HandleInfoKHR-handleType-01460",
-          "text": " If <code>handleType</code> is not <code>0</code> and <code>handle</code> is <code>NULL</code>, <code>name</code> <strong class=\"purple\">must</strong> name a valid synchronization primitive of the type specified by <code>handleType</code>."
-        },
-        {
-          "vuid": "VUID-VkImportFenceWin32HandleInfoKHR-handleType-01461",
-          "text": " If <code>handleType</code> is not <code>0</code> and <code>name</code> is <code>NULL</code>, <code>handle</code> <strong class=\"purple\">must</strong> be a valid handle of the type specified by <code>handleType</code>."
-        },
-        {
-          "vuid": "VUID-VkImportFenceWin32HandleInfoKHR-handle-01462",
-          "text": " If <code>handle</code> is not <code>NULL</code>, <code>name</code> must be <code>NULL</code>."
-        },
-        {
-          "vuid": "VUID-VkImportFenceWin32HandleInfoKHR-handle-01539",
-          "text": " If <code>handle</code> is not <code>NULL</code>, it <strong class=\"purple\">must</strong> obey any requirements listed for <code>handleType</code> in <a href=\"#external-fence-handle-types-compatibility\">external fence handle types compatibility</a>."
-        },
-        {
-          "vuid": "VUID-VkImportFenceWin32HandleInfoKHR-name-01540",
-          "text": " If <code>name</code> is not <code>NULL</code>, it <strong class=\"purple\">must</strong> obey any requirements listed for <code>handleType</code> in <a href=\"#external-fence-handle-types-compatibility\">external fence handle types compatibility</a>."
-        },
-        {
-          "vuid": "VUID-VkImportFenceWin32HandleInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkImportFenceWin32HandleInfoKHR-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkImportFenceWin32HandleInfoKHR-fence-parameter",
-          "text": " <code>fence</code> <strong class=\"purple\">must</strong> be a valid <code>VkFence</code> handle"
-        },
-        {
-          "vuid": "VUID-VkImportFenceWin32HandleInfoKHR-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkFenceImportFlagBits\">VkFenceImportFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkImportFenceWin32HandleInfoKHR-handleType-parameter",
-          "text": " If <code>handleType</code> is not <code>0</code>, <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalFenceHandleTypeFlagBits\">VkExternalFenceHandleTypeFlagBits</a> value"
-        }
-      ]
-    },
-    "vkImportFenceFdKHR": {
-      "(VK_KHR_external_fence_fd)": [
-        {
-          "vuid": "VUID-vkImportFenceFdKHR-fence-01463",
-          "text": " <code>fence</code> <strong class=\"purple\">must</strong> not be associated with any queue command that has not yet completed execution on that queue"
-        },
-        {
-          "vuid": "VUID-vkImportFenceFdKHR-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkImportFenceFdKHR-pImportFenceFdInfo-parameter",
-          "text": " <code>pImportFenceFdInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkImportFenceFdInfoKHR</code> structure"
-        }
-      ]
-    },
-    "VkImportFenceFdInfoKHR": {
-      "(VK_KHR_external_fence_fd)": [
-        {
-          "vuid": "VUID-VkImportFenceFdInfoKHR-handleType-01464",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a value included in the &amp;amp;lt;&amp;amp;lt;synchronization-fence-handletypes-fd, Handle Types Supported by VkImportFenceFdInfoKHR&amp;amp;gt;&amp;amp;gt; table."
-        },
-        {
-          "vuid": "VUID-VkImportFenceFdInfoKHR-fd-01541",
-          "text": " <code>fd</code> <strong class=\"purple\">must</strong> obey any requirements listed for <code>handleType</code> in &amp;amp;lt;&amp;amp;lt;external-fence-handle-types-compatibility,external fence handle types compatibility&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-VkImportFenceFdInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkImportFenceFdInfoKHR-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkImportFenceFdInfoKHR-fence-parameter",
-          "text": " <code>fence</code> <strong class=\"purple\">must</strong> be a valid <code>VkFence</code> handle"
-        },
-        {
-          "vuid": "VUID-VkImportFenceFdInfoKHR-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkFenceImportFlagBits\">VkFenceImportFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkImportFenceFdInfoKHR-handleType-parameter",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalFenceHandleTypeFlagBits\">VkExternalFenceHandleTypeFlagBits</a> value"
-        }
-      ]
-    },
-    "vkCreateSemaphore": {
-      "core": [
-        {
-          "vuid": "VUID-vkCreateSemaphore-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateSemaphore-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkSemaphoreCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateSemaphore-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateSemaphore-pSemaphore-parameter",
-          "text": " <code>pSemaphore</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSemaphore</code> handle"
-        }
-      ]
-    },
-    "VkSemaphoreCreateInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkSemaphoreCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkSemaphoreCreateInfo-pNext-pNext",
-          "text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkExportSemaphoreCreateInfo\">VkExportSemaphoreCreateInfo</a> or <a href=\"#VkExportSemaphoreWin32HandleInfoKHR\">VkExportSemaphoreWin32HandleInfoKHR</a>"
-        },
-        {
-          "vuid": "VUID-VkSemaphoreCreateInfo-sType-unique",
-          "text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
-        },
-        {
-          "vuid": "VUID-VkSemaphoreCreateInfo-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        }
-      ]
-    },
-    "VkExportSemaphoreCreateInfo": {
-      "(VK_VERSION_1_1,VK_KHR_external_semaphore)": [
-        {
-          "vuid": "VUID-VkExportSemaphoreCreateInfo-handleTypes-01124",
-          "text": " The bits in <code>handleTypes</code> <strong class=\"purple\">must</strong> be supported and compatible, as reported by <a href=\"#VkExternalSemaphoreProperties\">VkExternalSemaphoreProperties</a>."
-        },
-        {
-          "vuid": "VUID-VkExportSemaphoreCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkExportSemaphoreCreateInfo-handleTypes-parameter",
-          "text": " <code>handleTypes</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkExternalSemaphoreHandleTypeFlagBits\">VkExternalSemaphoreHandleTypeFlagBits</a> values"
-        }
-      ]
-    },
-    "VkExportSemaphoreWin32HandleInfoKHR": {
-      "(VK_KHR_external_semaphore_win32)": [
-        {
-          "vuid": "VUID-VkExportSemaphoreWin32HandleInfoKHR-handleTypes-01125",
-          "text": " If <a href=\"#VkExportSemaphoreCreateInfo\">VkExportSemaphoreCreateInfo</a>::<code>handleTypes</code> does not include <code>VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT</code> or <code>VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT</code>, <code>VkExportSemaphoreWin32HandleInfoKHR</code> <strong class=\"purple\">must</strong> not be in the <code>pNext</code> chain of <a href=\"#VkSemaphoreCreateInfo\">VkSemaphoreCreateInfo</a>."
-        },
-        {
-          "vuid": "VUID-VkExportSemaphoreWin32HandleInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkExportSemaphoreWin32HandleInfoKHR-pAttributes-parameter",
-          "text": " If <code>pAttributes</code> is not <code>NULL</code>, <code>pAttributes</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>SECURITY_ATTRIBUTES</code> value"
-        }
-      ]
-    },
-    "vkGetSemaphoreWin32HandleKHR": {
-      "(VK_KHR_external_semaphore_win32)": [
-        {
-          "vuid": "VUID-vkGetSemaphoreWin32HandleKHR-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetSemaphoreWin32HandleKHR-pGetWin32HandleInfo-parameter",
-          "text": " <code>pGetWin32HandleInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkSemaphoreGetWin32HandleInfoKHR</code> structure"
-        },
-        {
-          "vuid": "VUID-vkGetSemaphoreWin32HandleKHR-pHandle-parameter",
-          "text": " <code>pHandle</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>HANDLE</code> value"
-        }
-      ]
-    },
-    "VkSemaphoreGetWin32HandleInfoKHR": {
-      "(VK_KHR_external_semaphore_win32)": [
-        {
-          "vuid": "VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-01126",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> have been included in <a href=\"#VkExportSemaphoreCreateInfo\">VkExportSemaphoreCreateInfo</a>::<code>handleTypes</code> when the <code>semaphore</code>&#8217;s current payload was created."
-        },
-        {
-          "vuid": "VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-01127",
-          "text": " If <code>handleType</code> is defined as an NT handle, <a href=\"#vkGetSemaphoreWin32HandleKHR\">vkGetSemaphoreWin32HandleKHR</a> <strong class=\"purple\">must</strong> be called no more than once for each valid unique combination of <code>semaphore</code> and <code>handleType</code>."
-        },
-        {
-          "vuid": "VUID-VkSemaphoreGetWin32HandleInfoKHR-semaphore-01128",
-          "text": " <code>semaphore</code> <strong class=\"purple\">must</strong> not currently have its payload replaced by an imported payload as described below in &amp;amp;lt;&amp;amp;lt;synchronization-semaphores-importing,Importing Semaphore Payloads&amp;amp;gt;&amp;amp;gt; unless that imported payload&#8217;s handle type was included in <a href=\"#VkExternalSemaphoreProperties\">VkExternalSemaphoreProperties</a>::<code>exportFromImportedHandleTypes</code> for <code>handleType</code>."
-        },
-        {
-          "vuid": "VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-01129",
-          "text": " If <code>handleType</code> refers to a handle type with copy payload transference semantics, as defined below in &amp;amp;lt;&amp;amp;lt;synchronization-semaphores-importing,Importing Semaphore Payloads&amp;amp;gt;&amp;amp;gt;, there <strong class=\"purple\">must</strong> be no queue waiting on <code>semaphore</code>."
-        },
-        {
-          "vuid": "VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-01130",
-          "text": " If <code>handleType</code> refers to a handle type with copy payload transference semantics, <code>semaphore</code> <strong class=\"purple\">must</strong> be signaled, or have an associated &amp;amp;lt;&amp;amp;lt;synchronization-semaphores-signaling,semaphore signal operation&amp;amp;gt;&amp;amp;gt; pending execution."
-        },
-        {
-          "vuid": "VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-01131",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> be defined as an NT handle or a global share handle."
-        },
-        {
-          "vuid": "VUID-VkSemaphoreGetWin32HandleInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkSemaphoreGetWin32HandleInfoKHR-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkSemaphoreGetWin32HandleInfoKHR-semaphore-parameter",
-          "text": " <code>semaphore</code> <strong class=\"purple\">must</strong> be a valid <code>VkSemaphore</code> handle"
-        },
-        {
-          "vuid": "VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-parameter",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalSemaphoreHandleTypeFlagBits\">VkExternalSemaphoreHandleTypeFlagBits</a> value"
-        }
-      ]
-    },
-    "vkGetSemaphoreFdKHR": {
-      "(VK_KHR_external_semaphore_fd)": [
-        {
-          "vuid": "VUID-vkGetSemaphoreFdKHR-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetSemaphoreFdKHR-pGetFdInfo-parameter",
-          "text": " <code>pGetFdInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkSemaphoreGetFdInfoKHR</code> structure"
-        },
-        {
-          "vuid": "VUID-vkGetSemaphoreFdKHR-pFd-parameter",
-          "text": " <code>pFd</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>int</code> value"
-        }
-      ]
-    },
-    "VkSemaphoreGetFdInfoKHR": {
-      "(VK_KHR_external_semaphore_fd)": [
-        {
-          "vuid": "VUID-VkSemaphoreGetFdInfoKHR-handleType-01132",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> have been included in <a href=\"#VkExportSemaphoreCreateInfo\">VkExportSemaphoreCreateInfo</a>::<code>handleTypes</code> when <code>semaphore</code>&#8217;s current payload was created."
-        },
-        {
-          "vuid": "VUID-VkSemaphoreGetFdInfoKHR-semaphore-01133",
-          "text": " <code>semaphore</code> <strong class=\"purple\">must</strong> not currently have its payload replaced by an imported payload as described below in &amp;amp;lt;&amp;amp;lt;synchronization-semaphores-importing,Importing Semaphore Payloads&amp;amp;gt;&amp;amp;gt; unless that imported payload&#8217;s handle type was included in <a href=\"#VkExternalSemaphoreProperties\">VkExternalSemaphoreProperties</a>::<code>exportFromImportedHandleTypes</code> for <code>handleType</code>."
-        },
-        {
-          "vuid": "VUID-VkSemaphoreGetFdInfoKHR-handleType-01134",
-          "text": " If <code>handleType</code> refers to a handle type with copy payload transference semantics, as defined below in &amp;amp;lt;&amp;amp;lt;synchronization-semaphores-importing,Importing Semaphore Payloads&amp;amp;gt;&amp;amp;gt;, there <strong class=\"purple\">must</strong> be no queue waiting on <code>semaphore</code>."
-        },
-        {
-          "vuid": "VUID-VkSemaphoreGetFdInfoKHR-handleType-01135",
-          "text": " If <code>handleType</code> refers to a handle type with copy payload transference semantics, <code>semaphore</code> <strong class=\"purple\">must</strong> be signaled, or have an associated &amp;amp;lt;&amp;amp;lt;synchronization-semaphores-signaling,semaphore signal operation&amp;amp;gt;&amp;amp;gt; pending execution."
-        },
-        {
-          "vuid": "VUID-VkSemaphoreGetFdInfoKHR-handleType-01136",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> be defined as a POSIX file descriptor handle."
-        },
-        {
-          "vuid": "VUID-VkSemaphoreGetFdInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkSemaphoreGetFdInfoKHR-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkSemaphoreGetFdInfoKHR-semaphore-parameter",
-          "text": " <code>semaphore</code> <strong class=\"purple\">must</strong> be a valid <code>VkSemaphore</code> handle"
-        },
-        {
-          "vuid": "VUID-VkSemaphoreGetFdInfoKHR-handleType-parameter",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalSemaphoreHandleTypeFlagBits\">VkExternalSemaphoreHandleTypeFlagBits</a> value"
-        }
-      ]
-    },
-    "vkDestroySemaphore": {
-      "core": [
-        {
-          "vuid": "VUID-vkDestroySemaphore-semaphore-01137",
-          "text": " All submitted batches that refer to <code>semaphore</code> <strong class=\"purple\">must</strong> have completed execution"
-        },
-        {
-          "vuid": "VUID-vkDestroySemaphore-semaphore-01138",
-          "text": " If <code>VkAllocationCallbacks</code> were provided when <code>semaphore</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
-        },
-        {
-          "vuid": "VUID-vkDestroySemaphore-semaphore-01139",
-          "text": " If no <code>VkAllocationCallbacks</code> were provided when <code>semaphore</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-vkDestroySemaphore-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroySemaphore-semaphore-parameter",
-          "text": " If <code>semaphore</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>semaphore</code> <strong class=\"purple\">must</strong> be a valid <code>VkSemaphore</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroySemaphore-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkDestroySemaphore-semaphore-parent",
-          "text": " If <code>semaphore</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkImportSemaphoreWin32HandleKHR": {
-      "(VK_KHR_external_semaphore_win32)": [
-        {
-          "vuid": "VUID-vkImportSemaphoreWin32HandleKHR-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkImportSemaphoreWin32HandleKHR-pImportSemaphoreWin32HandleInfo-parameter",
-          "text": " <code>pImportSemaphoreWin32HandleInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkImportSemaphoreWin32HandleInfoKHR</code> structure"
-        }
-      ]
-    },
-    "VkImportSemaphoreWin32HandleInfoKHR": {
-      "(VK_KHR_external_semaphore_win32)": [
-        {
-          "vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-01140",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a value included in the &amp;amp;lt;&amp;amp;lt;synchronization-semaphore-handletypes-win32,Handle Types Supported by VkImportSemaphoreWin32HandleInfoKHR&amp;amp;gt;&amp;amp;gt; table."
-        },
-        {
-          "vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-01466",
-          "text": " If <code>handleType</code> is not <code>VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT</code> or <code>VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT</code>, <code>name</code> <strong class=\"purple\">must</strong> be <code>NULL</code>."
-        },
-        {
-          "vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-01467",
-          "text": " If <code>handleType</code> is not <code>0</code> and <code>handle</code> is <code>NULL</code>, <code>name</code> <strong class=\"purple\">must</strong> name a valid synchronization primitive of the type specified by <code>handleType</code>."
-        },
-        {
-          "vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-01468",
-          "text": " If <code>handleType</code> is not <code>0</code> and <code>name</code> is <code>NULL</code>, <code>handle</code> <strong class=\"purple\">must</strong> be a valid handle of the type specified by <code>handleType</code>."
-        },
-        {
-          "vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-handle-01469",
-          "text": " If <code>handle</code> is not <code>NULL</code>, <code>name</code> must be <code>NULL</code>."
-        },
-        {
-          "vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-handle-01542",
-          "text": " If <code>handle</code> is not <code>NULL</code>, it <strong class=\"purple\">must</strong> obey any requirements listed for <code>handleType</code> in <a href=\"#external-semaphore-handle-types-compatibility\">external semaphore handle types compatibility</a>."
-        },
-        {
-          "vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-name-01543",
-          "text": " If <code>name</code> is not <code>NULL</code>, it <strong class=\"purple\">must</strong> obey any requirements listed for <code>handleType</code> in <a href=\"#external-semaphore-handle-types-compatibility\">external semaphore handle types compatibility</a>."
-        },
-        {
-          "vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-semaphore-parameter",
-          "text": " <code>semaphore</code> <strong class=\"purple\">must</strong> be a valid <code>VkSemaphore</code> handle"
-        },
-        {
-          "vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkSemaphoreImportFlagBits\">VkSemaphoreImportFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-parameter",
-          "text": " If <code>handleType</code> is not <code>0</code>, <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalSemaphoreHandleTypeFlagBits\">VkExternalSemaphoreHandleTypeFlagBits</a> value"
-        }
-      ]
-    },
-    "vkImportSemaphoreFdKHR": {
-      "(VK_KHR_external_semaphore_fd)": [
-        {
-          "vuid": "VUID-vkImportSemaphoreFdKHR-semaphore-01142",
-          "text": " <code>semaphore</code> <strong class=\"purple\">must</strong> not be associated with any queue command that has not yet completed execution on that queue"
-        },
-        {
-          "vuid": "VUID-vkImportSemaphoreFdKHR-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkImportSemaphoreFdKHR-pImportSemaphoreFdInfo-parameter",
-          "text": " <code>pImportSemaphoreFdInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkImportSemaphoreFdInfoKHR</code> structure"
-        }
-      ]
-    },
-    "VkImportSemaphoreFdInfoKHR": {
-      "(VK_KHR_external_semaphore_fd)": [
-        {
-          "vuid": "VUID-VkImportSemaphoreFdInfoKHR-handleType-01143",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a value included in the &amp;amp;lt;&amp;amp;lt;synchronization-semaphore-handletypes-fd,Handle Types Supported by VkImportSemaphoreFdInfoKHR&amp;amp;gt;&amp;amp;gt; table."
-        },
-        {
-          "vuid": "VUID-VkImportSemaphoreFdInfoKHR-fd-01544",
-          "text": " <code>fd</code> <strong class=\"purple\">must</strong> obey any requirements listed for <code>handleType</code> in &amp;amp;lt;&amp;amp;lt;external-semaphore-handle-types-compatibility,external semaphore handle types compatibility&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-VkImportSemaphoreFdInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkImportSemaphoreFdInfoKHR-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkImportSemaphoreFdInfoKHR-semaphore-parameter",
-          "text": " <code>semaphore</code> <strong class=\"purple\">must</strong> be a valid <code>VkSemaphore</code> handle"
-        },
-        {
-          "vuid": "VUID-VkImportSemaphoreFdInfoKHR-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkSemaphoreImportFlagBits\">VkSemaphoreImportFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkImportSemaphoreFdInfoKHR-handleType-parameter",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalSemaphoreHandleTypeFlagBits\">VkExternalSemaphoreHandleTypeFlagBits</a> value"
-        }
-      ]
-    },
-    "vkCreateEvent": {
-      "core": [
-        {
-          "vuid": "VUID-vkCreateEvent-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateEvent-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkEventCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateEvent-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateEvent-pEvent-parameter",
-          "text": " <code>pEvent</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkEvent</code> handle"
-        }
-      ]
-    },
-    "VkEventCreateInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkEventCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_EVENT_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkEventCreateInfo-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkEventCreateInfo-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        }
-      ]
-    },
-    "vkDestroyEvent": {
-      "core": [
-        {
-          "vuid": "VUID-vkDestroyEvent-event-01145",
-          "text": " All submitted commands that refer to <code>event</code> <strong class=\"purple\">must</strong> have completed execution"
-        },
-        {
-          "vuid": "VUID-vkDestroyEvent-event-01146",
-          "text": " If <code>VkAllocationCallbacks</code> were provided when <code>event</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
-        },
-        {
-          "vuid": "VUID-vkDestroyEvent-event-01147",
-          "text": " If no <code>VkAllocationCallbacks</code> were provided when <code>event</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-vkDestroyEvent-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyEvent-event-parameter",
-          "text": " If <code>event</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>event</code> <strong class=\"purple\">must</strong> be a valid <code>VkEvent</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyEvent-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkDestroyEvent-event-parent",
-          "text": " If <code>event</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkGetEventStatus": {
-      "core": [
-        {
-          "vuid": "VUID-vkGetEventStatus-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetEventStatus-event-parameter",
-          "text": " <code>event</code> <strong class=\"purple\">must</strong> be a valid <code>VkEvent</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetEventStatus-event-parent",
-          "text": " <code>event</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkSetEvent": {
-      "core": [
-        {
-          "vuid": "VUID-vkSetEvent-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkSetEvent-event-parameter",
-          "text": " <code>event</code> <strong class=\"purple\">must</strong> be a valid <code>VkEvent</code> handle"
-        },
-        {
-          "vuid": "VUID-vkSetEvent-event-parent",
-          "text": " <code>event</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkResetEvent": {
-      "core": [
-        {
-          "vuid": "VUID-vkResetEvent-event-01148",
-          "text": " <code>event</code> <strong class=\"purple\">must</strong> not be waited on by a <code>vkCmdWaitEvents</code> command that is currently executing"
-        },
-        {
-          "vuid": "VUID-vkResetEvent-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkResetEvent-event-parameter",
-          "text": " <code>event</code> <strong class=\"purple\">must</strong> be a valid <code>VkEvent</code> handle"
-        },
-        {
-          "vuid": "VUID-vkResetEvent-event-parent",
-          "text": " <code>event</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkCmdSetEvent": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdSetEvent-stageMask-01149",
-          "text": " <code>stageMask</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_STAGE_HOST_BIT</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdSetEvent-stageMask-01150",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-geometryShader,geometry shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>stageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdSetEvent-stageMask-01151",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-tessellationShader,tessellation shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>stageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT</code> or <code>VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdSetEvent-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdSetEvent-event-parameter",
-          "text": " <code>event</code> <strong class=\"purple\">must</strong> be a valid <code>VkEvent</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdSetEvent-stageMask-parameter",
-          "text": " <code>stageMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkPipelineStageFlagBits\">VkPipelineStageFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-vkCmdSetEvent-stageMask-requiredbitmask",
-          "text": " <code>stageMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdSetEvent-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdSetEvent-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
-        },
-        {
-          "vuid": "VUID-vkCmdSetEvent-renderpass",
-          "text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
-        },
-        {
-          "vuid": "VUID-vkCmdSetEvent-commonparent",
-          "text": " Both of <code>commandBuffer</code>, and <code>event</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_device_group)": [
-        {
-          "vuid": "VUID-vkCmdSetEvent-commandBuffer-01152",
-          "text": " <code>commandBuffer</code>&#8217;s current device mask <strong class=\"purple\">must</strong> include exactly one physical device."
-        }
-      ]
-    },
-    "vkCmdResetEvent": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdResetEvent-stageMask-01153",
-          "text": " <code>stageMask</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_STAGE_HOST_BIT</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdResetEvent-stageMask-01154",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-geometryShader,geometry shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>stageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdResetEvent-stageMask-01155",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-tessellationShader,tessellation shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>stageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT</code> or <code>VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdResetEvent-event-01156",
-          "text": " When this command executes, <code>event</code> <strong class=\"purple\">must</strong> not be waited on by a <code>vkCmdWaitEvents</code> command that is currently executing"
-        },
-        {
-          "vuid": "VUID-vkCmdResetEvent-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdResetEvent-event-parameter",
-          "text": " <code>event</code> <strong class=\"purple\">must</strong> be a valid <code>VkEvent</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdResetEvent-stageMask-parameter",
-          "text": " <code>stageMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkPipelineStageFlagBits\">VkPipelineStageFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-vkCmdResetEvent-stageMask-requiredbitmask",
-          "text": " <code>stageMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdResetEvent-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdResetEvent-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
-        },
-        {
-          "vuid": "VUID-vkCmdResetEvent-renderpass",
-          "text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
-        },
-        {
-          "vuid": "VUID-vkCmdResetEvent-commonparent",
-          "text": " Both of <code>commandBuffer</code>, and <code>event</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_device_group)": [
-        {
-          "vuid": "VUID-vkCmdResetEvent-commandBuffer-01157",
-          "text": " <code>commandBuffer</code>&#8217;s current device mask <strong class=\"purple\">must</strong> include exactly one physical device."
-        }
-      ]
-    },
-    "vkCmdWaitEvents": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdWaitEvents-srcStageMask-01158",
-          "text": " <code>srcStageMask</code> <strong class=\"purple\">must</strong> be the bitwise OR of the <code>stageMask</code> parameter used in previous calls to <code>vkCmdSetEvent</code> with any of the members of <code>pEvents</code> and <code>VK_PIPELINE_STAGE_HOST_BIT</code> if any of the members of <code>pEvents</code> was set using <code>vkSetEvent</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdWaitEvents-srcStageMask-01159",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-geometryShader,geometry shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>srcStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdWaitEvents-dstStageMask-01160",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-geometryShader,geometry shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>dstStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdWaitEvents-srcStageMask-01161",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-tessellationShader,tessellation shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>srcStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT</code> or <code>VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdWaitEvents-dstStageMask-01162",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-tessellationShader,tessellation shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>dstStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT</code> or <code>VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdWaitEvents-pEvents-01163",
-          "text": " If <code>pEvents</code> includes one or more events that will be signaled by <code>vkSetEvent</code> after <code>commandBuffer</code> has been submitted to a queue, then <code>vkCmdWaitEvents</code> <strong class=\"purple\">must</strong> not be called inside a render pass instance"
-        },
-        {
-          "vuid": "VUID-vkCmdWaitEvents-srcStageMask-01164",
-          "text": " Any pipeline stage included in <code>srcStageMask</code> or <code>dstStageMask</code> <strong class=\"purple\">must</strong> be supported by the capabilities of the queue family specified by the <code>queueFamilyIndex</code> member of the <a href=\"#VkCommandPoolCreateInfo\">VkCommandPoolCreateInfo</a> structure that was used to create the <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from, as specified in the &amp;amp;lt;&amp;amp;lt;synchronization-pipeline-stages-supported, table of supported pipeline stages&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-vkCmdWaitEvents-pMemoryBarriers-01165",
-          "text": " Each element of <code>pMemoryBarriers</code>, <code>pBufferMemoryBarriers</code> or <code>pImageMemoryBarriers</code> <strong class=\"purple\">must</strong> not have any access flag included in its <code>srcAccessMask</code> member if that bit is not supported by any of the pipeline stages in <code>srcStageMask</code>, as specified in the &amp;amp;lt;&amp;amp;lt;synchronization-access-types-supported, table of supported access types&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-vkCmdWaitEvents-pMemoryBarriers-01166",
-          "text": " Each element of <code>pMemoryBarriers</code>, <code>pBufferMemoryBarriers</code> or <code>pImageMemoryBarriers</code> <strong class=\"purple\">must</strong> not have any access flag included in its <code>dstAccessMask</code> member if that bit is not supported by any of the pipeline stages in <code>dstStageMask</code>, as specified in the &amp;amp;lt;&amp;amp;lt;synchronization-access-types-supported, table of supported access types&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-vkCmdWaitEvents-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdWaitEvents-pEvents-parameter",
-          "text": " <code>pEvents</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>eventCount</code> valid <code>VkEvent</code> handles"
-        },
-        {
-          "vuid": "VUID-vkCmdWaitEvents-srcStageMask-parameter",
-          "text": " <code>srcStageMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkPipelineStageFlagBits\">VkPipelineStageFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-vkCmdWaitEvents-srcStageMask-requiredbitmask",
-          "text": " <code>srcStageMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdWaitEvents-dstStageMask-parameter",
-          "text": " <code>dstStageMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkPipelineStageFlagBits\">VkPipelineStageFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-vkCmdWaitEvents-dstStageMask-requiredbitmask",
-          "text": " <code>dstStageMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdWaitEvents-pMemoryBarriers-parameter",
-          "text": " If <code>memoryBarrierCount</code> is not <code>0</code>, <code>pMemoryBarriers</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>memoryBarrierCount</code> valid <code>VkMemoryBarrier</code> structures"
-        },
-        {
-          "vuid": "VUID-vkCmdWaitEvents-pBufferMemoryBarriers-parameter",
-          "text": " If <code>bufferMemoryBarrierCount</code> is not <code>0</code>, <code>pBufferMemoryBarriers</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>bufferMemoryBarrierCount</code> valid <code>VkBufferMemoryBarrier</code> structures"
-        },
-        {
-          "vuid": "VUID-vkCmdWaitEvents-pImageMemoryBarriers-parameter",
-          "text": " If <code>imageMemoryBarrierCount</code> is not <code>0</code>, <code>pImageMemoryBarriers</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>imageMemoryBarrierCount</code> valid <code>VkImageMemoryBarrier</code> structures"
-        },
-        {
-          "vuid": "VUID-vkCmdWaitEvents-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdWaitEvents-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
-        },
-        {
-          "vuid": "VUID-vkCmdWaitEvents-eventCount-arraylength",
-          "text": " <code>eventCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdWaitEvents-commonparent",
-          "text": " Both of <code>commandBuffer</code>, and the elements of <code>pEvents</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_device_group)": [
-        {
-          "vuid": "VUID-vkCmdWaitEvents-commandBuffer-01167",
-          "text": " <code>commandBuffer</code>&#8217;s current device mask <strong class=\"purple\">must</strong> include exactly one physical device."
-        }
-      ]
-    },
-    "vkCmdPipelineBarrier": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-01168",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-geometryShader,geometry shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>srcStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdPipelineBarrier-dstStageMask-01169",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-geometryShader,geometry shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>dstStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-01170",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-tessellationShader,tessellation shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>srcStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT</code> or <code>VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdPipelineBarrier-dstStageMask-01171",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-tessellationShader,tessellation shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>dstStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT</code> or <code>VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdPipelineBarrier-pDependencies-01172",
-          "text": " If <code>vkCmdPipelineBarrier</code> is called within a render pass instance, the render pass <strong class=\"purple\">must</strong> have been created with a <code>VkSubpassDependency</code> instance in <code>pDependencies</code> that expresses a dependency from the current subpass to itself."
-        },
-        {
-          "vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-01173",
-          "text": " If <code>vkCmdPipelineBarrier</code> is called within a render pass instance, <code>srcStageMask</code> <strong class=\"purple\">must</strong> contain a subset of the bit values in the <code>srcStageMask</code> member of that instance of <code>VkSubpassDependency</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdPipelineBarrier-dstStageMask-01174",
-          "text": " If <code>vkCmdPipelineBarrier</code> is called within a render pass instance, <code>dstStageMask</code> <strong class=\"purple\">must</strong> contain a subset of the bit values in the <code>dstStageMask</code> member of that instance of <code>VkSubpassDependency</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdPipelineBarrier-srcAccessMask-01175",
-          "text": " If <code>vkCmdPipelineBarrier</code> is called within a render pass instance, the <code>srcAccessMask</code> of any element of <code>pMemoryBarriers</code> or <code>pImageMemoryBarriers</code> <strong class=\"purple\">must</strong> contain a subset of the bit values the <code>srcAccessMask</code> member of that instance of <code>VkSubpassDependency</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdPipelineBarrier-dstAccessMask-01176",
-          "text": " If <code>vkCmdPipelineBarrier</code> is called within a render pass instance, the <code>dstAccessMask</code> of any element of <code>pMemoryBarriers</code> or <code>pImageMemoryBarriers</code> <strong class=\"purple\">must</strong> contain a subset of the bit values the <code>dstAccessMask</code> member of that instance of <code>VkSubpassDependency</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdPipelineBarrier-dependencyFlags-01177",
-          "text": " If <code>vkCmdPipelineBarrier</code> is called within a render pass instance, <code>dependencyFlags</code> <strong class=\"purple\">must</strong> be equal to the <code>dependencyFlags</code> member of that instance of <code>VkSubpassDependency</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdPipelineBarrier-bufferMemoryBarrierCount-01178",
-          "text": " If <code>vkCmdPipelineBarrier</code> is called within a render pass instance, <code>bufferMemoryBarrierCount</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdPipelineBarrier-image-01179",
-          "text": " If <code>vkCmdPipelineBarrier</code> is called within a render pass instance, the <code>image</code> member of any element of <code>pImageMemoryBarriers</code> <strong class=\"purple\">must</strong> be equal to one of the elements of <code>pAttachments</code> that the current <code>framebuffer</code> was created with, that is also referred to by one of the elements of the <code>pColorAttachments</code>, <code>pResolveAttachments</code> or <code>pDepthStencilAttachment</code> members of the <code>VkSubpassDescription</code> instance that the current subpass was created with"
-        },
-        {
-          "vuid": "VUID-vkCmdPipelineBarrier-oldLayout-01180",
-          "text": " If <code>vkCmdPipelineBarrier</code> is called within a render pass instance, the <code>oldLayout</code> and <code>newLayout</code> members of any element of <code>pImageMemoryBarriers</code> <strong class=\"purple\">must</strong> be equal to the <code>layout</code> member of an element of the <code>pColorAttachments</code>, <code>pResolveAttachments</code> or <code>pDepthStencilAttachment</code> members of the <code>VkSubpassDescription</code> instance that the current subpass was created with, that refers to the same <code>image</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdPipelineBarrier-oldLayout-01181",
-          "text": " If <code>vkCmdPipelineBarrier</code> is called within a render pass instance, the <code>oldLayout</code> and <code>newLayout</code> members of an element of <code>pImageMemoryBarriers</code> <strong class=\"purple\">must</strong> be equal"
-        },
-        {
-          "vuid": "VUID-vkCmdPipelineBarrier-srcQueueFamilyIndex-01182",
-          "text": " If <code>vkCmdPipelineBarrier</code> is called within a render pass instance, the <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> members of any element of <code>pImageMemoryBarriers</code> <strong class=\"purple\">must</strong> be <code>VK_QUEUE_FAMILY_IGNORED</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-01183",
-          "text": " Any pipeline stage included in <code>srcStageMask</code> or <code>dstStageMask</code> <strong class=\"purple\">must</strong> be supported by the capabilities of the queue family specified by the <code>queueFamilyIndex</code> member of the <a href=\"#VkCommandPoolCreateInfo\">VkCommandPoolCreateInfo</a> structure that was used to create the <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from, as specified in the &amp;amp;lt;&amp;amp;lt;synchronization-pipeline-stages-supported, table of supported pipeline stages&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-vkCmdPipelineBarrier-pMemoryBarriers-01184",
-          "text": " Each element of <code>pMemoryBarriers</code>, <code>pBufferMemoryBarriers</code> and <code>pImageMemoryBarriers</code> <strong class=\"purple\">must</strong> not have any access flag included in its <code>srcAccessMask</code> member if that bit is not supported by any of the pipeline stages in <code>srcStageMask</code>, as specified in the &amp;amp;lt;&amp;amp;lt;synchronization-access-types-supported, table of supported access types&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-vkCmdPipelineBarrier-pMemoryBarriers-01185",
-          "text": " Each element of <code>pMemoryBarriers</code>, <code>pBufferMemoryBarriers</code> and <code>pImageMemoryBarriers</code> <strong class=\"purple\">must</strong> not have any access flag included in its <code>dstAccessMask</code> member if that bit is not supported by any of the pipeline stages in <code>dstStageMask</code>, as specified in the &amp;amp;lt;&amp;amp;lt;synchronization-access-types-supported, table of supported access types&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-vkCmdPipelineBarrier-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-parameter",
-          "text": " <code>srcStageMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkPipelineStageFlagBits\">VkPipelineStageFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-requiredbitmask",
-          "text": " <code>srcStageMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdPipelineBarrier-dstStageMask-parameter",
-          "text": " <code>dstStageMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkPipelineStageFlagBits\">VkPipelineStageFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-vkCmdPipelineBarrier-dstStageMask-requiredbitmask",
-          "text": " <code>dstStageMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdPipelineBarrier-dependencyFlags-parameter",
-          "text": " <code>dependencyFlags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkDependencyFlagBits\">VkDependencyFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-vkCmdPipelineBarrier-pMemoryBarriers-parameter",
-          "text": " If <code>memoryBarrierCount</code> is not <code>0</code>, <code>pMemoryBarriers</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>memoryBarrierCount</code> valid <code>VkMemoryBarrier</code> structures"
-        },
-        {
-          "vuid": "VUID-vkCmdPipelineBarrier-pBufferMemoryBarriers-parameter",
-          "text": " If <code>bufferMemoryBarrierCount</code> is not <code>0</code>, <code>pBufferMemoryBarriers</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>bufferMemoryBarrierCount</code> valid <code>VkBufferMemoryBarrier</code> structures"
-        },
-        {
-          "vuid": "VUID-vkCmdPipelineBarrier-pImageMemoryBarriers-parameter",
-          "text": " If <code>imageMemoryBarrierCount</code> is not <code>0</code>, <code>pImageMemoryBarriers</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>imageMemoryBarrierCount</code> valid <code>VkImageMemoryBarrier</code> structures"
-        },
-        {
-          "vuid": "VUID-vkCmdPipelineBarrier-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdPipelineBarrier-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support transfer, graphics, or compute operations"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_multiview)": [
-        {
-          "vuid": "VUID-vkCmdPipelineBarrier-dependencyFlags-01186",
-          "text": " If <code>vkCmdPipelineBarrier</code> is called outside of a render pass instance, <code>dependencyFlags</code> <strong class=\"purple\">must</strong> not include <code>VK_DEPENDENCY_VIEW_LOCAL_BIT</code>"
-        }
-      ]
-    },
-    "VkMemoryBarrier": {
-      "core": [
-        {
-          "vuid": "VUID-VkMemoryBarrier-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_MEMORY_BARRIER</code>"
-        },
-        {
-          "vuid": "VUID-VkMemoryBarrier-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkMemoryBarrier-srcAccessMask-parameter",
-          "text": " <code>srcAccessMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkAccessFlagBits\">VkAccessFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkMemoryBarrier-dstAccessMask-parameter",
-          "text": " <code>dstAccessMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkAccessFlagBits\">VkAccessFlagBits</a> values"
-        }
-      ]
-    },
-    "VkBufferMemoryBarrier": {
-      "core": [
-        {
-          "vuid": "VUID-VkBufferMemoryBarrier-offset-01187",
-          "text": " <code>offset</code> <strong class=\"purple\">must</strong> be less than the size of <code>buffer</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferMemoryBarrier-size-01188",
-          "text": " If <code>size</code> is not equal to <code>VK_WHOLE_SIZE</code>, <code>size</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferMemoryBarrier-size-01189",
-          "text": " If <code>size</code> is not equal to <code>VK_WHOLE_SIZE</code>, <code>size</code> <strong class=\"purple\">must</strong> be less than or equal to than the size of <code>buffer</code> minus <code>offset</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferMemoryBarrier-buffer-01196",
-          "text": " If <code>buffer</code> was created with a sharing mode of <code>VK_SHARING_MODE_EXCLUSIVE</code>, and <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> are not <code>VK_QUEUE_FAMILY_IGNORED</code>, at least one of them <strong class=\"purple\">must</strong> be the same as the family of the queue that will execute this barrier"
-        },
-        {
-          "vuid": "VUID-VkBufferMemoryBarrier-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferMemoryBarrier-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferMemoryBarrier-srcAccessMask-parameter",
-          "text": " <code>srcAccessMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkAccessFlagBits\">VkAccessFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkBufferMemoryBarrier-dstAccessMask-parameter",
-          "text": " <code>dstAccessMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkAccessFlagBits\">VkAccessFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkBufferMemoryBarrier-buffer-parameter",
-          "text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
-        }
-      ],
-      "!(VK_VERSION_1_1,VK_KHR_external_memory)": [
-        {
-          "vuid": "VUID-VkBufferMemoryBarrier-buffer-01190",
-          "text": " If <code>buffer</code> was created with a sharing mode of <code>VK_SHARING_MODE_CONCURRENT</code>, <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> <strong class=\"purple\">must</strong> both be <code>VK_QUEUE_FAMILY_IGNORED</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferMemoryBarrier-buffer-01192",
-          "text": " If <code>buffer</code> was created with a sharing mode of <code>VK_SHARING_MODE_EXCLUSIVE</code>, <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> <strong class=\"purple\">must</strong> either both be <code>VK_QUEUE_FAMILY_IGNORED</code>, or both be a valid queue family (see &amp;amp;lt;&amp;amp;lt;devsandqueues-queueprops&amp;amp;gt;&amp;amp;gt;)"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_external_memory)": [
-        {
-          "vuid": "VUID-VkBufferMemoryBarrier-buffer-01191",
-          "text": " If <code>buffer</code> was created with a sharing mode of <code>VK_SHARING_MODE_CONCURRENT</code>, at least one of <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> <strong class=\"purple\">must</strong> be <code>VK_QUEUE_FAMILY_IGNORED</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferMemoryBarrier-buffer-01763",
-          "text": " If <code>buffer</code> was created with a sharing mode of <code>VK_SHARING_MODE_CONCURRENT</code>, and one of <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> is <code>VK_QUEUE_FAMILY_IGNORED</code>, the other <strong class=\"purple\">must</strong> be <code>VK_QUEUE_FAMILY_IGNORED</code> or a special queue family reserved for external memory ownership transfers, as described in &amp;amp;lt;&amp;amp;lt;synchronization-queue-transfers&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-VkBufferMemoryBarrier-buffer-01193",
-          "text": " If <code>buffer</code> was created with a sharing mode of <code>VK_SHARING_MODE_EXCLUSIVE</code> and <code>srcQueueFamilyIndex</code> is <code>VK_QUEUE_FAMILY_IGNORED</code>, <code>dstQueueFamilyIndex</code> <strong class=\"purple\">must</strong> also be <code>VK_QUEUE_FAMILY_IGNORED</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferMemoryBarrier-buffer-01764",
-          "text": " If <code>buffer</code> was created with a sharing mode of <code>VK_SHARING_MODE_EXCLUSIVE</code> and <code>srcQueueFamilyIndex</code> is not <code>VK_QUEUE_FAMILY_IGNORED</code>, it <strong class=\"purple\">must</strong> be a valid queue family or a special queue family reserved for external memory transfers, as described in &amp;amp;lt;&amp;amp;lt;synchronization-queue-transfers&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-VkBufferMemoryBarrier-buffer-01765",
-          "text": " If <code>buffer</code> was created with a sharing mode of <code>VK_SHARING_MODE_EXCLUSIVE</code> and <code>dstQueueFamilyIndex</code> is not <code>VK_QUEUE_FAMILY_IGNORED</code>, it <strong class=\"purple\">must</strong> be a valid queue family or a special queue family reserved for external memory transfers, as described in &amp;amp;lt;&amp;amp;lt;synchronization-queue-transfers&amp;amp;gt;&amp;amp;gt;."
-        }
-      ]
-    },
-    "VkImageMemoryBarrier": {
-      "core": [
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-oldLayout-01197",
-          "text": " <code>oldLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_UNDEFINED</code> or the current layout of the image subresources affected by the barrier"
-        },
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-newLayout-01198",
-          "text": " <code>newLayout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_UNDEFINED</code> or <code>VK_IMAGE_LAYOUT_PREINITIALIZED</code>"
-        },
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-image-01205",
-          "text": " If <code>image</code> was created with a sharing mode of <code>VK_SHARING_MODE_EXCLUSIVE</code>, and <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> are not <code>VK_QUEUE_FAMILY_IGNORED</code>, at least one of them <strong class=\"purple\">must</strong> be the same as the family of the queue that will execute this barrier"
-        },
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-subresourceRange-01486",
-          "text": " <code>subresourceRange.baseMipLevel</code> <strong class=\"purple\">must</strong> be less than the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
-        },
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-subresourceRange-01724",
-          "text": " If <code>subresourceRange.levelCount</code> is not <code>VK_REMAINING_MIP_LEVELS</code>, <span class=\"eq\"><code>subresourceRange.baseMipLevel</code> &#43; <code>subresourceRange.levelCount</code></span> <strong class=\"purple\">must</strong> be less than or equal to the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
-        },
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-subresourceRange-01488",
-          "text": " <code>subresourceRange.baseArrayLayer</code> <strong class=\"purple\">must</strong> be less than the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
-        },
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-subresourceRange-01725",
-          "text": " If <code>subresourceRange.layerCount</code> is not <code>VK_REMAINING_ARRAY_LAYERS</code>, <span class=\"eq\"><code>subresourceRange.baseArrayLayer</code> &#43; <code>subresourceRange.layerCount</code></span> <strong class=\"purple\">must</strong> be less than or equal to the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
-        },
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-image-01207",
-          "text": " If <code>image</code> has a depth/stencil format with both depth and stencil components, then the <code>aspectMask</code> member of <code>subresourceRange</code> <strong class=\"purple\">must</strong> include both <code>VK_IMAGE_ASPECT_DEPTH_BIT</code> and <code>VK_IMAGE_ASPECT_STENCIL_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-oldLayout-01208",
-          "text": " If either <code>oldLayout</code> or <code>newLayout</code> is <code>VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL</code> then <code>image</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT</code> set"
-        },
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-oldLayout-01209",
-          "text": " If either <code>oldLayout</code> or <code>newLayout</code> is <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL</code> then <code>image</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code> set"
-        },
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-oldLayout-01210",
-          "text": " If either <code>oldLayout</code> or <code>newLayout</code> is <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL</code> then <code>image</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code> set"
-        },
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-oldLayout-01211",
-          "text": " If either <code>oldLayout</code> or <code>newLayout</code> is <code>VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL</code> then <code>image</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_SAMPLED_BIT</code> or <code>VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT</code> set"
-        },
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-oldLayout-01212",
-          "text": " If either <code>oldLayout</code> or <code>newLayout</code> is <code>VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL</code> then <code>image</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_TRANSFER_SRC_BIT</code> set"
-        },
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-oldLayout-01213",
-          "text": " If either <code>oldLayout</code> or <code>newLayout</code> is <code>VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL</code> then <code>image</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_TRANSFER_DST_BIT</code> set"
-        },
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER</code>"
-        },
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkSampleLocationsInfoEXT\">VkSampleLocationsInfoEXT</a>"
-        },
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-srcAccessMask-parameter",
-          "text": " <code>srcAccessMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkAccessFlagBits\">VkAccessFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-dstAccessMask-parameter",
-          "text": " <code>dstAccessMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkAccessFlagBits\">VkAccessFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-oldLayout-parameter",
-          "text": " <code>oldLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
-        },
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-newLayout-parameter",
-          "text": " <code>newLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
-        },
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-image-parameter",
-          "text": " <code>image</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
-        },
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-subresourceRange-parameter",
-          "text": " <code>subresourceRange</code> <strong class=\"purple\">must</strong> be a valid <code>VkImageSubresourceRange</code> structure"
-        }
-      ],
-      "!(VK_VERSION_1_1,VK_KHR_external_memory)": [
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-image-01199",
-          "text": " If <code>image</code> was created with a sharing mode of <code>VK_SHARING_MODE_CONCURRENT</code>, <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> <strong class=\"purple\">must</strong> both be <code>VK_QUEUE_FAMILY_IGNORED</code>"
-        },
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-image-01200",
-          "text": " If <code>image</code> was created with a sharing mode of <code>VK_SHARING_MODE_EXCLUSIVE</code>, <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> <strong class=\"purple\">must</strong> either both be <code>VK_QUEUE_FAMILY_IGNORED</code>, or both be a valid queue family (see &amp;amp;lt;&amp;amp;lt;devsandqueues-queueprops&amp;amp;gt;&amp;amp;gt;)."
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_external_memory)": [
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-image-01381",
-          "text": " If <code>image</code> was created with a sharing mode of <code>VK_SHARING_MODE_CONCURRENT</code>, at least one of <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> <strong class=\"purple\">must</strong> be <code>VK_QUEUE_FAMILY_IGNORED</code>"
-        },
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-image-01766",
-          "text": " If <code>image</code> was created with a sharing mode of <code>VK_SHARING_MODE_CONCURRENT</code>, and one of <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> is <code>VK_QUEUE_FAMILY_IGNORED</code>, the other <strong class=\"purple\">must</strong> be <code>VK_QUEUE_FAMILY_IGNORED</code> or a special queue family reserved for external memory transfers, as described in &amp;amp;lt;&amp;amp;lt;synchronization-queue-transfers&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-image-01201",
-          "text": " If <code>image</code> was created with a sharing mode of <code>VK_SHARING_MODE_EXCLUSIVE</code> and <code>srcQueueFamilyIndex</code> is <code>VK_QUEUE_FAMILY_IGNORED</code>, <code>dstQueueFamilyIndex</code> <strong class=\"purple\">must</strong> also be <code>VK_QUEUE_FAMILY_IGNORED</code>."
-        },
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-image-01767",
-          "text": " If <code>image</code> was created with a sharing mode of <code>VK_SHARING_MODE_EXCLUSIVE</code> and <code>srcQueueFamilyIndex</code> is not <code>VK_QUEUE_FAMILY_IGNORED</code>, it <strong class=\"purple\">must</strong> be a valid queue family or a special queue family reserved for external memory transfers, as described in &amp;amp;lt;&amp;amp;lt;synchronization-queue-transfers&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-image-01768",
-          "text": " If <code>image</code> was created with a sharing mode of <code>VK_SHARING_MODE_EXCLUSIVE</code> and <code>dstQueueFamilyIndex</code> is not <code>VK_QUEUE_FAMILY_IGNORED</code>, it <strong class=\"purple\">must</strong> be a valid queue family or a special queue family reserved for external memory transfers, as described in &amp;amp;lt;&amp;amp;lt;synchronization-queue-transfers&amp;amp;gt;&amp;amp;gt;."
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-image-01671",
-          "text": " If <code>image</code> has a single-plane color format or is not <em>disjoint</em>, then the <code>aspectMask</code> member of <code>subresourceRange</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_ASPECT_COLOR_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-image-01672",
-          "text": " If <code>image</code> has a multi-planar format and the image is <em>disjoint</em>, then the <code>aspectMask</code> member of <code>subresourceRange</code> <strong class=\"purple\">must</strong> include either at least one of <code>VK_IMAGE_ASPECT_PLANE_0_BIT</code>, <code>VK_IMAGE_ASPECT_PLANE_1_BIT</code>, and <code>VK_IMAGE_ASPECT_PLANE_2_BIT</code>; or <strong class=\"purple\">must</strong> include <code>VK_IMAGE_ASPECT_COLOR_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-image-01673",
-          "text": " If <code>image</code> has a multi-planar format with only two planes, then the <code>aspectMask</code> member of <code>subresourceRange</code> <strong class=\"purple\">must</strong> not include <code>VK_IMAGE_ASPECT_PLANE_2_BIT</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_maintenance2)": [
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-oldLayout-01658",
-          "text": " If either <code>oldLayout</code> or <code>newLayout</code> is <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL</code> then <code>image</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code> set"
-        },
-        {
-          "vuid": "VUID-VkImageMemoryBarrier-oldLayout-01659",
-          "text": " If either <code>oldLayout</code> or <code>newLayout</code> is <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL</code> then <code>image</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code> set"
-        }
-      ]
-    },
-    "vkQueueWaitIdle": {
-      "core": [
-        {
-          "vuid": "VUID-vkQueueWaitIdle-queue-parameter",
-          "text": " <code>queue</code> <strong class=\"purple\">must</strong> be a valid <code>VkQueue</code> handle"
-        }
-      ]
-    },
-    "vkDeviceWaitIdle": {
-      "core": [
-        {
-          "vuid": "VUID-vkDeviceWaitIdle-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        }
-      ]
-    },
-    "vkCreateRenderPass": {
-      "core": [
-        {
-          "vuid": "VUID-vkCreateRenderPass-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateRenderPass-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkRenderPassCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateRenderPass-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateRenderPass-pRenderPass-parameter",
-          "text": " <code>pRenderPass</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkRenderPass</code> handle"
-        }
-      ]
-    },
-    "VkRenderPassCreateInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkRenderPassCreateInfo-None-00832",
-          "text": " If any two subpasses operate on attachments with overlapping ranges of the same <code>VkDeviceMemory</code> object, and at least one subpass writes to that area of <code>VkDeviceMemory</code>, a subpass dependency <strong class=\"purple\">must</strong> be included (either directly or via some intermediate subpasses) between them"
-        },
-        {
-          "vuid": "VUID-VkRenderPassCreateInfo-attachment-00833",
-          "text": " If the <code>attachment</code> member of any element of <code>pInputAttachments</code>, <code>pColorAttachments</code>, <code>pResolveAttachments</code> or <code>pDepthStencilAttachment</code>, or the attachment indexed by any element of <code>pPreserveAttachments</code> in any element of <code>pSubpasses</code> is bound to a range of a <code>VkDeviceMemory</code> object that overlaps with any other attachment in any subpass (including the same subpass), the <code>VkAttachmentDescription</code> structures describing them <strong class=\"purple\">must</strong> include <code>VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT</code> in <code>flags</code>"
-        },
-        {
-          "vuid": "VUID-VkRenderPassCreateInfo-attachment-00834",
-          "text": " If the <code>attachment</code> member of any element of <code>pInputAttachments</code>, <code>pColorAttachments</code>, <code>pResolveAttachments</code> or <code>pDepthStencilAttachment</code>, or any element of <code>pPreserveAttachments</code> in any element of <code>pSubpasses</code> is not <code>VK_ATTACHMENT_UNUSED</code>, it <strong class=\"purple\">must</strong> be less than <code>attachmentCount</code>"
-        },
-        {
-          "vuid": "VUID-VkRenderPassCreateInfo-pPreserveAttachments-00835",
-          "text": " The value of each element of the <code>pPreserveAttachments</code> member in each element of <code>pSubpasses</code> <strong class=\"purple\">must</strong> not be <code>VK_ATTACHMENT_UNUSED</code>"
-        },
-        {
-          "vuid": "VUID-VkRenderPassCreateInfo-pAttachments-00836",
-          "text": " For any member of <code>pAttachments</code> with a <code>loadOp</code> equal to <code>VK_ATTACHMENT_LOAD_OP_CLEAR</code>, the first use of that attachment <strong class=\"purple\">must</strong> not specify a <code>layout</code> equal to <code>VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL</code>."
-        },
-        {
-          "vuid": "VUID-VkRenderPassCreateInfo-pDependencies-00837",
-          "text": " For any element of <code>pDependencies</code>, if the <code>srcSubpass</code> is not <code>VK_SUBPASS_EXTERNAL</code>, all stage flags included in the <code>srcStageMask</code> member of that dependency <strong class=\"purple\">must</strong> be a pipeline stage supported by the &amp;amp;lt;&amp;amp;lt;synchronization-pipeline-stages-types, pipeline&amp;amp;gt;&amp;amp;gt; identified by the <code>pipelineBindPoint</code> member of the source subpass."
-        },
-        {
-          "vuid": "VUID-VkRenderPassCreateInfo-pDependencies-00838",
-          "text": " For any element of <code>pDependencies</code>, if the <code>dstSubpass</code> is not <code>VK_SUBPASS_EXTERNAL</code>, all stage flags included in the <code>dstStageMask</code> member of that dependency <strong class=\"purple\">must</strong> be a pipeline stage supported by the &amp;amp;lt;&amp;amp;lt;synchronization-pipeline-stages-types, pipeline&amp;amp;gt;&amp;amp;gt; identified by the <code>pipelineBindPoint</code> member of the source subpass."
-        },
-        {
-          "vuid": "VUID-VkRenderPassCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkRenderPassCreateInfo-pNext-pNext",
-          "text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkRenderPassInputAttachmentAspectCreateInfo\">VkRenderPassInputAttachmentAspectCreateInfo</a> or <a href=\"#VkRenderPassMultiviewCreateInfo\">VkRenderPassMultiviewCreateInfo</a>"
-        },
-        {
-          "vuid": "VUID-VkRenderPassCreateInfo-sType-unique",
-          "text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
-        },
-        {
-          "vuid": "VUID-VkRenderPassCreateInfo-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkRenderPassCreateInfo-pAttachments-parameter",
-          "text": " If <code>attachmentCount</code> is not <code>0</code>, <code>pAttachments</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>attachmentCount</code> valid <code>VkAttachmentDescription</code> structures"
-        },
-        {
-          "vuid": "VUID-VkRenderPassCreateInfo-pSubpasses-parameter",
-          "text": " <code>pSubpasses</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>subpassCount</code> valid <code>VkSubpassDescription</code> structures"
-        },
-        {
-          "vuid": "VUID-VkRenderPassCreateInfo-pDependencies-parameter",
-          "text": " If <code>dependencyCount</code> is not <code>0</code>, <code>pDependencies</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>dependencyCount</code> valid <code>VkSubpassDependency</code> structures"
-        },
-        {
-          "vuid": "VUID-VkRenderPassCreateInfo-subpassCount-arraylength",
-          "text": " <code>subpassCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_maintenance2)": [
-        {
-          "vuid": "VUID-VkRenderPassCreateInfo-pAttachments-01566",
-          "text": " For any member of <code>pAttachments</code> with a <code>loadOp</code> equal to <code>VK_ATTACHMENT_LOAD_OP_CLEAR</code>, the first use of that attachment <strong class=\"purple\">must</strong> not specify a <code>layout</code> equal to <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL</code>."
-        },
-        {
-          "vuid": "VUID-VkRenderPassCreateInfo-pAttachments-01567",
-          "text": " For any member of <code>pAttachments</code> with a <code>stencilLoadOp</code> equal to <code>VK_ATTACHMENT_LOAD_OP_CLEAR</code>, the first use of that attachment <strong class=\"purple\">must</strong> not specify a <code>layout</code> equal to <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL</code>."
-        }
-      ]
-    },
-    "VkRenderPassMultiviewCreateInfo": {
-      "(VK_VERSION_1_1,VK_KHR_multiview)": [
-        {
-          "vuid": "VUID-VkRenderPassMultiviewCreateInfo-subpassCount-00839",
-          "text": " If <code>subpassCount</code> is not zero, <code>subpassCount</code> <strong class=\"purple\">must</strong> be equal to the <code>subpassCount</code> in the <code>VkRenderPassCreateInfo</code> structure at the start of the chain"
-        },
-        {
-          "vuid": "VUID-VkRenderPassMultiviewCreateInfo-dependencyCount-00840",
-          "text": " If <code>dependencyCount</code> is not zero, <code>dependencyCount</code> <strong class=\"purple\">must</strong> be equal to the <code>dependencyCount</code> in the <code>VkRenderPassCreateInfo</code> structure at the start of the chain"
-        },
-        {
-          "vuid": "VUID-VkRenderPassMultiviewCreateInfo-pCorrelationMasks-00841",
-          "text": " Each view index <strong class=\"purple\">must</strong> not be set in more than one element of <code>pCorrelationMasks</code>"
-        },
-        {
-          "vuid": "VUID-VkRenderPassMultiviewCreateInfo-pViewOffsets-00842",
-          "text": " If an element of <code>pViewOffsets</code> is non-zero, the corresponding <a href=\"#VkSubpassDependency\">VkSubpassDependency</a> structure <strong class=\"purple\">must</strong> have different values of <code>srcSubpass</code> and <code>dstSubpass</code>."
-        },
-        {
-          "vuid": "VUID-VkRenderPassMultiviewCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkRenderPassMultiviewCreateInfo-pViewMasks-parameter",
-          "text": " If <code>subpassCount</code> is not <code>0</code>, <code>pViewMasks</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>subpassCount</code> <code>uint32_t</code> values"
-        },
-        {
-          "vuid": "VUID-VkRenderPassMultiviewCreateInfo-pViewOffsets-parameter",
-          "text": " If <code>dependencyCount</code> is not <code>0</code>, <code>pViewOffsets</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>dependencyCount</code> <code>int32_t</code> values"
-        },
-        {
-          "vuid": "VUID-VkRenderPassMultiviewCreateInfo-pCorrelationMasks-parameter",
-          "text": " If <code>correlationMaskCount</code> is not <code>0</code>, <code>pCorrelationMasks</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>correlationMaskCount</code> <code>uint32_t</code> values"
-        }
-      ]
-    },
-    "VkAttachmentDescription": {
-      "core": [
-        {
-          "vuid": "VUID-VkAttachmentDescription-finalLayout-00843",
-          "text": " <code>finalLayout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_UNDEFINED</code> or <code>VK_IMAGE_LAYOUT_PREINITIALIZED</code>"
-        },
-        {
-          "vuid": "VUID-VkAttachmentDescription-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkAttachmentDescriptionFlagBits\">VkAttachmentDescriptionFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkAttachmentDescription-format-parameter",
-          "text": " <code>format</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFormat\">VkFormat</a> value"
-        },
-        {
-          "vuid": "VUID-VkAttachmentDescription-samples-parameter",
-          "text": " <code>samples</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSampleCountFlagBits\">VkSampleCountFlagBits</a> value"
-        },
-        {
-          "vuid": "VUID-VkAttachmentDescription-loadOp-parameter",
-          "text": " <code>loadOp</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAttachmentLoadOp\">VkAttachmentLoadOp</a> value"
-        },
-        {
-          "vuid": "VUID-VkAttachmentDescription-storeOp-parameter",
-          "text": " <code>storeOp</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAttachmentStoreOp\">VkAttachmentStoreOp</a> value"
-        },
-        {
-          "vuid": "VUID-VkAttachmentDescription-stencilLoadOp-parameter",
-          "text": " <code>stencilLoadOp</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAttachmentLoadOp\">VkAttachmentLoadOp</a> value"
-        },
-        {
-          "vuid": "VUID-VkAttachmentDescription-stencilStoreOp-parameter",
-          "text": " <code>stencilStoreOp</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAttachmentStoreOp\">VkAttachmentStoreOp</a> value"
-        },
-        {
-          "vuid": "VUID-VkAttachmentDescription-initialLayout-parameter",
-          "text": " <code>initialLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
-        },
-        {
-          "vuid": "VUID-VkAttachmentDescription-finalLayout-parameter",
-          "text": " <code>finalLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
-        }
-      ]
-    },
-    "VkRenderPassInputAttachmentAspectCreateInfo": {
-      "(VK_VERSION_1_1,VK_KHR_maintenance2)": [
-        {
-          "vuid": "VUID-VkRenderPassInputAttachmentAspectCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkRenderPassInputAttachmentAspectCreateInfo-pAspectReferences-parameter",
-          "text": " <code>pAspectReferences</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>aspectReferenceCount</code> valid <code>VkInputAttachmentAspectReference</code> structures"
-        },
-        {
-          "vuid": "VUID-VkRenderPassInputAttachmentAspectCreateInfo-aspectReferenceCount-arraylength",
-          "text": " <code>aspectReferenceCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ]
-    },
-    "VkInputAttachmentAspectReference": {
-      "(VK_VERSION_1_1,VK_KHR_maintenance2)": [
-        {
-          "vuid": "VUID-VkInputAttachmentAspectReference-pCreateInfo-01568",
-          "text": " There <strong class=\"purple\">must</strong> be an input attachment at <code>pCreateInfo</code>::<code>pSubpasses</code>[<code>subpass</code>].<code>pInputAttachments</code>[<code>inputAttachmentIndex</code>]."
-        },
-        {
-          "vuid": "VUID-VkInputAttachmentAspectReference-None-01569",
-          "text": " The specified input attachment <strong class=\"purple\">must</strong> have more than one aspect mask."
-        },
-        {
-          "vuid": "VUID-VkInputAttachmentAspectReference-aspectMask-01570",
-          "text": " <code>aspectMask</code> <strong class=\"purple\">must</strong> be a subset of the aspect masks in the specified input attachment."
-        },
-        {
-          "vuid": "VUID-VkInputAttachmentAspectReference-aspectMask-parameter",
-          "text": " <code>aspectMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageAspectFlagBits\">VkImageAspectFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkInputAttachmentAspectReference-aspectMask-requiredbitmask",
-          "text": " <code>aspectMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        }
-      ]
-    },
-    "VkSubpassDescription": {
-      "core": [
-        {
-          "vuid": "VUID-VkSubpassDescription-pipelineBindPoint-00844",
-          "text": " <code>pipelineBindPoint</code> <strong class=\"purple\">must</strong> be <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>"
-        },
-        {
-          "vuid": "VUID-VkSubpassDescription-colorAttachmentCount-00845",
-          "text": " <code>colorAttachmentCount</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxColorAttachments</code>"
-        },
-        {
-          "vuid": "VUID-VkSubpassDescription-loadOp-00846",
-          "text": " If the first use of an attachment in this render pass is as an input attachment, and the attachment is not also used as a color or depth/stencil attachment in the same subpass, then <code>loadOp</code> <strong class=\"purple\">must</strong> not be <code>VK_ATTACHMENT_LOAD_OP_CLEAR</code>"
-        },
-        {
-          "vuid": "VUID-VkSubpassDescription-pResolveAttachments-00847",
-          "text": " If <code>pResolveAttachments</code> is not <code>NULL</code>, for each resolve attachment that does not have the value <code>VK_ATTACHMENT_UNUSED</code>, the corresponding color attachment <strong class=\"purple\">must</strong> not have the value <code>VK_ATTACHMENT_UNUSED</code>"
-        },
-        {
-          "vuid": "VUID-VkSubpassDescription-pResolveAttachments-00848",
-          "text": " If <code>pResolveAttachments</code> is not <code>NULL</code>, the sample count of each element of <code>pColorAttachments</code> <strong class=\"purple\">must</strong> be anything other than <code>VK_SAMPLE_COUNT_1_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkSubpassDescription-pResolveAttachments-00849",
-          "text": " Each element of <code>pResolveAttachments</code> <strong class=\"purple\">must</strong> have a sample count of <code>VK_SAMPLE_COUNT_1_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkSubpassDescription-pResolveAttachments-00850",
-          "text": " Each element of <code>pResolveAttachments</code> <strong class=\"purple\">must</strong> have the same <a href=\"#VkFormat\">VkFormat</a> as its corresponding color attachment"
-        },
-        {
-          "vuid": "VUID-VkSubpassDescription-pColorAttachments-01417",
-          "text": " All attachments in <code>pColorAttachments</code> that are not <code>VK_ATTACHMENT_UNUSED</code> <strong class=\"purple\">must</strong> have the same sample count"
-        },
-        {
-          "vuid": "VUID-VkSubpassDescription-None-00852",
-          "text": " If any input attachments are <code>VK_ATTACHMENT_UNUSED</code>, then any pipelines bound during the subpass <strong class=\"purple\">must</strong> not access those input attachments from the fragment shader"
-        },
-        {
-          "vuid": "VUID-VkSubpassDescription-attachment-00853",
-          "text": " The <code>attachment</code> member of each element of <code>pPreserveAttachments</code> <strong class=\"purple\">must</strong> not be <code>VK_ATTACHMENT_UNUSED</code>"
-        },
-        {
-          "vuid": "VUID-VkSubpassDescription-pPreserveAttachments-00854",
-          "text": " Each element of <code>pPreserveAttachments</code> <strong class=\"purple\">must</strong> not also be an element of any other member of the subpass description"
-        },
-        {
-          "vuid": "VUID-VkSubpassDescription-layout-00855",
-          "text": " If any attachment is used as both an input attachment and a color or depth/stencil attachment, then each use <strong class=\"purple\">must</strong> use the same <code>layout</code>"
-        },
-        {
-          "vuid": "VUID-VkSubpassDescription-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkSubpassDescriptionFlagBits\">VkSubpassDescriptionFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkSubpassDescription-pipelineBindPoint-parameter",
-          "text": " <code>pipelineBindPoint</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipelineBindPoint\">VkPipelineBindPoint</a> value"
-        },
-        {
-          "vuid": "VUID-VkSubpassDescription-pInputAttachments-parameter",
-          "text": " If <code>inputAttachmentCount</code> is not <code>0</code>, <code>pInputAttachments</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>inputAttachmentCount</code> valid <code>VkAttachmentReference</code> structures"
-        },
-        {
-          "vuid": "VUID-VkSubpassDescription-pColorAttachments-parameter",
-          "text": " If <code>colorAttachmentCount</code> is not <code>0</code>, <code>pColorAttachments</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>colorAttachmentCount</code> valid <code>VkAttachmentReference</code> structures"
-        },
-        {
-          "vuid": "VUID-VkSubpassDescription-pResolveAttachments-parameter",
-          "text": " If <code>colorAttachmentCount</code> is not <code>0</code>, and <code>pResolveAttachments</code> is not <code>NULL</code>, <code>pResolveAttachments</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>colorAttachmentCount</code> valid <code>VkAttachmentReference</code> structures"
-        },
-        {
-          "vuid": "VUID-VkSubpassDescription-pDepthStencilAttachment-parameter",
-          "text": " If <code>pDepthStencilAttachment</code> is not <code>NULL</code>, <code>pDepthStencilAttachment</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAttachmentReference</code> structure"
-        },
-        {
-          "vuid": "VUID-VkSubpassDescription-pPreserveAttachments-parameter",
-          "text": " If <code>preserveAttachmentCount</code> is not <code>0</code>, <code>pPreserveAttachments</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>preserveAttachmentCount</code> <code>uint32_t</code> values"
-        }
-      ],
-      "(VK_AMD_mixed_attachment_samples)": [
-        {
-          "vuid": "VUID-VkSubpassDescription-pColorAttachments-01506",
-          "text": " All attachments in <code>pColorAttachments</code> that are not <code>VK_ATTACHMENT_UNUSED</code> <strong class=\"purple\">must</strong> have a sample count that is smaller than or equal to the sample count of <code>pDepthStencilAttachment</code> if it is not <code>VK_ATTACHMENT_UNUSED</code>"
-        }
-      ],
-      "!(VK_AMD_mixed_attachment_samples)+!(VK_NV_framebuffer_mixed_samples)": [
-        {
-          "vuid": "VUID-VkSubpassDescription-pDepthStencilAttachment-01418",
-          "text": " If <code>pDepthStencilAttachment</code> is not <code>VK_ATTACHMENT_UNUSED</code> and any attachments in <code>pColorAttachments</code> are not <code>VK_ATTACHMENT_UNUSED</code>, they <strong class=\"purple\">must</strong> have the same sample count"
-        }
-      ],
-      "(VK_NVX_multiview_per_view_attributes)": [
-        {
-          "vuid": "VUID-VkSubpassDescription-flags-00856",
-          "text": " If <code>flags</code> includes <code>VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX</code>, it <strong class=\"purple\">must</strong> also include <code>VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX</code>."
-        }
-      ]
-    },
-    "VkAttachmentReference": {
-      "core": [
-        {
-          "vuid": "VUID-VkAttachmentReference-layout-00857",
-          "text": " <code>layout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_UNDEFINED</code> or <code>VK_IMAGE_LAYOUT_PREINITIALIZED</code>"
-        },
-        {
-          "vuid": "VUID-VkAttachmentReference-layout-parameter",
-          "text": " <code>layout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
-        }
-      ]
-    },
-    "VkSubpassDependency": {
-      "core": [
-        {
-          "vuid": "VUID-VkSubpassDependency-srcSubpass-00858",
-          "text": " If <code>srcSubpass</code> is not <code>VK_SUBPASS_EXTERNAL</code>, <code>srcStageMask</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_STAGE_HOST_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkSubpassDependency-dstSubpass-00859",
-          "text": " If <code>dstSubpass</code> is not <code>VK_SUBPASS_EXTERNAL</code>, <code>dstStageMask</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_STAGE_HOST_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkSubpassDependency-srcStageMask-00860",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-geometryShader,geometry shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>srcStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkSubpassDependency-dstStageMask-00861",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-geometryShader,geometry shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>dstStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkSubpassDependency-srcStageMask-00862",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-tessellationShader,tessellation shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>srcStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT</code> or <code>VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkSubpassDependency-dstStageMask-00863",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-tessellationShader,tessellation shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>dstStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT</code> or <code>VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkSubpassDependency-srcSubpass-00864",
-          "text": " <code>srcSubpass</code> <strong class=\"purple\">must</strong> be less than or equal to <code>dstSubpass</code>, unless one of them is <code>VK_SUBPASS_EXTERNAL</code>, to avoid cyclic dependencies and ensure a valid execution order"
-        },
-        {
-          "vuid": "VUID-VkSubpassDependency-srcSubpass-00865",
-          "text": " <code>srcSubpass</code> and <code>dstSubpass</code> <strong class=\"purple\">must</strong> not both be equal to <code>VK_SUBPASS_EXTERNAL</code>"
-        },
-        {
-          "vuid": "VUID-VkSubpassDependency-srcSubpass-00866",
-          "text": " If <code>srcSubpass</code> is equal to <code>dstSubpass</code>, <code>srcStageMask</code> and <code>dstStageMask</code> <strong class=\"purple\">must</strong> only contain one of <code>VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT</code>, <code>VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT</code>, <code>VK_PIPELINE_STAGE_VERTEX_INPUT_BIT</code>, <code>VK_PIPELINE_STAGE_VERTEX_SHADER_BIT</code>, <code>VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT</code>, <code>VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT</code>, <code>VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT</code>, <code>VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT</code>, <code>VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT</code>, <code>VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT</code>, <code>VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT</code>, <code>VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT</code>, or <code>VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkSubpassDependency-srcSubpass-00867",
-          "text": " If <code>srcSubpass</code> is equal to <code>dstSubpass</code> and not all of the stages in <code>srcStageMask</code> and <code>dstStageMask</code> are &amp;amp;lt;&amp;amp;lt;synchronization-framebuffer-regions,framebuffer-space stages&amp;amp;gt;&amp;amp;gt;, the &amp;amp;lt;&amp;amp;lt;synchronization-pipeline-stages-order, logically latest&amp;amp;gt;&amp;amp;gt; pipeline stage in <code>srcStageMask</code> <strong class=\"purple\">must</strong> be &amp;amp;lt;&amp;amp;lt;synchronization-pipeline-stages-order, logically earlier&amp;amp;gt;&amp;amp;gt; than or equal to the &amp;amp;lt;&amp;amp;lt;synchronization-pipeline-stages-order, logically earliest&amp;amp;gt;&amp;amp;gt; pipeline stage in <code>dstStageMask</code>"
-        },
-        {
-          "vuid": "VUID-VkSubpassDependency-srcAccessMask-00868",
-          "text": " Any access flag included in <code>srcAccessMask</code> <strong class=\"purple\">must</strong> be supported by one of the pipeline stages in <code>srcStageMask</code>, as specified in the &amp;amp;lt;&amp;amp;lt;synchronization-access-types-supported, table of supported access types&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-VkSubpassDependency-dstAccessMask-00869",
-          "text": " Any access flag included in <code>dstAccessMask</code> <strong class=\"purple\">must</strong> be supported by one of the pipeline stages in <code>dstStageMask</code>, as specified in the &amp;amp;lt;&amp;amp;lt;synchronization-access-types-supported, table of supported access types&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-VkSubpassDependency-srcStageMask-parameter",
-          "text": " <code>srcStageMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkPipelineStageFlagBits\">VkPipelineStageFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkSubpassDependency-srcStageMask-requiredbitmask",
-          "text": " <code>srcStageMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkSubpassDependency-dstStageMask-parameter",
-          "text": " <code>dstStageMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkPipelineStageFlagBits\">VkPipelineStageFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkSubpassDependency-dstStageMask-requiredbitmask",
-          "text": " <code>dstStageMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkSubpassDependency-srcAccessMask-parameter",
-          "text": " <code>srcAccessMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkAccessFlagBits\">VkAccessFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkSubpassDependency-dstAccessMask-parameter",
-          "text": " <code>dstAccessMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkAccessFlagBits\">VkAccessFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkSubpassDependency-dependencyFlags-parameter",
-          "text": " <code>dependencyFlags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkDependencyFlagBits\">VkDependencyFlagBits</a> values"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_multiview)": [
-        {
-          "vuid": "VUID-VkSubpassDependency-dependencyFlags-00870",
-          "text": " If <code>dependencyFlags</code> includes <code>VK_DEPENDENCY_VIEW_LOCAL_BIT</code>, then both <code>srcSubpass</code> and <code>dstSubpass</code> <strong class=\"purple\">must</strong> not equal <code>VK_SUBPASS_EXTERNAL</code>"
-        },
-        {
-          "vuid": "VUID-VkSubpassDependency-dependencyFlags-00871",
-          "text": " If <code>dependencyFlags</code> includes <code>VK_DEPENDENCY_VIEW_LOCAL_BIT</code>, then the render pass <strong class=\"purple\">must</strong> have multiview enabled"
-        },
-        {
-          "vuid": "VUID-VkSubpassDependency-srcSubpass-00872",
-          "text": " If <code>srcSubpass</code> equals <code>dstSubpass</code> and that subpass has more than one bit set in the view mask, then <code>dependencyFlags</code> <strong class=\"purple\">must</strong> include <code>VK_DEPENDENCY_VIEW_LOCAL_BIT</code>"
-        }
-      ]
-    },
-    "vkDestroyRenderPass": {
-      "core": [
-        {
-          "vuid": "VUID-vkDestroyRenderPass-renderPass-00873",
-          "text": " All submitted commands that refer to <code>renderPass</code> <strong class=\"purple\">must</strong> have completed execution"
-        },
-        {
-          "vuid": "VUID-vkDestroyRenderPass-renderPass-00874",
-          "text": " If <code>VkAllocationCallbacks</code> were provided when <code>renderPass</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
-        },
-        {
-          "vuid": "VUID-vkDestroyRenderPass-renderPass-00875",
-          "text": " If no <code>VkAllocationCallbacks</code> were provided when <code>renderPass</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-vkDestroyRenderPass-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyRenderPass-renderPass-parameter",
-          "text": " If <code>renderPass</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>renderPass</code> <strong class=\"purple\">must</strong> be a valid <code>VkRenderPass</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyRenderPass-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkDestroyRenderPass-renderPass-parent",
-          "text": " If <code>renderPass</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkCreateFramebuffer": {
-      "core": [
-        {
-          "vuid": "VUID-vkCreateFramebuffer-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateFramebuffer-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkFramebufferCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateFramebuffer-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateFramebuffer-pFramebuffer-parameter",
-          "text": " <code>pFramebuffer</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkFramebuffer</code> handle"
-        }
-      ]
-    },
-    "VkFramebufferCreateInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkFramebufferCreateInfo-attachmentCount-00876",
-          "text": " <code>attachmentCount</code> <strong class=\"purple\">must</strong> be equal to the attachment count specified in <code>renderPass</code>"
-        },
-        {
-          "vuid": "VUID-VkFramebufferCreateInfo-pAttachments-00877",
-          "text": " Each element of <code>pAttachments</code> that is used as a color attachment or resolve attachment by <code>renderPass</code> <strong class=\"purple\">must</strong> have been created with a <code>usage</code> value including <code>VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkFramebufferCreateInfo-pAttachments-00878",
-          "text": " Each element of <code>pAttachments</code> that is used as a depth/stencil attachment by <code>renderPass</code> <strong class=\"purple\">must</strong> have been created with a <code>usage</code> value including <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkFramebufferCreateInfo-pAttachments-00879",
-          "text": " Each element of <code>pAttachments</code> that is used as an input attachment by <code>renderPass</code> <strong class=\"purple\">must</strong> have been created with a <code>usage</code> value including <code>VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkFramebufferCreateInfo-pAttachments-00880",
-          "text": " Each element of <code>pAttachments</code> <strong class=\"purple\">must</strong> have been created with an <a href=\"#VkFormat\">VkFormat</a> value that matches the <a href=\"#VkFormat\">VkFormat</a> specified by the corresponding <code>VkAttachmentDescription</code> in <code>renderPass</code>"
-        },
-        {
-          "vuid": "VUID-VkFramebufferCreateInfo-pAttachments-00881",
-          "text": " Each element of <code>pAttachments</code> <strong class=\"purple\">must</strong> have been created with a <code>samples</code> value that matches the <code>samples</code> value specified by the corresponding <code>VkAttachmentDescription</code> in <code>renderPass</code>"
-        },
-        {
-          "vuid": "VUID-VkFramebufferCreateInfo-pAttachments-00882",
-          "text": " Each element of <code>pAttachments</code> <strong class=\"purple\">must</strong> have dimensions at least as large as the corresponding framebuffer dimension"
-        },
-        {
-          "vuid": "VUID-VkFramebufferCreateInfo-pAttachments-00883",
-          "text": " Each element of <code>pAttachments</code> <strong class=\"purple\">must</strong> only specify a single mip level"
-        },
-        {
-          "vuid": "VUID-VkFramebufferCreateInfo-pAttachments-00884",
-          "text": " Each element of <code>pAttachments</code> <strong class=\"purple\">must</strong> have been created with the identity swizzle"
-        },
-        {
-          "vuid": "VUID-VkFramebufferCreateInfo-width-00885",
-          "text": " <code>width</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>."
-        },
-        {
-          "vuid": "VUID-VkFramebufferCreateInfo-width-00886",
-          "text": " <code>width</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxFramebufferWidth</code>"
-        },
-        {
-          "vuid": "VUID-VkFramebufferCreateInfo-height-00887",
-          "text": " <code>height</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>."
-        },
-        {
-          "vuid": "VUID-VkFramebufferCreateInfo-height-00888",
-          "text": " <code>height</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxFramebufferHeight</code>"
-        },
-        {
-          "vuid": "VUID-VkFramebufferCreateInfo-layers-00889",
-          "text": " <code>layers</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>."
-        },
-        {
-          "vuid": "VUID-VkFramebufferCreateInfo-layers-00890",
-          "text": " <code>layers</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxFramebufferLayers</code>"
-        },
-        {
-          "vuid": "VUID-VkFramebufferCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkFramebufferCreateInfo-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkFramebufferCreateInfo-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkFramebufferCreateInfo-renderPass-parameter",
-          "text": " <code>renderPass</code> <strong class=\"purple\">must</strong> be a valid <code>VkRenderPass</code> handle"
-        },
-        {
-          "vuid": "VUID-VkFramebufferCreateInfo-pAttachments-parameter",
-          "text": " If <code>attachmentCount</code> is not <code>0</code>, <code>pAttachments</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>attachmentCount</code> valid <code>VkImageView</code> handles"
-        },
-        {
-          "vuid": "VUID-VkFramebufferCreateInfo-commonparent",
-          "text": " Both of <code>renderPass</code>, and the elements of <code>pAttachments</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_maintenance1)": [
-        {
-          "vuid": "VUID-VkFramebufferCreateInfo-pAttachments-00891",
-          "text": " Each element of <code>pAttachments</code> that is a 2D or 2D array image view taken from a 3D image <strong class=\"purple\">must</strong> not be a depth/stencil format"
-        }
-      ]
-    },
-    "vkDestroyFramebuffer": {
-      "core": [
-        {
-          "vuid": "VUID-vkDestroyFramebuffer-framebuffer-00892",
-          "text": " All submitted commands that refer to <code>framebuffer</code> <strong class=\"purple\">must</strong> have completed execution"
-        },
-        {
-          "vuid": "VUID-vkDestroyFramebuffer-framebuffer-00893",
-          "text": " If <code>VkAllocationCallbacks</code> were provided when <code>framebuffer</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
-        },
-        {
-          "vuid": "VUID-vkDestroyFramebuffer-framebuffer-00894",
-          "text": " If no <code>VkAllocationCallbacks</code> were provided when <code>framebuffer</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-vkDestroyFramebuffer-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyFramebuffer-framebuffer-parameter",
-          "text": " If <code>framebuffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>framebuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkFramebuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyFramebuffer-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkDestroyFramebuffer-framebuffer-parent",
-          "text": " If <code>framebuffer</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkCmdBeginRenderPass": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdBeginRenderPass-initialLayout-00895",
-          "text": " If any of the <code>initialLayout</code> or <code>finalLayout</code> member of the <code>VkAttachmentDescription</code> structures or the <code>layout</code> member of the <code>VkAttachmentReference</code> structures specified when creating the render pass specified in the <code>renderPass</code> member of <code>pRenderPassBegin</code> is <code>VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL</code> then the corresponding attachment image subresource of the framebuffer specified in the <code>framebuffer</code> member of <code>pRenderPassBegin</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT</code> set"
-        },
-        {
-          "vuid": "VUID-vkCmdBeginRenderPass-initialLayout-00897",
-          "text": " If any of the <code>initialLayout</code> or <code>finalLayout</code> member of the <code>VkAttachmentDescription</code> structures or the <code>layout</code> member of the <code>VkAttachmentReference</code> structures specified when creating the render pass specified in the <code>renderPass</code> member of <code>pRenderPassBegin</code> is <code>VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL</code> then the corresponding attachment image subresource of the framebuffer specified in the <code>framebuffer</code> member of <code>pRenderPassBegin</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_SAMPLED_BIT</code> or <code>VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT</code> set"
-        },
-        {
-          "vuid": "VUID-vkCmdBeginRenderPass-initialLayout-00898",
-          "text": " If any of the <code>initialLayout</code> or <code>finalLayout</code> member of the <code>VkAttachmentDescription</code> structures or the <code>layout</code> member of the <code>VkAttachmentReference</code> structures specified when creating the render pass specified in the <code>renderPass</code> member of <code>pRenderPassBegin</code> is <code>VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL</code> then the corresponding attachment image subresource of the framebuffer specified in the <code>framebuffer</code> member of <code>pRenderPassBegin</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_TRANSFER_SRC_BIT</code> set"
-        },
-        {
-          "vuid": "VUID-vkCmdBeginRenderPass-initialLayout-00899",
-          "text": " If any of the <code>initialLayout</code> or <code>finalLayout</code> member of the <code>VkAttachmentDescription</code> structures or the <code>layout</code> member of the <code>VkAttachmentReference</code> structures specified when creating the render pass specified in the <code>renderPass</code> member of <code>pRenderPassBegin</code> is <code>VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL</code> then the corresponding attachment image subresource of the framebuffer specified in the <code>framebuffer</code> member of <code>pRenderPassBegin</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_TRANSFER_DST_BIT</code> set"
-        },
-        {
-          "vuid": "VUID-vkCmdBeginRenderPass-initialLayout-00900",
-          "text": " If any of the <code>initialLayout</code> members of the <code>VkAttachmentDescription</code> structures specified when creating the render pass specified in the <code>renderPass</code> member of <code>pRenderPassBegin</code> is not <code>VK_IMAGE_LAYOUT_UNDEFINED</code>, then each such <code>initialLayout</code> <strong class=\"purple\">must</strong> be equal to the current layout of the corresponding attachment image subresource of the framebuffer specified in the <code>framebuffer</code> member of <code>pRenderPassBegin</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdBeginRenderPass-srcStageMask-00901",
-          "text": " The <code>srcStageMask</code> and <code>dstStageMask</code> members of any element of the <code>pDependencies</code> member of <a href=\"#VkRenderPassCreateInfo\">VkRenderPassCreateInfo</a> used to create <code>renderPass</code> <strong class=\"purple\">must</strong> be supported by the capabilities of the queue family identified by the <code>queueFamilyIndex</code> member of the <a href=\"#VkCommandPoolCreateInfo\">VkCommandPoolCreateInfo</a> used to create the command pool which <code>commandBuffer</code> was allocated from."
-        },
-        {
-          "vuid": "VUID-vkCmdBeginRenderPass-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdBeginRenderPass-pRenderPassBegin-parameter",
-          "text": " <code>pRenderPassBegin</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkRenderPassBeginInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCmdBeginRenderPass-contents-parameter",
-          "text": " <code>contents</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSubpassContents\">VkSubpassContents</a> value"
-        },
-        {
-          "vuid": "VUID-vkCmdBeginRenderPass-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdBeginRenderPass-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
-        },
-        {
-          "vuid": "VUID-vkCmdBeginRenderPass-renderpass",
-          "text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
-        },
-        {
-          "vuid": "VUID-vkCmdBeginRenderPass-bufferlevel",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a primary <code>VkCommandBuffer</code>"
-        }
-      ],
-      "!(VK_VERSION_1_1,VK_KHR_maintenance2)": [
-        {
-          "vuid": "VUID-vkCmdBeginRenderPass-initialLayout-00896",
-          "text": " If any of the <code>initialLayout</code> or <code>finalLayout</code> member of the <code>VkAttachmentDescription</code> structures or the <code>layout</code> member of the <code>VkAttachmentReference</code> structures specified when creating the render pass specified in the <code>renderPass</code> member of <code>pRenderPassBegin</code> is <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL</code>, or <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL</code> then the corresponding attachment image subresource of the framebuffer specified in the <code>framebuffer</code> member of <code>pRenderPassBegin</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code> set"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_maintenance2)": [
-        {
-          "vuid": "VUID-vkCmdBeginRenderPass-initialLayout-01758",
-          "text": " If any of the <code>initialLayout</code> or <code>finalLayout</code> member of the <code>VkAttachmentDescription</code> structures or the <code>layout</code> member of the <code>VkAttachmentReference</code> structures specified when creating the render pass specified in the <code>renderPass</code> member of <code>pRenderPassBegin</code> is <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL</code>, or <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL</code> then the corresponding attachment image subresource of the framebuffer specified in the <code>framebuffer</code> member of <code>pRenderPassBegin</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code> set"
-        }
-      ]
-    },
-    "VkRenderPassBeginInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkRenderPassBeginInfo-clearValueCount-00902",
-          "text": " <code>clearValueCount</code> <strong class=\"purple\">must</strong> be greater than the largest attachment index in <code>renderPass</code> that specifies a <code>loadOp</code> (or <code>stencilLoadOp</code>, if the attachment has a depth/stencil format) of <code>VK_ATTACHMENT_LOAD_OP_CLEAR</code>"
-        },
-        {
-          "vuid": "VUID-VkRenderPassBeginInfo-clearValueCount-00903",
-          "text": " If <code>clearValueCount</code> is not <code>0</code>, <code>pClearValues</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>clearValueCount</code> valid <code>VkClearValue</code> unions"
-        },
-        {
-          "vuid": "VUID-VkRenderPassBeginInfo-renderPass-00904",
-          "text": " <code>renderPass</code> <strong class=\"purple\">must</strong> be &amp;amp;lt;&amp;amp;lt;renderpass-compatibility,compatible&amp;amp;gt;&amp;amp;gt; with the <code>renderPass</code> member of the <code>VkFramebufferCreateInfo</code> structure specified when creating <code>framebuffer</code>."
-        },
-        {
-          "vuid": "VUID-VkRenderPassBeginInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkRenderPassBeginInfo-pNext-pNext",
-          "text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkDeviceGroupRenderPassBeginInfo\">VkDeviceGroupRenderPassBeginInfo</a> or <a href=\"#VkRenderPassSampleLocationsBeginInfoEXT\">VkRenderPassSampleLocationsBeginInfoEXT</a>"
-        },
-        {
-          "vuid": "VUID-VkRenderPassBeginInfo-sType-unique",
-          "text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
-        },
-        {
-          "vuid": "VUID-VkRenderPassBeginInfo-renderPass-parameter",
-          "text": " <code>renderPass</code> <strong class=\"purple\">must</strong> be a valid <code>VkRenderPass</code> handle"
-        },
-        {
-          "vuid": "VUID-VkRenderPassBeginInfo-framebuffer-parameter",
-          "text": " <code>framebuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkFramebuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-VkRenderPassBeginInfo-commonparent",
-          "text": " Both of <code>framebuffer</code>, and <code>renderPass</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ]
-    },
-    "VkRenderPassSampleLocationsBeginInfoEXT": {
-      "(VK_EXT_sample_locations)": [
-        {
-          "vuid": "VUID-VkRenderPassSampleLocationsBeginInfoEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkRenderPassSampleLocationsBeginInfoEXT-pAttachmentInitialSampleLocations-parameter",
-          "text": " If <code>attachmentInitialSampleLocationsCount</code> is not <code>0</code>, <code>pAttachmentInitialSampleLocations</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>attachmentInitialSampleLocationsCount</code> valid <code>VkAttachmentSampleLocationsEXT</code> structures"
-        },
-        {
-          "vuid": "VUID-VkRenderPassSampleLocationsBeginInfoEXT-pPostSubpassSampleLocations-parameter",
-          "text": " If <code>postSubpassSampleLocationsCount</code> is not <code>0</code>, <code>pPostSubpassSampleLocations</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>postSubpassSampleLocationsCount</code> valid <code>VkSubpassSampleLocationsEXT</code> structures"
-        }
-      ]
-    },
-    "VkAttachmentSampleLocationsEXT": {
-      "(VK_EXT_sample_locations)": [
-        {
-          "vuid": "VUID-VkAttachmentSampleLocationsEXT-attachmentIndex-01531",
-          "text": " <code>attachmentIndex</code> <strong class=\"purple\">must</strong> be less than the <code>attachmentCount</code> specified in <a href=\"#VkRenderPassCreateInfo\">VkRenderPassCreateInfo</a> the render pass specified by <a href=\"#VkRenderPassBeginInfo\">VkRenderPassBeginInfo</a>::<code>renderPass</code> was created with"
-        },
-        {
-          "vuid": "VUID-VkAttachmentSampleLocationsEXT-sampleLocationsInfo-parameter",
-          "text": " <code>sampleLocationsInfo</code> <strong class=\"purple\">must</strong> be a valid <code>VkSampleLocationsInfoEXT</code> structure"
-        }
-      ]
-    },
-    "VkSubpassSampleLocationsEXT": {
-      "(VK_EXT_sample_locations)": [
-        {
-          "vuid": "VUID-VkSubpassSampleLocationsEXT-subpassIndex-01532",
-          "text": " <code>subpassIndex</code> <strong class=\"purple\">must</strong> be less than the <code>subpassCount</code> specified in <a href=\"#VkRenderPassCreateInfo\">VkRenderPassCreateInfo</a> the render pass specified by <a href=\"#VkRenderPassBeginInfo\">VkRenderPassBeginInfo</a>::<code>renderPass</code> was created with"
-        },
-        {
-          "vuid": "VUID-VkSubpassSampleLocationsEXT-sampleLocationsInfo-parameter",
-          "text": " <code>sampleLocationsInfo</code> <strong class=\"purple\">must</strong> be a valid <code>VkSampleLocationsInfoEXT</code> structure"
-        }
-      ]
-    },
-    "VkDeviceGroupRenderPassBeginInfo": {
-      "(VK_VERSION_1_1,VK_KHR_device_group)": [
-        {
-          "vuid": "VUID-VkDeviceGroupRenderPassBeginInfo-deviceMask-00905",
-          "text": " <code>deviceMask</code> <strong class=\"purple\">must</strong> be a valid device mask value"
-        },
-        {
-          "vuid": "VUID-VkDeviceGroupRenderPassBeginInfo-deviceMask-00906",
-          "text": " <code>deviceMask</code> <strong class=\"purple\">must</strong> not be zero"
-        },
-        {
-          "vuid": "VUID-VkDeviceGroupRenderPassBeginInfo-deviceMask-00907",
-          "text": " <code>deviceMask</code> <strong class=\"purple\">must</strong> be a subset of the command buffer&#8217;s initial device mask"
-        },
-        {
-          "vuid": "VUID-VkDeviceGroupRenderPassBeginInfo-deviceRenderAreaCount-00908",
-          "text": " <code>deviceRenderAreaCount</code> <strong class=\"purple\">must</strong> either be zero or equal to the number of physical devices in the logical device."
-        },
-        {
-          "vuid": "VUID-VkDeviceGroupRenderPassBeginInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkDeviceGroupRenderPassBeginInfo-pDeviceRenderAreas-parameter",
-          "text": " If <code>deviceRenderAreaCount</code> is not <code>0</code>, <code>pDeviceRenderAreas</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>deviceRenderAreaCount</code> <code>VkRect2D</code> structures"
-        }
-      ]
-    },
-    "vkGetRenderAreaGranularity": {
-      "core": [
-        {
-          "vuid": "VUID-vkGetRenderAreaGranularity-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetRenderAreaGranularity-renderPass-parameter",
-          "text": " <code>renderPass</code> <strong class=\"purple\">must</strong> be a valid <code>VkRenderPass</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetRenderAreaGranularity-pGranularity-parameter",
-          "text": " <code>pGranularity</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkExtent2D</code> structure"
-        },
-        {
-          "vuid": "VUID-vkGetRenderAreaGranularity-renderPass-parent",
-          "text": " <code>renderPass</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkCmdNextSubpass": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdNextSubpass-None-00909",
-          "text": " The current subpass index <strong class=\"purple\">must</strong> be less than the number of subpasses in the render pass minus one"
-        },
-        {
-          "vuid": "VUID-vkCmdNextSubpass-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdNextSubpass-contents-parameter",
-          "text": " <code>contents</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSubpassContents\">VkSubpassContents</a> value"
-        },
-        {
-          "vuid": "VUID-vkCmdNextSubpass-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdNextSubpass-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
-        },
-        {
-          "vuid": "VUID-vkCmdNextSubpass-renderpass",
-          "text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
-        },
-        {
-          "vuid": "VUID-vkCmdNextSubpass-bufferlevel",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a primary <code>VkCommandBuffer</code>"
-        }
-      ]
-    },
-    "vkCmdEndRenderPass": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdEndRenderPass-None-00910",
-          "text": " The current subpass index <strong class=\"purple\">must</strong> be equal to the number of subpasses in the render pass minus one"
-        },
-        {
-          "vuid": "VUID-vkCmdEndRenderPass-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdEndRenderPass-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdEndRenderPass-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
-        },
-        {
-          "vuid": "VUID-vkCmdEndRenderPass-renderpass",
-          "text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
-        },
-        {
-          "vuid": "VUID-vkCmdEndRenderPass-bufferlevel",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a primary <code>VkCommandBuffer</code>"
-        }
-      ]
-    },
-    "vkCreateShaderModule": {
-      "core": [
-        {
-          "vuid": "VUID-vkCreateShaderModule-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateShaderModule-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkShaderModuleCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateShaderModule-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateShaderModule-pShaderModule-parameter",
-          "text": " <code>pShaderModule</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkShaderModule</code> handle"
-        }
-      ]
-    },
-    "VkShaderModuleCreateInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkShaderModuleCreateInfo-codeSize-01085",
-          "text": " <code>codeSize</code> <strong class=\"purple\">must</strong> be greater than 0"
-        },
-        {
-          "vuid": "VUID-VkShaderModuleCreateInfo-pCode-01089",
-          "text": " <code>pCode</code> <strong class=\"purple\">must</strong> declare the <code>Shader</code> capability for SPIR-V code"
-        },
-        {
-          "vuid": "VUID-VkShaderModuleCreateInfo-pCode-01090",
-          "text": " <code>pCode</code> <strong class=\"purple\">must</strong> not declare any capability that is not supported by the API, as described by the &amp;amp;lt;&amp;amp;lt;spirvenv-module-validation, Capabilities&amp;amp;gt;&amp;amp;gt; section of the &amp;amp;lt;&amp;amp;lt;spirvenv-capabilities,SPIR-V Environment&amp;amp;gt;&amp;amp;gt; appendix"
-        },
-        {
-          "vuid": "VUID-VkShaderModuleCreateInfo-pCode-01091",
-          "text": " If <code>pCode</code> declares any of the capabilities listed as <strong class=\"purple\">optional</strong> in the &amp;amp;lt;&amp;amp;lt;spirvenv-capabilities-table,SPIR-V Environment&amp;amp;gt;&amp;amp;gt; appendix, the corresponding feature(s) <strong class=\"purple\">must</strong> be enabled."
-        },
-        {
-          "vuid": "VUID-VkShaderModuleCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkShaderModuleCreateInfo-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkShaderModuleValidationCacheCreateInfoEXT\">VkShaderModuleValidationCacheCreateInfoEXT</a>"
-        },
-        {
-          "vuid": "VUID-VkShaderModuleCreateInfo-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkShaderModuleCreateInfo-pCode-parameter",
-          "text": " <code>pCode</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of \\(codeSize \\over 4\\) <code>uint32_t</code> values"
-        }
-      ],
-      "!(VK_NV_glsl_shader)": [
-        {
-          "vuid": "VUID-VkShaderModuleCreateInfo-codeSize-01086",
-          "text": " <code>codeSize</code> <strong class=\"purple\">must</strong> be a multiple of 4"
-        },
-        {
-          "vuid": "VUID-VkShaderModuleCreateInfo-pCode-01087",
-          "text": " <code>pCode</code> <strong class=\"purple\">must</strong> point to valid SPIR-V code, formatted and packed as described by the &amp;amp;lt;&amp;amp;lt;spirv-spec,Khronos SPIR-V Specification&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-VkShaderModuleCreateInfo-pCode-01088",
-          "text": " <code>pCode</code> <strong class=\"purple\">must</strong> adhere to the validation rules described by the &amp;amp;lt;&amp;amp;lt;spirvenv-module-validation, Validation Rules within a Module&amp;amp;gt;&amp;amp;gt; section of the &amp;amp;lt;&amp;amp;lt;spirvenv-capabilities,SPIR-V Environment&amp;amp;gt;&amp;amp;gt; appendix"
-        }
-      ],
-      "(VK_NV_glsl_shader)": [
-        {
-          "vuid": "VUID-VkShaderModuleCreateInfo-pCode-01376",
-          "text": " If <code>pCode</code> points to SPIR-V code, <code>codeSize</code> <strong class=\"purple\">must</strong> be a multiple of 4"
-        },
-        {
-          "vuid": "VUID-VkShaderModuleCreateInfo-pCode-01377",
-          "text": " <code>pCode</code> <strong class=\"purple\">must</strong> point to either valid SPIR-V code, formatted and packed as described by the <a href=\"#spirv-spec\">Khronos SPIR-V Specification</a> or valid GLSL code which <strong class=\"purple\">must</strong> be written to the GL_KHR_vulkan_glsl extension specification"
-        },
-        {
-          "vuid": "VUID-VkShaderModuleCreateInfo-pCode-01378",
-          "text": " If <code>pCode</code> points to SPIR-V code, that code <strong class=\"purple\">must</strong> adhere to the validation rules described by the &amp;amp;lt;&amp;amp;lt;spirvenv-module-validation, Validation Rules within a Module&amp;amp;gt;&amp;amp;gt; section of the &amp;amp;lt;&amp;amp;lt;spirvenv-capabilities,SPIR-V Environment&amp;amp;gt;&amp;amp;gt; appendix"
-        },
-        {
-          "vuid": "VUID-VkShaderModuleCreateInfo-pCode-01379",
-          "text": " If <code>pCode</code> points to GLSL code, it <strong class=\"purple\">must</strong> be valid GLSL code written to the GL_KHR_vulkan_glsl GLSL extension specification"
-        }
-      ]
-    },
-    "VkShaderModuleValidationCacheCreateInfoEXT": {
-      "(VK_EXT_validation_cache)": [
-        {
-          "vuid": "VUID-VkShaderModuleValidationCacheCreateInfoEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkShaderModuleValidationCacheCreateInfoEXT-validationCache-parameter",
-          "text": " <code>validationCache</code> <strong class=\"purple\">must</strong> be a valid <code>VkValidationCacheEXT</code> handle"
-        }
-      ]
-    },
-    "vkDestroyShaderModule": {
-      "core": [
-        {
-          "vuid": "VUID-vkDestroyShaderModule-shaderModule-01092",
-          "text": " If <code>VkAllocationCallbacks</code> were provided when <code>shaderModule</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
-        },
-        {
-          "vuid": "VUID-vkDestroyShaderModule-shaderModule-01093",
-          "text": " If no <code>VkAllocationCallbacks</code> were provided when <code>shaderModule</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-vkDestroyShaderModule-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyShaderModule-shaderModule-parameter",
-          "text": " If <code>shaderModule</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>shaderModule</code> <strong class=\"purple\">must</strong> be a valid <code>VkShaderModule</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyShaderModule-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkDestroyShaderModule-shaderModule-parent",
-          "text": " If <code>shaderModule</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkCreateValidationCacheEXT": {
-      "(VK_EXT_validation_cache)": [
-        {
-          "vuid": "VUID-vkCreateValidationCacheEXT-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateValidationCacheEXT-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkValidationCacheCreateInfoEXT</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateValidationCacheEXT-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateValidationCacheEXT-pValidationCache-parameter",
-          "text": " <code>pValidationCache</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkValidationCacheEXT</code> handle"
-        }
-      ]
-    },
-    "VkValidationCacheCreateInfoEXT": {
-      "(VK_EXT_validation_cache)": [
-        {
-          "vuid": "VUID-VkValidationCacheCreateInfoEXT-initialDataSize-01534",
-          "text": " If <code>initialDataSize</code> is not <code>0</code>, it <strong class=\"purple\">must</strong> be equal to the size of <code>pInitialData</code>, as returned by <code>vkGetValidationCacheDataEXT</code> when <code>pInitialData</code> was originally retrieved"
-        },
-        {
-          "vuid": "VUID-VkValidationCacheCreateInfoEXT-initialDataSize-01535",
-          "text": " If <code>initialDataSize</code> is not <code>0</code>, <code>pInitialData</code> <strong class=\"purple\">must</strong> have been retrieved from a previous call to <code>vkGetValidationCacheDataEXT</code>"
-        },
-        {
-          "vuid": "VUID-VkValidationCacheCreateInfoEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkValidationCacheCreateInfoEXT-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkValidationCacheCreateInfoEXT-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkValidationCacheCreateInfoEXT-pInitialData-parameter",
-          "text": " If <code>initialDataSize</code> is not <code>0</code>, <code>pInitialData</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>initialDataSize</code> bytes"
-        }
-      ]
-    },
-    "vkMergeValidationCachesEXT": {
-      "(VK_EXT_validation_cache)": [
-        {
-          "vuid": "VUID-vkMergeValidationCachesEXT-dstCache-01536",
-          "text": " <code>dstCache</code> <strong class=\"purple\">must</strong> not appear in the list of source caches"
-        },
-        {
-          "vuid": "VUID-vkMergeValidationCachesEXT-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkMergeValidationCachesEXT-dstCache-parameter",
-          "text": " <code>dstCache</code> <strong class=\"purple\">must</strong> be a valid <code>VkValidationCacheEXT</code> handle"
-        },
-        {
-          "vuid": "VUID-vkMergeValidationCachesEXT-pSrcCaches-parameter",
-          "text": " <code>pSrcCaches</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>srcCacheCount</code> valid <code>VkValidationCacheEXT</code> handles"
-        },
-        {
-          "vuid": "VUID-vkMergeValidationCachesEXT-srcCacheCount-arraylength",
-          "text": " <code>srcCacheCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkMergeValidationCachesEXT-dstCache-parent",
-          "text": " <code>dstCache</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        },
-        {
-          "vuid": "VUID-vkMergeValidationCachesEXT-pSrcCaches-parent",
-          "text": " Each element of <code>pSrcCaches</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkGetValidationCacheDataEXT": {
-      "(VK_EXT_validation_cache)": [
-        {
-          "vuid": "VUID-vkGetValidationCacheDataEXT-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetValidationCacheDataEXT-validationCache-parameter",
-          "text": " <code>validationCache</code> <strong class=\"purple\">must</strong> be a valid <code>VkValidationCacheEXT</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetValidationCacheDataEXT-pDataSize-parameter",
-          "text": " <code>pDataSize</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>size_t</code> value"
-        },
-        {
-          "vuid": "VUID-vkGetValidationCacheDataEXT-pData-parameter",
-          "text": " If the value referenced by <code>pDataSize</code> is not <code>0</code>, and <code>pData</code> is not <code>NULL</code>, <code>pData</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pDataSize</code> bytes"
-        },
-        {
-          "vuid": "VUID-vkGetValidationCacheDataEXT-validationCache-parent",
-          "text": " <code>validationCache</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkDestroyValidationCacheEXT": {
-      "(VK_EXT_validation_cache)": [
-        {
-          "vuid": "VUID-vkDestroyValidationCacheEXT-validationCache-01537",
-          "text": " If <code>VkAllocationCallbacks</code> were provided when <code>validationCache</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
-        },
-        {
-          "vuid": "VUID-vkDestroyValidationCacheEXT-validationCache-01538",
-          "text": " If no <code>VkAllocationCallbacks</code> were provided when <code>validationCache</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-vkDestroyValidationCacheEXT-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyValidationCacheEXT-validationCache-parameter",
-          "text": " If <code>validationCache</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>validationCache</code> <strong class=\"purple\">must</strong> be a valid <code>VkValidationCacheEXT</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyValidationCacheEXT-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkDestroyValidationCacheEXT-validationCache-parent",
-          "text": " If <code>validationCache</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkCreateComputePipelines": {
-      "core": [
-        {
-          "vuid": "VUID-vkCreateComputePipelines-flags-00695",
-          "text": " If the <code>flags</code> member of any element of <code>pCreateInfos</code> contains the <code>VK_PIPELINE_CREATE_DERIVATIVE_BIT</code> flag, and the <code>basePipelineIndex</code> member of that same element is not <code>-1</code>, <code>basePipelineIndex</code> <strong class=\"purple\">must</strong> be less than the index into <code>pCreateInfos</code> that corresponds to that element"
-        },
-        {
-          "vuid": "VUID-vkCreateComputePipelines-flags-00696",
-          "text": " If the <code>flags</code> member of any element of <code>pCreateInfos</code> contains the <code>VK_PIPELINE_CREATE_DERIVATIVE_BIT</code> flag, the base pipeline <strong class=\"purple\">must</strong> have been created with the <code>VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT</code> flag set"
-        },
-        {
-          "vuid": "VUID-vkCreateComputePipelines-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateComputePipelines-pipelineCache-parameter",
-          "text": " If <code>pipelineCache</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>pipelineCache</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipelineCache</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateComputePipelines-pCreateInfos-parameter",
-          "text": " <code>pCreateInfos</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>createInfoCount</code> valid <code>VkComputePipelineCreateInfo</code> structures"
-        },
-        {
-          "vuid": "VUID-vkCreateComputePipelines-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateComputePipelines-pPipelines-parameter",
-          "text": " <code>pPipelines</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>createInfoCount</code> <code>VkPipeline</code> handles"
-        },
-        {
-          "vuid": "VUID-vkCreateComputePipelines-createInfoCount-arraylength",
-          "text": " <code>createInfoCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCreateComputePipelines-pipelineCache-parent",
-          "text": " If <code>pipelineCache</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "VkComputePipelineCreateInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkComputePipelineCreateInfo-flags-00697",
-          "text": " If <code>flags</code> contains the <code>VK_PIPELINE_CREATE_DERIVATIVE_BIT</code> flag, and <code>basePipelineIndex</code> is -1, <code>basePipelineHandle</code> <strong class=\"purple\">must</strong> be a valid handle to a compute <code>VkPipeline</code>"
-        },
-        {
-          "vuid": "VUID-VkComputePipelineCreateInfo-flags-00698",
-          "text": " If <code>flags</code> contains the <code>VK_PIPELINE_CREATE_DERIVATIVE_BIT</code> flag, and <code>basePipelineHandle</code> is <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>basePipelineIndex</code> <strong class=\"purple\">must</strong> be a valid index into the calling command&#8217;s <code>pCreateInfos</code> parameter"
-        },
-        {
-          "vuid": "VUID-VkComputePipelineCreateInfo-flags-00699",
-          "text": " If <code>flags</code> contains the <code>VK_PIPELINE_CREATE_DERIVATIVE_BIT</code> flag, and <code>basePipelineIndex</code> is not -1, <code>basePipelineHandle</code> <strong class=\"purple\">must</strong> be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
-        },
-        {
-          "vuid": "VUID-VkComputePipelineCreateInfo-flags-00700",
-          "text": " If <code>flags</code> contains the <code>VK_PIPELINE_CREATE_DERIVATIVE_BIT</code> flag, and <code>basePipelineHandle</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>basePipelineIndex</code> <strong class=\"purple\">must</strong> be -1"
-        },
-        {
-          "vuid": "VUID-VkComputePipelineCreateInfo-stage-00701",
-          "text": " The <code>stage</code> member of <code>stage</code> <strong class=\"purple\">must</strong> be <code>VK_SHADER_STAGE_COMPUTE_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkComputePipelineCreateInfo-stage-00702",
-          "text": " The shader code for the entry point identified by <code>stage</code> and the rest of the state identified by this structure <strong class=\"purple\">must</strong> adhere to the pipeline linking rules described in the &amp;amp;lt;&amp;amp;lt;interfaces,Shader Interfaces&amp;amp;gt;&amp;amp;gt; chapter"
-        },
-        {
-          "vuid": "VUID-VkComputePipelineCreateInfo-layout-00703",
-          "text": " <code>layout</code> <strong class=\"purple\">must</strong> be &amp;amp;lt;&amp;amp;lt;descriptorsets-pipelinelayout-consistency,consistent&amp;amp;gt;&amp;amp;gt; with the layout of the compute shader specified in <code>stage</code>"
-        },
-        {
-          "vuid": "VUID-VkComputePipelineCreateInfo-layout-01687",
-          "text": " The number of resources in <code>layout</code> accessible to the compute shader stage <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxPerStageResources</code>"
-        },
-        {
-          "vuid": "VUID-VkComputePipelineCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkComputePipelineCreateInfo-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkComputePipelineCreateInfo-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkPipelineCreateFlagBits\">VkPipelineCreateFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkComputePipelineCreateInfo-stage-parameter",
-          "text": " <code>stage</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipelineShaderStageCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-VkComputePipelineCreateInfo-layout-parameter",
-          "text": " <code>layout</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipelineLayout</code> handle"
-        },
-        {
-          "vuid": "VUID-VkComputePipelineCreateInfo-commonparent",
-          "text": " Both of <code>basePipelineHandle</code>, and <code>layout</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ]
-    },
-    "VkPipelineShaderStageCreateInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-00704",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-geometryShader,geometry shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>stage</code> <strong class=\"purple\">must</strong> not be <code>VK_SHADER_STAGE_GEOMETRY_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-00705",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-tessellationShader,tessellation shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>stage</code> <strong class=\"purple\">must</strong> not be <code>VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT</code> or <code>VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-00706",
-          "text": " <code>stage</code> <strong class=\"purple\">must</strong> not be <code>VK_SHADER_STAGE_ALL_GRAPHICS</code>, or <code>VK_SHADER_STAGE_ALL</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineShaderStageCreateInfo-pName-00707",
-          "text": " <code>pName</code> <strong class=\"purple\">must</strong> be the name of an <code>OpEntryPoint</code> in <code>module</code> with an execution model that matches <code>stage</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineShaderStageCreateInfo-maxClipDistances-00708",
-          "text": " If the identified entry point includes any variable in its interface that is declared with the <code>ClipDistance</code> <code>BuiltIn</code> decoration, that variable <strong class=\"purple\">must</strong> not have an array size greater than <code>VkPhysicalDeviceLimits</code>::<code>maxClipDistances</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineShaderStageCreateInfo-maxCullDistances-00709",
-          "text": " If the identified entry point includes any variable in its interface that is declared with the <code>CullDistance</code> <code>BuiltIn</code> decoration, that variable <strong class=\"purple\">must</strong> not have an array size greater than <code>VkPhysicalDeviceLimits</code>::<code>maxCullDistances</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineShaderStageCreateInfo-maxCombinedClipAndCullDistances-00710",
-          "text": " If the identified entry point includes any variables in its interface that are declared with the <code>ClipDistance</code> or <code>CullDistance</code> <code>BuiltIn</code> decoration, those variables <strong class=\"purple\">must</strong> not have array sizes which sum to more than <code>VkPhysicalDeviceLimits</code>::<code>maxCombinedClipAndCullDistances</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineShaderStageCreateInfo-maxSampleMaskWords-00711",
-          "text": " If the identified entry point includes any variable in its interface that is declared with the <code>SampleMask</code> <code>BuiltIn</code> decoration, that variable <strong class=\"purple\">must</strong> not have an array size greater than <code>VkPhysicalDeviceLimits</code>::<code>maxSampleMaskWords</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-00712",
-          "text": " If <code>stage</code> is <code>VK_SHADER_STAGE_VERTEX_BIT</code>, the identified entry point <strong class=\"purple\">must</strong> not include any input variable in its interface that is decorated with <code>CullDistance</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-00713",
-          "text": " If <code>stage</code> is <code>VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT</code> or <code>VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT</code>, and the identified entry point has an <code>OpExecutionMode</code> instruction that specifies a patch size with <code>OutputVertices</code>, the patch size <strong class=\"purple\">must</strong> be greater than <code>0</code> and less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxTessellationPatchSize</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-00714",
-          "text": " If <code>stage</code> is <code>VK_SHADER_STAGE_GEOMETRY_BIT</code>, the identified entry point <strong class=\"purple\">must</strong> have an <code>OpExecutionMode</code> instruction that specifies a maximum output vertex count that is greater than <code>0</code> and less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxGeometryOutputVertices</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-00715",
-          "text": " If <code>stage</code> is <code>VK_SHADER_STAGE_GEOMETRY_BIT</code>, the identified entry point <strong class=\"purple\">must</strong> have an <code>OpExecutionMode</code> instruction that specifies an invocation count that is greater than <code>0</code> and less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxGeometryShaderInvocations</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-00716",
-          "text": " If <code>stage</code> is <code>VK_SHADER_STAGE_GEOMETRY_BIT</code>, and the identified entry point writes to <code>Layer</code> for any primitive, it <strong class=\"purple\">must</strong> write the same value to <code>Layer</code> for all vertices of a given primitive"
-        },
-        {
-          "vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-00717",
-          "text": " If <code>stage</code> is <code>VK_SHADER_STAGE_GEOMETRY_BIT</code>, and the identified entry point writes to <code>ViewportIndex</code> for any primitive, it <strong class=\"purple\">must</strong> write the same value to <code>ViewportIndex</code> for all vertices of a given primitive"
-        },
-        {
-          "vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-00718",
-          "text": " If <code>stage</code> is <code>VK_SHADER_STAGE_FRAGMENT_BIT</code>, the identified entry point <strong class=\"purple\">must</strong> not include any output variables in its interface decorated with <code>CullDistance</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-00719",
-          "text": " If <code>stage</code> is <code>VK_SHADER_STAGE_FRAGMENT_BIT</code>, and the identified entry point writes to <code>FragDepth</code> in any execution path, it <strong class=\"purple\">must</strong> write to <code>FragDepth</code> in all execution paths"
-        },
-        {
-          "vuid": "VUID-VkPipelineShaderStageCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineShaderStageCreateInfo-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineShaderStageCreateInfo-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-parameter",
-          "text": " <code>stage</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkShaderStageFlagBits\">VkShaderStageFlagBits</a> value"
-        },
-        {
-          "vuid": "VUID-VkPipelineShaderStageCreateInfo-module-parameter",
-          "text": " <code>module</code> <strong class=\"purple\">must</strong> be a valid <code>VkShaderModule</code> handle"
-        },
-        {
-          "vuid": "VUID-VkPipelineShaderStageCreateInfo-pName-parameter",
-          "text": " <code>pName</code> <strong class=\"purple\">must</strong> be a null-terminated UTF-8 string"
-        },
-        {
-          "vuid": "VUID-VkPipelineShaderStageCreateInfo-pSpecializationInfo-parameter",
-          "text": " If <code>pSpecializationInfo</code> is not <code>NULL</code>, <code>pSpecializationInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkSpecializationInfo</code> structure"
-        }
-      ],
-      "(VK_EXT_shader_stencil_export)": [
-        {
-          "vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-01511",
-          "text": " If <code>stage</code> is <code>VK_SHADER_STAGE_FRAGMENT_BIT</code>, and the identified entry point writes to <code>FragStencilRefEXT</code> in any execution path, it <strong class=\"purple\">must</strong> write to <code>FragStencilRefEXT</code> in all execution paths"
-        }
-      ]
-    },
-    "vkCreateGraphicsPipelines": {
-      "core": [
-        {
-          "vuid": "VUID-vkCreateGraphicsPipelines-flags-00720",
-          "text": " If the <code>flags</code> member of any element of <code>pCreateInfos</code> contains the <code>VK_PIPELINE_CREATE_DERIVATIVE_BIT</code> flag, and the <code>basePipelineIndex</code> member of that same element is not <code>-1</code>, <code>basePipelineIndex</code> <strong class=\"purple\">must</strong> be less than the index into <code>pCreateInfos</code> that corresponds to that element"
-        },
-        {
-          "vuid": "VUID-vkCreateGraphicsPipelines-flags-00721",
-          "text": " If the <code>flags</code> member of any element of <code>pCreateInfos</code> contains the <code>VK_PIPELINE_CREATE_DERIVATIVE_BIT</code> flag, the base pipeline <strong class=\"purple\">must</strong> have been created with the <code>VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT</code> flag set"
-        },
-        {
-          "vuid": "VUID-vkCreateGraphicsPipelines-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateGraphicsPipelines-pipelineCache-parameter",
-          "text": " If <code>pipelineCache</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>pipelineCache</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipelineCache</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateGraphicsPipelines-pCreateInfos-parameter",
-          "text": " <code>pCreateInfos</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>createInfoCount</code> valid <code>VkGraphicsPipelineCreateInfo</code> structures"
-        },
-        {
-          "vuid": "VUID-vkCreateGraphicsPipelines-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateGraphicsPipelines-pPipelines-parameter",
-          "text": " <code>pPipelines</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>createInfoCount</code> <code>VkPipeline</code> handles"
-        },
-        {
-          "vuid": "VUID-vkCreateGraphicsPipelines-createInfoCount-arraylength",
-          "text": " <code>createInfoCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCreateGraphicsPipelines-pipelineCache-parent",
-          "text": " If <code>pipelineCache</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "VkGraphicsPipelineCreateInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-00722",
-          "text": " If <code>flags</code> contains the <code>VK_PIPELINE_CREATE_DERIVATIVE_BIT</code> flag, and <code>basePipelineIndex</code> is -1, <code>basePipelineHandle</code> <strong class=\"purple\">must</strong> be a valid handle to a graphics <code>VkPipeline</code>"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-00723",
-          "text": " If <code>flags</code> contains the <code>VK_PIPELINE_CREATE_DERIVATIVE_BIT</code> flag, and <code>basePipelineHandle</code> is <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>basePipelineIndex</code> <strong class=\"purple\">must</strong> be a valid index into the calling command&#8217;s <code>pCreateInfos</code> parameter"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-00724",
-          "text": " If <code>flags</code> contains the <code>VK_PIPELINE_CREATE_DERIVATIVE_BIT</code> flag, and <code>basePipelineIndex</code> is not -1, <code>basePipelineHandle</code> <strong class=\"purple\">must</strong> be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-00725",
-          "text": " If <code>flags</code> contains the <code>VK_PIPELINE_CREATE_DERIVATIVE_BIT</code> flag, and <code>basePipelineHandle</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>basePipelineIndex</code> <strong class=\"purple\">must</strong> be -1"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-stage-00726",
-          "text": " The <code>stage</code> member of each element of <code>pStages</code> <strong class=\"purple\">must</strong> be unique"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-stage-00727",
-          "text": " The <code>stage</code> member of one element of <code>pStages</code> <strong class=\"purple\">must</strong> be <code>VK_SHADER_STAGE_VERTEX_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-stage-00728",
-          "text": " The <code>stage</code> member of each element of <code>pStages</code> <strong class=\"purple\">must</strong> not be <code>VK_SHADER_STAGE_COMPUTE_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00729",
-          "text": " If <code>pStages</code> includes a tessellation control shader stage, it <strong class=\"purple\">must</strong> include a tessellation evaluation shader stage"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00730",
-          "text": " If <code>pStages</code> includes a tessellation evaluation shader stage, it <strong class=\"purple\">must</strong> include a tessellation control shader stage"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00731",
-          "text": " If <code>pStages</code> includes a tessellation control shader stage and a tessellation evaluation shader stage, <code>pTessellationState</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPipelineTessellationStateCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00732",
-          "text": " If <code>pStages</code> includes tessellation shader stages, the shader code of at least one stage <strong class=\"purple\">must</strong> contain an <code>OpExecutionMode</code> instruction that specifies the type of subdivision in the pipeline"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00733",
-          "text": " If <code>pStages</code> includes tessellation shader stages, and the shader code of both stages contain an <code>OpExecutionMode</code> instruction that specifies the type of subdivision in the pipeline, they <strong class=\"purple\">must</strong> both specify the same subdivision mode"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00734",
-          "text": " If <code>pStages</code> includes tessellation shader stages, the shader code of at least one stage <strong class=\"purple\">must</strong> contain an <code>OpExecutionMode</code> instruction that specifies the output patch size in the pipeline"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00735",
-          "text": " If <code>pStages</code> includes tessellation shader stages, and the shader code of both contain an <code>OpExecutionMode</code> instruction that specifies the out patch size in the pipeline, they <strong class=\"purple\">must</strong> both specify the same patch size"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00736",
-          "text": " If <code>pStages</code> includes tessellation shader stages, the <code>topology</code> member of <code>pInputAssembly</code> <strong class=\"purple\">must</strong> be <code>VK_PRIMITIVE_TOPOLOGY_PATCH_LIST</code>"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-topology-00737",
-          "text": " If the <code>topology</code> member of <code>pInputAssembly</code> is <code>VK_PRIMITIVE_TOPOLOGY_PATCH_LIST</code>, <code>pStages</code> <strong class=\"purple\">must</strong> include tessellation shader stages"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00738",
-          "text": " If <code>pStages</code> includes a geometry shader stage, and does not include any tessellation shader stages, its shader code <strong class=\"purple\">must</strong> contain an <code>OpExecutionMode</code> instruction that specifies an input primitive type that is &amp;amp;lt;&amp;amp;lt;shaders-geometry-execution, compatible&amp;amp;gt;&amp;amp;gt; with the primitive topology specified in <code>pInputAssembly</code>"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00739",
-          "text": " If <code>pStages</code> includes a geometry shader stage, and also includes tessellation shader stages, its shader code <strong class=\"purple\">must</strong> contain an <code>OpExecutionMode</code> instruction that specifies an input primitive type that is &amp;amp;lt;&amp;amp;lt;shaders-geometry-execution, compatible&amp;amp;gt;&amp;amp;gt; with the primitive topology that is output by the tessellation stages"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00740",
-          "text": " If <code>pStages</code> includes a fragment shader stage and a geometry shader stage, and the fragment shader code reads from an input variable that is decorated with <code>PrimitiveID</code>, then the geometry shader code <strong class=\"purple\">must</strong> write to a matching output variable, decorated with <code>PrimitiveID</code>, in all execution paths"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00741",
-          "text": " If <code>pStages</code> includes a fragment shader stage, its shader code <strong class=\"purple\">must</strong> not read from any input attachment that is defined as <code>VK_ATTACHMENT_UNUSED</code> in <code>subpass</code>"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00742",
-          "text": " The shader code for the entry points identified by <code>pStages</code>, and the rest of the state identified by this structure <strong class=\"purple\">must</strong> adhere to the pipeline linking rules described in the &amp;amp;lt;&amp;amp;lt;interfaces,Shader Interfaces&amp;amp;gt;&amp;amp;gt; chapter"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-subpass-00745",
-          "text": " If rasterization is not disabled and the subpass uses color attachments, then for each color attachment in the subpass the <code>blendEnable</code> member of the corresponding element of the <code>pAttachment</code> member of <code>pColorBlendState</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code> if the <code>format</code> of the attachment does not support color blend operations, as specified by the <code>VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT</code> flag in <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code>"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-attachmentCount-00746",
-          "text": " If rasterization is not disabled and the subpass uses color attachments, the <code>attachmentCount</code> member of <code>pColorBlendState</code> <strong class=\"purple\">must</strong> be equal to the <code>colorAttachmentCount</code> used to create <code>subpass</code>"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00747",
-          "text": " If no element of the <code>pDynamicStates</code> member of <code>pDynamicState</code> is <code>VK_DYNAMIC_STATE_VIEWPORT</code>, the <code>pViewports</code> member of <code>pViewportState</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pViewportState</code>::<code>viewportCount</code> <code>VkViewport</code> structures"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00748",
-          "text": " If no element of the <code>pDynamicStates</code> member of <code>pDynamicState</code> is <code>VK_DYNAMIC_STATE_SCISSOR</code>, the <code>pScissors</code> member of <code>pViewportState</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pViewportState</code>::<code>scissorCount</code> <code>VkRect2D</code> structures"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00749",
-          "text": " If the wide lines feature is not enabled, and no element of the <code>pDynamicStates</code> member of <code>pDynamicState</code> is <code>VK_DYNAMIC_STATE_LINE_WIDTH</code>, the <code>lineWidth</code> member of <code>pRasterizationState</code> <strong class=\"purple\">must</strong> be <code>1.0</code>"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00750",
-          "text": " If the <code>rasterizerDiscardEnable</code> member of <code>pRasterizationState</code> is <code>VK_FALSE</code>, <code>pViewportState</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPipelineViewportStateCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00751",
-          "text": " If the <code>rasterizerDiscardEnable</code> member of <code>pRasterizationState</code> is <code>VK_FALSE</code>, <code>pMultisampleState</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPipelineMultisampleStateCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00752",
-          "text": " If the <code>rasterizerDiscardEnable</code> member of <code>pRasterizationState</code> is <code>VK_FALSE</code>, and <code>subpass</code> uses a depth/stencil attachment, <code>pDepthStencilState</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPipelineDepthStencilStateCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00753",
-          "text": " If the <code>rasterizerDiscardEnable</code> member of <code>pRasterizationState</code> is <code>VK_FALSE</code>, and <code>subpass</code> uses color attachments, <code>pColorBlendState</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPipelineColorBlendStateCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00754",
-          "text": " If the depth bias clamping feature is not enabled, no element of the <code>pDynamicStates</code> member of <code>pDynamicState</code> is <code>VK_DYNAMIC_STATE_DEPTH_BIAS</code>, and the <code>depthBiasEnable</code> member of <code>pRasterizationState</code> is <code>VK_TRUE</code>, the <code>depthBiasClamp</code> member of <code>pRasterizationState</code> <strong class=\"purple\">must</strong> be <code>0.0</code>"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-layout-00756",
-          "text": " <code>layout</code> <strong class=\"purple\">must</strong> be &amp;amp;lt;&amp;amp;lt;descriptorsets-pipelinelayout-consistency,consistent&amp;amp;gt;&amp;amp;gt; with all shaders specified in <code>pStages</code>"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-subpass-00758",
-          "text": " If <code>subpass</code> does not use any color and/or depth/stencil attachments, then the <code>rasterizationSamples</code> member of <code>pMultisampleState</code> <strong class=\"purple\">must</strong> follow the rules for a &amp;amp;lt;&amp;amp;lt;renderpass-noattachments, zero-attachment subpass&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-subpass-00759",
-          "text": " <code>subpass</code> <strong class=\"purple\">must</strong> be a valid subpass within <code>renderPass</code>"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-layout-01688",
-          "text": " The number of resources in <code>layout</code> accessible to each shader stage that is used by the pipeline <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxPerStageResources</code>"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkPipelineDiscardRectangleStateCreateInfoEXT\">VkPipelineDiscardRectangleStateCreateInfoEXT</a>"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkPipelineCreateFlagBits\">VkPipelineCreateFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-parameter",
-          "text": " <code>pStages</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>stageCount</code> valid <code>VkPipelineShaderStageCreateInfo</code> structures"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-pVertexInputState-parameter",
-          "text": " <code>pVertexInputState</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPipelineVertexInputStateCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-pInputAssemblyState-parameter",
-          "text": " <code>pInputAssemblyState</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPipelineInputAssemblyStateCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-pRasterizationState-parameter",
-          "text": " <code>pRasterizationState</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPipelineRasterizationStateCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicState-parameter",
-          "text": " If <code>pDynamicState</code> is not <code>NULL</code>, <code>pDynamicState</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPipelineDynamicStateCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-layout-parameter",
-          "text": " <code>layout</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipelineLayout</code> handle"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-parameter",
-          "text": " <code>renderPass</code> <strong class=\"purple\">must</strong> be a valid <code>VkRenderPass</code> handle"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-stageCount-arraylength",
-          "text": " <code>stageCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-commonparent",
-          "text": " Each of <code>basePipelineHandle</code>, <code>layout</code>, and <code>renderPass</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ],
-      "!(VK_VERSION_1_1,VK_KHR_maintenance2)": [
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-subpass-00743",
-          "text": " If rasterization is not disabled and <code>subpass</code> uses a depth/stencil attachment in <code>renderPass</code> that has a layout of <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL</code> in the <code>VkAttachmentReference</code> defined by <code>subpass</code>, the <code>depthWriteEnable</code> member of <code>pDepthStencilState</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-subpass-00744",
-          "text": " If rasterization is not disabled and <code>subpass</code> uses a depth/stencil attachment in <code>renderPass</code> that has a layout of <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL</code> in the <code>VkAttachmentReference</code> defined by <code>subpass</code>, the <code>failOp</code>, <code>passOp</code> and <code>depthFailOp</code> members of each of the <code>front</code> and <code>back</code> members of <code>pDepthStencilState</code> <strong class=\"purple\">must</strong> be <code>VK_STENCIL_OP_KEEP</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_maintenance2)": [
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-subpass-01756",
-          "text": " If rasterization is not disabled and <code>subpass</code> uses a depth/stencil attachment in <code>renderPass</code> that has a layout of <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL</code> in the <code>VkAttachmentReference</code> defined by <code>subpass</code>, the <code>depthWriteEnable</code> member of <code>pDepthStencilState</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-subpass-01757",
-          "text": " If rasterization is not disabled and <code>subpass</code> uses a depth/stencil attachment in <code>renderPass</code> that has a layout of <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL</code> in the <code>VkAttachmentReference</code> defined by <code>subpass</code>, the <code>failOp</code>, <code>passOp</code> and <code>depthFailOp</code> members of each of the <code>front</code> and <code>back</code> members of <code>pDepthStencilState</code> <strong class=\"purple\">must</strong> be <code>VK_STENCIL_OP_KEEP</code>"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-01565",
-          "text": " If <code>pStages</code> includes a fragment shader stage and an input attachment was referenced by the <a href=\"#VkRenderPassInputAttachmentAspectCreateInfo\">VkRenderPassInputAttachmentAspectCreateInfo</a> at <code>renderPass</code> create time, its shader code <strong class=\"purple\">must</strong> not read from any aspect that was not specified in the <code>aspectMask</code> of the corresponding <a href=\"#VkInputAttachmentAspectReference\">VkInputAttachmentAspectReference</a> structure."
-        }
-      ],
-      "!(VK_EXT_depth_range_unrestricted)": [
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00755",
-          "text": " If no element of the <code>pDynamicStates</code> member of <code>pDynamicState</code> is <code>VK_DYNAMIC_STATE_DEPTH_BOUNDS</code>, and the <code>depthBoundsTestEnable</code> member of <code>pDepthStencilState</code> is <code>VK_TRUE</code>, the <code>minDepthBounds</code> and <code>maxDepthBounds</code> members of <code>pDepthStencilState</code> <strong class=\"purple\">must</strong> be between <code>0.0</code> and <code>1.0</code>, inclusive"
-        }
-      ],
-      "(VK_EXT_depth_range_unrestricted)": [
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00755",
-          "text": " If the <code><a href=\"#VK_EXT_depth_range_unrestricted\">VK_EXT_depth_range_unrestricted</a></code> extension is not enabled and no element of the <code>pDynamicStates</code> member of <code>pDynamicState</code> is <code>VK_DYNAMIC_STATE_DEPTH_BOUNDS</code>, and the <code>depthBoundsTestEnable</code> member of <code>pDepthStencilState</code> is <code>VK_TRUE</code>, the <code>minDepthBounds</code> and <code>maxDepthBounds</code> members of <code>pDepthStencilState</code> <strong class=\"purple\">must</strong> be between <code>0.0</code> and <code>1.0</code>, inclusive"
-        }
-      ],
-      "(VK_EXT_sample_locations)": [
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-01521",
-          "text": " If no element of the <code>pDynamicStates</code> member of <code>pDynamicState</code> is <code>VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT</code>, and the <code>sampleLocationsEnable</code> member of a <a href=\"#VkPipelineSampleLocationsStateCreateInfoEXT\">VkPipelineSampleLocationsStateCreateInfoEXT</a> structure chained to the <code>pNext</code> chain of <code>pMultisampleState</code> is <code>VK_TRUE</code>, <code>sampleLocationsInfo.sampleLocationGridSize.width</code> <strong class=\"purple\">must</strong> evenly divide <a href=\"#VkMultisamplePropertiesEXT\">VkMultisamplePropertiesEXT</a>::<code>sampleLocationGridSize.width</code> as returned by <a href=\"#vkGetPhysicalDeviceMultisamplePropertiesEXT\">vkGetPhysicalDeviceMultisamplePropertiesEXT</a> with a <code>samples</code> parameter equaling <code>rasterizationSamples</code>"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-01522",
-          "text": " If no element of the <code>pDynamicStates</code> member of <code>pDynamicState</code> is <code>VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT</code>, and the <code>sampleLocationsEnable</code> member of a <a href=\"#VkPipelineSampleLocationsStateCreateInfoEXT\">VkPipelineSampleLocationsStateCreateInfoEXT</a> structure chained to the <code>pNext</code> chain of <code>pMultisampleState</code> is <code>VK_TRUE</code>, <code>sampleLocationsInfo.sampleLocationGridSize.height</code> <strong class=\"purple\">must</strong> evenly divide <a href=\"#VkMultisamplePropertiesEXT\">VkMultisamplePropertiesEXT</a>::<code>sampleLocationGridSize.height</code> as returned by <a href=\"#vkGetPhysicalDeviceMultisamplePropertiesEXT\">vkGetPhysicalDeviceMultisamplePropertiesEXT</a> with a <code>samples</code> parameter equaling <code>rasterizationSamples</code>"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-01523",
-          "text": " If no element of the <code>pDynamicStates</code> member of <code>pDynamicState</code> is <code>VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT</code>, and the <code>sampleLocationsEnable</code> member of a <a href=\"#VkPipelineSampleLocationsStateCreateInfoEXT\">VkPipelineSampleLocationsStateCreateInfoEXT</a> structure chained to the <code>pNext</code> chain of <code>pMultisampleState</code> is <code>VK_TRUE</code>, <code>sampleLocationsInfo.sampleLocationsPerPixel</code> <strong class=\"purple\">must</strong> equal <code>rasterizationSamples</code>"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-sampleLocationsEnable-01524",
-          "text": " If the <code>sampleLocationsEnable</code> member of a <a href=\"#VkPipelineSampleLocationsStateCreateInfoEXT\">VkPipelineSampleLocationsStateCreateInfoEXT</a> structure chained to the <code>pNext</code> chain of <code>pMultisampleState</code> is <code>VK_TRUE</code>, the fragment shader code <strong class=\"purple\">must</strong> not statically use the extended instruction <code>InterpolateAtSample</code>"
-        }
-      ],
-      "!(VK_AMD_mixed_attachment_samples)+!(VK_NV_framebuffer_mixed_samples)": [
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-subpass-00757",
-          "text": " If <code>subpass</code> uses color and/or depth/stencil attachments, then the <code>rasterizationSamples</code> member of <code>pMultisampleState</code> <strong class=\"purple\">must</strong> be the same as the sample count for those subpass attachments"
-        }
-      ],
-      "(VK_AMD_mixed_attachment_samples)": [
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-subpass-01505",
-          "text": " If <code>subpass</code> uses color and/or depth/stencil attachments, then the <code>rasterizationSamples</code> member of <code>pMultisampleState</code> <strong class=\"purple\">must</strong> equal the maximum of the sample counts of those subpass attachments"
-        }
-      ],
-      "(VK_NV_framebuffer_mixed_samples)": [
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-subpass-01411",
-          "text": " If <code>subpass</code> has a depth/stencil attachment and depth test, stencil test, or depth bounds test are enabled, then the <code>rasterizationSamples</code> member of <code>pMultisampleState</code> <strong class=\"purple\">must</strong> be the same as the sample count of the depth/stencil attachment"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-subpass-01412",
-          "text": " If <code>subpass</code> has any color attachments, then the <code>rasterizationSamples</code> member of <code>pMultisampleState</code> <strong class=\"purple\">must</strong> be greater than or equal to the sample count for those subpass attachments"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_multiview)": [
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-00760",
-          "text": " If the <code>renderPass</code> has multiview enabled and <code>subpass</code> has more than one bit set in the view mask and <code>multiviewTessellationShader</code> is not enabled, then <code>pStages</code> <strong class=\"purple\">must</strong> not include tessellation shaders."
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-00761",
-          "text": " If the <code>renderPass</code> has multiview enabled and <code>subpass</code> has more than one bit set in the view mask and <code>multiviewGeometryShader</code> is not enabled, then <code>pStages</code> <strong class=\"purple\">must</strong> not include a geometry shader."
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-00762",
-          "text": " If the <code>renderPass</code> has multiview enabled and <code>subpass</code> has more than one bit set in the view mask, shaders in the pipeline <strong class=\"purple\">must</strong> not write to the <code>Layer</code> built-in output"
-        },
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-00763",
-          "text": " If the <code>renderPass</code> has multiview enabled, then all shaders <strong class=\"purple\">must</strong> not include variables decorated with the <code>Layer</code> built-in decoration in their interfaces."
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_device_group)": [
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-00764",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> not contain the <code>VK_PIPELINE_CREATE_DISPATCH_BASE</code> flag."
-        }
-      ],
-      "(VK_NV_clip_space_w_scaling)": [
-        {
-          "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-01715",
-          "text": " If no element of the <code>pDynamicStates</code> member of <code>pDynamicState</code> is <code>VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV</code>, and the <code>viewportWScalingEnable</code> member of a <a href=\"#VkPipelineViewportWScalingStateCreateInfoNV\">VkPipelineViewportWScalingStateCreateInfoNV</a> structure, chained to the <code>pNext</code> chain of <code>pViewportState</code>, is <code>VK_TRUE</code>, the <code>pViewportWScalings</code> member of the <a href=\"#VkPipelineViewportWScalingStateCreateInfoNV\">VkPipelineViewportWScalingStateCreateInfoNV</a> <strong class=\"purple\">must</strong> be a pointer to an array of <a href=\"#VkPipelineViewportWScalingStateCreateInfoNV\">VkPipelineViewportWScalingStateCreateInfoNV</a>::<code>viewportCount</code> valid <a href=\"#VkViewportWScalingNV\">VkViewportWScalingNV</a> structures"
-        }
-      ]
-    },
-    "VkPipelineDynamicStateCreateInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkPipelineDynamicStateCreateInfo-pDynamicStates-01442",
-          "text": " Each element of <code>pDynamicStates</code> <strong class=\"purple\">must</strong> be unique"
-        },
-        {
-          "vuid": "VUID-VkPipelineDynamicStateCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineDynamicStateCreateInfo-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineDynamicStateCreateInfo-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineDynamicStateCreateInfo-pDynamicStates-parameter",
-          "text": " <code>pDynamicStates</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>dynamicStateCount</code> valid <a href=\"#VkDynamicState\">VkDynamicState</a> values"
-        },
-        {
-          "vuid": "VUID-VkPipelineDynamicStateCreateInfo-dynamicStateCount-arraylength",
-          "text": " <code>dynamicStateCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ]
-    },
-    "vkDestroyPipeline": {
-      "core": [
-        {
-          "vuid": "VUID-vkDestroyPipeline-pipeline-00765",
-          "text": " All submitted commands that refer to <code>pipeline</code> <strong class=\"purple\">must</strong> have completed execution"
-        },
-        {
-          "vuid": "VUID-vkDestroyPipeline-pipeline-00766",
-          "text": " If <code>VkAllocationCallbacks</code> were provided when <code>pipeline</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
-        },
-        {
-          "vuid": "VUID-vkDestroyPipeline-pipeline-00767",
-          "text": " If no <code>VkAllocationCallbacks</code> were provided when <code>pipeline</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-vkDestroyPipeline-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyPipeline-pipeline-parameter",
-          "text": " If <code>pipeline</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>pipeline</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipeline</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyPipeline-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkDestroyPipeline-pipeline-parent",
-          "text": " If <code>pipeline</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkCreatePipelineCache": {
-      "core": [
-        {
-          "vuid": "VUID-vkCreatePipelineCache-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreatePipelineCache-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPipelineCacheCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreatePipelineCache-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreatePipelineCache-pPipelineCache-parameter",
-          "text": " <code>pPipelineCache</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkPipelineCache</code> handle"
-        }
-      ]
-    },
-    "VkPipelineCacheCreateInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkPipelineCacheCreateInfo-initialDataSize-00768",
-          "text": " If <code>initialDataSize</code> is not <code>0</code>, it <strong class=\"purple\">must</strong> be equal to the size of <code>pInitialData</code>, as returned by <code>vkGetPipelineCacheData</code> when <code>pInitialData</code> was originally retrieved"
-        },
-        {
-          "vuid": "VUID-VkPipelineCacheCreateInfo-initialDataSize-00769",
-          "text": " If <code>initialDataSize</code> is not <code>0</code>, <code>pInitialData</code> <strong class=\"purple\">must</strong> have been retrieved from a previous call to <code>vkGetPipelineCacheData</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineCacheCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineCacheCreateInfo-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineCacheCreateInfo-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineCacheCreateInfo-pInitialData-parameter",
-          "text": " If <code>initialDataSize</code> is not <code>0</code>, <code>pInitialData</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>initialDataSize</code> bytes"
-        }
-      ]
-    },
-    "vkMergePipelineCaches": {
-      "core": [
-        {
-          "vuid": "VUID-vkMergePipelineCaches-dstCache-00770",
-          "text": " <code>dstCache</code> <strong class=\"purple\">must</strong> not appear in the list of source caches"
-        },
-        {
-          "vuid": "VUID-vkMergePipelineCaches-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkMergePipelineCaches-dstCache-parameter",
-          "text": " <code>dstCache</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipelineCache</code> handle"
-        },
-        {
-          "vuid": "VUID-vkMergePipelineCaches-pSrcCaches-parameter",
-          "text": " <code>pSrcCaches</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>srcCacheCount</code> valid <code>VkPipelineCache</code> handles"
-        },
-        {
-          "vuid": "VUID-vkMergePipelineCaches-srcCacheCount-arraylength",
-          "text": " <code>srcCacheCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkMergePipelineCaches-dstCache-parent",
-          "text": " <code>dstCache</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        },
-        {
-          "vuid": "VUID-vkMergePipelineCaches-pSrcCaches-parent",
-          "text": " Each element of <code>pSrcCaches</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkGetPipelineCacheData": {
-      "core": [
-        {
-          "vuid": "VUID-vkGetPipelineCacheData-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPipelineCacheData-pipelineCache-parameter",
-          "text": " <code>pipelineCache</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipelineCache</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPipelineCacheData-pDataSize-parameter",
-          "text": " <code>pDataSize</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>size_t</code> value"
-        },
-        {
-          "vuid": "VUID-vkGetPipelineCacheData-pData-parameter",
-          "text": " If the value referenced by <code>pDataSize</code> is not <code>0</code>, and <code>pData</code> is not <code>NULL</code>, <code>pData</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pDataSize</code> bytes"
-        },
-        {
-          "vuid": "VUID-vkGetPipelineCacheData-pipelineCache-parent",
-          "text": " <code>pipelineCache</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkDestroyPipelineCache": {
-      "core": [
-        {
-          "vuid": "VUID-vkDestroyPipelineCache-pipelineCache-00771",
-          "text": " If <code>VkAllocationCallbacks</code> were provided when <code>pipelineCache</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
-        },
-        {
-          "vuid": "VUID-vkDestroyPipelineCache-pipelineCache-00772",
-          "text": " If no <code>VkAllocationCallbacks</code> were provided when <code>pipelineCache</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-vkDestroyPipelineCache-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyPipelineCache-pipelineCache-parameter",
-          "text": " If <code>pipelineCache</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>pipelineCache</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipelineCache</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyPipelineCache-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkDestroyPipelineCache-pipelineCache-parent",
-          "text": " If <code>pipelineCache</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "VkSpecializationInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkSpecializationInfo-offset-00773",
-          "text": " The <code>offset</code> member of each element of <code>pMapEntries</code> <strong class=\"purple\">must</strong> be less than <code>dataSize</code>"
-        },
-        {
-          "vuid": "VUID-VkSpecializationInfo-pMapEntries-00774",
-          "text": " The <code>size</code> member of each element of <code>pMapEntries</code> <strong class=\"purple\">must</strong> be less than or equal to <code>dataSize</code> minus <code>offset</code>"
-        },
-        {
-          "vuid": "VUID-VkSpecializationInfo-mapEntryCount-00775",
-          "text": " If <code>mapEntryCount</code> is not <code>0</code>, <code>pMapEntries</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>mapEntryCount</code> valid <code>VkSpecializationMapEntry</code> structures"
-        },
-        {
-          "vuid": "VUID-VkSpecializationInfo-pData-parameter",
-          "text": " If <code>dataSize</code> is not <code>0</code>, <code>pData</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>dataSize</code> bytes"
-        }
-      ]
-    },
-    "VkSpecializationMapEntry": {
-      "core": [
-        {
-          "vuid": "VUID-VkSpecializationMapEntry-constantID-00776",
-          "text": " For a <code>constantID</code> specialization constant declared in a shader, <code>size</code> <strong class=\"purple\">must</strong> match the byte size of the <code>constantID</code>. If the specialization constant is of type <code>boolean</code>, <code>size</code> <strong class=\"purple\">must</strong> be the byte size of <code>VkBool32</code>"
-        }
-      ]
-    },
-    "vkCmdBindPipeline": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdBindPipeline-pipelineBindPoint-00777",
-          "text": " If <code>pipelineBindPoint</code> is <code>VK_PIPELINE_BIND_POINT_COMPUTE</code>, the <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support compute operations"
-        },
-        {
-          "vuid": "VUID-vkCmdBindPipeline-pipelineBindPoint-00778",
-          "text": " If <code>pipelineBindPoint</code> is <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, the <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
-        },
-        {
-          "vuid": "VUID-vkCmdBindPipeline-pipelineBindPoint-00779",
-          "text": " If <code>pipelineBindPoint</code> is <code>VK_PIPELINE_BIND_POINT_COMPUTE</code>, <code>pipeline</code> <strong class=\"purple\">must</strong> be a compute pipeline"
-        },
-        {
-          "vuid": "VUID-vkCmdBindPipeline-pipelineBindPoint-00780",
-          "text": " If <code>pipelineBindPoint</code> is <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, <code>pipeline</code> <strong class=\"purple\">must</strong> be a graphics pipeline"
-        },
-        {
-          "vuid": "VUID-vkCmdBindPipeline-pipeline-00781",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-variableMultisampleRate,variable multisample rate&amp;amp;gt;&amp;amp;gt; feature is not supported, <code>pipeline</code> is a graphics pipeline, the current subpass has no attachments, and this is not the first call to this function with a graphics pipeline after transitioning to the current subpass, then the sample count specified by this pipeline <strong class=\"purple\">must</strong> match that set in the previous pipeline"
-        },
-        {
-          "vuid": "VUID-vkCmdBindPipeline-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdBindPipeline-pipelineBindPoint-parameter",
-          "text": " <code>pipelineBindPoint</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipelineBindPoint\">VkPipelineBindPoint</a> value"
-        },
-        {
-          "vuid": "VUID-vkCmdBindPipeline-pipeline-parameter",
-          "text": " <code>pipeline</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipeline</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdBindPipeline-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdBindPipeline-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
-        },
-        {
-          "vuid": "VUID-vkCmdBindPipeline-commonparent",
-          "text": " Both of <code>commandBuffer</code>, and <code>pipeline</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ],
-      "(VK_EXT_sample_locations)": [
-        {
-          "vuid": "VUID-vkCmdBindPipeline-variableSampleLocations-01525",
-          "text": " If <a href=\"#VkPhysicalDeviceSampleLocationsPropertiesEXT\">VkPhysicalDeviceSampleLocationsPropertiesEXT</a>::<code>variableSampleLocations</code> is <code>VK_FALSE</code>, and <code>pipeline</code> is a graphics pipeline created with a <a href=\"#VkPipelineSampleLocationsStateCreateInfoEXT\">VkPipelineSampleLocationsStateCreateInfoEXT</a> structure having its <code>sampleLocationsEnable</code> member set to <code>VK_TRUE</code> but without <code>VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT</code> enabled then the current render pass instance <strong class=\"purple\">must</strong> have been begun by specifying a <a href=\"#VkRenderPassSampleLocationsBeginInfoEXT\">VkRenderPassSampleLocationsBeginInfoEXT</a> structure whose <code>pPostSubpassSampleLocations</code> member contains an element with a <code>subpassIndex</code> matching the current subpass index and the <code>sampleLocationsInfo</code> member of that element <strong class=\"purple\">must</strong> match the <code>sampleLocationsInfo</code> specified in <a href=\"#VkPipelineSampleLocationsStateCreateInfoEXT\">VkPipelineSampleLocationsStateCreateInfoEXT</a> when the pipeline was created"
-        }
-      ]
-    },
-    "vkGetShaderInfoAMD": {
-      "(VK_AMD_shader_info)": [
-        {
-          "vuid": "VUID-vkGetShaderInfoAMD-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetShaderInfoAMD-pipeline-parameter",
-          "text": " <code>pipeline</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipeline</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetShaderInfoAMD-shaderStage-parameter",
-          "text": " <code>shaderStage</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkShaderStageFlagBits\">VkShaderStageFlagBits</a> value"
-        },
-        {
-          "vuid": "VUID-vkGetShaderInfoAMD-infoType-parameter",
-          "text": " <code>infoType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkShaderInfoTypeAMD\">VkShaderInfoTypeAMD</a> value"
-        },
-        {
-          "vuid": "VUID-vkGetShaderInfoAMD-pInfoSize-parameter",
-          "text": " <code>pInfoSize</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>size_t</code> value"
-        },
-        {
-          "vuid": "VUID-vkGetShaderInfoAMD-pInfo-parameter",
-          "text": " If the value referenced by <code>pInfoSize</code> is not <code>0</code>, and <code>pInfo</code> is not <code>NULL</code>, <code>pInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pInfoSize</code> bytes"
-        },
-        {
-          "vuid": "VUID-vkGetShaderInfoAMD-pipeline-parent",
-          "text": " <code>pipeline</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "VkAllocationCallbacks": {
-      "core": [
-        {
-          "vuid": "VUID-VkAllocationCallbacks-pfnAllocation-00632",
-          "text": " <code>pfnAllocation</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid user-defined <a href=\"#PFN_vkAllocationFunction\">PFN_vkAllocationFunction</a>"
-        },
-        {
-          "vuid": "VUID-VkAllocationCallbacks-pfnReallocation-00633",
-          "text": " <code>pfnReallocation</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid user-defined <a href=\"#PFN_vkReallocationFunction\">PFN_vkReallocationFunction</a>"
-        },
-        {
-          "vuid": "VUID-VkAllocationCallbacks-pfnFree-00634",
-          "text": " <code>pfnFree</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid user-defined <a href=\"#PFN_vkFreeFunction\">PFN_vkFreeFunction</a>"
-        },
-        {
-          "vuid": "VUID-VkAllocationCallbacks-pfnInternalAllocation-00635",
-          "text": " If either of <code>pfnInternalAllocation</code> or <code>pfnInternalFree</code> is not <code>NULL</code>, both <strong class=\"purple\">must</strong> be valid callbacks"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceMemoryProperties": {
-      "core": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceMemoryProperties-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceMemoryProperties-pMemoryProperties-parameter",
-          "text": " <code>pMemoryProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkPhysicalDeviceMemoryProperties</code> structure"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceMemoryProperties2": {
-      "(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceMemoryProperties2-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceMemoryProperties2-pMemoryProperties-parameter",
-          "text": " <code>pMemoryProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkPhysicalDeviceMemoryProperties2</code> structure"
-        }
-      ]
-    },
-    "VkPhysicalDeviceMemoryProperties2": {
-      "(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
-        {
-          "vuid": "VUID-VkPhysicalDeviceMemoryProperties2-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2</code>"
-        },
-        {
-          "vuid": "VUID-VkPhysicalDeviceMemoryProperties2-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        }
-      ]
-    },
-    "vkAllocateMemory": {
-      "core": [
-        {
-          "vuid": "VUID-vkAllocateMemory-pAllocateInfo-01713",
-          "text": " <code>pAllocateInfo</code>\\-&amp;amp;gt;<code>allocationSize</code> <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkPhysicalDeviceMemoryProperties\">VkPhysicalDeviceMemoryProperties</a>::<code>memoryHeaps</code>[<code>pAllocateInfo</code>\\-&amp;amp;gt;<code>memoryTypeIndex</code>].<code>size</code> as returned by <a href=\"#vkGetPhysicalDeviceMemoryProperties\">vkGetPhysicalDeviceMemoryProperties</a> for the <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> that <code>device</code> was created from."
-        },
-        {
-          "vuid": "VUID-vkAllocateMemory-pAllocateInfo-01714",
-          "text": " <code>pAllocateInfo</code>\\-&amp;amp;gt;<code>memoryTypeIndex</code> <strong class=\"purple\">must</strong> be less than <a href=\"#VkPhysicalDeviceMemoryProperties\">VkPhysicalDeviceMemoryProperties</a>::<code>memoryTypeCount</code> as returned by <a href=\"#vkGetPhysicalDeviceMemoryProperties\">vkGetPhysicalDeviceMemoryProperties</a> for the <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> that <code>device</code> was created from."
-        },
-        {
-          "vuid": "VUID-vkAllocateMemory-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkAllocateMemory-pAllocateInfo-parameter",
-          "text": " <code>pAllocateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkMemoryAllocateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-vkAllocateMemory-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkAllocateMemory-pMemory-parameter",
-          "text": " <code>pMemory</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkDeviceMemory</code> handle"
-        }
-      ]
-    },
-    "VkMemoryAllocateInfo": {
-      "!(VK_ANDROID_external_memory_android_hardware_buffer)": [
-        {
-          "vuid": "VUID-VkMemoryAllocateInfo-allocationSize-00638",
-          "text": " <code>allocationSize</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ],
-      "(VK_KHR_external_memory)+(VK_KHR_dedicated_allocation,VK_NV_dedicated_allocation)": [
-        {
-          "vuid": "VUID-VkMemoryAllocateInfo-pNext-00639",
-          "text": "     If the <code>pNext</code> chain contains an instance of     <code>VkExportMemoryAllocateInfo</code>, and any of the handle types specified     in <code>VkExportMemoryAllocateInfo</code>::<code>handleTypes</code> require a     dedicated allocation, as reported by     <a href=\"#vkGetPhysicalDeviceImageFormatProperties2\">vkGetPhysicalDeviceImageFormatProperties2</a> in     <code>VkExternalImageFormatProperties</code>::<code>externalMemoryProperties</code>::<code>externalMemoryFeatures</code>     or     <code>VkExternalBufferProperties</code>::<code>externalMemoryProperties</code>::<code>externalMemoryFeatures</code>,     the <code>pNext</code> chain must contain an instance of ifdef::VK_KHR_dedicated_allocation[<a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>]"
-        }
-      ],
-      "(VK_KHR_external_memory)+(VK_NV_external_memory)": [
-        {
-          "vuid": "VUID-VkMemoryAllocateInfo-pNext-00640",
-          "text": " If the <code>pNext</code> chain contains an instance of <a href=\"#VkExportMemoryAllocateInfo\">VkExportMemoryAllocateInfo</a>, it <strong class=\"purple\">must</strong> not contain an instance of <a href=\"#VkExportMemoryAllocateInfoNV\">VkExportMemoryAllocateInfoNV</a> or <a href=\"#VkExportMemoryWin32HandleInfoNV\">VkExportMemoryWin32HandleInfoNV</a>."
-        }
-      ],
-      "(VK_KHR_external_memory_win32+VK_NV_external_memory_win32)": [
-        {
-          "vuid": "VUID-VkMemoryAllocateInfo-pNext-00641",
-          "text": " If the <code>pNext</code> chain contains an instance of <a href=\"#VkImportMemoryWin32HandleInfoKHR\">VkImportMemoryWin32HandleInfoKHR</a>, it <strong class=\"purple\">must</strong> not contain an instance of <a href=\"#VkImportMemoryWin32HandleInfoNV\">VkImportMemoryWin32HandleInfoNV</a>."
-        }
-      ],
-      "(VK_KHR_external_memory_fd)": [
-        {
-          "vuid": "VUID-VkMemoryAllocateInfo-allocationSize-01742",
-          "text": " If the parameters define an import operation, the external handle specified was created by the Vulkan API, and the external handle type is <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR</code>, then the values of <code>allocationSize</code> and <code>memoryTypeIndex</code> <strong class=\"purple\">must</strong> match those specified when the memory object being imported was created."
-        },
-        {
-          "vuid": "VUID-VkMemoryAllocateInfo-memoryTypeIndex-00648",
-          "text": " If the parameters define an import operation and the external handle is a POSIX file descriptor created outside of the Vulkan API, the value of <code>memoryTypeIndex</code> <strong class=\"purple\">must</strong> be one of those returned by <a href=\"#vkGetMemoryFdPropertiesKHR\">vkGetMemoryFdPropertiesKHR</a>."
-        }
-      ],
-      "(VK_KHR_external_memory+VK_KHR_device_group)": [
-        {
-          "vuid": "VUID-VkMemoryAllocateInfo-None-00643",
-          "text": " If the parameters define an import operation and the external handle specified was created by the Vulkan API, the device mask specified by <a href=\"#VkMemoryAllocateFlagsInfo\">VkMemoryAllocateFlagsInfo</a> <strong class=\"purple\">must</strong> match that specified when the memory object being imported was allocated."
-        },
-        {
-          "vuid": "VUID-VkMemoryAllocateInfo-None-00644",
-          "text": " If the parameters define an import operation and the external handle specified was created by the Vulkan API, the list of physical devices that comprise the logical device passed to <a href=\"#vkAllocateMemory\">vkAllocateMemory</a> <strong class=\"purple\">must</strong> match the list of physical devices that comprise the logical device on which the memory was originally allocated."
-        }
-      ],
-      "(VK_KHR_external_memory_win32)": [
-        {
-          "vuid": "VUID-VkMemoryAllocateInfo-memoryTypeIndex-00645",
-          "text": " If the parameters define an import operation and the external handle is an NT handle or a global share handle created outside of the Vulkan API, the value of <code>memoryTypeIndex</code> <strong class=\"purple\">must</strong> be one of those returned by <a href=\"#vkGetMemoryWin32HandlePropertiesKHR\">vkGetMemoryWin32HandlePropertiesKHR</a>."
-        },
-        {
-          "vuid": "VUID-VkMemoryAllocateInfo-allocationSize-01743",
-          "text": " If the parameters define an import operation, the external handle was created by the Vulkan API, and the external handle type is <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR</code> or <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR</code>, then the values of <code>allocationSize</code> and <code>memoryTypeIndex</code> <strong class=\"purple\">must</strong> match those specified when the memory object being imported was created."
-        },
-        {
-          "vuid": "VUID-VkMemoryAllocateInfo-allocationSize-00646",
-          "text": " If the parameters define an import operation and the external handle type is <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT</code>, <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT</code>, or <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT</code>, <code>allocationSize</code> <strong class=\"purple\">must</strong> match the size reported in the memory requirements of the <code>image</code> or <code>buffer</code> member of the instance of <code>VkDedicatedAllocationMemoryAllocateInfoNV</code> included in the <code>pNext</code> chain."
-        },
-        {
-          "vuid": "VUID-VkMemoryAllocateInfo-allocationSize-00647",
-          "text": " If the parameters define an import operation and the external handle type is <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT</code>, <code>allocationSize</code> <strong class=\"purple\">must</strong> match the size specified when creating the Direct3D 12 heap from which the external handle was extracted."
-        }
-      ],
-      "(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-VkMemoryAllocateInfo-memoryTypeIndex-01872",
-          "text": " If the protected memory feature is not enabled, the <code>VkMemoryAllocateInfo</code>::<code>memoryTypeIndex</code> <strong class=\"purple\">must</strong> not indicate a memory type that reports <code>VK_MEMORY_PROPERTY_PROTECTED_BIT</code>."
-        }
-      ],
-      "(VK_EXT_external_memory_host)": [
-        {
-          "vuid": "VUID-VkMemoryAllocateInfo-memoryTypeIndex-01744",
-          "text": " If the parameters define an import operation and the external handle is a host pointer, the value of <code>memoryTypeIndex</code> <strong class=\"purple\">must</strong> be one of those returned by <a href=\"#vkGetMemoryHostPointerPropertiesEXT\">vkGetMemoryHostPointerPropertiesEXT</a>"
-        },
-        {
-          "vuid": "VUID-VkMemoryAllocateInfo-allocationSize-01745",
-          "text": " If the parameters define an import operation and the external handle is a host pointer, <code>allocationSize</code> <strong class=\"purple\">must</strong> be an integer multiple of <code>VkPhysicalDeviceExternalMemoryHostPropertiesEXT</code>::<code>minImportedHostPointerAlignment</code>"
-        }
-      ],
-      "(VK_ANDROID_external_memory_android_hardware_buffer)": [
-        {
-          "vuid": "VUID-VkMemoryAllocateInfo-None-01873",
-          "text": " If the parameters define an import operation and the external handle type is <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BIT_ANDROID</code>:"
-        },
-        {
-          "vuid": "VUID-VkMemoryAllocateInfo-pNext-01874",
-          "text": " If the parameters do not define an import operation, and the <code>pNext</code> chain contains an instance of <code>VkExportMemoryAllocateInfo</code> with <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID</code> included in its <code>handleTypes</code> member, and the <code>pNext</code> contains an instance of <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a> with <code>image</code> not equal to <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, then <code>allocationSize</code> <strong class=\"purple\">must</strong> be <code>0</code>, otherwise <code>allocationSize</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>."
-        },
-        {
-          "vuid": "VUID-VkMemoryAllocateInfo-pNext-01875",
-          "text": " If the parameters define an import operation, the external handle is an Android hardware buffer, and the <code>pNext</code> chain includes an instance of <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a> with <code>image</code> that is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>:"
-        }
-      ],
-      "core": [
-        {
-          "vuid": "VUID-VkMemoryAllocateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkMemoryAllocateInfo-pNext-pNext",
-          "text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkDedicatedAllocationMemoryAllocateInfoNV\">VkDedicatedAllocationMemoryAllocateInfoNV</a>, <a href=\"#VkExportMemoryAllocateInfo\">VkExportMemoryAllocateInfo</a>, <a href=\"#VkExportMemoryAllocateInfoNV\">VkExportMemoryAllocateInfoNV</a>, <a href=\"#VkExportMemoryWin32HandleInfoKHR\">VkExportMemoryWin32HandleInfoKHR</a>, <a href=\"#VkExportMemoryWin32HandleInfoNV\">VkExportMemoryWin32HandleInfoNV</a>, <a href=\"#VkImportAndroidHardwareBufferInfoANDROID\">VkImportAndroidHardwareBufferInfoANDROID</a>, <a href=\"#VkImportMemoryFdInfoKHR\">VkImportMemoryFdInfoKHR</a>, <a href=\"#VkImportMemoryHostPointerInfoEXT\">VkImportMemoryHostPointerInfoEXT</a>, <a href=\"#VkImportMemoryWin32HandleInfoKHR\">VkImportMemoryWin32HandleInfoKHR</a>, <a href=\"#VkImportMemoryWin32HandleInfoNV\">VkImportMemoryWin32HandleInfoNV</a>, <a href=\"#VkMemoryAllocateFlagsInfo\">VkMemoryAllocateFlagsInfo</a>, or <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>"
-        },
-        {
-          "vuid": "VUID-VkMemoryAllocateInfo-sType-unique",
-          "text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
-        }
-      ]
-    },
-    "VkMemoryDedicatedAllocateInfo": {
-      "(VK_VERSION_1_1,VK_KHR_dedicated_allocation)": [
-        {
-          "vuid": "VUID-VkMemoryDedicatedAllocateInfo-image-01432",
-          "text": " At least one of <code>image</code> and <code>buffer</code> <strong class=\"purple\">must</strong> be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
-        },
-        {
-          "vuid": "VUID-VkMemoryDedicatedAllocateInfo-image-01433",
-          "text": " If <code>image</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>VkMemoryAllocateInfo</code>::<code>allocationSize</code> <strong class=\"purple\">must</strong> equal the <code>VkMemoryRequirements</code>::<code>size</code> of the image"
-        },
-        {
-          "vuid": "VUID-VkMemoryDedicatedAllocateInfo-image-01434",
-          "text": " If <code>image</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>image</code> <strong class=\"purple\">must</strong> have been created without <code>VK_IMAGE_CREATE_SPARSE_BINDING_BIT</code> set in <code>VkImageCreateInfo</code>::<code>flags</code>"
-        },
-        {
-          "vuid": "VUID-VkMemoryDedicatedAllocateInfo-buffer-01435",
-          "text": " If <code>buffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>VkMemoryAllocateInfo</code>::<code>allocationSize</code> <strong class=\"purple\">must</strong> equal the <code>VkMemoryRequirements</code>::<code>size</code> of the buffer"
-        },
-        {
-          "vuid": "VUID-VkMemoryDedicatedAllocateInfo-buffer-01436",
-          "text": " If <code>buffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>buffer</code> <strong class=\"purple\">must</strong> have been created without <code>VK_BUFFER_CREATE_SPARSE_BINDING_BIT</code> set in <a href=\"#VkBufferCreateInfo\">VkBufferCreateInfo</a>::<code>flags</code>"
-        },
-        {
-          "vuid": "VUID-VkMemoryDedicatedAllocateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkMemoryDedicatedAllocateInfo-image-parameter",
-          "text": " If <code>image</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>image</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
-        },
-        {
-          "vuid": "VUID-VkMemoryDedicatedAllocateInfo-buffer-parameter",
-          "text": " If <code>buffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-VkMemoryDedicatedAllocateInfo-commonparent",
-          "text": " Both of <code>buffer</code>, and <code>image</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_dedicated_allocation)+(VK_KHR_external_memory_win32)": [
-        {
-          "vuid": "VUID-VkMemoryDedicatedAllocateInfo-image-01876",
-          "text": " If <code>image</code> is not <code>VK_NULL_HANDLE</code> and <a href=\"#VkMemoryAllocateInfo\">VkMemoryAllocateInfo</a> defines a memory import operation with handle type <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT</code>, <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT</code>, <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT</code>, <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT</code>, <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT</code>, or <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT</code>, and the external handle was created by the Vulkan API, then the memory being imported <strong class=\"purple\">must</strong> also be a dedicated image allocation and <code>image</code> must be identical to the image associated with the imported memory."
-        },
-        {
-          "vuid": "VUID-VkMemoryDedicatedAllocateInfo-buffer-01877",
-          "text": " If <code>buffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a> and <a href=\"#VkMemoryAllocateInfo\">VkMemoryAllocateInfo</a> defines a memory import operation with handle type <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT</code>, <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT</code>, <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT</code>, <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT</code>, <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT</code>, or <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT</code>, and the external handle was created by the Vulkan API, then the memory being imported <strong class=\"purple\">must</strong> also be a dedicated buffer allocation and <code>buffer</code> must be identical to the buffer associated with the imported memory."
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_dedicated_allocation)+(VK_KHR_external_memory_fd)": [
-        {
-          "vuid": "VUID-VkMemoryDedicatedAllocateInfo-image-01878",
-          "text": " If <code>image</code> is not <code>VK_NULL_HANDLE</code> and <a href=\"#VkMemoryAllocateInfo\">VkMemoryAllocateInfo</a> defines a memory import operation with handle type <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT</code>, the memory being imported <strong class=\"purple\">must</strong> also be a dedicated image allocation and <code>image</code> must be identical to the image associated with the imported memory."
-        },
-        {
-          "vuid": "VUID-VkMemoryDedicatedAllocateInfo-buffer-01879",
-          "text": " If <code>buffer</code> is not <code>VK_NULL_HANDLE</code> and <a href=\"#VkMemoryAllocateInfo\">VkMemoryAllocateInfo</a> defines a memory import operation with handle type <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT</code>, the memory being imported <strong class=\"purple\">must</strong> also be a dedicated buffer allocation and <code>buffer</code> must be identical to the buffer associated with the imported memory."
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_dedicated_allocation)+(VK_KHR_sampler_ycbcr_conversion)": [
-        {
-          "vuid": "VUID-VkMemoryDedicatedAllocateInfo-image-01797",
-          "text": " If <code>image</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>image</code> <strong class=\"purple\">must</strong> not have been created with <code>VK_IMAGE_CREATE_DISJOINT_BIT</code> set in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>::<code>flags</code>"
-        }
-      ]
-    },
-    "VkDedicatedAllocationMemoryAllocateInfoNV": {
-      "(VK_NV_dedicated_allocation)": [
-        {
-          "vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-image-00649",
-          "text": " At least one of <code>image</code> and <code>buffer</code> <strong class=\"purple\">must</strong> be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
-        },
-        {
-          "vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-image-00650",
-          "text": " If <code>image</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, the image <strong class=\"purple\">must</strong> have been created with <code>VkDedicatedAllocationImageCreateInfoNV</code>::<code>dedicatedAllocation</code> equal to <code>VK_TRUE</code>"
-        },
-        {
-          "vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-buffer-00651",
-          "text": " If <code>buffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, the buffer <strong class=\"purple\">must</strong> have been created with <code>VkDedicatedAllocationBufferCreateInfoNV</code>::<code>dedicatedAllocation</code> equal to <code>VK_TRUE</code>"
-        },
-        {
-          "vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-image-00652",
-          "text": " If <code>image</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>VkMemoryAllocateInfo</code>::<code>allocationSize</code> <strong class=\"purple\">must</strong> equal the <code>VkMemoryRequirements</code>::<code>size</code> of the image"
-        },
-        {
-          "vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-buffer-00653",
-          "text": " If <code>buffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>VkMemoryAllocateInfo</code>::<code>allocationSize</code> <strong class=\"purple\">must</strong> equal the <code>VkMemoryRequirements</code>::<code>size</code> of the buffer"
-        },
-        {
-          "vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV</code>"
-        },
-        {
-          "vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-image-parameter",
-          "text": " If <code>image</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>image</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
-        },
-        {
-          "vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-buffer-parameter",
-          "text": " If <code>buffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-commonparent",
-          "text": " Both of <code>buffer</code>, and <code>image</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ],
-      "(VK_NV_dedicated_allocation)+(VK_KHR_external_memory_win32,VK_KHR_external_memory_fd)": [
-        {
-          "vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-image-00654",
-          "text": " If <code>image</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a> and <a href=\"#VkMemoryAllocateInfo\">VkMemoryAllocateInfo</a> defines a memory import operation, the memory being imported <strong class=\"purple\">must</strong> also be a dedicated image allocation and <code>image</code> <strong class=\"purple\">must</strong> be identical to the image associated with the imported memory."
-        },
-        {
-          "vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-buffer-00655",
-          "text": " If <code>buffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a> and <a href=\"#VkMemoryAllocateInfo\">VkMemoryAllocateInfo</a> defines a memory import operation, the memory being imported <strong class=\"purple\">must</strong> also be a dedicated buffer allocation and <code>buffer</code> <strong class=\"purple\">must</strong> be identical to the buffer associated with the imported memory."
-        }
-      ]
-    },
-    "VkExportMemoryAllocateInfo": {
-      "(VK_VERSION_1_1,VK_KHR_external_memory)": [
-        {
-          "vuid": "VUID-VkExportMemoryAllocateInfo-handleTypes-00656",
-          "text": " The bits in <code>handleTypes</code> <strong class=\"purple\">must</strong> be supported and compatible, as reported by <a href=\"#VkExternalImageFormatProperties\">VkExternalImageFormatProperties</a> or <a href=\"#VkExternalBufferProperties\">VkExternalBufferProperties</a>."
-        },
-        {
-          "vuid": "VUID-VkExportMemoryAllocateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkExportMemoryAllocateInfo-handleTypes-parameter",
-          "text": " <code>handleTypes</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkExternalMemoryHandleTypeFlagBits\">VkExternalMemoryHandleTypeFlagBits</a> values"
-        }
-      ]
-    },
-    "VkExportMemoryWin32HandleInfoKHR": {
-      "(VK_KHR_external_memory_win32)": [
-        {
-          "vuid": "VUID-VkExportMemoryWin32HandleInfoKHR-handleTypes-00657",
-          "text": " If <a href=\"#VkExportMemoryAllocateInfo\">VkExportMemoryAllocateInfo</a>::<code>handleTypes</code> does not include <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT</code>, <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT</code>, <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT</code>, or <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT</code>, VkExportMemoryWin32HandleInfoKHR <strong class=\"purple\">must</strong> not be in the <code>pNext</code> chain of <a href=\"#VkMemoryAllocateInfo\">VkMemoryAllocateInfo</a>."
-        },
-        {
-          "vuid": "VUID-VkExportMemoryWin32HandleInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkExportMemoryWin32HandleInfoKHR-pAttributes-parameter",
-          "text": " If <code>pAttributes</code> is not <code>NULL</code>, <code>pAttributes</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>SECURITY_ATTRIBUTES</code> value"
-        }
-      ]
-    },
-    "VkImportMemoryWin32HandleInfoKHR": {
-      "(VK_KHR_external_memory_win32)": [
-        {
-          "vuid": "VUID-VkImportMemoryWin32HandleInfoKHR-handleType-00658",
-          "text": " If <code>handleType</code> is not <code>0</code>, it <strong class=\"purple\">must</strong> be supported for import, as reported by <a href=\"#VkExternalImageFormatProperties\">VkExternalImageFormatProperties</a> or <a href=\"#VkExternalBufferProperties\">VkExternalBufferProperties</a>."
-        },
-        {
-          "vuid": "VUID-VkImportMemoryWin32HandleInfoKHR-handle-00659",
-          "text": " The memory from which <code>handle</code> was exported, or the memory named by <code>name</code> <strong class=\"purple\">must</strong> have been created on the same underlying physical device as <code>device</code>."
-        },
-        {
-          "vuid": "VUID-VkImportMemoryWin32HandleInfoKHR-handleType-00660",
-          "text": " If <code>handleType</code> is not <code>0</code>, it <strong class=\"purple\">must</strong> be defined as an NT handle or a global share handle."
-        },
-        {
-          "vuid": "VUID-VkImportMemoryWin32HandleInfoKHR-handleType-01439",
-          "text": " If <code>handleType</code> is not <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT</code>, <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT</code>, <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT</code>, or <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT</code>, <code>name</code> <strong class=\"purple\">must</strong> be <code>NULL</code>."
-        },
-        {
-          "vuid": "VUID-VkImportMemoryWin32HandleInfoKHR-handleType-01440",
-          "text": " If <code>handleType</code> is not <code>0</code> and <code>handle</code> is <code>NULL</code>, <code>name</code> <strong class=\"purple\">must</strong> name a valid memory resource of the type specified by <code>handleType</code>."
-        },
-        {
-          "vuid": "VUID-VkImportMemoryWin32HandleInfoKHR-handleType-00661",
-          "text": " If <code>handleType</code> is not <code>0</code> and <code>name</code> is <code>NULL</code>, <code>handle</code> <strong class=\"purple\">must</strong> be a valid handle of the type specified by <code>handleType</code>."
-        },
-        {
-          "vuid": "VUID-VkImportMemoryWin32HandleInfoKHR-handle-01441",
-          "text": " if <code>handle</code> is not <code>NULL</code>, <code>name</code> must be <code>NULL</code>."
-        },
-        {
-          "vuid": "VUID-VkImportMemoryWin32HandleInfoKHR-handle-01518",
-          "text": " If <code>handle</code> is not <code>NULL</code>, it <strong class=\"purple\">must</strong> obey any requirements listed for <code>handleType</code> in <a href=\"#external-memory-handle-types-compatibility\">external memory handle types compatibility</a>."
-        },
-        {
-          "vuid": "VUID-VkImportMemoryWin32HandleInfoKHR-name-01519",
-          "text": " If <code>name</code> is not <code>NULL</code>, it <strong class=\"purple\">must</strong> obey any requirements listed for <code>handleType</code> in <a href=\"#external-memory-handle-types-compatibility\">external memory handle types compatibility</a>."
-        },
-        {
-          "vuid": "VUID-VkImportMemoryWin32HandleInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkImportMemoryWin32HandleInfoKHR-handleType-parameter",
-          "text": " If <code>handleType</code> is not <code>0</code>, <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalMemoryHandleTypeFlagBits\">VkExternalMemoryHandleTypeFlagBits</a> value"
-        }
-      ]
-    },
-    "vkGetMemoryWin32HandleKHR": {
-      "(VK_KHR_external_memory_win32)": [
-        {
-          "vuid": "VUID-vkGetMemoryWin32HandleKHR-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetMemoryWin32HandleKHR-pGetWin32HandleInfo-parameter",
-          "text": " <code>pGetWin32HandleInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkMemoryGetWin32HandleInfoKHR</code> structure"
-        },
-        {
-          "vuid": "VUID-vkGetMemoryWin32HandleKHR-pHandle-parameter",
-          "text": " <code>pHandle</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>HANDLE</code> value"
-        }
-      ]
-    },
-    "VkMemoryGetWin32HandleInfoKHR": {
-      "(VK_KHR_external_memory_win32)": [
-        {
-          "vuid": "VUID-VkMemoryGetWin32HandleInfoKHR-handleType-00662",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> have been included in <a href=\"#VkExportMemoryAllocateInfo\">VkExportMemoryAllocateInfo</a>::<code>handleTypes</code> when <code>memory</code> was created."
-        },
-        {
-          "vuid": "VUID-VkMemoryGetWin32HandleInfoKHR-handleType-00663",
-          "text": " If <code>handleType</code> is defined as an NT handle, <a href=\"#vkGetMemoryWin32HandleKHR\">vkGetMemoryWin32HandleKHR</a> <strong class=\"purple\">must</strong> be called no more than once for each valid unique combination of <code>memory</code> and <code>handleType</code>."
-        },
-        {
-          "vuid": "VUID-VkMemoryGetWin32HandleInfoKHR-handleType-00664",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> be defined as an NT handle or a global share handle."
-        },
-        {
-          "vuid": "VUID-VkMemoryGetWin32HandleInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkMemoryGetWin32HandleInfoKHR-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkMemoryGetWin32HandleInfoKHR-memory-parameter",
-          "text": " <code>memory</code> <strong class=\"purple\">must</strong> be a valid <code>VkDeviceMemory</code> handle"
-        },
-        {
-          "vuid": "VUID-VkMemoryGetWin32HandleInfoKHR-handleType-parameter",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalMemoryHandleTypeFlagBits\">VkExternalMemoryHandleTypeFlagBits</a> value"
-        }
-      ]
-    },
-    "vkGetMemoryWin32HandlePropertiesKHR": {
-      "(VK_KHR_external_memory_win32)": [
-        {
-          "vuid": "VUID-vkGetMemoryWin32HandlePropertiesKHR-handle-00665",
-          "text": " <code>handle</code> <strong class=\"purple\">must</strong> be an external memory handle created outside of the Vulkan API."
-        },
-        {
-          "vuid": "VUID-vkGetMemoryWin32HandlePropertiesKHR-handleType-00666",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> not be one of the handle types defined as opaque."
-        },
-        {
-          "vuid": "VUID-vkGetMemoryWin32HandlePropertiesKHR-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetMemoryWin32HandlePropertiesKHR-handleType-parameter",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalMemoryHandleTypeFlagBits\">VkExternalMemoryHandleTypeFlagBits</a> value"
-        },
-        {
-          "vuid": "VUID-vkGetMemoryWin32HandlePropertiesKHR-pMemoryWin32HandleProperties-parameter",
-          "text": " <code>pMemoryWin32HandleProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkMemoryWin32HandlePropertiesKHR</code> structure"
-        }
-      ]
-    },
-    "VkImportMemoryFdInfoKHR": {
-      "(VK_KHR_external_memory_fd)": [
-        {
-          "vuid": "VUID-VkImportMemoryFdInfoKHR-handleType-00667",
-          "text": " If <code>handleType</code> is not <code>0</code>, it <strong class=\"purple\">must</strong> be supported for import, as reported by <a href=\"#VkExternalImageFormatProperties\">VkExternalImageFormatProperties</a> or <a href=\"#VkExternalBufferProperties\">VkExternalBufferProperties</a>."
-        },
-        {
-          "vuid": "VUID-VkImportMemoryFdInfoKHR-fd-00668",
-          "text": " The memory from which <code>fd</code> was exported <strong class=\"purple\">must</strong> have been created on the same underlying physical device as <code>device</code>."
-        },
-        {
-          "vuid": "VUID-VkImportMemoryFdInfoKHR-handleType-00669",
-          "text": " If <code>handleType</code> is not <code>0</code>, it <strong class=\"purple\">must</strong> be defined as a POSIX file descriptor handle."
-        },
-        {
-          "vuid": "VUID-VkImportMemoryFdInfoKHR-handleType-00670",
-          "text": " If <code>handleType</code> is not <code>0</code>, <code>fd</code> <strong class=\"purple\">must</strong> be a valid handle of the type specified by <code>handleType</code>."
-        },
-        {
-          "vuid": "VUID-VkImportMemoryFdInfoKHR-fd-01746",
-          "text": " The memory represented by <code>fd</code> <strong class=\"purple\">must</strong> have been created from a physical device and driver that is compatible with <code>device</code> and <code>handleType</code>, as described in &amp;amp;lt;&amp;amp;lt;external-memory-handle-types-compatibility&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-VkImportMemoryFdInfoKHR-fd-01520",
-          "text": " <code>fd</code> <strong class=\"purple\">must</strong> obey any requirements listed for <code>handleType</code> in &amp;amp;lt;&amp;amp;lt;external-memory-handle-types-compatibility,external memory handle types compatibility&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-VkImportMemoryFdInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkImportMemoryFdInfoKHR-handleType-parameter",
-          "text": " If <code>handleType</code> is not <code>0</code>, <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalMemoryHandleTypeFlagBits\">VkExternalMemoryHandleTypeFlagBits</a> value"
-        }
-      ]
-    },
-    "vkGetMemoryFdKHR": {
-      "(VK_KHR_external_memory_fd)": [
-        {
-          "vuid": "VUID-vkGetMemoryFdKHR-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetMemoryFdKHR-pGetFdInfo-parameter",
-          "text": " <code>pGetFdInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkMemoryGetFdInfoKHR</code> structure"
-        },
-        {
-          "vuid": "VUID-vkGetMemoryFdKHR-pFd-parameter",
-          "text": " <code>pFd</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>int</code> value"
-        }
-      ]
-    },
-    "VkMemoryGetFdInfoKHR": {
-      "(VK_KHR_external_memory_fd)": [
-        {
-          "vuid": "VUID-VkMemoryGetFdInfoKHR-handleType-00671",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> have been included in <a href=\"#VkExportMemoryAllocateInfo\">VkExportMemoryAllocateInfo</a>::<code>handleTypes</code> when <code>memory</code> was created."
-        },
-        {
-          "vuid": "VUID-VkMemoryGetFdInfoKHR-handleType-00672",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> be defined as a POSIX file descriptor handle."
-        },
-        {
-          "vuid": "VUID-VkMemoryGetFdInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkMemoryGetFdInfoKHR-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkMemoryGetFdInfoKHR-memory-parameter",
-          "text": " <code>memory</code> <strong class=\"purple\">must</strong> be a valid <code>VkDeviceMemory</code> handle"
-        },
-        {
-          "vuid": "VUID-VkMemoryGetFdInfoKHR-handleType-parameter",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalMemoryHandleTypeFlagBits\">VkExternalMemoryHandleTypeFlagBits</a> value"
-        }
-      ]
-    },
-    "vkGetMemoryFdPropertiesKHR": {
-      "(VK_KHR_external_memory_fd)": [
-        {
-          "vuid": "VUID-vkGetMemoryFdPropertiesKHR-fd-00673",
-          "text": " <code>fd</code> <strong class=\"purple\">must</strong> be an external memory handle created outside of the Vulkan API."
-        },
-        {
-          "vuid": "VUID-vkGetMemoryFdPropertiesKHR-handleType-00674",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> not be <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR</code>."
-        },
-        {
-          "vuid": "VUID-vkGetMemoryFdPropertiesKHR-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetMemoryFdPropertiesKHR-handleType-parameter",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalMemoryHandleTypeFlagBits\">VkExternalMemoryHandleTypeFlagBits</a> value"
-        },
-        {
-          "vuid": "VUID-vkGetMemoryFdPropertiesKHR-pMemoryFdProperties-parameter",
-          "text": " <code>pMemoryFdProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkMemoryFdPropertiesKHR</code> structure"
-        }
-      ]
-    },
-    "VkImportMemoryHostPointerInfoEXT": {
-      "(VK_EXT_external_memory_host)": [
-        {
-          "vuid": "VUID-VkImportMemoryHostPointerInfoEXT-handleType-01747",
-          "text": " If <code>handleType</code> is not <code>0</code>, it <strong class=\"purple\">must</strong> be supported for import, as reported in <a href=\"#VkExternalMemoryPropertiesKHR\">VkExternalMemoryPropertiesKHR</a>"
-        },
-        {
-          "vuid": "VUID-VkImportMemoryHostPointerInfoEXT-handleType-01748",
-          "text": " If <code>handleType</code> is not <code>0</code>, it <strong class=\"purple\">must</strong> be <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT</code> or <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkImportMemoryHostPointerInfoEXT-pHostPointer-01749",
-          "text": " <code>pHostPointer</code> <strong class=\"purple\">must</strong> be a pointer aligned to an integer multiple of <code>VkPhysicalDeviceExternalMemoryHostPropertiesEXT</code>::<code>minImportedHostPointerAlignment</code>"
-        },
-        {
-          "vuid": "VUID-VkImportMemoryHostPointerInfoEXT-handleType-01750",
-          "text": " If <code>handleType</code> is <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT</code>, <code>pHostPointer</code> <strong class=\"purple\">must</strong> be a pointer to <code>allocationSize</code> number of bytes of host memory, where <code>allocationSize</code> is the member of the <code>VkMemoryAllocateInfo</code> structure this structure is chained to"
-        },
-        {
-          "vuid": "VUID-VkImportMemoryHostPointerInfoEXT-handleType-01751",
-          "text": " If <code>handleType</code> is <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT</code>, <code>pHostPointer</code> <strong class=\"purple\">must</strong> be a pointer to <code>allocationSize</code> number of bytes of host mapped foreign memory, where <code>allocationSize</code> is the member of the <code>VkMemoryAllocateInfo</code> structure this structure is chained to"
-        },
-        {
-          "vuid": "VUID-VkImportMemoryHostPointerInfoEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkImportMemoryHostPointerInfoEXT-handleType-parameter",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalMemoryHandleTypeFlagBits\">VkExternalMemoryHandleTypeFlagBits</a> value"
-        }
-      ]
-    },
-    "vkGetMemoryHostPointerPropertiesEXT": {
-      "(VK_EXT_external_memory_host)": [
-        {
-          "vuid": "VUID-vkGetMemoryHostPointerPropertiesEXT-handleType-01752",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> be <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT</code> or <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT</code>"
-        },
-        {
-          "vuid": "VUID-vkGetMemoryHostPointerPropertiesEXT-pHostPointer-01753",
-          "text": " <code>pHostPointer</code> <strong class=\"purple\">must</strong> be a pointer aligned to an integer multiple of <code>VkPhysicalDeviceExternalMemoryHostPropertiesEXT</code>::<code>minImportedHostPointerAlignment</code>"
-        },
-        {
-          "vuid": "VUID-vkGetMemoryHostPointerPropertiesEXT-handleType-01754",
-          "text": " If <code>handleType</code> is <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT</code>, <code>pHostPointer</code> <strong class=\"purple\">must</strong> be a pointer to host memory"
-        },
-        {
-          "vuid": "VUID-vkGetMemoryHostPointerPropertiesEXT-handleType-01755",
-          "text": " If <code>handleType</code> is <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT</code>, <code>pHostPointer</code> <strong class=\"purple\">must</strong> be a pointer to host mapped foreign memory"
-        },
-        {
-          "vuid": "VUID-vkGetMemoryHostPointerPropertiesEXT-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetMemoryHostPointerPropertiesEXT-handleType-parameter",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalMemoryHandleTypeFlagBits\">VkExternalMemoryHandleTypeFlagBits</a> value"
-        },
-        {
-          "vuid": "VUID-vkGetMemoryHostPointerPropertiesEXT-pMemoryHostPointerProperties-parameter",
-          "text": " <code>pMemoryHostPointerProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkMemoryHostPointerPropertiesEXT</code> structure"
-        }
-      ]
-    },
-    "VkMemoryHostPointerPropertiesEXT": {
-      "(VK_EXT_external_memory_host)": [
-        {
-          "vuid": "VUID-VkMemoryHostPointerPropertiesEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkMemoryHostPointerPropertiesEXT-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        }
-      ]
-    },
-    "VkImportAndroidHardwareBufferInfoANDROID": {
-      "(VK_ANDROID_external_memory_android_hardware_buffer)": [
-        {
-          "vuid": "VUID-VkImportAndroidHardwareBufferInfoANDROID-buffer-01880",
-          "text": " If <code>buffer</code> is not <code>NULL</code>, Android hardware buffers <strong class=\"purple\">must</strong> be supported for import, as reported by <a href=\"#VkExternalImageFormatProperties\">VkExternalImageFormatProperties</a> or <a href=\"#VkExternalBufferProperties\">VkExternalBufferProperties</a>."
-        },
-        {
-          "vuid": "VUID-VkImportAndroidHardwareBufferInfoANDROID-buffer-01881",
-          "text": " If <code>buffer</code> is not <code>NULL</code>, it <strong class=\"purple\">must</strong> be a valid Android hardware buffer object with format and usage compatible with Vulkan as described by <a href=\"#VkExternalMemoryHandleTypeFlagBits\">VkExternalMemoryHandleTypeFlagBits</a>."
-        },
-        {
-          "vuid": "VUID-VkImportAndroidHardwareBufferInfoANDROID-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID</code>"
-        },
-        {
-          "vuid": "VUID-VkImportAndroidHardwareBufferInfoANDROID-buffer-parameter",
-          "text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>AHardwareBuffer</code> value"
-        }
-      ]
-    },
-    "vkGetMemoryAndroidHardwareBufferANDROID": {
-      "(VK_ANDROID_external_memory_android_hardware_buffer)": [
-        {
-          "vuid": "VUID-vkGetMemoryAndroidHardwareBufferANDROID-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetMemoryAndroidHardwareBufferANDROID-pInfo-parameter",
-          "text": " <code>pInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkMemoryGetAndroidHardwareBufferInfoANDROID</code> structure"
-        },
-        {
-          "vuid": "VUID-vkGetMemoryAndroidHardwareBufferANDROID-pBuffer-parameter",
-          "text": " <code>pBuffer</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid pointer to a <code>AHardwareBuffer</code> value"
-        }
-      ]
-    },
-    "VkMemoryGetAndroidHardwareBufferInfoANDROID": {
-      "(VK_ANDROID_external_memory_android_hardware_buffer)": [
-        {
-          "vuid": "VUID-VkMemoryGetAndroidHardwareBufferInfoANDROID-handleTypes-01882",
-          "text": " <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID</code> <strong class=\"purple\">must</strong> have been included in <a href=\"#VkExportMemoryAllocateInfoKHR\">VkExportMemoryAllocateInfoKHR</a>::<code>handleTypes</code> when <code>memory</code> was created."
-        },
-        {
-          "vuid": "VUID-VkMemoryGetAndroidHardwareBufferInfoANDROID-pNext-01883",
-          "text": " If the <code>pNext</code> chain of the <code>VkMemoryAllocateInfo</code> used to allocate <code>memory</code> included a <code>VkMemoryDedicatedAllocateInfo</code> with non-NULL <code>image</code> member, then that <code>image</code> <strong class=\"purple\">must</strong> already be bound to <code>memory</code>."
-        }
-      ]
-    },
-    "vkGetAndroidHardwareBufferPropertiesANDROID": {
-      "(VK_ANDROID_external_memory_android_hardware_buffer)": [
-        {
-          "vuid": "VUID-vkGetAndroidHardwareBufferPropertiesANDROID-buffer-01884",
-          "text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid Android hardware buffer object with at least one of the <code>AHARDWAREBUFFER_USAGE_GPU_</code>* usage flags."
-        },
-        {
-          "vuid": "VUID-vkGetAndroidHardwareBufferPropertiesANDROID-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetAndroidHardwareBufferPropertiesANDROID-buffer-parameter",
-          "text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>AHardwareBuffer</code> value"
-        },
-        {
-          "vuid": "VUID-vkGetAndroidHardwareBufferPropertiesANDROID-pProperties-parameter",
-          "text": " <code>pProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkAndroidHardwareBufferPropertiesANDROID</code> structure"
-        }
-      ]
-    },
-    "VkAndroidHardwareBufferFormatPropertiesANDROID": {
-      "(VK_ANDROID_external_memory_android_hardware_buffer)": [
-        {
-          "vuid": "VUID-VkAndroidHardwareBufferFormatPropertiesANDROID-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID</code>"
-        }
-      ]
-    },
-    "VkExportMemoryAllocateInfoNV": {
-      "(VK_NV_external_memory)": [
-        {
-          "vuid": "VUID-VkExportMemoryAllocateInfoNV-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV</code>"
-        },
-        {
-          "vuid": "VUID-VkExportMemoryAllocateInfoNV-handleTypes-parameter",
-          "text": " <code>handleTypes</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkExternalMemoryHandleTypeFlagBitsNV\">VkExternalMemoryHandleTypeFlagBitsNV</a> values"
-        }
-      ]
-    },
-    "VkExportMemoryWin32HandleInfoNV": {
-      "(VK_NV_external_memory_win32)": [
-        {
-          "vuid": "VUID-VkExportMemoryWin32HandleInfoNV-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV</code>"
-        },
-        {
-          "vuid": "VUID-VkExportMemoryWin32HandleInfoNV-pAttributes-parameter",
-          "text": " If <code>pAttributes</code> is not <code>NULL</code>, <code>pAttributes</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>SECURITY_ATTRIBUTES</code> value"
-        }
-      ]
-    },
-    "VkImportMemoryWin32HandleInfoNV": {
-      "(VK_NV_external_memory_win32)": [
-        {
-          "vuid": "VUID-VkImportMemoryWin32HandleInfoNV-handleType-01327",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> not have more than one bit set."
-        },
-        {
-          "vuid": "VUID-VkImportMemoryWin32HandleInfoNV-handle-01328",
-          "text": " <code>handle</code> <strong class=\"purple\">must</strong> be a valid handle to memory, obtained as specified by <code>handleType</code>."
-        },
-        {
-          "vuid": "VUID-VkImportMemoryWin32HandleInfoNV-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV</code>"
-        },
-        {
-          "vuid": "VUID-VkImportMemoryWin32HandleInfoNV-handleType-parameter",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkExternalMemoryHandleTypeFlagBitsNV\">VkExternalMemoryHandleTypeFlagBitsNV</a> values"
-        }
-      ]
-    },
-    "vkGetMemoryWin32HandleNV": {
-      "(VK_NV_external_memory_win32)": [
-        {
-          "vuid": "VUID-vkGetMemoryWin32HandleNV-handleType-01326",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a flag specified in <a href=\"#VkExportMemoryAllocateInfoNV\">VkExportMemoryAllocateInfoNV</a>::<code>handleTypes</code> when allocating <code>memory</code>"
-        },
-        {
-          "vuid": "VUID-vkGetMemoryWin32HandleNV-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetMemoryWin32HandleNV-memory-parameter",
-          "text": " <code>memory</code> <strong class=\"purple\">must</strong> be a valid <code>VkDeviceMemory</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetMemoryWin32HandleNV-handleType-parameter",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkExternalMemoryHandleTypeFlagBitsNV\">VkExternalMemoryHandleTypeFlagBitsNV</a> values"
-        },
-        {
-          "vuid": "VUID-vkGetMemoryWin32HandleNV-handleType-requiredbitmask",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkGetMemoryWin32HandleNV-pHandle-parameter",
-          "text": " <code>pHandle</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>HANDLE</code> value"
-        },
-        {
-          "vuid": "VUID-vkGetMemoryWin32HandleNV-memory-parent",
-          "text": " <code>memory</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "VkMemoryAllocateFlagsInfo": {
-      "(VK_VERSION_1_1,VK_KHR_device_group)": [
-        {
-          "vuid": "VUID-VkMemoryAllocateFlagsInfo-deviceMask-00675",
-          "text": " If <code>VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT</code> is set, <code>deviceMask</code> <strong class=\"purple\">must</strong> be a valid device mask."
-        },
-        {
-          "vuid": "VUID-VkMemoryAllocateFlagsInfo-deviceMask-00676",
-          "text": " If <code>VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT</code> is set, <code>deviceMask</code> <strong class=\"purple\">must</strong> not be zero"
-        },
-        {
-          "vuid": "VUID-VkMemoryAllocateFlagsInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkMemoryAllocateFlagsInfo-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkMemoryAllocateFlagBits\">VkMemoryAllocateFlagBits</a> values"
-        }
-      ]
-    },
-    "vkFreeMemory": {
-      "core": [
-        {
-          "vuid": "VUID-vkFreeMemory-memory-00677",
-          "text": " All submitted commands that refer to <code>memory</code> (via images or buffers) <strong class=\"purple\">must</strong> have completed execution"
-        },
-        {
-          "vuid": "VUID-vkFreeMemory-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkFreeMemory-memory-parameter",
-          "text": " If <code>memory</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>memory</code> <strong class=\"purple\">must</strong> be a valid <code>VkDeviceMemory</code> handle"
-        },
-        {
-          "vuid": "VUID-vkFreeMemory-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkFreeMemory-memory-parent",
-          "text": " If <code>memory</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkMapMemory": {
-      "core": [
-        {
-          "vuid": "VUID-vkMapMemory-memory-00678",
-          "text": " <code>memory</code> <strong class=\"purple\">must</strong> not be currently mapped"
-        },
-        {
-          "vuid": "VUID-vkMapMemory-offset-00679",
-          "text": " <code>offset</code> <strong class=\"purple\">must</strong> be less than the size of <code>memory</code>"
-        },
-        {
-          "vuid": "VUID-vkMapMemory-size-00680",
-          "text": " If <code>size</code> is not equal to <code>VK_WHOLE_SIZE</code>, <code>size</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkMapMemory-size-00681",
-          "text": " If <code>size</code> is not equal to <code>VK_WHOLE_SIZE</code>, <code>size</code> <strong class=\"purple\">must</strong> be less than or equal to the size of the <code>memory</code> minus <code>offset</code>"
-        },
-        {
-          "vuid": "VUID-vkMapMemory-memory-00682",
-          "text": " <code>memory</code> <strong class=\"purple\">must</strong> have been created with a memory type that reports <code>VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT</code>"
-        },
-        {
-          "vuid": "VUID-vkMapMemory-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkMapMemory-memory-parameter",
-          "text": " <code>memory</code> <strong class=\"purple\">must</strong> be a valid <code>VkDeviceMemory</code> handle"
-        },
-        {
-          "vuid": "VUID-vkMapMemory-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkMapMemory-ppData-parameter",
-          "text": " <code>ppData</code> <strong class=\"purple\">must</strong> be a valid pointer to a pointer value"
-        },
-        {
-          "vuid": "VUID-vkMapMemory-memory-parent",
-          "text": " <code>memory</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ],
-      "(VK_KHR_device_group)": [
-        {
-          "vuid": "VUID-vkMapMemory-memory-00683",
-          "text": " <code>memory</code> <strong class=\"purple\">must</strong> not have been allocated with multiple instances."
-        }
-      ]
-    },
-    "vkFlushMappedMemoryRanges": {
-      "core": [
-        {
-          "vuid": "VUID-vkFlushMappedMemoryRanges-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkFlushMappedMemoryRanges-pMemoryRanges-parameter",
-          "text": " <code>pMemoryRanges</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>memoryRangeCount</code> valid <code>VkMappedMemoryRange</code> structures"
-        },
-        {
-          "vuid": "VUID-vkFlushMappedMemoryRanges-memoryRangeCount-arraylength",
-          "text": " <code>memoryRangeCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ]
-    },
-    "vkInvalidateMappedMemoryRanges": {
-      "core": [
-        {
-          "vuid": "VUID-vkInvalidateMappedMemoryRanges-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkInvalidateMappedMemoryRanges-pMemoryRanges-parameter",
-          "text": " <code>pMemoryRanges</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>memoryRangeCount</code> valid <code>VkMappedMemoryRange</code> structures"
-        },
-        {
-          "vuid": "VUID-vkInvalidateMappedMemoryRanges-memoryRangeCount-arraylength",
-          "text": " <code>memoryRangeCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ]
-    },
-    "VkMappedMemoryRange": {
-      "core": [
-        {
-          "vuid": "VUID-VkMappedMemoryRange-memory-00684",
-          "text": " <code>memory</code> <strong class=\"purple\">must</strong> be currently mapped"
-        },
-        {
-          "vuid": "VUID-VkMappedMemoryRange-size-00685",
-          "text": " If <code>size</code> is not equal to <code>VK_WHOLE_SIZE</code>, <code>offset</code> and <code>size</code> <strong class=\"purple\">must</strong> specify a range contained within the currently mapped range of <code>memory</code>"
-        },
-        {
-          "vuid": "VUID-VkMappedMemoryRange-size-00686",
-          "text": " If <code>size</code> is equal to <code>VK_WHOLE_SIZE</code>, <code>offset</code> <strong class=\"purple\">must</strong> be within the currently mapped range of <code>memory</code>"
-        },
-        {
-          "vuid": "VUID-VkMappedMemoryRange-size-01389",
-          "text": " If <code>size</code> is equal to <code>VK_WHOLE_SIZE</code>, the end of the current mapping of <code>memory</code> <strong class=\"purple\">must</strong> be a multiple of <a href=\"#VkPhysicalDeviceLimits\">VkPhysicalDeviceLimits</a>::<code>nonCoherentAtomSize</code> bytes from the beginning of the memory object."
-        },
-        {
-          "vuid": "VUID-VkMappedMemoryRange-offset-00687",
-          "text": " <code>offset</code> <strong class=\"purple\">must</strong> be a multiple of <a href=\"#VkPhysicalDeviceLimits\">VkPhysicalDeviceLimits</a>::<code>nonCoherentAtomSize</code>"
-        },
-        {
-          "vuid": "VUID-VkMappedMemoryRange-size-01390",
-          "text": " If <code>size</code> is not equal to <code>VK_WHOLE_SIZE</code>, <code>size</code> <strong class=\"purple\">must</strong> either be a multiple of <a href=\"#VkPhysicalDeviceLimits\">VkPhysicalDeviceLimits</a>::<code>nonCoherentAtomSize</code>, or <code>offset</code> plus <code>size</code> <strong class=\"purple\">must</strong> equal the size of <code>memory</code>."
-        },
-        {
-          "vuid": "VUID-VkMappedMemoryRange-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE</code>"
-        },
-        {
-          "vuid": "VUID-VkMappedMemoryRange-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkMappedMemoryRange-memory-parameter",
-          "text": " <code>memory</code> <strong class=\"purple\">must</strong> be a valid <code>VkDeviceMemory</code> handle"
-        }
-      ]
-    },
-    "vkUnmapMemory": {
-      "core": [
-        {
-          "vuid": "VUID-vkUnmapMemory-memory-00689",
-          "text": " <code>memory</code> <strong class=\"purple\">must</strong> be currently mapped"
-        },
-        {
-          "vuid": "VUID-vkUnmapMemory-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkUnmapMemory-memory-parameter",
-          "text": " <code>memory</code> <strong class=\"purple\">must</strong> be a valid <code>VkDeviceMemory</code> handle"
-        },
-        {
-          "vuid": "VUID-vkUnmapMemory-memory-parent",
-          "text": " <code>memory</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkGetDeviceMemoryCommitment": {
-      "core": [
-        {
-          "vuid": "VUID-vkGetDeviceMemoryCommitment-memory-00690",
-          "text": " <code>memory</code> <strong class=\"purple\">must</strong> have been created with a memory type that reports <code>VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT</code>"
-        },
-        {
-          "vuid": "VUID-vkGetDeviceMemoryCommitment-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetDeviceMemoryCommitment-memory-parameter",
-          "text": " <code>memory</code> <strong class=\"purple\">must</strong> be a valid <code>VkDeviceMemory</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetDeviceMemoryCommitment-pCommittedMemoryInBytes-parameter",
-          "text": " <code>pCommittedMemoryInBytes</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkDeviceSize</code> value"
-        },
-        {
-          "vuid": "VUID-vkGetDeviceMemoryCommitment-memory-parent",
-          "text": " <code>memory</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkGetDeviceGroupPeerMemoryFeatures": {
-      "(VK_VERSION_1_1,VK_KHR_device_group)": [
-        {
-          "vuid": "VUID-vkGetDeviceGroupPeerMemoryFeatures-heapIndex-00691",
-          "text": " <code>heapIndex</code> <strong class=\"purple\">must</strong> be less than <code>memoryHeapCount</code>"
-        },
-        {
-          "vuid": "VUID-vkGetDeviceGroupPeerMemoryFeatures-localDeviceIndex-00692",
-          "text": " <code>localDeviceIndex</code> <strong class=\"purple\">must</strong> be a valid device index"
-        },
-        {
-          "vuid": "VUID-vkGetDeviceGroupPeerMemoryFeatures-remoteDeviceIndex-00693",
-          "text": " <code>remoteDeviceIndex</code> <strong class=\"purple\">must</strong> be a valid device index"
-        },
-        {
-          "vuid": "VUID-vkGetDeviceGroupPeerMemoryFeatures-localDeviceIndex-00694",
-          "text": " <code>localDeviceIndex</code> <strong class=\"purple\">must</strong> not equal remoteDeviceIndex"
-        },
-        {
-          "vuid": "VUID-vkGetDeviceGroupPeerMemoryFeatures-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetDeviceGroupPeerMemoryFeatures-pPeerMemoryFeatures-parameter",
-          "text": " <code>pPeerMemoryFeatures</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkPeerMemoryFeatureFlags\">VkPeerMemoryFeatureFlags</a> value"
-        },
-        {
-          "vuid": "VUID-vkGetDeviceGroupPeerMemoryFeatures-pPeerMemoryFeatures-requiredbitmask",
-          "text": " <code>pPeerMemoryFeatures</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        }
-      ]
-    },
-    "vkCreateBuffer": {
-      "core": [
-        {
-          "vuid": "VUID-vkCreateBuffer-flags-00911",
-          "text": " If the <code>flags</code> member of <code>pCreateInfo</code> includes <code>VK_BUFFER_CREATE_SPARSE_BINDING_BIT</code>, creating this <code>VkBuffer</code> <strong class=\"purple\">must</strong> not cause the total required sparse memory for all currently valid sparse resources on the device to exceed <code>VkPhysicalDeviceLimits</code>::<code>sparseAddressSpaceSize</code>"
-        },
-        {
-          "vuid": "VUID-vkCreateBuffer-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateBuffer-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkBufferCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateBuffer-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateBuffer-pBuffer-parameter",
-          "text": " <code>pBuffer</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkBuffer</code> handle"
-        }
-      ]
-    },
-    "VkBufferCreateInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkBufferCreateInfo-size-00912",
-          "text": " <code>size</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferCreateInfo-sharingMode-00913",
-          "text": " If <code>sharingMode</code> is <code>VK_SHARING_MODE_CONCURRENT</code>, <code>pQueueFamilyIndices</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>queueFamilyIndexCount</code> <code>uint32_t</code> values"
-        },
-        {
-          "vuid": "VUID-VkBufferCreateInfo-sharingMode-00914",
-          "text": " If <code>sharingMode</code> is <code>VK_SHARING_MODE_CONCURRENT</code>, <code>queueFamilyIndexCount</code> <strong class=\"purple\">must</strong> be greater than <code>1</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferCreateInfo-flags-00915",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-sparseBinding,sparse bindings&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_BUFFER_CREATE_SPARSE_BINDING_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferCreateInfo-flags-00916",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-sparseResidencyBuffer,sparse buffer residency&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferCreateInfo-flags-00917",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-sparseResidencyAliased,sparse aliased residency&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_BUFFER_CREATE_SPARSE_ALIASED_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferCreateInfo-flags-00918",
-          "text": " If <code>flags</code> contains <code>VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT</code> or <code>VK_BUFFER_CREATE_SPARSE_ALIASED_BIT</code>, it <strong class=\"purple\">must</strong> also contain <code>VK_BUFFER_CREATE_SPARSE_BINDING_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferCreateInfo-pNext-pNext",
-          "text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkDedicatedAllocationBufferCreateInfoNV\">VkDedicatedAllocationBufferCreateInfoNV</a> or <a href=\"#VkExternalMemoryBufferCreateInfo\">VkExternalMemoryBufferCreateInfo</a>"
-        },
-        {
-          "vuid": "VUID-VkBufferCreateInfo-sType-unique",
-          "text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
-        },
-        {
-          "vuid": "VUID-VkBufferCreateInfo-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkBufferCreateFlagBits\">VkBufferCreateFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkBufferCreateInfo-usage-parameter",
-          "text": " <code>usage</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkBufferUsageFlagBits\">VkBufferUsageFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkBufferCreateInfo-usage-requiredbitmask",
-          "text": " <code>usage</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferCreateInfo-sharingMode-parameter",
-          "text": " <code>sharingMode</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSharingMode\">VkSharingMode</a> value"
-        }
-      ],
-      "!(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
-        {
-          "vuid": "VUID-VkBufferCreateInfo-sharingMode-01391",
-          "text": " If <code>sharingMode</code> is <code>VK_SHARING_MODE_CONCURRENT</code>, each element of <code>pQueueFamilyIndices</code> <strong class=\"purple\">must</strong> be unique and <strong class=\"purple\">must</strong> be less than <code>pQueueFamilyPropertyCount</code> returned by <a href=\"#vkGetPhysicalDeviceQueueFamilyProperties\">vkGetPhysicalDeviceQueueFamilyProperties</a> for the <code>physicalDevice</code> that was used to create <code>device</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
-        {
-          "vuid": "VUID-VkBufferCreateInfo-sharingMode-01419",
-          "text": " If <code>sharingMode</code> is <code>VK_SHARING_MODE_CONCURRENT</code>, each element of <code>pQueueFamilyIndices</code> <strong class=\"purple\">must</strong> be unique and <strong class=\"purple\">must</strong> be less than <code>pQueueFamilyPropertyCount</code> returned by either <a href=\"#vkGetPhysicalDeviceQueueFamilyProperties\">vkGetPhysicalDeviceQueueFamilyProperties</a> or <a href=\"#vkGetPhysicalDeviceQueueFamilyProperties2\">vkGetPhysicalDeviceQueueFamilyProperties2</a> for the <code>physicalDevice</code> that was used to create <code>device</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_external_memory)": [
-        {
-          "vuid": "VUID-VkBufferCreateInfo-pNext-00920",
-          "text": " If the <code>pNext</code> chain contains an instance of <a href=\"#VkExternalMemoryBufferCreateInfo\">VkExternalMemoryBufferCreateInfo</a>, its <code>handleTypes</code> member <strong class=\"purple\">must</strong> only contain bits that are also in <a href=\"#VkExternalBufferProperties\">VkExternalBufferProperties</a>::<code>externalMemoryProperties.pname</code>:compatibleHandleTypes, as returned by <a href=\"#vkGetPhysicalDeviceExternalBufferProperties\">vkGetPhysicalDeviceExternalBufferProperties</a> with <code>pExternalBufferInfo</code>\\-&amp;amp;gt;<code>handleType</code> equal to any one of the handle types specified in <a href=\"#VkExternalMemoryBufferCreateInfo\">VkExternalMemoryBufferCreateInfo</a>::<code>handleTypes</code>"
-        }
-      ],
-      "(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-VkBufferCreateInfo-flags-01887",
-          "text": " If the protected memory feature is not enabled, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_BUFFER_CREATE_PROTECTED_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferCreateInfo-None-01888",
-          "text": " If any of the bits <code>VK_BUFFER_CREATE_SPARSE_BINDING_BIT</code>, <code>VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT</code>, or <code>VK_BUFFER_CREATE_SPARSE_ALIASED_BIT</code> are set, <code>VK_BUFFER_CREATE_PROTECTED_BIT</code> <strong class=\"purple\">must</strong> not also be set"
-        }
-      ],
-      "(VK_NV_dedicated_allocation)": [
-        {
-          "vuid": "VUID-VkBufferCreateInfo-pNext-01571",
-          "text": " If the <code>pNext</code> chain contains an instance of <a href=\"#VkDedicatedAllocationBufferCreateInfoNV\">VkDedicatedAllocationBufferCreateInfoNV</a>, and the <code>dedicatedAllocation</code> member of the chained structure is <code>VK_TRUE</code>, then <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_BUFFER_CREATE_SPARSE_BINDING_BIT</code>, <code>VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT</code>, or <code>VK_BUFFER_CREATE_SPARSE_ALIASED_BIT</code>"
-        }
-      ]
-    },
-    "VkDedicatedAllocationBufferCreateInfoNV": {
-      "(VK_NV_dedicated_allocation)": [
-        {
-          "vuid": "VUID-VkDedicatedAllocationBufferCreateInfoNV-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV</code>"
-        }
-      ]
-    },
-    "VkExternalMemoryBufferCreateInfo": {
-      "(VK_VERSION_1_1,VK_KHR_external_memory)": [
-        {
-          "vuid": "VUID-VkExternalMemoryBufferCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkExternalMemoryBufferCreateInfo-handleTypes-parameter",
-          "text": " <code>handleTypes</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkExternalMemoryHandleTypeFlagBits\">VkExternalMemoryHandleTypeFlagBits</a> values"
-        }
-      ]
-    },
-    "vkDestroyBuffer": {
-      "core": [
-        {
-          "vuid": "VUID-vkDestroyBuffer-buffer-00922",
-          "text": " All submitted commands that refer to <code>buffer</code>, either directly or via a <code>VkBufferView</code>, <strong class=\"purple\">must</strong> have completed execution"
-        },
-        {
-          "vuid": "VUID-vkDestroyBuffer-buffer-00923",
-          "text": " If <code>VkAllocationCallbacks</code> were provided when <code>buffer</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
-        },
-        {
-          "vuid": "VUID-vkDestroyBuffer-buffer-00924",
-          "text": " If no <code>VkAllocationCallbacks</code> were provided when <code>buffer</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-vkDestroyBuffer-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyBuffer-buffer-parameter",
-          "text": " If <code>buffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyBuffer-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkDestroyBuffer-buffer-parent",
-          "text": " If <code>buffer</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkCreateBufferView": {
-      "core": [
-        {
-          "vuid": "VUID-vkCreateBufferView-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateBufferView-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkBufferViewCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateBufferView-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateBufferView-pView-parameter",
-          "text": " <code>pView</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkBufferView</code> handle"
-        }
-      ]
-    },
-    "VkBufferViewCreateInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkBufferViewCreateInfo-offset-00925",
-          "text": " <code>offset</code> <strong class=\"purple\">must</strong> be less than the size of <code>buffer</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferViewCreateInfo-offset-00926",
-          "text": " <code>offset</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceLimits</code>::<code>minTexelBufferOffsetAlignment</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferViewCreateInfo-range-00928",
-          "text": " If <code>range</code> is not equal to <code>VK_WHOLE_SIZE</code>, <code>range</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferViewCreateInfo-range-00929",
-          "text": " If <code>range</code> is not equal to <code>VK_WHOLE_SIZE</code>, <code>range</code> <strong class=\"purple\">must</strong> be a multiple of the element size of <code>format</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferViewCreateInfo-range-00930",
-          "text": " If <code>range</code> is not equal to <code>VK_WHOLE_SIZE</code>, <code>range</code> divided by the element size of <code>format</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxTexelBufferElements</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferViewCreateInfo-offset-00931",
-          "text": " If <code>range</code> is not equal to <code>VK_WHOLE_SIZE</code>, the sum of <code>offset</code> and <code>range</code> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferViewCreateInfo-buffer-00932",
-          "text": " <code>buffer</code> <strong class=\"purple\">must</strong> have been created with a <code>usage</code> value containing at least one of <code>VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT</code> or <code>VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferViewCreateInfo-buffer-00933",
-          "text": " If <code>buffer</code> was created with <code>usage</code> containing <code>VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT</code>, <code>format</code> <strong class=\"purple\">must</strong> be supported for uniform texel buffers, as specified by the <code>VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT</code> flag in <code>VkFormatProperties</code>::<code>bufferFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferViewCreateInfo-buffer-00934",
-          "text": " If <code>buffer</code> was created with <code>usage</code> containing <code>VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT</code>, <code>format</code> <strong class=\"purple\">must</strong> be supported for storage texel buffers, as specified by the <code>VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT</code> flag in <code>VkFormatProperties</code>::<code>bufferFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferViewCreateInfo-buffer-00935",
-          "text": " If <code>buffer</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
-        },
-        {
-          "vuid": "VUID-VkBufferViewCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferViewCreateInfo-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferViewCreateInfo-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferViewCreateInfo-buffer-parameter",
-          "text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-VkBufferViewCreateInfo-format-parameter",
-          "text": " <code>format</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFormat\">VkFormat</a> value"
-        }
-      ]
-    },
-    "vkDestroyBufferView": {
-      "core": [
-        {
-          "vuid": "VUID-vkDestroyBufferView-bufferView-00936",
-          "text": " All submitted commands that refer to <code>bufferView</code> <strong class=\"purple\">must</strong> have completed execution"
-        },
-        {
-          "vuid": "VUID-vkDestroyBufferView-bufferView-00937",
-          "text": " If <code>VkAllocationCallbacks</code> were provided when <code>bufferView</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
-        },
-        {
-          "vuid": "VUID-vkDestroyBufferView-bufferView-00938",
-          "text": " If no <code>VkAllocationCallbacks</code> were provided when <code>bufferView</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-vkDestroyBufferView-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyBufferView-bufferView-parameter",
-          "text": " If <code>bufferView</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>bufferView</code> <strong class=\"purple\">must</strong> be a valid <code>VkBufferView</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyBufferView-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkDestroyBufferView-bufferView-parent",
-          "text": " If <code>bufferView</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkCreateImage": {
-      "core": [
-        {
-          "vuid": "VUID-vkCreateImage-flags-00939",
-          "text": " If the <code>flags</code> member of <code>pCreateInfo</code> includes <code>VK_IMAGE_CREATE_SPARSE_BINDING_BIT</code>, creating this <code>VkImage</code> <strong class=\"purple\">must</strong> not cause the total required sparse memory for all currently valid sparse resources on the device to exceed <code>VkPhysicalDeviceLimits</code>::<code>sparseAddressSpaceSize</code>"
-        },
-        {
-          "vuid": "VUID-vkCreateImage-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateImage-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkImageCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateImage-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateImage-pImage-parameter",
-          "text": " <code>pImage</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkImage</code> handle"
-        }
-      ]
-    },
-    "VkImageCreateInfo": {
-      "!(VK_ANDROID_external_memory_android_hardware_buffer)": [
-        {
-          "vuid": "VUID-VkImageCreateInfo-format-00940",
-          "text": " The combination of <code>format</code>, <code>imageType</code>, <code>tiling</code>, <code>usage</code>, and <code>flags</code> <strong class=\"purple\">must</strong> be supported, as indicated by a <code>VK_SUCCESS</code> return value from <code>vkGetPhysicalDeviceImageFormatProperties</code> invoked with the same values passed to the corresponding parameters."
-        }
-      ],
-      "(VK_ANDROID_external_memory_android_hardware_buffer)": [
-        {
-          "vuid": "VUID-VkImageCreateInfo-pNext-01889",
-          "text": " If the <code>pNext</code> chain doesn&#8217;t contain an instance of <a href=\"#VkExternalFormatANDROID\">VkExternalFormatANDROID</a>, or if <code>format</code> is not VK_FORMAT_UNDEFINED, the combination of <code>format</code>, <code>imageType</code>, <code>tiling</code>, <code>usage</code>, and <code>flags</code> <strong class=\"purple\">must</strong> be supported, as indicated by a <code>VK_SUCCESS</code> return value from <code>vkGetPhysicalDeviceImageFormatProperties</code> invoked with the same values passed to the corresponding parameters."
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-pNext-01892",
-          "text": " If the <code>pNext</code> chain includes a <a href=\"#VkExternalMemoryImageCreateInfo\">VkExternalMemoryImageCreateInfo</a> structure whose <code>handleTypes</code> member includes <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID</code>:"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-pNext-01893",
-          "text": " If the <code>pNext</code> chain includes a <a href=\"#VkExternalFormatANDROID\">VkExternalFormatANDROID</a> structure whose <code>externalFormat</code> member is not <code>0</code>:"
-        }
-      ],
-      "core": [
-        {
-          "vuid": "VUID-VkImageCreateInfo-sharingMode-00941",
-          "text": " If <code>sharingMode</code> is <code>VK_SHARING_MODE_CONCURRENT</code>, <code>pQueueFamilyIndices</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>queueFamilyIndexCount</code> <code>uint32_t</code> values"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-sharingMode-00942",
-          "text": " If <code>sharingMode</code> is <code>VK_SHARING_MODE_CONCURRENT</code>, <code>queueFamilyIndexCount</code> <strong class=\"purple\">must</strong> be greater than <code>1</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-format-00943",
-          "text": " <code>format</code> <strong class=\"purple\">must</strong> not be <code>VK_FORMAT_UNDEFINED</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-extent-00944",
-          "text": " <code>extent</code>::<code>width</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>."
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-extent-00945",
-          "text": " <code>extent</code>::<code>height</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>."
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-extent-00946",
-          "text": " <code>extent</code>::<code>depth</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>."
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-mipLevels-00947",
-          "text": " <code>mipLevels</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-arrayLayers-00948",
-          "text": " <code>arrayLayers</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-flags-00949",
-          "text": " If <code>flags</code> contains <code>VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT</code>, <code>imageType</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_TYPE_2D</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-imageType-00951",
-          "text": " If <code>imageType</code> is <code>VK_IMAGE_TYPE_1D</code>, <code>extent.width</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxImageDimension1D</code>, or <code>VkImageFormatProperties</code>::<code>maxExtent.width</code> (as returned by <code>vkGetPhysicalDeviceImageFormatProperties</code> with <code>format</code>, <code>imageType</code>, <code>tiling</code>, <code>usage</code>, and <code>flags</code> equal to those in this structure) - whichever is higher"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-imageType-00952",
-          "text": " If <code>imageType</code> is <code>VK_IMAGE_TYPE_2D</code> and <code>flags</code> does not contain <code>VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT</code>, <code>extent.width</code> and <code>extent.height</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxImageDimension2D</code>, or <code>VkImageFormatProperties</code>::<code>maxExtent.width</code>/<code>height</code> (as returned by <code>vkGetPhysicalDeviceImageFormatProperties</code> with <code>format</code>, <code>imageType</code>, <code>tiling</code>, <code>usage</code>, and <code>flags</code> equal to those in this structure) - whichever is higher"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-imageType-00953",
-          "text": " If <code>imageType</code> is <code>VK_IMAGE_TYPE_2D</code> and <code>flags</code> contains <code>VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT</code>, <code>extent.width</code> and <code>extent.height</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxImageDimensionCube</code>, or <code>VkImageFormatProperties</code>::<code>maxExtent.width</code>/<code>height</code> (as returned by <code>vkGetPhysicalDeviceImageFormatProperties</code> with <code>format</code>, <code>imageType</code>, <code>tiling</code>, <code>usage</code>, and <code>flags</code> equal to those in this structure) - whichever is higher"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-imageType-00954",
-          "text": " If <code>imageType</code> is <code>VK_IMAGE_TYPE_2D</code> and <code>flags</code> contains <code>VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT</code>, <code>extent.width</code> and <code>extent.height</code> <strong class=\"purple\">must</strong> be equal and <code>arrayLayers</code> <strong class=\"purple\">must</strong> be greater than or equal to 6"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-imageType-00955",
-          "text": " If <code>imageType</code> is <code>VK_IMAGE_TYPE_3D</code>, <code>extent.width</code>, <code>extent.height</code> and <code>extent.depth</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxImageDimension3D</code>, or <code>VkImageFormatProperties</code>::<code>maxExtent.width</code>/<code>height</code>/<code>depth</code> (as returned by <code>vkGetPhysicalDeviceImageFormatProperties</code> with <code>format</code>, <code>imageType</code>, <code>tiling</code>, <code>usage</code>, and <code>flags</code> equal to those in this structure) - whichever is higher"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-imageType-00956",
-          "text": " If <code>imageType</code> is <code>VK_IMAGE_TYPE_1D</code>, both <code>extent.height</code> and <code>extent.depth</code> <strong class=\"purple\">must</strong> be <code>1</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-imageType-00957",
-          "text": " If <code>imageType</code> is <code>VK_IMAGE_TYPE_2D</code>, <code>extent.depth</code> <strong class=\"purple\">must</strong> be <code>1</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-mipLevels-00958",
-          "text": " <code>mipLevels</code> <strong class=\"purple\">must</strong> be less than or equal to <span class=\"eq\">{lfloor}log<sub>2</sub>(max(<code>extent.width</code>, <code>extent.height</code>, <code>extent.depth</code>)){rfloor} &#43; 1</span>."
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-extent-00959",
-          "text": " <code>mipLevels</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkImageFormatProperties</code>::<code>maxMipLevels</code> (as returned by <code>vkGetPhysicalDeviceImageFormatProperties</code> with <code>format</code>, <code>imageType</code>, <code>tiling</code>, <code>usage</code>, and <code>flags</code> equal to those in this structure)"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-arrayLayers-00960",
-          "text": " <code>arrayLayers</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkImageFormatProperties</code>::<code>maxArrayLayers</code> (as returned by <code>vkGetPhysicalDeviceImageFormatProperties</code> with <code>format</code>, <code>imageType</code>, <code>tiling</code>, <code>usage</code>, and <code>flags</code> equal to those in this structure)"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-imageType-00961",
-          "text": " If <code>imageType</code> is <code>VK_IMAGE_TYPE_3D</code>, <code>arrayLayers</code> <strong class=\"purple\">must</strong> be <code>1</code>."
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-samples-00962",
-          "text": " If <code>samples</code> is not <code>VK_SAMPLE_COUNT_1_BIT</code>, <code>imageType</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_TYPE_2D</code>, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT</code>, <code>tiling</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_TILING_OPTIMAL</code>, and <code>mipLevels</code> <strong class=\"purple\">must</strong> be equal to <code>1</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-usage-00963",
-          "text": " If <code>usage</code> includes <code>VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT</code>, then bits other than <code>VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT</code>, <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code>, and <code>VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT</code> <strong class=\"purple\">must</strong> not be set"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-usage-00964",
-          "text": " If <code>usage</code> includes <code>VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT</code>, <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code>, <code>VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT</code>, or <code>VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT</code>, <code>extent.width</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxFramebufferWidth</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-usage-00965",
-          "text": " If <code>usage</code> includes <code>VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT</code>, <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code>, <code>VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT</code>, or <code>VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT</code>, <code>extent.height</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxFramebufferHeight</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-usage-00966",
-          "text": " If <code>usage</code> includes <code>VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT</code>, <code>usage</code> <strong class=\"purple\">must</strong> also contain at least one of <code>VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT</code>, <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code>, or <code>VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT</code>."
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-samples-00967",
-          "text": " <code>samples</code> <strong class=\"purple\">must</strong> be a bit value that is set in <code>VkImageFormatProperties</code>::<code>sampleCounts</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties</code> with <code>format</code>, <code>imageType</code>, <code>tiling</code>, <code>usage</code>, and <code>flags</code> equal to those in this structure"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-usage-00968",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-shaderStorageImageMultisample,multisampled storage images&amp;amp;gt;&amp;amp;gt; feature is not enabled, and <code>usage</code> contains <code>VK_IMAGE_USAGE_STORAGE_BIT</code>, <code>samples</code> <strong class=\"purple\">must</strong> be <code>VK_SAMPLE_COUNT_1_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-flags-00969",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-sparseBinding,sparse bindings&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_CREATE_SPARSE_BINDING_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-flags-01924",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-sparseResidencyAliased,sparse aliased residency&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_CREATE_SPARSE_ALIASED_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-imageType-00970",
-          "text": " If <code>imageType</code> is <code>VK_IMAGE_TYPE_1D</code>, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-imageType-00971",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-sparseResidencyImage2D,sparse residency for 2D images&amp;amp;gt;&amp;amp;gt; feature is not enabled, and <code>imageType</code> is <code>VK_IMAGE_TYPE_2D</code>, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-imageType-00972",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-sparseResidencyImage3D,sparse residency for 3D images&amp;amp;gt;&amp;amp;gt; feature is not enabled, and <code>imageType</code> is <code>VK_IMAGE_TYPE_3D</code>, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-imageType-00973",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-sparseResidency2Samples,sparse residency for images with 2 samples&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>imageType</code> is <code>VK_IMAGE_TYPE_2D</code>, and <code>samples</code> is <code>VK_SAMPLE_COUNT_2_BIT</code>, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-imageType-00974",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-sparseResidency4Samples,sparse residency for images with 4 samples&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>imageType</code> is <code>VK_IMAGE_TYPE_2D</code>, and <code>samples</code> is <code>VK_SAMPLE_COUNT_4_BIT</code>, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-imageType-00975",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-sparseResidency8Samples,sparse residency for images with 8 samples&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>imageType</code> is <code>VK_IMAGE_TYPE_2D</code>, and <code>samples</code> is <code>VK_SAMPLE_COUNT_8_BIT</code>, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-imageType-00976",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-sparseResidency16Samples,sparse residency for images with 16 samples&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>imageType</code> is <code>VK_IMAGE_TYPE_2D</code>, and <code>samples</code> is <code>VK_SAMPLE_COUNT_16_BIT</code>, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-tiling-00977",
-          "text": " If <code>tiling</code> is <code>VK_IMAGE_TILING_LINEAR</code>, <code>format</code> <strong class=\"purple\">must</strong> be a format that has at least one supported feature bit present in the value of <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> with the same value of <code>format</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-tiling-00978",
-          "text": " If <code>tiling</code> is <code>VK_IMAGE_TILING_LINEAR</code>, and <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> (as returned by <code>vkGetPhysicalDeviceFormatProperties</code> with the same value of <code>format</code>) does not include <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT</code>, <code>usage</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_USAGE_SAMPLED_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-tiling-00979",
-          "text": " If <code>tiling</code> is <code>VK_IMAGE_TILING_LINEAR</code>, and <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> (as returned by <code>vkGetPhysicalDeviceFormatProperties</code> with the same value of <code>format</code>) does not include <code>VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT</code>, <code>usage</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_USAGE_STORAGE_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-tiling-00980",
-          "text": " If <code>tiling</code> is <code>VK_IMAGE_TILING_LINEAR</code>, and <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> (as returned by <code>vkGetPhysicalDeviceFormatProperties</code> with the same value of <code>format</code>) does not include <code>VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT</code>, <code>usage</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-tiling-00981",
-          "text": " If <code>tiling</code> is <code>VK_IMAGE_TILING_LINEAR</code>, and <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> (as returned by <code>vkGetPhysicalDeviceFormatProperties</code> with the same value of <code>format</code>) does not include <code>VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT</code>, <code>usage</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-tiling-00982",
-          "text": " If <code>tiling</code> is <code>VK_IMAGE_TILING_OPTIMAL</code>, <code>format</code> <strong class=\"purple\">must</strong> be a format that has at least one supported feature bit present in the value of <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> with the same value of <code>format</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-tiling-00983",
-          "text": " If <code>tiling</code> is <code>VK_IMAGE_TILING_OPTIMAL</code>, and <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> (as returned by <code>vkGetPhysicalDeviceFormatProperties</code> with the same value of <code>format</code>) does not include <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT</code>, <code>usage</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_USAGE_SAMPLED_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-tiling-00984",
-          "text": " If <code>tiling</code> is <code>VK_IMAGE_TILING_OPTIMAL</code>, and <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> (as returned by <code>vkGetPhysicalDeviceFormatProperties</code> with the same value of <code>format</code>) does not include <code>VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT</code>, <code>usage</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_USAGE_STORAGE_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-tiling-00985",
-          "text": " If <code>tiling</code> is <code>VK_IMAGE_TILING_OPTIMAL</code>, and <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> (as returned by <code>vkGetPhysicalDeviceFormatProperties</code> with the same value of <code>format</code>) does not include <code>VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT</code>, <code>usage</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-tiling-00986",
-          "text": " If <code>tiling</code> is <code>VK_IMAGE_TILING_OPTIMAL</code>, and <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> (as returned by <code>vkGetPhysicalDeviceFormatProperties</code> with the same value of <code>format</code>) does not include <code>VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT</code>, <code>usage</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-flags-00987",
-          "text": " If <code>flags</code> contains <code>VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT</code> or <code>VK_IMAGE_CREATE_SPARSE_ALIASED_BIT</code>, it <strong class=\"purple\">must</strong> also contain <code>VK_IMAGE_CREATE_SPARSE_BINDING_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-None-01925",
-          "text": " If any of the bits <code>VK_IMAGE_CREATE_SPARSE_BINDING_BIT</code>, <code>VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT</code>, or <code>VK_IMAGE_CREATE_SPARSE_ALIASED_BIT</code> are set, <code>VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT</code> <strong class=\"purple\">must</strong> not also be set"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-initialLayout-00993",
-          "text": " <code>initialLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_UNDEFINED</code> or <code>VK_IMAGE_LAYOUT_PREINITIALIZED</code>."
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-pNext-pNext",
-          "text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkDedicatedAllocationImageCreateInfoNV\">VkDedicatedAllocationImageCreateInfoNV</a>, <a href=\"#VkExternalFormatANDROID\">VkExternalFormatANDROID</a>, <a href=\"#VkExternalMemoryImageCreateInfo\">VkExternalMemoryImageCreateInfo</a>, <a href=\"#VkExternalMemoryImageCreateInfoNV\">VkExternalMemoryImageCreateInfoNV</a>, <a href=\"#VkImageFormatListCreateInfoKHR\">VkImageFormatListCreateInfoKHR</a>, or <a href=\"#VkImageSwapchainCreateInfoKHR\">VkImageSwapchainCreateInfoKHR</a>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-sType-unique",
-          "text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageCreateFlagBits\">VkImageCreateFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-imageType-parameter",
-          "text": " <code>imageType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageType\">VkImageType</a> value"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-format-parameter",
-          "text": " <code>format</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFormat\">VkFormat</a> value"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-samples-parameter",
-          "text": " <code>samples</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSampleCountFlagBits\">VkSampleCountFlagBits</a> value"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-tiling-parameter",
-          "text": " <code>tiling</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageTiling\">VkImageTiling</a> value"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-usage-parameter",
-          "text": " <code>usage</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageUsageFlagBits\">VkImageUsageFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-usage-requiredbitmask",
-          "text": " <code>usage</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-sharingMode-parameter",
-          "text": " <code>sharingMode</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSharingMode\">VkSharingMode</a> value"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-initialLayout-parameter",
-          "text": " <code>initialLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
-        }
-      ],
-      "!(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
-        {
-          "vuid": "VUID-VkImageCreateInfo-sharingMode-01392",
-          "text": " If <code>sharingMode</code> is <code>VK_SHARING_MODE_CONCURRENT</code>, each element of <code>pQueueFamilyIndices</code> <strong class=\"purple\">must</strong> be unique and <strong class=\"purple\">must</strong> be less than <code>pQueueFamilyPropertyCount</code> returned by <a href=\"#vkGetPhysicalDeviceQueueFamilyProperties\">vkGetPhysicalDeviceQueueFamilyProperties</a> for the <code>physicalDevice</code> that was used to create <code>device</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
-        {
-          "vuid": "VUID-VkImageCreateInfo-sharingMode-01420",
-          "text": " If <code>sharingMode</code> is <code>VK_SHARING_MODE_CONCURRENT</code>, each element of <code>pQueueFamilyIndices</code> <strong class=\"purple\">must</strong> be unique and <strong class=\"purple\">must</strong> be less than <code>pQueueFamilyPropertyCount</code> returned by either <a href=\"#vkGetPhysicalDeviceQueueFamilyProperties\">vkGetPhysicalDeviceQueueFamilyProperties</a> or <a href=\"#vkGetPhysicalDeviceQueueFamilyProperties2\">vkGetPhysicalDeviceQueueFamilyProperties2</a> for the <code>physicalDevice</code> that was used to create <code>device</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_maintenance1)": [
-        {
-          "vuid": "VUID-VkImageCreateInfo-flags-00950",
-          "text": " If <code>flags</code> contains <code>VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT</code>, <code>imageType</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_TYPE_3D</code>"
-        }
-      ],
-      "(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-VkImageCreateInfo-flags-01890",
-          "text": " If the protected memory feature is not enabled, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_CREATE_PROTECTED_BIT</code>."
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-None-01891",
-          "text": " If any of the bits <code>VK_IMAGE_CREATE_SPARSE_BINDING_BIT</code>, <code>VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT</code>, or <code>VK_IMAGE_CREATE_SPARSE_ALIASED_BIT</code> are set, <code>VK_IMAGE_CREATE_PROTECTED_BIT</code> <strong class=\"purple\">must</strong> not also be set."
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_external_memory)+(VK_NV_external_memory)": [
-        {
-          "vuid": "VUID-VkImageCreateInfo-pNext-00988",
-          "text": " If the <code>pNext</code> chain contains an instance of <a href=\"#VkExternalMemoryImageCreateInfoNV\">VkExternalMemoryImageCreateInfoNV</a>, it <strong class=\"purple\">must</strong> not contain an instance of <a href=\"#VkExternalMemoryImageCreateInfo\">VkExternalMemoryImageCreateInfo</a>."
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_external_memory)": [
-        {
-          "vuid": "VUID-VkImageCreateInfo-pNext-00990",
-          "text": " If the <code>pNext</code> chain contains an instance of <a href=\"#VkExternalMemoryImageCreateInfo\">VkExternalMemoryImageCreateInfo</a>, its <code>handleTypes</code> member <strong class=\"purple\">must</strong> only contain bits that are also in <a href=\"#VkExternalImageFormatProperties\">VkExternalImageFormatProperties</a>::<code>externalMemoryProperties</code>::<code>compatibleHandleTypes</code>, as returned by <a href=\"#vkGetPhysicalDeviceImageFormatProperties2\">vkGetPhysicalDeviceImageFormatProperties2</a> with <code>format</code>, <code>imageType</code>, <code>tiling</code>, <code>usage</code>, and <code>flags</code> equal to those in this structure, and with an instance of <a href=\"#VkPhysicalDeviceExternalImageFormatInfo\">VkPhysicalDeviceExternalImageFormatInfo</a> in the <code>pNext</code> chain, with a <code>handleType</code> equal to any one of the handle types specified in <a href=\"#VkExternalMemoryImageCreateInfo\">VkExternalMemoryImageCreateInfo</a>::<code>handleTypes</code>"
-        }
-      ],
-      "(VK_NV_external_memory+VK_NV_external_memory_capabilities)": [
-        {
-          "vuid": "VUID-VkImageCreateInfo-pNext-00991",
-          "text": " If the <code>pNext</code> chain contains an instance of <a href=\"#VkExternalMemoryImageCreateInfoNV\">VkExternalMemoryImageCreateInfoNV</a>, its <code>handleTypes</code> member <strong class=\"purple\">must</strong> only contain bits that are also in <a href=\"#VkExternalImageFormatPropertiesNV\">VkExternalImageFormatPropertiesNV</a>::<code>externalMemoryProperties</code>::<code>compatibleHandleTypes</code>, as returned by <a href=\"#vkGetPhysicalDeviceExternalImageFormatPropertiesNV\">vkGetPhysicalDeviceExternalImageFormatPropertiesNV</a> with <code>format</code>, <code>imageType</code>, <code>tiling</code>, <code>usage</code>, and <code>flags</code> equal to those in this structure, and with <code>externalHandleType</code> equal to any one of the handle types specified in <a href=\"#VkExternalMemoryImageCreateInfoNV\">VkExternalMemoryImageCreateInfoNV</a>::<code>handleTypes</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_device_group)": [
-        {
-          "vuid": "VUID-VkImageCreateInfo-physicalDeviceCount-01421",
-          "text": " If the logical device was created with <a href=\"#VkDeviceGroupDeviceCreateInfo\">VkDeviceGroupDeviceCreateInfo</a>::<code>physicalDeviceCount</code> equal to 1, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-flags-00992",
-          "text": " If <code>flags</code> contains <code>VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT</code>, then <code>mipLevels</code> <strong class=\"purple\">must</strong> be one, <code>arrayLayers</code> <strong class=\"purple\">must</strong> be one, <code>imageType</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_TYPE_2D</code>, and <code>tiling</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_TILING_OPTIMAL</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_maintenance2)": [
-        {
-          "vuid": "VUID-VkImageCreateInfo-flags-01572",
-          "text": " If <code>flags</code> contains <code>VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT</code>, then <code>format</code> <strong class=\"purple\">must</strong> be a &amp;amp;lt;&amp;amp;lt;appendix-compressedtex-bc,block-compressed image format&amp;amp;gt;&amp;amp;gt;, an &amp;amp;lt;&amp;amp;lt;appendix-compressedtex-etc2, ETC compressed image format&amp;amp;gt;&amp;amp;gt;, or an &amp;amp;lt;&amp;amp;lt;appendix-compressedtex-astc, ASTC compressed image format&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-flags-01573",
-          "text": " If <code>flags</code> contains <code>VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT</code>, then <code>flags</code> <strong class=\"purple\">must</strong> also contain <code>VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT</code>."
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_external_memory,VK_NV_external_memory)": [
-        {
-          "vuid": "VUID-VkImageCreateInfo-pNext-01443",
-          "text": "     If the <code>pNext</code> chain includes a ifdef::VK_VERSION_1_1,VK_KHR_external_memory[<a href=\"#VkExternalMemoryImageCreateInfo\">VkExternalMemoryImageCreateInfo</a>]"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
-        {
-          "vuid": "VUID-VkImageCreateInfo-format-01574",
-          "text": " If the image <code>format</code> is one of those listed in &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion&amp;amp;gt;&amp;amp;gt;:"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-tiling-01575",
-          "text": " If <code>tiling</code> is <code>VK_IMAGE_TILING_OPTIMAL</code>, <code>format</code> is a <em>multi-planar</em> format, and <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> (as returned by <code>vkGetPhysicalDeviceFormatProperties</code> with the same value of <code>format</code>) does not include <code>VK_FORMAT_FEATURE_DISJOINT_BIT</code>, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_CREATE_DISJOINT_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-tiling-01576",
-          "text": " If <code>tiling</code> is <code>VK_IMAGE_TILING_LINEAR</code>, <code>format</code> is a <em>multi-planar</em> format, and <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> (as returned by <code>vkGetPhysicalDeviceFormatProperties</code> with the same value of <code>format</code>) does not include <code>VK_FORMAT_FEATURE_DISJOINT_BIT</code>, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_CREATE_DISJOINT_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCreateInfo-format-01577",
-          "text": " If <code>format</code> is not a <em>multi-planar</em> format, and <code>flags</code> does not include <code>VK_IMAGE_CREATE_ALIAS_BIT</code>, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_CREATE_DISJOINT_BIT</code>"
-        }
-      ],
-      "(VK_EXT_sample_locations)": [
-        {
-          "vuid": "VUID-VkImageCreateInfo-flags-01533",
-          "text": " If <code>flags</code> contains <code>VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT</code> <code>format</code> <strong class=\"purple\">must</strong> be a depth or depth/stencil format"
-        }
-      ]
-    },
-    "VkDedicatedAllocationImageCreateInfoNV": {
-      "(VK_NV_dedicated_allocation)": [
-        {
-          "vuid": "VUID-VkDedicatedAllocationImageCreateInfoNV-dedicatedAllocation-00994",
-          "text": " If <code>dedicatedAllocation</code> is <code>VK_TRUE</code>, <code>VkImageCreateInfo</code>::<code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_IMAGE_CREATE_SPARSE_BINDING_BIT</code>, <code>VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT</code>, or <code>VK_IMAGE_CREATE_SPARSE_ALIASED_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkDedicatedAllocationImageCreateInfoNV-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV</code>"
-        }
-      ]
-    },
-    "VkExternalMemoryImageCreateInfo": {
-      "(VK_VERSION_1_1,VK_KHR_external_memory)": [
-        {
-          "vuid": "VUID-VkExternalMemoryImageCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkExternalMemoryImageCreateInfo-handleTypes-parameter",
-          "text": " <code>handleTypes</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkExternalMemoryHandleTypeFlagBits\">VkExternalMemoryHandleTypeFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkExternalMemoryImageCreateInfo-handleTypes-requiredbitmask",
-          "text": " <code>handleTypes</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        }
-      ]
-    },
-    "VkExternalMemoryImageCreateInfoNV": {
-      "(VK_NV_external_memory)": [
-        {
-          "vuid": "VUID-VkExternalMemoryImageCreateInfoNV-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV</code>"
-        },
-        {
-          "vuid": "VUID-VkExternalMemoryImageCreateInfoNV-handleTypes-parameter",
-          "text": " <code>handleTypes</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkExternalMemoryHandleTypeFlagBitsNV\">VkExternalMemoryHandleTypeFlagBitsNV</a> values"
-        }
-      ]
-    },
-    "VkExternalFormatANDROID": {
-      "(VK_ANDROID_external_memory_android_hardware_buffer)": [
-        {
-          "vuid": "VUID-VkExternalFormatANDROID-externalFormat-01894",
-          "text": " <code>externalFormat</code> <strong class=\"purple\">must</strong> be <code>0</code> or a value returned in the <code>externalFormat</code> member of <a href=\"#VkAndroidHardwareBufferFormatPropertiesANDROID\">VkAndroidHardwareBufferFormatPropertiesANDROID</a> by an earlier call to <a href=\"#vkGetAndroidHardwareBufferPropertiesANDROID\">vkGetAndroidHardwareBufferPropertiesANDROID</a>"
-        },
-        {
-          "vuid": "VUID-VkExternalFormatANDROID-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID</code>"
-        }
-      ]
-    },
-    "VkImageSwapchainCreateInfoKHR": {
-      "(VK_VERSION_1_1,VK_KHR_device_group)+(VK_KHR_swapchain)": [
-        {
-          "vuid": "VUID-VkImageSwapchainCreateInfoKHR-swapchain-00995",
-          "text": " If <code>swapchain</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, the fields of <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> <strong class=\"purple\">must</strong> match the &amp;amp;lt;&amp;amp;lt;swapchain-wsi-image-create-info, implied image creation parameters&amp;amp;gt;&amp;amp;gt; of the swapchain"
-        },
-        {
-          "vuid": "VUID-VkImageSwapchainCreateInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkImageSwapchainCreateInfoKHR-swapchain-parameter",
-          "text": " If <code>swapchain</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>swapchain</code> <strong class=\"purple\">must</strong> be a valid <code>VkSwapchainKHR</code> handle"
-        }
-      ]
-    },
-    "VkImageFormatListCreateInfoKHR": {
-      "(VK_KHR_image_format_list)": [
-        {
-          "vuid": "VUID-VkImageFormatListCreateInfoKHR-viewFormatCount-01578",
-          "text": " If <code>viewFormatCount</code> is not <code>0</code>, all of the formats in the <code>pViewFormats</code> array <strong class=\"purple\">must</strong> be compatible with the format specified in the <code>format</code> field of <code>VkImageCreateInfo</code>, as described in the <a href=\"#resources-image-views-compatibility\">compatibility table</a>."
-        },
-        {
-          "vuid": "VUID-VkImageFormatListCreateInfoKHR-flags-01579",
-          "text": " If <code>VkImageCreateInfo</code>::<code>flags</code> does not contain <code>VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT</code>, <code>viewFormatCount</code> <strong class=\"purple\">must</strong> be <code>0</code> or <code>1</code>."
-        },
-        {
-          "vuid": "VUID-VkImageFormatListCreateInfoKHR-viewFormatCount-01580",
-          "text": " If <code>viewFormatCount</code> is not <code>0</code>, <code>VkImageCreateInfo</code>::<code>format</code> <strong class=\"purple\">must</strong> be in <code>pViewFormats</code>."
-        },
-        {
-          "vuid": "VUID-VkImageFormatListCreateInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkImageFormatListCreateInfoKHR-pViewFormats-parameter",
-          "text": " If <code>viewFormatCount</code> is not <code>0</code>, <code>pViewFormats</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>viewFormatCount</code> valid <a href=\"#VkFormat\">VkFormat</a> values"
-        }
-      ]
-    },
-    "vkGetImageSubresourceLayout": {
-      "core": [
-        {
-          "vuid": "VUID-vkGetImageSubresourceLayout-image-00996",
-          "text": " <code>image</code> <strong class=\"purple\">must</strong> have been created with <code>tiling</code> equal to <code>VK_IMAGE_TILING_LINEAR</code>"
-        },
-        {
-          "vuid": "VUID-vkGetImageSubresourceLayout-aspectMask-00997",
-          "text": " The <code>aspectMask</code> member of <code>pSubresource</code> <strong class=\"purple\">must</strong> only have a single bit set"
-        },
-        {
-          "vuid": "VUID-vkGetImageSubresourceLayout-mipLevel-01716",
-          "text": " The <code>mipLevel</code> member of <code>pSubresource</code> <strong class=\"purple\">must</strong> be less than the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
-        },
-        {
-          "vuid": "VUID-vkGetImageSubresourceLayout-arrayLayer-01717",
-          "text": " The <code>arrayLayer</code> member of <code>pSubresource</code> <strong class=\"purple\">must</strong> be less than the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
-        },
-        {
-          "vuid": "VUID-vkGetImageSubresourceLayout-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetImageSubresourceLayout-image-parameter",
-          "text": " <code>image</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetImageSubresourceLayout-pSubresource-parameter",
-          "text": " <code>pSubresource</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkImageSubresource</code> structure"
-        },
-        {
-          "vuid": "VUID-vkGetImageSubresourceLayout-pLayout-parameter",
-          "text": " <code>pLayout</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSubresourceLayout</code> structure"
-        },
-        {
-          "vuid": "VUID-vkGetImageSubresourceLayout-image-parent",
-          "text": " <code>image</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
-        {
-          "vuid": "VUID-vkGetImageSubresourceLayout-format-01581",
-          "text": " If the <code>format</code> of <code>image</code> is a &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar format&amp;amp;gt;&amp;amp;gt; with two planes, the <code>aspectMask</code> member of <code>pSubresource</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_ASPECT_PLANE_0_BIT</code> or <code>VK_IMAGE_ASPECT_PLANE_1_BIT</code>"
-        },
-        {
-          "vuid": "VUID-vkGetImageSubresourceLayout-format-01582",
-          "text": " If the <code>format</code> of <code>image</code> is a &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar format&amp;amp;gt;&amp;amp;gt; with three planes, the <code>aspectMask</code> member of <code>pSubresource</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_ASPECT_PLANE_0_BIT</code>, <code>VK_IMAGE_ASPECT_PLANE_1_BIT</code> or <code>VK_IMAGE_ASPECT_PLANE_2_BIT</code>"
-        }
-      ],
-      "(VK_ANDROID_external_memory_android_hardware_buffer)": [
-        {
-          "vuid": "VUID-vkGetImageSubresourceLayout-image-01895",
-          "text": " If <code>image</code> was created with the VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID external memory handle type, then <code>image</code> <strong class=\"purple\">must</strong> be bound to memory."
-        }
-      ]
-    },
-    "VkImageSubresource": {
-      "core": [
-        {
-          "vuid": "VUID-VkImageSubresource-aspectMask-parameter",
-          "text": " <code>aspectMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageAspectFlagBits\">VkImageAspectFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkImageSubresource-aspectMask-requiredbitmask",
-          "text": " <code>aspectMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        }
-      ]
-    },
-    "vkDestroyImage": {
-      "core": [
-        {
-          "vuid": "VUID-vkDestroyImage-image-01000",
-          "text": " All submitted commands that refer to <code>image</code>, either directly or via a <code>VkImageView</code>, <strong class=\"purple\">must</strong> have completed execution"
-        },
-        {
-          "vuid": "VUID-vkDestroyImage-image-01001",
-          "text": " If <code>VkAllocationCallbacks</code> were provided when <code>image</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
-        },
-        {
-          "vuid": "VUID-vkDestroyImage-image-01002",
-          "text": " If no <code>VkAllocationCallbacks</code> were provided when <code>image</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-vkDestroyImage-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyImage-image-parameter",
-          "text": " If <code>image</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>image</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyImage-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkDestroyImage-image-parent",
-          "text": " If <code>image</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkCreateImageView": {
-      "core": [
-        {
-          "vuid": "VUID-vkCreateImageView-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateImageView-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkImageViewCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateImageView-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateImageView-pView-parameter",
-          "text": " <code>pView</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkImageView</code> handle"
-        }
-      ]
-    },
-    "VkImageViewCreateInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-image-01003",
-          "text": " If <code>image</code> was not created with <code>VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT</code> then <code>viewType</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_VIEW_TYPE_CUBE</code> or <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code>"
-        },
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-viewType-01004",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-imageCubeArray,image cubemap arrays&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>viewType</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code>"
-        },
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-image-01006",
-          "text": " If <code>image</code> was created with <code>VK_IMAGE_TILING_LINEAR</code>, <code>format</code> <strong class=\"purple\">must</strong> be format that has at least one supported feature bit present in the value of <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> with the same value of <code>format</code>"
-        },
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-image-01007",
-          "text": " <code>image</code> <strong class=\"purple\">must</strong> have been created with a <code>usage</code> value containing at least one of <code>VK_IMAGE_USAGE_SAMPLED_BIT</code>, <code>VK_IMAGE_USAGE_STORAGE_BIT</code>, <code>VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT</code>, <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code>, or <code>VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-image-01008",
-          "text": " If <code>image</code> was created with <code>VK_IMAGE_TILING_LINEAR</code> and <code>usage</code> contains <code>VK_IMAGE_USAGE_SAMPLED_BIT</code>, <code>format</code> <strong class=\"purple\">must</strong> be supported for sampled images, as specified by the <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT</code> flag in <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> with the same value of <code>format</code>"
-        },
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-image-01009",
-          "text": " If <code>image</code> was created with <code>VK_IMAGE_TILING_LINEAR</code> and <code>usage</code> contains <code>VK_IMAGE_USAGE_STORAGE_BIT</code>, <code>format</code> <strong class=\"purple\">must</strong> be supported for storage images, as specified by the <code>VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT</code> flag in <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> with the same value of <code>format</code>"
-        },
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-image-01010",
-          "text": " If <code>image</code> was created with <code>VK_IMAGE_TILING_LINEAR</code> and <code>usage</code> contains <code>VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT</code>, <code>format</code> <strong class=\"purple\">must</strong> be supported for color attachments, as specified by the <code>VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT</code> flag in <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> with the same value of <code>format</code>"
-        },
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-image-01011",
-          "text": " If <code>image</code> was created with <code>VK_IMAGE_TILING_LINEAR</code> and <code>usage</code> contains <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code>, <code>format</code> <strong class=\"purple\">must</strong> be supported for depth/stencil attachments, as specified by the <code>VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT</code> flag in <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> with the same value of <code>format</code>"
-        },
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-image-01012",
-          "text": " If <code>image</code> was created with <code>VK_IMAGE_TILING_OPTIMAL</code>, <code>format</code> <strong class=\"purple\">must</strong> be format that has at least one supported feature bit present in the value of <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> with the same value of <code>format</code>"
-        },
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-image-01013",
-          "text": " If <code>image</code> was created with <code>VK_IMAGE_TILING_OPTIMAL</code> and <code>usage</code> contains <code>VK_IMAGE_USAGE_SAMPLED_BIT</code>, <code>format</code> <strong class=\"purple\">must</strong> be supported for sampled images, as specified by the <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT</code> flag in <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> with the same value of <code>format</code>"
-        },
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-image-01014",
-          "text": " If <code>image</code> was created with <code>VK_IMAGE_TILING_OPTIMAL</code> and <code>usage</code> contains <code>VK_IMAGE_USAGE_STORAGE_BIT</code>, <code>format</code> <strong class=\"purple\">must</strong> be supported for storage images, as specified by the <code>VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT</code> flag in <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> with the same value of <code>format</code>"
-        },
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-image-01015",
-          "text": " If <code>image</code> was created with <code>VK_IMAGE_TILING_OPTIMAL</code> and <code>usage</code> contains <code>VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT</code>, <code>format</code> <strong class=\"purple\">must</strong> be supported for color attachments, as specified by the <code>VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT</code> flag in <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> with the same value of <code>format</code>"
-        },
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-image-01016",
-          "text": " If <code>image</code> was created with <code>VK_IMAGE_TILING_OPTIMAL</code> and <code>usage</code> contains <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code>, <code>format</code> <strong class=\"purple\">must</strong> be supported for depth/stencil attachments, as specified by the <code>VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT</code> flag in <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> with the same value of <code>format</code>"
-        },
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-subresourceRange-01478",
-          "text": " <code>subresourceRange.baseMipLevel</code> <strong class=\"purple\">must</strong> be less than the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
-        },
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-subresourceRange-01718",
-          "text": " If <code>subresourceRange.levelCount</code> is not <code>VK_REMAINING_MIP_LEVELS</code>, <span class=\"eq\"><code>subresourceRange.baseMipLevel</code> &#43; <code>subresourceRange.levelCount</code></span> <strong class=\"purple\">must</strong> be less than or equal to the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
-        },
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-image-01018",
-          "text": " If <code>image</code> was created with the <code>VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT</code> flag, <code>format</code> <strong class=\"purple\">must</strong> be compatible with the <code>format</code> used to create <code>image</code>, as defined in &amp;amp;lt;&amp;amp;lt;features-formats-compatibility-classes,Format Compatibility Classes&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-image-01020",
-          "text": " If <code>image</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
-        },
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-subResourceRange-01021",
-          "text": " <code>subresourceRange</code> and <code>viewType</code> <strong class=\"purple\">must</strong> be compatible with the image, as described in the &amp;amp;lt;&amp;amp;lt;resources-image-views-compatibility,compatibility table&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-pNext-pNext",
-          "text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkImageViewUsageCreateInfo\">VkImageViewUsageCreateInfo</a> or <a href=\"#VkSamplerYcbcrConversionInfo\">VkSamplerYcbcrConversionInfo</a>"
-        },
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-sType-unique",
-          "text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
-        },
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-image-parameter",
-          "text": " <code>image</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
-        },
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-viewType-parameter",
-          "text": " <code>viewType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageViewType\">VkImageViewType</a> value"
-        },
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-format-parameter",
-          "text": " <code>format</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFormat\">VkFormat</a> value"
-        },
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-components-parameter",
-          "text": " <code>components</code> <strong class=\"purple\">must</strong> be a valid <code>VkComponentMapping</code> structure"
-        },
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-subresourceRange-parameter",
-          "text": " <code>subresourceRange</code> <strong class=\"purple\">must</strong> be a valid <code>VkImageSubresourceRange</code> structure"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_maintenance1)": [
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-image-01005",
-          "text": " If <code>image</code> was created with <code>VK_IMAGE_TYPE_3D</code> but without <code>VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT</code> set then <code>viewType</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_VIEW_TYPE_2D</code> or <code>VK_IMAGE_VIEW_TYPE_2D_ARRAY</code>"
-        },
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-image-01482",
-          "text": " If <code>image</code> is not a 3D image created with <code>VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT</code> set, or <code>viewType</code> is not <code>VK_IMAGE_VIEW_TYPE_2D</code> or <code>VK_IMAGE_VIEW_TYPE_2D_ARRAY</code>, <code>subresourceRange</code>::<code>baseArrayLayer</code> <strong class=\"purple\">must</strong> be less than the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
-        },
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-subresourceRange-01483",
-          "text": " If <code>subresourceRange</code>::<code>layerCount</code> is not <code>VK_REMAINING_ARRAY_LAYERS</code>, <code>image</code> is not a 3D image created with <code>VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT</code> set, or <code>viewType</code> is not <code>VK_IMAGE_VIEW_TYPE_2D</code> or <code>VK_IMAGE_VIEW_TYPE_2D_ARRAY</code>, <code>subresourceRange</code>::<code>layerCount</code> <strong class=\"purple\">must</strong> be non-zero and <span class=\"eq\"><code>subresourceRange</code>::<code>baseArrayLayer</code> &#43; <code>subresourceRange</code>::<code>layerCount</code></span> <strong class=\"purple\">must</strong> be less than or equal to the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
-        },
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-image-01484",
-          "text": " If <code>image</code> is a 3D image created with <code>VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT</code> set, and <code>viewType</code> is <code>VK_IMAGE_VIEW_TYPE_2D</code> or <code>VK_IMAGE_VIEW_TYPE_2D_ARRAY</code>, <code>subresourceRange</code>::<code>baseArrayLayer</code> <strong class=\"purple\">must</strong> be less than the <code>extent.depth</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
-        },
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-subresourceRange-01485",
-          "text": " If <code>subresourceRange</code>::<code>layerCount</code> is not <code>VK_REMAINING_ARRAY_LAYERS</code>, <code>image</code> is a 3D image created with <code>VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT</code> set, and <code>viewType</code> is <code>VK_IMAGE_VIEW_TYPE_2D</code> or <code>VK_IMAGE_VIEW_TYPE_2D_ARRAY</code>, <code>subresourceRange</code>::<code>layerCount</code> <strong class=\"purple\">must</strong> be non-zero and <span class=\"eq\"><code>subresourceRange</code>::<code>baseArrayLayer</code> &#43; <code>subresourceRange</code>::<code>layerCount</code></span> <strong class=\"purple\">must</strong> be less than or equal to the <code>extent.depth</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
-        }
-      ],
-      "!(VK_VERSION_1_1,VK_KHR_maintenance1)": [
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-subresourceRange-01480",
-          "text": " <code>subresourceRange.baseArrayLayer</code> <strong class=\"purple\">must</strong> be less than the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
-        },
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-subresourceRange-01719",
-          "text": " If <code>subresourceRange.layerCount</code> is not <code>VK_REMAINING_ARRAY_LAYERS</code>, <span class=\"eq\"><code>subresourceRange.baseArrayLayer</code> &#43; <code>subresourceRange.layerCount</code></span> <strong class=\"purple\">must</strong> be less than or equal to the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_maintenance2)+!(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-image-01759",
-          "text": " If <code>image</code> was created with the <code>VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT</code> flag, but without the <code>VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT</code> flag, <code>format</code> <strong class=\"purple\">must</strong> be compatible with the <code>format</code> used to create <code>image</code>, as defined in &amp;amp;lt;&amp;amp;lt;features-formats-compatibility-classes,Format Compatibility Classes&amp;amp;gt;&amp;amp;gt;"
-        }
-      ],
-      "!(VK_VERSION_1_1,VK_KHR_maintenance2)+(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-image-01760",
-          "text": " If <code>image</code> was created with the <code>VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT</code> flag, and if the <code>format</code> of the <code>image</code> is not a &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar&amp;amp;gt;&amp;amp;gt; format, <code>format</code> <strong class=\"purple\">must</strong> be compatible with the <code>format</code> used to create <code>image</code>, as defined in &amp;amp;lt;&amp;amp;lt;features-formats-compatibility-classes,Format Compatibility Classes&amp;amp;gt;&amp;amp;gt;"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_maintenance2)+(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-image-01761",
-          "text": " If <code>image</code> was created with the <code>VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT</code> flag, but without the <code>VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT</code> flag, and if the <code>format</code> of the <code>image</code> is not a &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar&amp;amp;gt;&amp;amp;gt; format, <code>format</code> <strong class=\"purple\">must</strong> be compatible with the <code>format</code> used to create <code>image</code>, as defined in &amp;amp;lt;&amp;amp;lt;features-formats-compatibility-classes,Format Compatibility Classes&amp;amp;gt;&amp;amp;gt;"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_maintenance2)": [
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-image-01583",
-          "text": " If <code>image</code> was created with the <code>VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT</code> flag, <code>format</code> <strong class=\"purple\">must</strong> be compatible with, or <strong class=\"purple\">must</strong> be an uncompressed format that is size-compatible with, the <code>format</code> used to create <code>image</code>."
-        },
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-image-01584",
-          "text": " If <code>image</code> was created with the <code>VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT</code> flag, the <code>levelCount</code> and <code>layerCount</code> members of <code>subresourceRange</code> <strong class=\"purple\">must</strong> both be <code>1</code>."
-        }
-      ],
-      "(VK_KHR_image_format_list)": [
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-pNext-01585",
-          "text": " If a <code>VkImageFormatListCreateInfoKHR</code> structure was included in the <code>pNext</code> chain of the <code>VkImageCreateInfo</code> struct used when creating <code>image</code> and the <code>viewFormatCount</code> field of <code>VkImageFormatListCreateInfoKHR</code> is not zero then <code>format</code> <strong class=\"purple\">must</strong> be one of the formats in <code>VkImageFormatListCreateInfoKHR</code>::<code>pViewFormats</code>."
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-image-01586",
-          "text": " If <code>image</code> was created with the <code>VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT</code> flag, if the <code>format</code> of the <code>image</code> is a &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar&amp;amp;gt;&amp;amp;gt; format, and if <code>subresourceRange.aspectMask</code> is one of <code>VK_IMAGE_ASPECT_PLANE_0_BIT</code>, <code>VK_IMAGE_ASPECT_PLANE_1_BIT</code>, or <code>VK_IMAGE_ASPECT_PLANE_2_BIT</code>, then <code>format</code> <strong class=\"purple\">must</strong> be compatible with the <a href=\"#VkFormat\">VkFormat</a> for the plane of the <code>image</code> <code>format</code> indicated by <code>subresourceRange.aspectMask</code>, as defined in &amp;amp;lt;&amp;amp;lt;features-formats-compatible-planes&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-image-01762",
-          "text": " If <code>image</code> was not created with the <code>VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT</code> flag,"
-        }
-      ],
-      "!(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-image-01019",
-          "text": " If <code>image</code> was not created with the <code>VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT</code> flag, <code>format</code> <strong class=\"purple\">must</strong> be identical to the <code>format</code> used to create <code>image</code>"
-        }
-      ],
-      "(VK_ANDROID_external_memory_android_hardware_buffer)": [
-        {
-          "vuid": "VUID-VkImageViewCreateInfo-image-01896",
-          "text": " If <code>image</code> has an &amp;amp;lt;&amp;amp;lt;memory-external-android-hardware-buffer-external-formats,external format&amp;amp;gt;&amp;amp;gt;:"
-        }
-      ]
-    },
-    "VkImageViewUsageCreateInfo": {
-      "(VK_VERSION_1_1,VK_KHR_maintenance2)": [
-        {
-          "vuid": "VUID-VkImageViewUsageCreateInfo-usage-01587",
-          "text": " <code>usage</code> <strong class=\"purple\">must</strong> not include any set bits that were not set in the <code>usage</code> member of the <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> structure used to create the image this image view is created from."
-        },
-        {
-          "vuid": "VUID-VkImageViewUsageCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkImageViewUsageCreateInfo-usage-parameter",
-          "text": " <code>usage</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageUsageFlagBits\">VkImageUsageFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkImageViewUsageCreateInfo-usage-requiredbitmask",
-          "text": " <code>usage</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        }
-      ]
-    },
-    "VkImageSubresourceRange": {
-      "core": [
-        {
-          "vuid": "VUID-VkImageSubresourceRange-levelCount-01720",
-          "text": " If <code>levelCount</code> is not <code>VK_REMAINING_MIP_LEVELS</code>, it <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkImageSubresourceRange-layerCount-01721",
-          "text": " If <code>layerCount</code> is not <code>VK_REMAINING_ARRAY_LAYERS</code>, it <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkImageSubresourceRange-aspectMask-parameter",
-          "text": " <code>aspectMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageAspectFlagBits\">VkImageAspectFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkImageSubresourceRange-aspectMask-requiredbitmask",
-          "text": " <code>aspectMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
-        {
-          "vuid": "VUID-VkImageSubresourceRange-aspectMask-01670",
-          "text": " If <code>aspectMask</code> includes <code>VK_IMAGE_ASPECT_COLOR_BIT</code>, then it <strong class=\"purple\">must</strong> not include any of <code>VK_IMAGE_ASPECT_PLANE_0_BIT</code>, <code>VK_IMAGE_ASPECT_PLANE_1_BIT</code>, or <code>VK_IMAGE_ASPECT_PLANE_2_BIT</code>"
-        }
-      ]
-    },
-    "VkComponentMapping": {
-      "core": [
-        {
-          "vuid": "VUID-VkComponentMapping-r-parameter",
-          "text": " <code>r</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkComponentSwizzle\">VkComponentSwizzle</a> value"
-        },
-        {
-          "vuid": "VUID-VkComponentMapping-g-parameter",
-          "text": " <code>g</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkComponentSwizzle\">VkComponentSwizzle</a> value"
-        },
-        {
-          "vuid": "VUID-VkComponentMapping-b-parameter",
-          "text": " <code>b</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkComponentSwizzle\">VkComponentSwizzle</a> value"
-        },
-        {
-          "vuid": "VUID-VkComponentMapping-a-parameter",
-          "text": " <code>a</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkComponentSwizzle\">VkComponentSwizzle</a> value"
-        }
-      ]
-    },
-    "vkDestroyImageView": {
-      "core": [
-        {
-          "vuid": "VUID-vkDestroyImageView-imageView-01026",
-          "text": " All submitted commands that refer to <code>imageView</code> <strong class=\"purple\">must</strong> have completed execution"
-        },
-        {
-          "vuid": "VUID-vkDestroyImageView-imageView-01027",
-          "text": " If <code>VkAllocationCallbacks</code> were provided when <code>imageView</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
-        },
-        {
-          "vuid": "VUID-vkDestroyImageView-imageView-01028",
-          "text": " If no <code>VkAllocationCallbacks</code> were provided when <code>imageView</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-vkDestroyImageView-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyImageView-imageView-parameter",
-          "text": " If <code>imageView</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>imageView</code> <strong class=\"purple\">must</strong> be a valid <code>VkImageView</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyImageView-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkDestroyImageView-imageView-parent",
-          "text": " If <code>imageView</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkGetBufferMemoryRequirements": {
-      "core": [
-        {
-          "vuid": "VUID-vkGetBufferMemoryRequirements-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetBufferMemoryRequirements-buffer-parameter",
-          "text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetBufferMemoryRequirements-pMemoryRequirements-parameter",
-          "text": " <code>pMemoryRequirements</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkMemoryRequirements</code> structure"
-        },
-        {
-          "vuid": "VUID-vkGetBufferMemoryRequirements-buffer-parent",
-          "text": " <code>buffer</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkGetImageMemoryRequirements": {
-      "(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
-        {
-          "vuid": "VUID-vkGetImageMemoryRequirements-image-01588",
-          "text": " <code>image</code> <strong class=\"purple\">must</strong> not have been created with the <code>VK_IMAGE_CREATE_DISJOINT_BIT</code> flag set"
-        }
-      ],
-      "core": [
-        {
-          "vuid": "VUID-vkGetImageMemoryRequirements-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetImageMemoryRequirements-image-parameter",
-          "text": " <code>image</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetImageMemoryRequirements-pMemoryRequirements-parameter",
-          "text": " <code>pMemoryRequirements</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkMemoryRequirements</code> structure"
-        },
-        {
-          "vuid": "VUID-vkGetImageMemoryRequirements-image-parent",
-          "text": " <code>image</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkGetBufferMemoryRequirements2": {
-      "(VK_VERSION_1_1,VK_KHR_get_memory_requirements2)": [
-        {
-          "vuid": "VUID-vkGetBufferMemoryRequirements2-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetBufferMemoryRequirements2-pInfo-parameter",
-          "text": " <code>pInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkBufferMemoryRequirementsInfo2</code> structure"
-        },
-        {
-          "vuid": "VUID-vkGetBufferMemoryRequirements2-pMemoryRequirements-parameter",
-          "text": " <code>pMemoryRequirements</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkMemoryRequirements2</code> structure"
-        }
-      ]
-    },
-    "VkBufferMemoryRequirementsInfo2": {
-      "(VK_VERSION_1_1,VK_KHR_get_memory_requirements2)": [
-        {
-          "vuid": "VUID-VkBufferMemoryRequirementsInfo2-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferMemoryRequirementsInfo2-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferMemoryRequirementsInfo2-buffer-parameter",
-          "text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
-        }
-      ]
-    },
-    "vkGetImageMemoryRequirements2": {
-      "(VK_VERSION_1_1,VK_KHR_get_memory_requirements2)": [
-        {
-          "vuid": "VUID-vkGetImageMemoryRequirements2-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetImageMemoryRequirements2-pInfo-parameter",
-          "text": " <code>pInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkImageMemoryRequirementsInfo2</code> structure"
-        },
-        {
-          "vuid": "VUID-vkGetImageMemoryRequirements2-pMemoryRequirements-parameter",
-          "text": " <code>pMemoryRequirements</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkMemoryRequirements2</code> structure"
-        }
-      ]
-    },
-    "VkImageMemoryRequirementsInfo2": {
-      "(VK_VERSION_1_1,VK_KHR_get_memory_requirements2)+(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
-        {
-          "vuid": "VUID-VkImageMemoryRequirementsInfo2-image-01589",
-          "text": " If <code>image</code> was created with a <em>multi-planar</em> format and the <code>VK_IMAGE_CREATE_DISJOINT_BIT</code> flag, there <strong class=\"purple\">must</strong> be a <a href=\"#VkImagePlaneMemoryRequirementsInfo\">VkImagePlaneMemoryRequirementsInfo</a> in the <code>pNext</code> chain of the <a href=\"#VkImageMemoryRequirementsInfo2\">VkImageMemoryRequirementsInfo2</a> structure"
-        },
-        {
-          "vuid": "VUID-VkImageMemoryRequirementsInfo2-image-01590",
-          "text": " If <code>image</code> was not created with the <code>VK_IMAGE_CREATE_DISJOINT_BIT</code> flag, there <strong class=\"purple\">must</strong> not be a <a href=\"#VkImagePlaneMemoryRequirementsInfo\">VkImagePlaneMemoryRequirementsInfo</a> in the <code>pNext</code> chain of the <a href=\"#VkImageMemoryRequirementsInfo2\">VkImageMemoryRequirementsInfo2</a> structure"
-        },
-        {
-          "vuid": "VUID-VkImageMemoryRequirementsInfo2-image-01591",
-          "text": " If <code>image</code> was created with a single-plane format, there <strong class=\"purple\">must</strong> not be a <a href=\"#VkImagePlaneMemoryRequirementsInfo\">VkImagePlaneMemoryRequirementsInfo</a> in the <code>pNext</code> chain of the <a href=\"#VkImageMemoryRequirementsInfo2\">VkImageMemoryRequirementsInfo2</a> structure"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_get_memory_requirements2)+(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)+(VK_ANDROID_external_memory_android_hardware_buffer)": [
-        {
-          "vuid": "VUID-VkImageMemoryRequirementsInfo2-image-01897",
-          "text": " If <code>image</code> was created with the VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID external memory handle type, then <code>image</code> <strong class=\"purple\">must</strong> be bound to memory."
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_get_memory_requirements2)": [
-        {
-          "vuid": "VUID-VkImageMemoryRequirementsInfo2-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2</code>"
-        },
-        {
-          "vuid": "VUID-VkImageMemoryRequirementsInfo2-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkImagePlaneMemoryRequirementsInfo\">VkImagePlaneMemoryRequirementsInfo</a>"
-        },
-        {
-          "vuid": "VUID-VkImageMemoryRequirementsInfo2-image-parameter",
-          "text": " <code>image</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
-        }
-      ]
-    },
-    "VkImagePlaneMemoryRequirementsInfo": {
-      "(VK_VERSION_1_1,VK_KHR_get_memory_requirements2)+(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
-        {
-          "vuid": "VUID-VkImagePlaneMemoryRequirementsInfo-planeAspect-01592",
-          "text": " <code>planeAspect</code> <strong class=\"purple\">must</strong> be an aspect that exists in the format; that is, for a two-plane image <code>planeAspect</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_ASPECT_PLANE_0_BIT</code> or <code>VK_IMAGE_ASPECT_PLANE_1_BIT</code>, and for a three-plane image <code>planeAspect</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_ASPECT_PLANE_0_BIT</code>, <code>VK_IMAGE_ASPECT_PLANE_1_BIT</code> or <code>VK_IMAGE_ASPECT_PLANE_2_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImagePlaneMemoryRequirementsInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkImagePlaneMemoryRequirementsInfo-planeAspect-parameter",
-          "text": " <code>planeAspect</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageAspectFlagBits\">VkImageAspectFlagBits</a> value"
-        }
-      ]
-    },
-    "VkMemoryRequirements2": {
-      "(VK_VERSION_1_1,VK_KHR_get_memory_requirements2)": [
-        {
-          "vuid": "VUID-VkMemoryRequirements2-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2</code>"
-        },
-        {
-          "vuid": "VUID-VkMemoryRequirements2-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkMemoryDedicatedRequirements\">VkMemoryDedicatedRequirements</a>"
-        }
-      ]
-    },
-    "VkMemoryDedicatedRequirements": {
-      "(VK_VERSION_1_1,VK_KHR_dedicated_allocation)": [
-        {
-          "vuid": "VUID-VkMemoryDedicatedRequirements-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS</code>"
-        }
-      ]
-    },
-    "vkBindBufferMemory": {
-      "core": [
-        {
-          "vuid": "VUID-vkBindBufferMemory-buffer-01029",
-          "text": " <code>buffer</code> <strong class=\"purple\">must</strong> not already be backed by a memory object"
-        },
-        {
-          "vuid": "VUID-vkBindBufferMemory-buffer-01030",
-          "text": " <code>buffer</code> <strong class=\"purple\">must</strong> not have been created with any sparse memory binding flags"
-        },
-        {
-          "vuid": "VUID-vkBindBufferMemory-memoryOffset-01031",
-          "text": " <code>memoryOffset</code> <strong class=\"purple\">must</strong> be less than the size of <code>memory</code>"
-        },
-        {
-          "vuid": "VUID-vkBindBufferMemory-buffer-01032",
-          "text": " If <code>buffer</code> was created with the <code>VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT</code> or <code>VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT</code>, <code>memoryOffset</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceLimits</code>::<code>minTexelBufferOffsetAlignment</code>"
-        },
-        {
-          "vuid": "VUID-vkBindBufferMemory-buffer-01033",
-          "text": " If <code>buffer</code> was created with the <code>VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT</code>, <code>memoryOffset</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceLimits</code>::<code>minUniformBufferOffsetAlignment</code>"
-        },
-        {
-          "vuid": "VUID-vkBindBufferMemory-buffer-01034",
-          "text": " If <code>buffer</code> was created with the <code>VK_BUFFER_USAGE_STORAGE_BUFFER_BIT</code>, <code>memoryOffset</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceLimits</code>::<code>minStorageBufferOffsetAlignment</code>"
-        },
-        {
-          "vuid": "VUID-vkBindBufferMemory-memory-01035",
-          "text": " <code>memory</code> <strong class=\"purple\">must</strong> have been allocated using one of the memory types allowed in the <code>memoryTypeBits</code> member of the <code>VkMemoryRequirements</code> structure returned from a call to <code>vkGetBufferMemoryRequirements</code> with <code>buffer</code>"
-        },
-        {
-          "vuid": "VUID-vkBindBufferMemory-memoryOffset-01036",
-          "text": " <code>memoryOffset</code> <strong class=\"purple\">must</strong> be an integer multiple of the <code>alignment</code> member of the <code>VkMemoryRequirements</code> structure returned from a call to <code>vkGetBufferMemoryRequirements</code> with <code>buffer</code>"
-        },
-        {
-          "vuid": "VUID-vkBindBufferMemory-size-01037",
-          "text": " The <code>size</code> member of the <code>VkMemoryRequirements</code> structure returned from a call to <code>vkGetBufferMemoryRequirements</code> with <code>buffer</code> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>memory</code> minus <code>memoryOffset</code>"
-        },
-        {
-          "vuid": "VUID-vkBindBufferMemory-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkBindBufferMemory-buffer-parameter",
-          "text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkBindBufferMemory-memory-parameter",
-          "text": " <code>memory</code> <strong class=\"purple\">must</strong> be a valid <code>VkDeviceMemory</code> handle"
-        },
-        {
-          "vuid": "VUID-vkBindBufferMemory-buffer-parent",
-          "text": " <code>buffer</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        },
-        {
-          "vuid": "VUID-vkBindBufferMemory-memory-parent",
-          "text": " <code>memory</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_dedicated_allocation)": [
-        {
-          "vuid": "VUID-vkBindBufferMemory-buffer-01444",
-          "text": " If <code>buffer</code> requires a dedicated allocation(as reported by <a href=\"#vkGetBufferMemoryRequirements2\">vkGetBufferMemoryRequirements2</a> in <a href=\"#VkMemoryDedicatedRequirements\">VkMemoryDedicatedRequirements</a>::requiresDedicatedAllocation for <code>buffer</code>), <code>memory</code> <strong class=\"purple\">must</strong> have been created with <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>::<code>buffer</code> equal to <code>buffer</code>"
-        },
-        {
-          "vuid": "VUID-vkBindBufferMemory-memory-01508",
-          "text": " If the <code>VkMemoryAllocateInfo</code> provided when <code>memory</code> was allocated included an instance of <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a> in its <code>pNext</code> chain, and <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>::<code>buffer</code> was not <code>VK_NULL_HANDLE</code>, then <code>buffer</code> <strong class=\"purple\">must</strong> equal <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>::<code>buffer</code>, and <code>memoryOffset</code> <strong class=\"purple\">must</strong> be zero."
-        }
-      ],
-      "(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-vkBindBufferMemory-None-01898",
-          "text": " If buffer was created with the <code>VK_BUFFER_CREATE_PROTECTED_BIT</code> bit set, the buffer <strong class=\"purple\">must</strong> be bound to a memory object allocated with a memory type that reports <code>VK_MEMORY_PROPERTY_PROTECTED_BIT</code>"
-        },
-        {
-          "vuid": "VUID-vkBindBufferMemory-None-01899",
-          "text": " If buffer was created with the <code>VK_BUFFER_CREATE_PROTECTED_BIT</code> bit not set, the buffer <strong class=\"purple\">must</strong> not be bound to a memory object created with a memory type that reports <code>VK_MEMORY_PROPERTY_PROTECTED_BIT</code>"
-        }
-      ],
-      "(VK_NV_dedicated_allocation)": [
-        {
-          "vuid": "VUID-vkBindBufferMemory-buffer-01038",
-          "text": " If <code>buffer</code> was created with <a href=\"#VkDedicatedAllocationBufferCreateInfoNV\">VkDedicatedAllocationBufferCreateInfoNV</a>::<code>dedicatedAllocation</code> equal to <code>VK_TRUE</code>, <code>memory</code> <strong class=\"purple\">must</strong> have been created with <a href=\"#VkDedicatedAllocationMemoryAllocateInfoNV\">VkDedicatedAllocationMemoryAllocateInfoNV</a>::<code>buffer</code> equal to a buffer handle created with identical creation parameters to <code>buffer</code> and <code>memoryOffset</code> <strong class=\"purple\">must</strong> be zero"
-        }
-      ],
-      "(VK_NV_dedicated_allocation)+!(VK_VERSION_1_1,VK_KHR_dedicated_allocation)": [
-        {
-          "vuid": "VUID-vkBindBufferMemory-buffer-01039",
-          "text": " If <code>buffer</code> was not created with <a href=\"#VkDedicatedAllocationBufferCreateInfoNV\">VkDedicatedAllocationBufferCreateInfoNV</a>::<code>dedicatedAllocation</code> equal to <code>VK_TRUE</code>, <code>memory</code> <strong class=\"purple\">must</strong> not have been allocated dedicated for a specific buffer or image"
-        }
-      ]
-    },
-    "vkBindBufferMemory2": {
-      "(VK_VERSION_1_1,VK_KHR_bind_memory2)": [
-        {
-          "vuid": "VUID-vkBindBufferMemory2-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkBindBufferMemory2-pBindInfos-parameter",
-          "text": " <code>pBindInfos</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>bindInfoCount</code> valid <code>VkBindBufferMemoryInfo</code> structures"
-        },
-        {
-          "vuid": "VUID-vkBindBufferMemory2-bindInfoCount-arraylength",
-          "text": " <code>bindInfoCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ]
-    },
-    "VkBindBufferMemoryInfo": {
-      "(VK_VERSION_1_1,VK_KHR_bind_memory2)": [
-        {
-          "vuid": "VUID-VkBindBufferMemoryInfo-buffer-01593",
-          "text": " <code>buffer</code> <strong class=\"purple\">must</strong> not already be backed by a memory object"
-        },
-        {
-          "vuid": "VUID-VkBindBufferMemoryInfo-buffer-01594",
-          "text": " <code>buffer</code> <strong class=\"purple\">must</strong> not have been created with any sparse memory binding flags"
-        },
-        {
-          "vuid": "VUID-VkBindBufferMemoryInfo-memoryOffset-01595",
-          "text": " <code>memoryOffset</code> <strong class=\"purple\">must</strong> be less than the size of <code>memory</code>"
-        },
-        {
-          "vuid": "VUID-VkBindBufferMemoryInfo-buffer-01596",
-          "text": " If <code>buffer</code> was created with the <code>VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT</code> or <code>VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT</code>, <code>memoryOffset</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceLimits</code>::<code>minTexelBufferOffsetAlignment</code>"
-        },
-        {
-          "vuid": "VUID-VkBindBufferMemoryInfo-buffer-01597",
-          "text": " If <code>buffer</code> was created with the <code>VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT</code>, <code>memoryOffset</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceLimits</code>::<code>minUniformBufferOffsetAlignment</code>"
-        },
-        {
-          "vuid": "VUID-VkBindBufferMemoryInfo-buffer-01598",
-          "text": " If <code>buffer</code> was created with the <code>VK_BUFFER_USAGE_STORAGE_BUFFER_BIT</code>, <code>memoryOffset</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceLimits</code>::<code>minStorageBufferOffsetAlignment</code>"
-        },
-        {
-          "vuid": "VUID-VkBindBufferMemoryInfo-memory-01599",
-          "text": " <code>memory</code> <strong class=\"purple\">must</strong> have been allocated using one of the memory types allowed in the <code>memoryTypeBits</code> member of the <code>VkMemoryRequirements</code> structure returned from a call to <code>vkGetBufferMemoryRequirements</code> with <code>buffer</code>"
-        },
-        {
-          "vuid": "VUID-VkBindBufferMemoryInfo-memoryOffset-01600",
-          "text": " <code>memoryOffset</code> <strong class=\"purple\">must</strong> be an integer multiple of the <code>alignment</code> member of the <code>VkMemoryRequirements</code> structure returned from a call to <code>vkGetBufferMemoryRequirements</code> with <code>buffer</code>"
-        },
-        {
-          "vuid": "VUID-VkBindBufferMemoryInfo-size-01601",
-          "text": " The <code>size</code> member of the <code>VkMemoryRequirements</code> structure returned from a call to <code>vkGetBufferMemoryRequirements</code> with <code>buffer</code> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>memory</code> minus <code>memoryOffset</code>"
-        },
-        {
-          "vuid": "VUID-VkBindBufferMemoryInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkBindBufferMemoryInfo-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkBindBufferMemoryDeviceGroupInfo\">VkBindBufferMemoryDeviceGroupInfo</a>"
-        },
-        {
-          "vuid": "VUID-VkBindBufferMemoryInfo-buffer-parameter",
-          "text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-VkBindBufferMemoryInfo-memory-parameter",
-          "text": " <code>memory</code> <strong class=\"purple\">must</strong> be a valid <code>VkDeviceMemory</code> handle"
-        },
-        {
-          "vuid": "VUID-VkBindBufferMemoryInfo-commonparent",
-          "text": " Both of <code>buffer</code>, and <code>memory</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_VERSION_1_1,VK_KHR_dedicated_allocation)": [
-        {
-          "vuid": "VUID-VkBindBufferMemoryInfo-buffer-01602",
-          "text": " If <code>buffer</code> requires a dedicated allocation(as reported by <a href=\"#vkGetBufferMemoryRequirements2\">vkGetBufferMemoryRequirements2</a> in <a href=\"#VkMemoryDedicatedRequirements\">VkMemoryDedicatedRequirements</a>::requiresDedicatedAllocation for <code>buffer</code>), <code>memory</code> <strong class=\"purple\">must</strong> have been created with <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>::<code>buffer</code> equal to <code>buffer</code> and <code>memoryOffset</code> <strong class=\"purple\">must</strong> be zero"
-        },
-        {
-          "vuid": "VUID-VkBindBufferMemoryInfo-memory-01900",
-          "text": " If the <code>VkMemoryAllocateInfo</code> provided when <code>memory</code> was allocated included an instance of <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a> in its <code>pNext</code> chain, and <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>::<code>buffer</code> was not <code>VK_NULL_HANDLE</code>, then <code>buffer</code> <strong class=\"purple\">must</strong> equal <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>::<code>buffer</code> and <code>memoryOffset</code> <strong class=\"purple\">must</strong> be zero."
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_NV_dedicated_allocation)": [
-        {
-          "vuid": "VUID-VkBindBufferMemoryInfo-buffer-01603",
-          "text": " If <code>buffer</code> was created with <a href=\"#VkDedicatedAllocationBufferCreateInfoNV\">VkDedicatedAllocationBufferCreateInfoNV</a>::<code>dedicatedAllocation</code> equal to <code>VK_TRUE</code>, <code>memory</code> <strong class=\"purple\">must</strong> have been created with <a href=\"#VkDedicatedAllocationMemoryAllocateInfoNV\">VkDedicatedAllocationMemoryAllocateInfoNV</a>::<code>buffer</code> equal to <code>buffer</code> and <code>memoryOffset</code> <strong class=\"purple\">must</strong> be zero"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_NV_dedicated_allocation)+!(VK_VERSION_1_1,VK_KHR_dedicated_allocation)": [
-        {
-          "vuid": "VUID-VkBindBufferMemoryInfo-buffer-01604",
-          "text": " If <code>buffer</code> was not created with <a href=\"#VkDedicatedAllocationBufferCreateInfoNV\">VkDedicatedAllocationBufferCreateInfoNV</a>::<code>dedicatedAllocation</code> equal to <code>VK_TRUE</code>, <code>memory</code> <strong class=\"purple\">must</strong> not have been allocated dedicated for a specific buffer or image"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_VERSION_1_1,VK_KHR_device_group)": [
-        {
-          "vuid": "VUID-VkBindBufferMemoryInfo-pNext-01605",
-          "text": " If the <code>pNext</code> chain includes <a href=\"#VkBindBufferMemoryDeviceGroupInfo\">VkBindBufferMemoryDeviceGroupInfo</a>, all instances of <code>memory</code> specified by <a href=\"#VkBindBufferMemoryDeviceGroupInfo\">VkBindBufferMemoryDeviceGroupInfo</a>::<code>pDeviceIndices</code> <strong class=\"purple\">must</strong> have been allocated"
-        }
-      ]
-    },
-    "VkBindBufferMemoryDeviceGroupInfo": {
-      "(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_VERSION_1_1,VK_KHR_device_group)": [
-        {
-          "vuid": "VUID-VkBindBufferMemoryDeviceGroupInfo-deviceIndexCount-01606",
-          "text": " <code>deviceIndexCount</code> <strong class=\"purple\">must</strong> either be zero or equal to the number of physical devices in the logical device"
-        },
-        {
-          "vuid": "VUID-VkBindBufferMemoryDeviceGroupInfo-pDeviceIndices-01607",
-          "text": " All elements of <code>pDeviceIndices</code> <strong class=\"purple\">must</strong> be valid device indices"
-        },
-        {
-          "vuid": "VUID-VkBindBufferMemoryDeviceGroupInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkBindBufferMemoryDeviceGroupInfo-pDeviceIndices-parameter",
-          "text": " If <code>deviceIndexCount</code> is not <code>0</code>, <code>pDeviceIndices</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>deviceIndexCount</code> <code>uint32_t</code> values"
-        }
-      ]
-    },
-    "vkBindImageMemory": {
-      "(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
-        {
-          "vuid": "VUID-vkBindImageMemory-image-01608",
-          "text": " <code>image</code> <strong class=\"purple\">must</strong> not have been created with the <code>VK_IMAGE_CREATE_DISJOINT_BIT</code> set."
-        }
-      ],
-      "core": [
-        {
-          "vuid": "VUID-vkBindImageMemory-image-01044",
-          "text": " <code>image</code> <strong class=\"purple\">must</strong> not already be backed by a memory object"
-        },
-        {
-          "vuid": "VUID-vkBindImageMemory-image-01045",
-          "text": " <code>image</code> <strong class=\"purple\">must</strong> not have been created with any sparse memory binding flags"
-        },
-        {
-          "vuid": "VUID-vkBindImageMemory-memoryOffset-01046",
-          "text": " <code>memoryOffset</code> <strong class=\"purple\">must</strong> be less than the size of <code>memory</code>"
-        },
-        {
-          "vuid": "VUID-vkBindImageMemory-memory-01047",
-          "text": " <code>memory</code> <strong class=\"purple\">must</strong> have been allocated using one of the memory types allowed in the <code>memoryTypeBits</code> member of the <code>VkMemoryRequirements</code> structure returned from a call to <code>vkGetImageMemoryRequirements</code> with <code>image</code>"
-        },
-        {
-          "vuid": "VUID-vkBindImageMemory-memoryOffset-01048",
-          "text": " <code>memoryOffset</code> <strong class=\"purple\">must</strong> be an integer multiple of the <code>alignment</code> member of the <code>VkMemoryRequirements</code> structure returned from a call to <code>vkGetImageMemoryRequirements</code> with <code>image</code>"
-        },
-        {
-          "vuid": "VUID-vkBindImageMemory-size-01049",
-          "text": " The <code>size</code> member of the <code>VkMemoryRequirements</code> structure returned from a call to <code>vkGetImageMemoryRequirements</code> with <code>image</code> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>memory</code> minus <code>memoryOffset</code>"
-        },
-        {
-          "vuid": "VUID-vkBindImageMemory-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkBindImageMemory-image-parameter",
-          "text": " <code>image</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
-        },
-        {
-          "vuid": "VUID-vkBindImageMemory-memory-parameter",
-          "text": " <code>memory</code> <strong class=\"purple\">must</strong> be a valid <code>VkDeviceMemory</code> handle"
-        },
-        {
-          "vuid": "VUID-vkBindImageMemory-image-parent",
-          "text": " <code>image</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        },
-        {
-          "vuid": "VUID-vkBindImageMemory-memory-parent",
-          "text": " <code>memory</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_dedicated_allocation)": [
-        {
-          "vuid": "VUID-vkBindImageMemory-image-01445",
-          "text": " If <code>image</code> requires a dedicated allocation (as reported by <a href=\"#vkGetImageMemoryRequirements2\">vkGetImageMemoryRequirements2</a> in <a href=\"#VkMemoryDedicatedRequirements\">VkMemoryDedicatedRequirements</a>::requiresDedicatedAllocation for <code>image</code>), <code>memory</code> <strong class=\"purple\">must</strong> have been created with <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>::<code>image</code> equal to <code>image</code>"
-        },
-        {
-          "vuid": "VUID-vkBindImageMemory-memory-01509",
-          "text": " If the <code>VkMemoryAllocateInfo</code> provided when <code>memory</code> was allocated included an instance of <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a> in its <code>pNext</code> chain, and <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>::<code>image</code> was not <code>VK_NULL_HANDLE</code>, then <code>image</code> <strong class=\"purple\">must</strong> equal <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>::<code>image</code> and <code>memoryOffset</code> <strong class=\"purple\">must</strong> be zero."
-        }
-      ],
-      "(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-vkBindImageMemory-None-01901",
-          "text": " If image was created with the <code>VK_IMAGE_CREATE_PROTECTED_BIT</code> bit set, the image <strong class=\"purple\">must</strong> be bound to a memory object allocated with a memory type that reports <code>VK_MEMORY_PROPERTY_PROTECTED_BIT</code>"
-        },
-        {
-          "vuid": "VUID-vkBindImageMemory-None-01902",
-          "text": " If image was created with the <code>VK_IMAGE_CREATE_PROTECTED_BIT</code> bit not set, the image <strong class=\"purple\">must</strong> not be bound to a memory object created with a memory type that reports <code>VK_MEMORY_PROPERTY_PROTECTED_BIT</code>"
-        }
-      ],
-      "(VK_NV_dedicated_allocation)": [
-        {
-          "vuid": "VUID-vkBindImageMemory-image-01050",
-          "text": " If <code>image</code> was created with <a href=\"#VkDedicatedAllocationImageCreateInfoNV\">VkDedicatedAllocationImageCreateInfoNV</a>::<code>dedicatedAllocation</code> equal to <code>VK_TRUE</code>, <code>memory</code> <strong class=\"purple\">must</strong> have been created with <a href=\"#VkDedicatedAllocationMemoryAllocateInfoNV\">VkDedicatedAllocationMemoryAllocateInfoNV</a>::<code>image</code> equal to an image handle created with identical creation parameters to <code>image</code> and <code>memoryOffset</code> <strong class=\"purple\">must</strong> be zero"
-        }
-      ],
-      "(VK_NV_dedicated_allocation)+!(VK_VERSION_1_1,VK_KHR_dedicated_allocation)": [
-        {
-          "vuid": "VUID-vkBindImageMemory-image-01051",
-          "text": " If <code>image</code> was not created with <a href=\"#VkDedicatedAllocationImageCreateInfoNV\">VkDedicatedAllocationImageCreateInfoNV</a>::<code>dedicatedAllocation</code> equal to <code>VK_TRUE</code>, <code>memory</code> <strong class=\"purple\">must</strong> not have been allocated dedicated for a specific buffer or image"
-        }
-      ]
-    },
-    "vkBindImageMemory2": {
-      "(VK_VERSION_1_1,VK_KHR_bind_memory2)": [
-        {
-          "vuid": "VUID-vkBindImageMemory2-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkBindImageMemory2-pBindInfos-parameter",
-          "text": " <code>pBindInfos</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>bindInfoCount</code> valid <code>VkBindImageMemoryInfo</code> structures"
-        },
-        {
-          "vuid": "VUID-vkBindImageMemory2-bindInfoCount-arraylength",
-          "text": " <code>bindInfoCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ]
-    },
-    "VkBindImageMemoryInfo": {
-      "(VK_VERSION_1_1,VK_KHR_bind_memory2)": [
-        {
-          "vuid": "VUID-VkBindImageMemoryInfo-image-01609",
-          "text": " <code>image</code> <strong class=\"purple\">must</strong> not already be backed by a memory object"
-        },
-        {
-          "vuid": "VUID-VkBindImageMemoryInfo-image-01610",
-          "text": " <code>image</code> <strong class=\"purple\">must</strong> not have been created with any sparse memory binding flags"
-        },
-        {
-          "vuid": "VUID-VkBindImageMemoryInfo-memoryOffset-01611",
-          "text": " <code>memoryOffset</code> <strong class=\"purple\">must</strong> be less than the size of <code>memory</code>"
-        },
-        {
-          "vuid": "VUID-VkBindImageMemoryInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkBindImageMemoryInfo-pNext-pNext",
-          "text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkBindImageMemoryDeviceGroupInfo\">VkBindImageMemoryDeviceGroupInfo</a>, <a href=\"#VkBindImageMemorySwapchainInfoKHR\">VkBindImageMemorySwapchainInfoKHR</a>, or <a href=\"#VkBindImagePlaneMemoryInfo\">VkBindImagePlaneMemoryInfo</a>"
-        },
-        {
-          "vuid": "VUID-VkBindImageMemoryInfo-sType-unique",
-          "text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
-        },
-        {
-          "vuid": "VUID-VkBindImageMemoryInfo-image-parameter",
-          "text": " <code>image</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
-        },
-        {
-          "vuid": "VUID-VkBindImageMemoryInfo-commonparent",
-          "text": " Both of <code>image</code>, and <code>memory</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_bind_memory2)+!(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
-        {
-          "vuid": "VUID-VkBindImageMemoryInfo-memory-01612",
-          "text": " <code>memory</code> <strong class=\"purple\">must</strong> have been allocated using one of the memory types allowed in the <code>memoryTypeBits</code> member of the <a href=\"#VkMemoryRequirements\">VkMemoryRequirements</a> structure returned from a call to <a href=\"#vkGetImageMemoryRequirements\">vkGetImageMemoryRequirements</a> with <code>image</code>"
-        },
-        {
-          "vuid": "VUID-VkBindImageMemoryInfo-memoryOffset-01613",
-          "text": " <code>memoryOffset</code> <strong class=\"purple\">must</strong> be an integer multiple of the <code>alignment</code> member of the <a href=\"#VkMemoryRequirements\">VkMemoryRequirements</a> structure returned from a call to <a href=\"#vkGetImageMemoryRequirements\">vkGetImageMemoryRequirements</a> with <code>image</code>"
-        },
-        {
-          "vuid": "VUID-VkBindImageMemoryInfo-memory-01614",
-          "text": " The difference of the size of <code>memory</code> and <code>memoryOffset</code> <strong class=\"purple\">must</strong> be greater than or equal to the <code>size</code> member of the <a href=\"#VkMemoryRequirements\">VkMemoryRequirements</a> structure returned from a call to <a href=\"#vkGetImageMemoryRequirements\">vkGetImageMemoryRequirements</a> with the same <code>image</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
-        {
-          "vuid": "VUID-VkBindImageMemoryInfo-pNext-01615",
-          "text": " If the <code>pNext</code> chain does not include an instance of the <a href=\"#VkBindImagePlaneMemoryInfo\">VkBindImagePlaneMemoryInfo</a> structure, <code>memory</code> <strong class=\"purple\">must</strong> have been allocated using one of the memory types allowed in the <code>memoryTypeBits</code> member of the <a href=\"#VkMemoryRequirements\">VkMemoryRequirements</a> structure returned from a call to <a href=\"#vkGetImageMemoryRequirements2\">vkGetImageMemoryRequirements2</a> with <code>image</code>"
-        },
-        {
-          "vuid": "VUID-VkBindImageMemoryInfo-pNext-01616",
-          "text": " If the <code>pNext</code> chain does not include an instance of the <a href=\"#VkBindImagePlaneMemoryInfo\">VkBindImagePlaneMemoryInfo</a> structure, <code>memoryOffset</code> <strong class=\"purple\">must</strong> be an integer multiple of the <code>alignment</code> member of the <a href=\"#VkMemoryRequirements\">VkMemoryRequirements</a> structure returned from a call to <a href=\"#vkGetImageMemoryRequirements2\">vkGetImageMemoryRequirements2</a> with <code>image</code>"
-        },
-        {
-          "vuid": "VUID-VkBindImageMemoryInfo-pNext-01617",
-          "text": " If the <code>pNext</code> chain does not include an instance of the <a href=\"#VkBindImagePlaneMemoryInfo\">VkBindImagePlaneMemoryInfo</a> structure, the difference of the size of <code>memory</code> and <code>memoryOffset</code> <strong class=\"purple\">must</strong> be greater than or equal to the <code>size</code> member of the <a href=\"#VkMemoryRequirements\">VkMemoryRequirements</a> structure returned from a call to <a href=\"#vkGetImageMemoryRequirements2\">vkGetImageMemoryRequirements2</a> with the same <code>image</code>"
-        },
-        {
-          "vuid": "VUID-VkBindImageMemoryInfo-pNext-01618",
-          "text": " If the <code>pNext</code> chain includes an instance of the <a href=\"#VkBindImagePlaneMemoryInfo\">VkBindImagePlaneMemoryInfo</a> structure, <code>image</code> <strong class=\"purple\">must</strong> have been created with the <code>VK_IMAGE_CREATE_DISJOINT_BIT</code> bit set."
-        },
-        {
-          "vuid": "VUID-VkBindImageMemoryInfo-pNext-01619",
-          "text": " If the <code>pNext</code> chain includes an instance of the <a href=\"#VkBindImagePlaneMemoryInfo\">VkBindImagePlaneMemoryInfo</a> structure, <code>memory</code> <strong class=\"purple\">must</strong> have been allocated using one of the memory types allowed in the <code>memoryTypeBits</code> member of the <a href=\"#VkMemoryRequirements\">VkMemoryRequirements</a> structure returned from a call to <a href=\"#vkGetImageMemoryRequirements2\">vkGetImageMemoryRequirements2</a> with <code>image</code> and the correct <code>planeAspect</code> for this plane in the <a href=\"#VkImagePlaneMemoryRequirementsInfo\">VkImagePlaneMemoryRequirementsInfo</a> structure attached to the <a href=\"#VkImageMemoryRequirementsInfo2\">VkImageMemoryRequirementsInfo2</a>&#8217;s <code>pNext</code> chain"
-        },
-        {
-          "vuid": "VUID-VkBindImageMemoryInfo-pNext-01620",
-          "text": " If the <code>pNext</code> chain includes an instance of the <a href=\"#VkBindImagePlaneMemoryInfo\">VkBindImagePlaneMemoryInfo</a> structure, <code>memoryOffset</code> <strong class=\"purple\">must</strong> be an integer multiple of the <code>alignment</code> member of the <a href=\"#VkMemoryRequirements\">VkMemoryRequirements</a> structure returned from a call to <a href=\"#vkGetImageMemoryRequirements2\">vkGetImageMemoryRequirements2</a> with <code>image</code> and the correct <code>planeAspect</code> for this plane in the <a href=\"#VkImagePlaneMemoryRequirementsInfo\">VkImagePlaneMemoryRequirementsInfo</a> structure attached to the <a href=\"#VkImageMemoryRequirementsInfo2\">VkImageMemoryRequirementsInfo2</a>&#8217;s <code>pNext</code> chain"
-        },
-        {
-          "vuid": "VUID-VkBindImageMemoryInfo-pNext-01621",
-          "text": " If the <code>pNext</code> chain includes an instance of the <a href=\"#VkBindImagePlaneMemoryInfo\">VkBindImagePlaneMemoryInfo</a> structure, the difference of the size of <code>memory</code> and <code>memoryOffset</code> <strong class=\"purple\">must</strong> be greater than or equal to the <code>size</code> member of the <a href=\"#VkMemoryRequirements\">VkMemoryRequirements</a> structure returned from a call to <a href=\"#vkGetImageMemoryRequirements2\">vkGetImageMemoryRequirements2</a> with the same <code>image</code> and the correct <code>planeAspect</code> for this plane in the <a href=\"#VkImagePlaneMemoryRequirementsInfo\">VkImagePlaneMemoryRequirementsInfo</a> structure attached to the <a href=\"#VkImageMemoryRequirementsInfo2\">VkImageMemoryRequirementsInfo2</a>&#8217;s <code>pNext</code> chain"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_VERSION_1_1,VK_KHR_dedicated_allocation)": [
-        {
-          "vuid": "VUID-VkBindImageMemoryInfo-image-01622",
-          "text": " If <code>image</code> requires a dedicated allocation (as reported by <a href=\"#vkGetImageMemoryRequirements2\">vkGetImageMemoryRequirements2</a> in <a href=\"#VkMemoryDedicatedRequirements\">VkMemoryDedicatedRequirements</a>::requiresDedicatedAllocation for <code>image</code>), <code>memory</code> <strong class=\"purple\">must</strong> have been created with <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>::<code>image</code> equal to <code>image</code> and <code>memoryOffset</code> <strong class=\"purple\">must</strong> be zero"
-        },
-        {
-          "vuid": "VUID-VkBindImageMemoryInfo-memory-01903",
-          "text": " If the <code>VkMemoryAllocateInfo</code> provided when <code>memory</code> was allocated included an instance of <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a> in its <code>pNext</code> chain, and <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>::<code>image</code> was not <code>VK_NULL_HANDLE</code>, then <code>image</code> <strong class=\"purple\">must</strong> equal <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>::<code>image</code> and <code>memoryOffset</code> <strong class=\"purple\">must</strong> be zero."
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_NV_dedicated_allocation)": [
-        {
-          "vuid": "VUID-VkBindImageMemoryInfo-image-01623",
-          "text": " If <code>image</code> was created with <a href=\"#VkDedicatedAllocationImageCreateInfoNV\">VkDedicatedAllocationImageCreateInfoNV</a>::<code>dedicatedAllocation</code> equal to <code>VK_TRUE</code>, <code>memory</code> <strong class=\"purple\">must</strong> have been created with <a href=\"#VkDedicatedAllocationMemoryAllocateInfoNV\">VkDedicatedAllocationMemoryAllocateInfoNV</a>::<code>image</code> equal to <code>image</code> and <code>memoryOffset</code> <strong class=\"purple\">must</strong> be zero"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_NV_dedicated_allocation)+!(VK_VERSION_1_1,VK_KHR_dedicated_allocation)": [
-        {
-          "vuid": "VUID-VkBindImageMemoryInfo-image-01624",
-          "text": " If <code>image</code> was not created with <a href=\"#VkDedicatedAllocationImageCreateInfoNV\">VkDedicatedAllocationImageCreateInfoNV</a>::<code>dedicatedAllocation</code> equal to <code>VK_TRUE</code>, <code>memory</code> <strong class=\"purple\">must</strong> not have been allocated dedicated for a specific buffer or image"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_bind_memory2)+!(VK_VERSION_1_1,VK_KHR_device_group)": [
-        {
-          "vuid": "VUID-VkBindImageMemoryInfo-memory-01625",
-          "text": " <code>memory</code> <strong class=\"purple\">must</strong> be a valid <code>VkDeviceMemory</code> handle"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_VERSION_1_1,VK_KHR_device_group)": [
-        {
-          "vuid": "VUID-VkBindImageMemoryInfo-pNext-01626",
-          "text": " If the <code>pNext</code> chain includes <a href=\"#VkBindImageMemoryDeviceGroupInfo\">VkBindImageMemoryDeviceGroupInfo</a>, all instances of <code>memory</code> specified by <a href=\"#VkBindImageMemoryDeviceGroupInfo\">VkBindImageMemoryDeviceGroupInfo</a>::<code>pDeviceIndices</code> <strong class=\"purple\">must</strong> have been allocated"
-        },
-        {
-          "vuid": "VUID-VkBindImageMemoryInfo-pNext-01627",
-          "text": " If the <code>pNext</code> chain includes <a href=\"#VkBindImageMemoryDeviceGroupInfo\">VkBindImageMemoryDeviceGroupInfo</a>, and <a href=\"#VkBindImageMemoryDeviceGroupInfo\">VkBindImageMemoryDeviceGroupInfo</a>::<code>splitInstanceBindRegionCount</code> is not zero, then <code>image</code> <strong class=\"purple\">must</strong> have been created with the <code>VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT</code> bit set"
-        },
-        {
-          "vuid": "VUID-VkBindImageMemoryInfo-pNext-01628",
-          "text": " If the <code>pNext</code> chain includes <a href=\"#VkBindImageMemoryDeviceGroupInfo\">VkBindImageMemoryDeviceGroupInfo</a>, all elements of <a href=\"#VkBindImageMemoryDeviceGroupInfo\">VkBindImageMemoryDeviceGroupInfo</a>::<code>pSplitInstanceBindRegions</code> <strong class=\"purple\">must</strong> be valid rectangles contained within the dimensions of <code>image</code>"
-        },
-        {
-          "vuid": "VUID-VkBindImageMemoryInfo-pNext-01629",
-          "text": " If the <code>pNext</code> chain includes <a href=\"#VkBindImageMemoryDeviceGroupInfo\">VkBindImageMemoryDeviceGroupInfo</a>, the union of the areas of all elements of <a href=\"#VkBindImageMemoryDeviceGroupInfo\">VkBindImageMemoryDeviceGroupInfo</a>::<code>pSplitInstanceBindRegions</code> that correspond to the same instance of <code>image</code> <strong class=\"purple\">must</strong> cover the entire image."
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_VERSION_1_1,VK_KHR_device_group)+(VK_KHR_swapchain)": [
-        {
-          "vuid": "VUID-VkBindImageMemoryInfo-image-01630",
-          "text": " If <code>image</code> was created with a valid swapchain handle in <a href=\"#VkImageSwapchainCreateInfoKHR\">VkImageSwapchainCreateInfoKHR</a>::<code>swapchain</code>, then the <code>pNext</code> chain <strong class=\"purple\">must</strong> include a valid instance of <a href=\"#VkBindImageMemorySwapchainInfoKHR\">VkBindImageMemorySwapchainInfoKHR</a>"
-        },
-        {
-          "vuid": "VUID-VkBindImageMemoryInfo-pNext-01631",
-          "text": " If the <code>pNext</code> chain includes an instance of <a href=\"#VkBindImageMemorySwapchainInfoKHR\">VkBindImageMemorySwapchainInfoKHR</a>, <code>memory</code> <strong class=\"purple\">must</strong> be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
-        },
-        {
-          "vuid": "VUID-VkBindImageMemoryInfo-pNext-01632",
-          "text": " If the <code>pNext</code> chain does not include an instance of <a href=\"#VkBindImageMemorySwapchainInfoKHR\">VkBindImageMemorySwapchainInfoKHR</a>, <code>memory</code> <strong class=\"purple\">must</strong> be a valid <code>VkDeviceMemory</code> handle"
-        }
-      ]
-    },
-    "VkBindImageMemoryDeviceGroupInfo": {
-      "(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_VERSION_1_1,VK_KHR_device_group)": [
-        {
-          "vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-deviceIndexCount-01633",
-          "text": " At least one of <code>deviceIndexCount</code> and <code>splitInstanceBindRegionCount</code> <strong class=\"purple\">must</strong> be zero."
-        },
-        {
-          "vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-deviceIndexCount-01634",
-          "text": " <code>deviceIndexCount</code> <strong class=\"purple\">must</strong> either be zero or equal to the number of physical devices in the logical device"
-        },
-        {
-          "vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-pDeviceIndices-01635",
-          "text": " All elements of <code>pDeviceIndices</code> <strong class=\"purple\">must</strong> be valid device indices."
-        },
-        {
-          "vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-splitInstanceBindRegionCount-01636",
-          "text": " <code>splitInstanceBindRegionCount</code> <strong class=\"purple\">must</strong> either be zero or equal to the number of physical devices in the logical device squared"
-        },
-        {
-          "vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-pSplitInstanceBindRegions-01637",
-          "text": " Elements of <code>pSplitInstanceBindRegions</code> that correspond to the same instance of an image <strong class=\"purple\">must</strong> not overlap."
-        },
-        {
-          "vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-offset-01638",
-          "text": " The <code>offset.x</code> member of any element of <code>pSplitInstanceBindRegions</code> <strong class=\"purple\">must</strong> be a multiple of the sparse image block width (<code>VkSparseImageFormatProperties</code>::<code>imageGranularity.width</code>) of all non-metadata aspects of the image"
-        },
-        {
-          "vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-offset-01639",
-          "text": " The <code>offset.y</code> member of any element of <code>pSplitInstanceBindRegions</code> <strong class=\"purple\">must</strong> be a multiple of the sparse image block height (<code>VkSparseImageFormatProperties</code>::<code>imageGranularity.height</code>) of all non-metadata aspects of the image"
-        },
-        {
-          "vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-extent-01640",
-          "text": " The <code>extent.width</code> member of any element of <code>pSplitInstanceBindRegions</code> <strong class=\"purple\">must</strong> either be a multiple of the sparse image block width of all non-metadata aspects of the image, or else <code>extent.width</code> + <code>offset.x</code> <strong class=\"purple\">must</strong> equal the width of the image subresource"
-        },
-        {
-          "vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-extent-01641",
-          "text": " The <code>extent.height</code> member of any element of <code>pSplitInstanceBindRegions</code> <strong class=\"purple\">must</strong> either be a multiple of the sparse image block height of all non-metadata aspects of the image, or else <code>extent.height</code><br> <code>offset.y</code> <strong class=\"purple\">must</strong> equal the width of the image subresource"
-        },
-        {
-          "vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-pDeviceIndices-parameter",
-          "text": " If <code>deviceIndexCount</code> is not <code>0</code>, <code>pDeviceIndices</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>deviceIndexCount</code> <code>uint32_t</code> values"
-        },
-        {
-          "vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-pSplitInstanceBindRegions-parameter",
-          "text": " If <code>splitInstanceBindRegionCount</code> is not <code>0</code>, <code>pSplitInstanceBindRegions</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>splitInstanceBindRegionCount</code> <code>VkRect2D</code> structures"
-        }
-      ]
-    },
-    "VkBindImageMemorySwapchainInfoKHR": {
-      "(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_VERSION_1_1,VK_KHR_device_group)+(VK_KHR_swapchain)": [
-        {
-          "vuid": "VUID-VkBindImageMemorySwapchainInfoKHR-imageIndex-01644",
-          "text": " <code>imageIndex</code> <strong class=\"purple\">must</strong> be less than the number of images in <code>swapchain</code>"
-        },
-        {
-          "vuid": "VUID-VkBindImageMemorySwapchainInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkBindImageMemorySwapchainInfoKHR-swapchain-parameter",
-          "text": " <code>swapchain</code> <strong class=\"purple\">must</strong> be a valid <code>VkSwapchainKHR</code> handle"
-        }
-      ]
-    },
-    "VkBindImagePlaneMemoryInfo": {
-      "(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
-        {
-          "vuid": "VUID-VkBindImagePlaneMemoryInfo-planeAspect-01642",
-          "text": " <code>planeAspect</code> <strong class=\"purple\">must</strong> be a single valid plane aspect for the image format (that is, <code>planeAspect</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_ASPECT_PLANE_0_BIT</code> or <code>VK_IMAGE_ASPECT_PLANE_1_BIT</code> for &#8220;<code>_2PLANE</code>&#8221; formats and <code>planeAspect</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_ASPECT_PLANE_0_BIT</code>, <code>VK_IMAGE_ASPECT_PLANE_1_BIT</code>, or <code>VK_IMAGE_ASPECT_PLANE_2_BIT</code> for &#8220;<code>_3PLANE</code>&#8221; formats)"
-        },
-        {
-          "vuid": "VUID-VkBindImagePlaneMemoryInfo-None-01643",
-          "text": " A single call to <a href=\"#vkBindImageMemory2\">vkBindImageMemory2</a> <strong class=\"purple\">must</strong> bind all or none of the planes of an image (i.e. bindings to all planes of an image <strong class=\"purple\">must</strong> be made in a single <a href=\"#vkBindImageMemory2\">vkBindImageMemory2</a> call), as separate bindings"
-        },
-        {
-          "vuid": "VUID-VkBindImagePlaneMemoryInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkBindImagePlaneMemoryInfo-planeAspect-parameter",
-          "text": " <code>planeAspect</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageAspectFlagBits\">VkImageAspectFlagBits</a> value"
-        }
-      ]
-    },
-    "vkCreateSampler": {
-      "core": [
-        {
-          "vuid": "VUID-vkCreateSampler-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateSampler-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkSamplerCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateSampler-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateSampler-pSampler-parameter",
-          "text": " <code>pSampler</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSampler</code> handle"
-        }
-      ]
-    },
-    "VkSamplerCreateInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkSamplerCreateInfo-mipLodBias-01069",
-          "text": " The absolute value of <code>mipLodBias</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxSamplerLodBias</code>"
-        },
-        {
-          "vuid": "VUID-VkSamplerCreateInfo-anisotropyEnable-01070",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-samplerAnisotropy,anisotropic sampling&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>anisotropyEnable</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
-        },
-        {
-          "vuid": "VUID-VkSamplerCreateInfo-anisotropyEnable-01071",
-          "text": " If <code>anisotropyEnable</code> is <code>VK_TRUE</code>, <code>maxAnisotropy</code> <strong class=\"purple\">must</strong> be between <code>1.0</code> and <code>VkPhysicalDeviceLimits</code>::<code>maxSamplerAnisotropy</code>, inclusive"
-        },
-        {
-          "vuid": "VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01072",
-          "text": " If <code>unnormalizedCoordinates</code> is <code>VK_TRUE</code>, <code>minFilter</code> and <code>magFilter</code> <strong class=\"purple\">must</strong> be equal"
-        },
-        {
-          "vuid": "VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01073",
-          "text": " If <code>unnormalizedCoordinates</code> is <code>VK_TRUE</code>, <code>mipmapMode</code> <strong class=\"purple\">must</strong> be <code>VK_SAMPLER_MIPMAP_MODE_NEAREST</code>"
-        },
-        {
-          "vuid": "VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01074",
-          "text": " If <code>unnormalizedCoordinates</code> is <code>VK_TRUE</code>, <code>minLod</code> and <code>maxLod</code> <strong class=\"purple\">must</strong> be zero"
-        },
-        {
-          "vuid": "VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01075",
-          "text": " If <code>unnormalizedCoordinates</code> is <code>VK_TRUE</code>, <code>addressModeU</code> and <code>addressModeV</code> <strong class=\"purple\">must</strong> each be either <code>VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE</code> or <code>VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER</code>"
-        },
-        {
-          "vuid": "VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01076",
-          "text": " If <code>unnormalizedCoordinates</code> is <code>VK_TRUE</code>, <code>anisotropyEnable</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
-        },
-        {
-          "vuid": "VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01077",
-          "text": " If <code>unnormalizedCoordinates</code> is <code>VK_TRUE</code>, <code>compareEnable</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
-        },
-        {
-          "vuid": "VUID-VkSamplerCreateInfo-addressModeU-01078",
-          "text": " If any of <code>addressModeU</code>, <code>addressModeV</code> or <code>addressModeW</code> are <code>VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER</code>, <code>borderColor</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBorderColor\">VkBorderColor</a> value"
-        },
-        {
-          "vuid": "VUID-VkSamplerCreateInfo-addressModeU-01079",
-          "text": " If the <code><a href=\"#VK_KHR_sampler_mirror_clamp_to_edge\">VK_KHR_sampler_mirror_clamp_to_edge</a></code> extension is not enabled, <code>addressModeU</code>, <code>addressModeV</code> and <code>addressModeW</code> <strong class=\"purple\">must</strong> not be <code>VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE</code>"
-        },
-        {
-          "vuid": "VUID-VkSamplerCreateInfo-compareEnable-01080",
-          "text": " If <code>compareEnable</code> is <code>VK_TRUE</code>, <code>compareOp</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCompareOp\">VkCompareOp</a> value"
-        },
-        {
-          "vuid": "VUID-VkSamplerCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkSamplerCreateInfo-pNext-pNext",
-          "text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkSamplerReductionModeCreateInfoEXT\">VkSamplerReductionModeCreateInfoEXT</a> or <a href=\"#VkSamplerYcbcrConversionInfo\">VkSamplerYcbcrConversionInfo</a>"
-        },
-        {
-          "vuid": "VUID-VkSamplerCreateInfo-sType-unique",
-          "text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
-        },
-        {
-          "vuid": "VUID-VkSamplerCreateInfo-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkSamplerCreateInfo-magFilter-parameter",
-          "text": " <code>magFilter</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFilter\">VkFilter</a> value"
-        },
-        {
-          "vuid": "VUID-VkSamplerCreateInfo-minFilter-parameter",
-          "text": " <code>minFilter</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFilter\">VkFilter</a> value"
-        },
-        {
-          "vuid": "VUID-VkSamplerCreateInfo-mipmapMode-parameter",
-          "text": " <code>mipmapMode</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSamplerMipmapMode\">VkSamplerMipmapMode</a> value"
-        },
-        {
-          "vuid": "VUID-VkSamplerCreateInfo-addressModeU-parameter",
-          "text": " <code>addressModeU</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSamplerAddressMode\">VkSamplerAddressMode</a> value"
-        },
-        {
-          "vuid": "VUID-VkSamplerCreateInfo-addressModeV-parameter",
-          "text": " <code>addressModeV</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSamplerAddressMode\">VkSamplerAddressMode</a> value"
-        },
-        {
-          "vuid": "VUID-VkSamplerCreateInfo-addressModeW-parameter",
-          "text": " <code>addressModeW</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSamplerAddressMode\">VkSamplerAddressMode</a> value"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
-        {
-          "vuid": "VUID-VkSamplerCreateInfo-minFilter-01645",
-          "text": " If &amp;amp;lt;&amp;amp;lt;samplers-YCbCr-conversion,sampler Y&#8217;C<sub>B</sub>C<sub>R</sub> conversion&amp;amp;gt;&amp;amp;gt; is enabled and <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT</code> is not set for the format, <code>minFilter</code> and <code>magFilter</code> <strong class=\"purple\">must</strong> be equal to the sampler Y&#8217;C<sub>B</sub>C<sub>R</sub> conversion&#8217;s <code>chromaFilter</code>"
-        },
-        {
-          "vuid": "VUID-VkSamplerCreateInfo-addressModeU-01646",
-          "text": " If &amp;amp;lt;&amp;amp;lt;samplers-YCbCr-conversion,sampler Y&#8217;C<sub>B</sub>C<sub>R</sub> conversion&amp;amp;gt;&amp;amp;gt; is enabled, <code>addressModeU</code>, <code>addressModeV</code>, and <code>addressModeW</code> <strong class=\"purple\">must</strong> be <code>VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE</code>, <code>anisotropyEnable</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>, and <code>unnormalizedCoordinates</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)+(VK_EXT_sampler_filter_minmax)": [
-        {
-          "vuid": "VUID-VkSamplerCreateInfo-None-01647",
-          "text": " The sampler reduction mode <strong class=\"purple\">must</strong> be set to <code>VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT</code> if &amp;amp;lt;&amp;amp;lt;samplers-YCbCr-conversion,sampler Y&#8217;C<sub>B</sub>C<sub>R</sub> conversion&amp;amp;gt;&amp;amp;gt; is enabled"
-        }
-      ],
-      "(VK_IMG_filter_cubic)": [
-        {
-          "vuid": "VUID-VkSamplerCreateInfo-magFilter-01081",
-          "text": " If either <code>magFilter</code> or <code>minFilter</code> is <code>VK_FILTER_CUBIC_IMG</code>, <code>anisotropyEnable</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
-        }
-      ],
-      "(VK_IMG_filter_cubic+VK_EXT_sampler_filter_minmax)": [
-        {
-          "vuid": "VUID-VkSamplerCreateInfo-magFilter-01422",
-          "text": " If either <code>magFilter</code> or <code>minFilter</code> is <code>VK_FILTER_CUBIC_IMG</code>, the <code>reductionMode</code> member of <a href=\"#VkSamplerReductionModeCreateInfoEXT\">VkSamplerReductionModeCreateInfoEXT</a> <strong class=\"purple\">must</strong> be <code>VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT</code>"
-        }
-      ],
-      "(VK_EXT_sampler_filter_minmax)": [
-        {
-          "vuid": "VUID-VkSamplerCreateInfo-compareEnable-01423",
-          "text": " If <code>compareEnable</code> is <code>VK_TRUE</code>, the <code>reductionMode</code> member of <a href=\"#VkSamplerReductionModeCreateInfoEXT\">VkSamplerReductionModeCreateInfoEXT</a> <strong class=\"purple\">must</strong> be <code>VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT</code>"
-        }
-      ]
-    },
-    "VkSamplerReductionModeCreateInfoEXT": {
-      "(VK_EXT_sampler_filter_minmax)": [
-        {
-          "vuid": "VUID-VkSamplerReductionModeCreateInfoEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkSamplerReductionModeCreateInfoEXT-reductionMode-parameter",
-          "text": " <code>reductionMode</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSamplerReductionModeEXT\">VkSamplerReductionModeEXT</a> value"
-        }
-      ]
-    },
-    "vkDestroySampler": {
-      "core": [
-        {
-          "vuid": "VUID-vkDestroySampler-sampler-01082",
-          "text": " All submitted commands that refer to <code>sampler</code> <strong class=\"purple\">must</strong> have completed execution"
-        },
-        {
-          "vuid": "VUID-vkDestroySampler-sampler-01083",
-          "text": " If <code>VkAllocationCallbacks</code> were provided when <code>sampler</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
-        },
-        {
-          "vuid": "VUID-vkDestroySampler-sampler-01084",
-          "text": " If no <code>VkAllocationCallbacks</code> were provided when <code>sampler</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-vkDestroySampler-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroySampler-sampler-parameter",
-          "text": " If <code>sampler</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>sampler</code> <strong class=\"purple\">must</strong> be a valid <code>VkSampler</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroySampler-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkDestroySampler-sampler-parent",
-          "text": " If <code>sampler</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "VkSamplerYcbcrConversionInfo": {
-      "(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
-        {
-          "vuid": "VUID-VkSamplerYcbcrConversionInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkSamplerYcbcrConversionInfo-conversion-parameter",
-          "text": " <code>conversion</code> <strong class=\"purple\">must</strong> be a valid <code>VkSamplerYcbcrConversion</code> handle"
-        }
-      ]
-    },
-    "vkCreateSamplerYcbcrConversion": {
-      "(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
-        {
-          "vuid": "VUID-vkCreateSamplerYcbcrConversion-None-01648",
-          "text": " The &amp;amp;lt;&amp;amp;lt;features-features-sampler-YCbCr-conversion, sampler Y&#8217;C<sub>B</sub>C<sub>R</sub> conversion feature&amp;amp;gt;&amp;amp;gt; <strong class=\"purple\">must</strong> be enabled"
-        },
-        {
-          "vuid": "VUID-vkCreateSamplerYcbcrConversion-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateSamplerYcbcrConversion-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkSamplerYcbcrConversionCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateSamplerYcbcrConversion-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateSamplerYcbcrConversion-pYcbcrConversion-parameter",
-          "text": " <code>pYcbcrConversion</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSamplerYcbcrConversion</code> handle"
-        }
-      ]
-    },
-    "VkSamplerYcbcrConversionCreateInfo": {
-      "(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)+!(VK_ANDROID_external_memory_android_hardware_buffer)": [
-        {
-          "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-format-01649",
-          "text": " <code>format</code> <strong class=\"purple\">must</strong> not be <code>VK_FORMAT_UNDEFINED</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)+(VK_ANDROID_external_memory_android_hardware_buffer)": [
-        {
-          "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-format-01904",
-          "text": " If an external format conversion is being created, <code>format</code> <strong class=\"purple\">must</strong> be <code>VK_FORMAT_UNDEFINED</code>, otherwise it <strong class=\"purple\">must</strong> not be <code>VK_FORMAT_UNDEFINED</code>."
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
-        {
-          "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-format-01650",
-          "text": " <code>format</code> <strong class=\"purple\">must</strong> support <code>VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT</code> or <code>VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-xChromaOffset-01651",
-          "text": " If the format does not support <code>VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT</code>, <code>xChromaOffset</code> and <code>yChromaOffset</code> <strong class=\"purple\">must</strong> not be <code>VK_CHROMA_LOCATION_COSITED_EVEN</code>"
-        },
-        {
-          "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-xChromaOffset-01652",
-          "text": " If the format does not support <code>VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT</code>, <code>xChromaOffset</code> and <code>yChromaOffset</code> <strong class=\"purple\">must</strong> not be <code>VK_CHROMA_LOCATION_MIDPOINT</code>"
-        },
-        {
-          "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-format-01653",
-          "text": " <code>format</code> <strong class=\"purple\">must</strong> represent unsigned normalized values (i.e. the format must be a <code>UNORM</code> format)"
-        },
-        {
-          "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-None-01654",
-          "text": " If the format has a <code>_422</code> or <code>_420</code> suffix:"
-        },
-        {
-          "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-ycbcrModel-01655",
-          "text": " If <code>ycbcrModel</code> is not <code>VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY</code>, then <code>components.r</code>, <code>components.g</code>, and <code>components.b</code> <strong class=\"purple\">must</strong> correspond to channels of the <code>format</code>; that is, <code>components.r</code>, <code>components.g</code>, and <code>components.b</code> <strong class=\"purple\">must</strong> not be <code>VK_COMPONENT_SWIZZLE_ZERO</code> or <code>VK_COMPONENT_SWIZZLE_ONE</code>, and <strong class=\"purple\">must</strong> not correspond to a channel which contains zero or one as a consequence of &amp;amp;lt;&amp;amp;lt;textures-conversion-to-rgba,conversion to RGBA&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-forceExplicitReconstruction-01656",
-          "text": " If the format does not support <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT</code>, <code>forceExplicitReconstruction</code> <strong class=\"purple\">must</strong> be FALSE"
-        },
-        {
-          "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-chromaFilter-01657",
-          "text": " If the format does not support <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT</code>, <code>chromaFilter</code> <strong class=\"purple\">must</strong> be <code>VK_FILTER_NEAREST</code>"
-        },
-        {
-          "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkExternalFormatANDROID\">VkExternalFormatANDROID</a>"
-        },
-        {
-          "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-format-parameter",
-          "text": " <code>format</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFormat\">VkFormat</a> value"
-        },
-        {
-          "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-ycbcrModel-parameter",
-          "text": " <code>ycbcrModel</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSamplerYcbcrModelConversion\">VkSamplerYcbcrModelConversion</a> value"
-        },
-        {
-          "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-ycbcrRange-parameter",
-          "text": " <code>ycbcrRange</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSamplerYcbcrRange\">VkSamplerYcbcrRange</a> value"
-        },
-        {
-          "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-components-parameter",
-          "text": " <code>components</code> <strong class=\"purple\">must</strong> be a valid <code>VkComponentMapping</code> structure"
-        },
-        {
-          "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-xChromaOffset-parameter",
-          "text": " <code>xChromaOffset</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkChromaLocation\">VkChromaLocation</a> value"
-        },
-        {
-          "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-yChromaOffset-parameter",
-          "text": " <code>yChromaOffset</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkChromaLocation\">VkChromaLocation</a> value"
-        },
-        {
-          "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-chromaFilter-parameter",
-          "text": " <code>chromaFilter</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFilter\">VkFilter</a> value"
-        }
-      ]
-    },
-    "vkDestroySamplerYcbcrConversion": {
-      "(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
-        {
-          "vuid": "VUID-vkDestroySamplerYcbcrConversion-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroySamplerYcbcrConversion-ycbcrConversion-parameter",
-          "text": " If <code>ycbcrConversion</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>ycbcrConversion</code> <strong class=\"purple\">must</strong> be a valid <code>VkSamplerYcbcrConversion</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroySamplerYcbcrConversion-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkDestroySamplerYcbcrConversion-ycbcrConversion-parent",
-          "text": " If <code>ycbcrConversion</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkCreateDescriptorSetLayout": {
-      "core": [
-        {
-          "vuid": "VUID-vkCreateDescriptorSetLayout-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateDescriptorSetLayout-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDescriptorSetLayoutCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateDescriptorSetLayout-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateDescriptorSetLayout-pSetLayout-parameter",
-          "text": " <code>pSetLayout</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkDescriptorSetLayout</code> handle"
-        }
-      ]
-    },
-    "VkDescriptorSetLayoutCreateInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-binding-00279",
-          "text": " The <a href=\"#VkDescriptorSetLayoutBinding\">VkDescriptorSetLayoutBinding</a>::<code>binding</code> members of the elements of the <code>pBindings</code> array <strong class=\"purple\">must</strong> each have different values."
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkDescriptorSetLayoutBindingFlagsCreateInfoEXT\">VkDescriptorSetLayoutBindingFlagsCreateInfoEXT</a>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkDescriptorSetLayoutCreateFlagBits\">VkDescriptorSetLayoutCreateFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-pBindings-parameter",
-          "text": " If <code>bindingCount</code> is not <code>0</code>, <code>pBindings</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>bindingCount</code> valid <code>VkDescriptorSetLayoutBinding</code> structures"
-        }
-      ],
-      "(VK_KHR_push_descriptor)": [
-        {
-          "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-flags-00280",
-          "text": " If <code>flags</code> contains <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR</code>, then all elements of <code>pBindings</code> <strong class=\"purple\">must</strong> not have a <code>descriptorType</code> of <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC</code> or <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-flags-00281",
-          "text": " If <code>flags</code> contains <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR</code>, then the total number of elements of all bindings <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkPhysicalDevicePushDescriptorPropertiesKHR\">VkPhysicalDevicePushDescriptorPropertiesKHR</a>::<code>maxPushDescriptors</code>"
-        }
-      ],
-      "(VK_EXT_descriptor_indexing)": [
-        {
-          "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-flags-03000",
-          "text": " If any binding has the <code>VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT</code> bit set, <code>flags</code> <strong class=\"purple\">must</strong> include <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-descriptorType-03001",
-          "text": " If any binding has the <code>VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT</code> bit set, then all bindings <strong class=\"purple\">must</strong> not have <code>descriptorType</code> of <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC</code> or <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC</code>"
-        }
-      ]
-    },
-    "VkDescriptorSetLayoutBinding": {
-      "core": [
-        {
-          "vuid": "VUID-VkDescriptorSetLayoutBinding-descriptorType-00282",
-          "text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_SAMPLER</code> or <code>VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER</code>, and <code>descriptorCount</code> is not <code>0</code> and <code>pImmutableSamplers</code> is not <code>NULL</code>, <code>pImmutableSamplers</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>descriptorCount</code> valid <code>VkSampler</code> handles"
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetLayoutBinding-descriptorCount-00283",
-          "text": " If <code>descriptorCount</code> is not <code>0</code>, <code>stageFlags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkShaderStageFlagBits\">VkShaderStageFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetLayoutBinding-descriptorType-01510",
-          "text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT</code> and <code>descriptorCount</code> is not <code>0</code>, then <code>stageFlags</code> <strong class=\"purple\">must</strong> be <code>0</code> or <code>VK_SHADER_STAGE_FRAGMENT_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetLayoutBinding-descriptorType-parameter",
-          "text": " <code>descriptorType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDescriptorType\">VkDescriptorType</a> value"
-        }
-      ]
-    },
-    "VkDescriptorSetLayoutBindingFlagsCreateInfoEXT": {
-      "(VK_EXT_descriptor_indexing)": [
-        {
-          "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-bindingCount-03002",
-          "text": " If <code>bindingCount</code> is not zero, <code>bindingCount</code> <strong class=\"purple\">must</strong> equal <a href=\"#VkDescriptorSetLayoutCreateInfo\">VkDescriptorSetLayoutCreateInfo</a>::<code>bindingCount</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-pBindingFlags-03004",
-          "text": " If an element of <code>pBindingFlags</code> includes <code>VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT</code>, then all other elements of <a href=\"#VkDescriptorSetLayoutCreateInfo\">VkDescriptorSetLayoutCreateInfo</a>::<code>pBindings</code> <strong class=\"purple\">must</strong> have a smaller value of <code>binding</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-descriptorBindingUniformBufferUpdateAfterBind-03005",
-          "text": " If <a href=\"#VkPhysicalDeviceDescriptorIndexingFeaturesEXT\">VkPhysicalDeviceDescriptorIndexingFeaturesEXT</a>::<code>descriptorBindingUniformBufferUpdateAfterBind</code> is not enabled, all bindings with descriptor type <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER</code> <strong class=\"purple\">must</strong> not use <code>VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-descriptorBindingSampledImageUpdateAfterBind-03006",
-          "text": " If <a href=\"#VkPhysicalDeviceDescriptorIndexingFeaturesEXT\">VkPhysicalDeviceDescriptorIndexingFeaturesEXT</a>::<code>descriptorBindingSampledImageUpdateAfterBind</code> is not enabled, all bindings with descriptor type <code>VK_DESCRIPTOR_TYPE_SAMPLER</code>, <code>VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER</code>, or <code>VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE</code> <strong class=\"purple\">must</strong> not use <code>VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-descriptorBindingStorageImageUpdateAfterBind-03007",
-          "text": " If <a href=\"#VkPhysicalDeviceDescriptorIndexingFeaturesEXT\">VkPhysicalDeviceDescriptorIndexingFeaturesEXT</a>::<code>descriptorBindingStorageImageUpdateAfterBind</code> is not enabled, all bindings with descriptor type <code>VK_DESCRIPTOR_TYPE_STORAGE_IMAGE</code> <strong class=\"purple\">must</strong> not use <code>VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-descriptorBindingStorageBufferUpdateAfterBind-03008",
-          "text": " If <a href=\"#VkPhysicalDeviceDescriptorIndexingFeaturesEXT\">VkPhysicalDeviceDescriptorIndexingFeaturesEXT</a>::<code>descriptorBindingStorageBufferUpdateAfterBind</code> is not enabled, all bindings with descriptor type <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER</code> <strong class=\"purple\">must</strong> not use <code>VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-descriptorBindingUniformTexelBufferUpdateAfterBind-03009",
-          "text": " If <a href=\"#VkPhysicalDeviceDescriptorIndexingFeaturesEXT\">VkPhysicalDeviceDescriptorIndexingFeaturesEXT</a>::<code>descriptorBindingUniformTexelBufferUpdateAfterBind</code> is not enabled, all bindings with descriptor type <code>VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER</code> <strong class=\"purple\">must</strong> not use <code>VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-descriptorBindingStorageTexelBufferUpdateAfterBind-03010",
-          "text": " If <a href=\"#VkPhysicalDeviceDescriptorIndexingFeaturesEXT\">VkPhysicalDeviceDescriptorIndexingFeaturesEXT</a>::<code>descriptorBindingStorageTexelBufferUpdateAfterBind</code> is not enabled, all bindings with descriptor type <code>VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER</code> <strong class=\"purple\">must</strong> not use <code>VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-None-03011",
-          "text": " All bindings with descriptor type <code>VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT</code>, <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC</code>, or <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC</code> <strong class=\"purple\">must</strong> not use <code>VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-descriptorBindingUpdateUnusedWhilePending-03012",
-          "text": " If <a href=\"#VkPhysicalDeviceDescriptorIndexingFeaturesEXT\">VkPhysicalDeviceDescriptorIndexingFeaturesEXT</a>::<code>descriptorBindingUpdateUnusedWhilePending</code> is not enabled, all elements of <code>pBindingFlags</code> <strong class=\"purple\">must</strong> not include <code>VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-descriptorBindingPartiallyBound-03013",
-          "text": " If <a href=\"#VkPhysicalDeviceDescriptorIndexingFeaturesEXT\">VkPhysicalDeviceDescriptorIndexingFeaturesEXT</a>::<code>descriptorBindingPartiallyBound</code> is not enabled, all elements of <code>pBindingFlags</code> <strong class=\"purple\">must</strong> not include <code>VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-descriptorBindingVariableDescriptorCount-03014",
-          "text": " If <a href=\"#VkPhysicalDeviceDescriptorIndexingFeaturesEXT\">VkPhysicalDeviceDescriptorIndexingFeaturesEXT</a>::<code>descriptorBindingVariableDescriptorCount</code> is not enabled, all elements of <code>pBindingFlags</code> <strong class=\"purple\">must</strong> not include <code>VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-pBindingFlags-03015",
-          "text": " If an element of <code>pBindingFlags</code> includes <code>VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT</code>, that element&#8217;s <code>descriptorType</code> <strong class=\"purple\">must</strong> not be <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC</code> or <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-pBindingFlags-parameter",
-          "text": " If <code>bindingCount</code> is not <code>0</code>, <code>pBindingFlags</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>bindingCount</code> valid combinations of <a href=\"#VkDescriptorBindingFlagBitsEXT\">VkDescriptorBindingFlagBitsEXT</a> values"
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-pBindingFlags-requiredbitmask",
-          "text": " Each element of <code>pBindingFlags</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        }
-      ],
-      "(VK_EXT_descriptor_indexing)+(VK_KHR_push_descriptor)": [
-        {
-          "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-flags-03003",
-          "text": " If <a href=\"#VkDescriptorSetLayoutCreateInfo\">VkDescriptorSetLayoutCreateInfo</a>::<code>flags</code> includes <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR</code>, then all elements of <code>pBindingFlags</code> <strong class=\"purple\">must</strong> not include <code>VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT</code>, <code>VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT</code>, or <code>VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT</code>"
-        }
-      ]
-    },
-    "vkGetDescriptorSetLayoutSupport": {
-      "(VK_VERSION_1_1,VK_KHR_maintenance3)": [
-        {
-          "vuid": "VUID-vkGetDescriptorSetLayoutSupport-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetDescriptorSetLayoutSupport-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDescriptorSetLayoutCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-vkGetDescriptorSetLayoutSupport-pSupport-parameter",
-          "text": " <code>pSupport</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkDescriptorSetLayoutSupport</code> structure"
-        }
-      ]
-    },
-    "VkDescriptorSetLayoutSupport": {
-      "(VK_VERSION_1_1,VK_KHR_maintenance3)": [
-        {
-          "vuid": "VUID-VkDescriptorSetLayoutSupport-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetLayoutSupport-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkDescriptorSetVariableDescriptorCountLayoutSupportEXT\">VkDescriptorSetVariableDescriptorCountLayoutSupportEXT</a>"
-        }
-      ]
-    },
-    "VkDescriptorSetVariableDescriptorCountLayoutSupportEXT": {
-      "(VK_EXT_descriptor_indexing)": [
-        {
-          "vuid": "VUID-VkDescriptorSetVariableDescriptorCountLayoutSupportEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT</code>"
-        }
-      ]
-    },
-    "vkDestroyDescriptorSetLayout": {
-      "core": [
-        {
-          "vuid": "VUID-vkDestroyDescriptorSetLayout-descriptorSetLayout-00284",
-          "text": " If <code>VkAllocationCallbacks</code> were provided when <code>descriptorSetLayout</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
-        },
-        {
-          "vuid": "VUID-vkDestroyDescriptorSetLayout-descriptorSetLayout-00285",
-          "text": " If no <code>VkAllocationCallbacks</code> were provided when <code>descriptorSetLayout</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-vkDestroyDescriptorSetLayout-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyDescriptorSetLayout-descriptorSetLayout-parameter",
-          "text": " If <code>descriptorSetLayout</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>descriptorSetLayout</code> <strong class=\"purple\">must</strong> be a valid <code>VkDescriptorSetLayout</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyDescriptorSetLayout-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkDestroyDescriptorSetLayout-descriptorSetLayout-parent",
-          "text": " If <code>descriptorSetLayout</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkCreatePipelineLayout": {
-      "core": [
-        {
-          "vuid": "VUID-vkCreatePipelineLayout-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreatePipelineLayout-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPipelineLayoutCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreatePipelineLayout-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreatePipelineLayout-pPipelineLayout-parameter",
-          "text": " <code>pPipelineLayout</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkPipelineLayout</code> handle"
-        }
-      ]
-    },
-    "VkPipelineLayoutCreateInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-setLayoutCount-00286",
-          "text": " <code>setLayoutCount</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxBoundDescriptorSets</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-pPushConstantRanges-00292",
-          "text": " Any two elements of <code>pPushConstantRanges</code> <strong class=\"purple\">must</strong> not include the same stage in <code>stageFlags</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-parameter",
-          "text": " If <code>setLayoutCount</code> is not <code>0</code>, <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>setLayoutCount</code> valid <code>VkDescriptorSetLayout</code> handles"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-pPushConstantRanges-parameter",
-          "text": " If <code>pushConstantRangeCount</code> is not <code>0</code>, <code>pPushConstantRanges</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pushConstantRangeCount</code> valid <code>VkPushConstantRange</code> structures"
-        }
-      ],
-      "!(VK_EXT_descriptor_indexing)": [
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-00287",
-          "text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_SAMPLER</code> and <code>VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER</code> accessible to any shader stage across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxPerStageDescriptorSamplers</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-00288",
-          "text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER</code> and <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC</code> accessible to any shader stage across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxPerStageDescriptorUniformBuffers</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-00289",
-          "text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER</code> and <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC</code> accessible to any shader stage across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxPerStageDescriptorStorageBuffers</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-00290",
-          "text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER</code>, <code>VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE</code>, and <code>VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER</code> accessible to any shader stage across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxPerStageDescriptorSampledImages</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-00291",
-          "text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_STORAGE_IMAGE</code>, and <code>VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER</code> accessible to any shader stage across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxPerStageDescriptorStorageImages</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01676",
-          "text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT</code> accessible to any given shader stage across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxPerStageDescriptorInputAttachments</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01677",
-          "text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_SAMPLER</code> and <code>VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER</code> accessible across all shader stages and across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxDescriptorSetSamplers</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01678",
-          "text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER</code> accessible across all shader stagess and and across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxDescriptorSetUniformBuffers</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01679",
-          "text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC</code> accessible across all shader stages and across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxDescriptorSetUniformBuffersDynamic</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01680",
-          "text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER</code> accessible across all shader stages and across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxDescriptorSetStorageBuffers</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01681",
-          "text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC</code> accessible across all shader stages and across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxDescriptorSetStorageBuffersDynamic</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01682",
-          "text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER</code>, <code>VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE</code>, and <code>VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER</code> accessible across all shader stages and across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxDescriptorSetSampledImages</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01683",
-          "text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_STORAGE_IMAGE</code>, and <code>VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER</code> accessible across all shader stages and across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxDescriptorSetStorageImages</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01684",
-          "text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT</code> accessible across all shader stages and across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxDescriptorSetInputAttachments</code>"
-        }
-      ],
-      "(VK_EXT_descriptor_indexing)": [
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03016",
-          "text": " The total number of descriptors in descriptor set layouts created without the <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT</code> bit set with a <code>descriptorType</code> of <code>VK_DESCRIPTOR_TYPE_SAMPLER</code> and <code>VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER</code> accessible to any given shader stage across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxPerStageDescriptorSamplers</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03017",
-          "text": " The total number of descriptors in descriptor set layouts created without the <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT</code> bit set with a <code>descriptorType</code> of <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER</code> and <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC</code> accessible to any given shader stage across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxPerStageDescriptorUniformBuffers</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03018",
-          "text": " The total number of descriptors in descriptor set layouts created without the <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT</code> bit set with a <code>descriptorType</code> of <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER</code> and <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC</code> accessible to any given shader stage across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxPerStageDescriptorStorageBuffers</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03019",
-          "text": " The total number of descriptors in descriptor set layouts created without the <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT</code> bit set with a <code>descriptorType</code> of <code>VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER</code>, <code>VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE</code>, and <code>VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER</code> accessible to any given shader stage across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxPerStageDescriptorSampledImages</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03020",
-          "text": " The total number of descriptors in descriptor set layouts created without the <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT</code> bit set with a <code>descriptorType</code> of <code>VK_DESCRIPTOR_TYPE_STORAGE_IMAGE</code>, and <code>VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER</code> accessible to any given shader stage across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxPerStageDescriptorStorageImages</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03021",
-          "text": " The total number of descriptors in descriptor set layouts created without the <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT</code> bit set with a <code>descriptorType</code> of <code>VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT</code> accessible to any given shader stage across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxPerStageDescriptorInputAttachments</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03022",
-          "text": " The total number of descriptors with a <code>descriptorType</code> of <code>VK_DESCRIPTOR_TYPE_SAMPLER</code> and <code>VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER</code> accessible to any given shader stage across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceDescriptorIndexingPropertiesEXT</code>::<code>maxPerStageDescriptorUpdateAfterBindSamplers</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03023",
-          "text": " The total number of descriptors with a <code>descriptorType</code> of <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER</code> and <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC</code> accessible to any given shader stage across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceDescriptorIndexingPropertiesEXT</code>::<code>maxPerStageDescriptorUpdateAfterBindUniformBuffers</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03024",
-          "text": " The total number of descriptors with a <code>descriptorType</code> of <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER</code> and <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC</code> accessible to any given shader stage across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceDescriptorIndexingPropertiesEXT</code>::<code>maxPerStageDescriptorUpdateAfterBindStorageBuffers</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03025",
-          "text": " The total number of descriptors with a <code>descriptorType</code> of <code>VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER</code>, <code>VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE</code>, and <code>VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER</code> accessible to any given shader stage across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceDescriptorIndexingPropertiesEXT</code>::<code>maxPerStageDescriptorUpdateAfterBindSampledImages</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03026",
-          "text": " The total number of descriptors with a <code>descriptorType</code> of <code>VK_DESCRIPTOR_TYPE_STORAGE_IMAGE</code>, and <code>VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER</code> accessible to any given shader stage across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceDescriptorIndexingPropertiesEXT</code>::<code>maxPerStageDescriptorUpdateAfterBindStorageImages</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03027",
-          "text": " The total number of descriptors with a <code>descriptorType</code> of <code>VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT</code> accessible to any given shader stage across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceDescriptorIndexingPropertiesEXT</code>::<code>maxPerStageDescriptorUpdateAfterBindInputAttachments</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03028",
-          "text": " The total number of descriptors in descriptor set layouts created without the <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT</code> bit set with a <code>descriptorType</code> of <code>VK_DESCRIPTOR_TYPE_SAMPLER</code> and <code>VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER</code> accessible across all shader stages and across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxDescriptorSetSamplers</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03029",
-          "text": " The total number of descriptors in descriptor set layouts created without the <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT</code> bit set with a <code>descriptorType</code> of <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER</code> accessible across all shader stagess and and across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxDescriptorSetUniformBuffers</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03030",
-          "text": " The total number of descriptors in descriptor set layouts created without the <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT</code> bit set with a <code>descriptorType</code> of <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC</code> accessible across all shader stages and across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxDescriptorSetUniformBuffersDynamic</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03031",
-          "text": " The total number of descriptors in descriptor set layouts created without the <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT</code> bit set with a <code>descriptorType</code> of <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER</code> accessible across all shader stages and across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxDescriptorSetStorageBuffers</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03032",
-          "text": " The total number of descriptors in descriptor set layouts created without the <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT</code> bit set with a <code>descriptorType</code> of <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC</code> accessible across all shader stages and across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxDescriptorSetStorageBuffersDynamic</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03033",
-          "text": " The total number of descriptors in descriptor set layouts created without the <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT</code> bit set with a <code>descriptorType</code> of <code>VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER</code>, <code>VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE</code>, and <code>VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER</code> accessible across all shader stages and across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxDescriptorSetSampledImages</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03034",
-          "text": " The total number of descriptors in descriptor set layouts created without the <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT</code> bit set with a <code>descriptorType</code> of <code>VK_DESCRIPTOR_TYPE_STORAGE_IMAGE</code>, and <code>VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER</code> accessible across all shader stages and across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxDescriptorSetStorageImages</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03035",
-          "text": " The total number of descriptors in descriptor set layouts created without the <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT</code> bit set with a <code>descriptorType</code> of <code>VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT</code> accessible across all shader stages and across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxDescriptorSetInputAttachments</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03036",
-          "text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_SAMPLER</code> and <code>VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER</code> accessible across all shader stages and across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceDescriptorIndexingPropertiesEXT</code>::<code>maxDescriptorSetUpdateAfterBindSamplers</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03037",
-          "text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER</code> accessible across all shader stagess and and across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceDescriptorIndexingPropertiesEXT</code>::<code>maxDescriptorSetUpdateAfterBindUniformBuffers</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03038",
-          "text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC</code> accessible across all shader stages and across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceDescriptorIndexingPropertiesEXT</code>::<code>maxDescriptorSetUpdateAfterBindUniformBuffersDynamic</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03039",
-          "text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER</code> accessible across all shader stages and across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceDescriptorIndexingPropertiesEXT</code>::<code>maxDescriptorSetUpdateAfterBindStorageBuffers</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03040",
-          "text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC</code> accessible across all shader stages and across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceDescriptorIndexingPropertiesEXT</code>::<code>maxDescriptorSetUpdateAfterBindStorageBuffersDynamic</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03041",
-          "text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER</code>, <code>VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE</code>, and <code>VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER</code> accessible across all shader stages and across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceDescriptorIndexingPropertiesEXT</code>::<code>maxDescriptorSetUpdateAfterBindSampledImages</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03042",
-          "text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_STORAGE_IMAGE</code>, and <code>VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER</code> accessible across all shader stages and across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceDescriptorIndexingPropertiesEXT</code>::<code>maxDescriptorSetUpdateAfterBindStorageImages</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03043",
-          "text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT</code> accessible across all shader stages and across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceDescriptorIndexingPropertiesEXT</code>::<code>maxDescriptorSetUpdateAfterBindInputAttachments</code>"
-        }
-      ],
-      "(VK_KHR_push_descriptor)": [
-        {
-          "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-00293",
-          "text": " <code>pSetLayouts</code> <strong class=\"purple\">must</strong> not contain more than one descriptor set layout that was created with <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR</code> set"
-        }
-      ]
-    },
-    "VkPushConstantRange": {
-      "core": [
-        {
-          "vuid": "VUID-VkPushConstantRange-offset-00294",
-          "text": " <code>offset</code> <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceLimits</code>::<code>maxPushConstantsSize</code>"
-        },
-        {
-          "vuid": "VUID-VkPushConstantRange-offset-00295",
-          "text": " <code>offset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
-        },
-        {
-          "vuid": "VUID-VkPushConstantRange-size-00296",
-          "text": " <code>size</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkPushConstantRange-size-00297",
-          "text": " <code>size</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
-        },
-        {
-          "vuid": "VUID-VkPushConstantRange-size-00298",
-          "text": " <code>size</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxPushConstantsSize</code> minus <code>offset</code>"
-        },
-        {
-          "vuid": "VUID-VkPushConstantRange-stageFlags-parameter",
-          "text": " <code>stageFlags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkShaderStageFlagBits\">VkShaderStageFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkPushConstantRange-stageFlags-requiredbitmask",
-          "text": " <code>stageFlags</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        }
-      ]
-    },
-    "vkDestroyPipelineLayout": {
-      "core": [
-        {
-          "vuid": "VUID-vkDestroyPipelineLayout-pipelineLayout-00299",
-          "text": " If <code>VkAllocationCallbacks</code> were provided when <code>pipelineLayout</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
-        },
-        {
-          "vuid": "VUID-vkDestroyPipelineLayout-pipelineLayout-00300",
-          "text": " If no <code>VkAllocationCallbacks</code> were provided when <code>pipelineLayout</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-vkDestroyPipelineLayout-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyPipelineLayout-pipelineLayout-parameter",
-          "text": " If <code>pipelineLayout</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>pipelineLayout</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipelineLayout</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyPipelineLayout-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkDestroyPipelineLayout-pipelineLayout-parent",
-          "text": " If <code>pipelineLayout</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkCreateDescriptorPool": {
-      "core": [
-        {
-          "vuid": "VUID-vkCreateDescriptorPool-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateDescriptorPool-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDescriptorPoolCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateDescriptorPool-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateDescriptorPool-pDescriptorPool-parameter",
-          "text": " <code>pDescriptorPool</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkDescriptorPool</code> handle"
-        }
-      ]
-    },
-    "VkDescriptorPoolCreateInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkDescriptorPoolCreateInfo-maxSets-00301",
-          "text": " <code>maxSets</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorPoolCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorPoolCreateInfo-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorPoolCreateInfo-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkDescriptorPoolCreateFlagBits\">VkDescriptorPoolCreateFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkDescriptorPoolCreateInfo-pPoolSizes-parameter",
-          "text": " <code>pPoolSizes</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>poolSizeCount</code> valid <code>VkDescriptorPoolSize</code> structures"
-        },
-        {
-          "vuid": "VUID-VkDescriptorPoolCreateInfo-poolSizeCount-arraylength",
-          "text": " <code>poolSizeCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ]
-    },
-    "VkDescriptorPoolSize": {
-      "core": [
-        {
-          "vuid": "VUID-VkDescriptorPoolSize-descriptorCount-00302",
-          "text": " <code>descriptorCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorPoolSize-type-parameter",
-          "text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDescriptorType\">VkDescriptorType</a> value"
-        }
-      ]
-    },
-    "vkDestroyDescriptorPool": {
-      "core": [
-        {
-          "vuid": "VUID-vkDestroyDescriptorPool-descriptorPool-00303",
-          "text": " All submitted commands that refer to <code>descriptorPool</code> (via any allocated descriptor sets) <strong class=\"purple\">must</strong> have completed execution"
-        },
-        {
-          "vuid": "VUID-vkDestroyDescriptorPool-descriptorPool-00304",
-          "text": " If <code>VkAllocationCallbacks</code> were provided when <code>descriptorPool</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
-        },
-        {
-          "vuid": "VUID-vkDestroyDescriptorPool-descriptorPool-00305",
-          "text": " If no <code>VkAllocationCallbacks</code> were provided when <code>descriptorPool</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-vkDestroyDescriptorPool-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyDescriptorPool-descriptorPool-parameter",
-          "text": " If <code>descriptorPool</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>descriptorPool</code> <strong class=\"purple\">must</strong> be a valid <code>VkDescriptorPool</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyDescriptorPool-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkDestroyDescriptorPool-descriptorPool-parent",
-          "text": " If <code>descriptorPool</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkAllocateDescriptorSets": {
-      "core": [
-        {
-          "vuid": "VUID-vkAllocateDescriptorSets-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkAllocateDescriptorSets-pAllocateInfo-parameter",
-          "text": " <code>pAllocateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDescriptorSetAllocateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-vkAllocateDescriptorSets-pDescriptorSets-parameter",
-          "text": " <code>pDescriptorSets</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pAllocateInfo</code>::descriptorSetCount <code>VkDescriptorSet</code> handles"
-        }
-      ]
-    },
-    "VkDescriptorSetAllocateInfo": {
-      "!(VK_VERSION_1_1,VK_KHR_maintenance1)": [
-        {
-          "vuid": "VUID-VkDescriptorSetAllocateInfo-descriptorSetCount-00306",
-          "text": " <code>descriptorSetCount</code> <strong class=\"purple\">must</strong> not be greater than the number of sets that are currently available for allocation in <code>descriptorPool</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetAllocateInfo-descriptorPool-00307",
-          "text": " <code>descriptorPool</code> <strong class=\"purple\">must</strong> have enough free descriptor capacity remaining to allocate the descriptor sets of the specified layouts"
-        }
-      ],
-      "(VK_KHR_push_descriptor)": [
-        {
-          "vuid": "VUID-VkDescriptorSetAllocateInfo-pSetLayouts-00308",
-          "text": " Each element of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> not have been created with <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR</code> set"
-        }
-      ],
-      "(VK_EXT_descriptor_indexing)": [
-        {
-          "vuid": "VUID-VkDescriptorSetAllocateInfo-pSetLayouts-03044",
-          "text": " If any element of <code>pSetLayouts</code> was created with the <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT</code> bit set, <code>descriptorPool</code> <strong class=\"purple\">must</strong> have been created with the <code>VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT</code> flag set"
-        }
-      ],
-      "core": [
-        {
-          "vuid": "VUID-VkDescriptorSetAllocateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetAllocateInfo-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkDescriptorSetVariableDescriptorCountAllocateInfoEXT\">VkDescriptorSetVariableDescriptorCountAllocateInfoEXT</a>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetAllocateInfo-descriptorPool-parameter",
-          "text": " <code>descriptorPool</code> <strong class=\"purple\">must</strong> be a valid <code>VkDescriptorPool</code> handle"
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetAllocateInfo-pSetLayouts-parameter",
-          "text": " <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>descriptorSetCount</code> valid <code>VkDescriptorSetLayout</code> handles"
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetAllocateInfo-descriptorSetCount-arraylength",
-          "text": " <code>descriptorSetCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetAllocateInfo-commonparent",
-          "text": " Both of <code>descriptorPool</code>, and the elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ]
-    },
-    "VkDescriptorSetVariableDescriptorCountAllocateInfoEXT": {
-      "(VK_EXT_descriptor_indexing)": [
-        {
-          "vuid": "VUID-VkDescriptorSetVariableDescriptorCountAllocateInfoEXT-descriptorSetCount-03045",
-          "text": " If <code>descriptorSetCount</code> is not zero, <code>descriptorSetCount</code> <strong class=\"purple\">must</strong> equal <a href=\"#VkDescriptorSetAllocateInfo\">VkDescriptorSetAllocateInfo</a>::<code>descriptorSetCount</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetVariableDescriptorCountAllocateInfoEXT-pSetLayouts-03046",
-          "text": " If <a href=\"#VkDescriptorSetAllocateInfo\">VkDescriptorSetAllocateInfo</a>::<code>pSetLayouts</code>[i] has a variable descriptor count binding, then <code>pDescriptorCounts</code>[i] <strong class=\"purple\">must</strong> be less than or equal to the descriptor count specified for that binding when the descriptor set layout was created."
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetVariableDescriptorCountAllocateInfoEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorSetVariableDescriptorCountAllocateInfoEXT-pDescriptorCounts-parameter",
-          "text": " If <code>descriptorSetCount</code> is not <code>0</code>, <code>pDescriptorCounts</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>descriptorSetCount</code> <code>uint32_t</code> values"
-        }
-      ]
-    },
-    "vkFreeDescriptorSets": {
-      "core": [
-        {
-          "vuid": "VUID-vkFreeDescriptorSets-pDescriptorSets-00309",
-          "text": " All submitted commands that refer to any element of <code>pDescriptorSets</code> <strong class=\"purple\">must</strong> have completed execution"
-        },
-        {
-          "vuid": "VUID-vkFreeDescriptorSets-pDescriptorSets-00310",
-          "text": " <code>pDescriptorSets</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>descriptorSetCount</code> <code>VkDescriptorSet</code> handles, each element of which <strong class=\"purple\">must</strong> either be a valid handle or <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
-        },
-        {
-          "vuid": "VUID-vkFreeDescriptorSets-pDescriptorSets-00311",
-          "text": " Each valid handle in <code>pDescriptorSets</code> <strong class=\"purple\">must</strong> have been allocated from <code>descriptorPool</code>"
-        },
-        {
-          "vuid": "VUID-vkFreeDescriptorSets-descriptorPool-00312",
-          "text": " <code>descriptorPool</code> <strong class=\"purple\">must</strong> have been created with the <code>VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT</code> flag"
-        },
-        {
-          "vuid": "VUID-vkFreeDescriptorSets-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkFreeDescriptorSets-descriptorPool-parameter",
-          "text": " <code>descriptorPool</code> <strong class=\"purple\">must</strong> be a valid <code>VkDescriptorPool</code> handle"
-        },
-        {
-          "vuid": "VUID-vkFreeDescriptorSets-descriptorSetCount-arraylength",
-          "text": " <code>descriptorSetCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkFreeDescriptorSets-descriptorPool-parent",
-          "text": " <code>descriptorPool</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        },
-        {
-          "vuid": "VUID-vkFreeDescriptorSets-pDescriptorSets-parent",
-          "text": " Each element of <code>pDescriptorSets</code> that is a valid handle <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>descriptorPool</code>"
-        }
-      ]
-    },
-    "vkResetDescriptorPool": {
-      "core": [
-        {
-          "vuid": "VUID-vkResetDescriptorPool-descriptorPool-00313",
-          "text": " All uses of <code>descriptorPool</code> (via any allocated descriptor sets) <strong class=\"purple\">must</strong> have completed execution"
-        },
-        {
-          "vuid": "VUID-vkResetDescriptorPool-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkResetDescriptorPool-descriptorPool-parameter",
-          "text": " <code>descriptorPool</code> <strong class=\"purple\">must</strong> be a valid <code>VkDescriptorPool</code> handle"
-        },
-        {
-          "vuid": "VUID-vkResetDescriptorPool-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkResetDescriptorPool-descriptorPool-parent",
-          "text": " <code>descriptorPool</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkUpdateDescriptorSets": {
-      "!(VK_EXT_descriptor_indexing)": [
-        {
-          "vuid": "VUID-vkUpdateDescriptorSets-dstSet-00314",
-          "text": " The <code>dstSet</code> member of each element of <code>pDescriptorWrites</code> or <code>pDescriptorCopies</code> <strong class=\"purple\">must</strong> not be used by any command that was recorded to a command buffer which is in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, pending state&amp;amp;gt;&amp;amp;gt;."
-        }
-      ],
-      "(VK_EXT_descriptor_indexing)": [
-        {
-          "vuid": "VUID-vkUpdateDescriptorSets-None-03047",
-          "text": " Descriptor bindings updated by this command which were created without the <code>VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT</code> or <code>VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT</code> bits set <strong class=\"purple\">must</strong> not be used by any command that was recorded to a command buffer which is in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle,pending state&amp;amp;gt;&amp;amp;gt;."
-        }
-      ],
-      "core": [
-        {
-          "vuid": "VUID-vkUpdateDescriptorSets-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkUpdateDescriptorSets-pDescriptorWrites-parameter",
-          "text": " If <code>descriptorWriteCount</code> is not <code>0</code>, <code>pDescriptorWrites</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>descriptorWriteCount</code> valid <code>VkWriteDescriptorSet</code> structures"
-        },
-        {
-          "vuid": "VUID-vkUpdateDescriptorSets-pDescriptorCopies-parameter",
-          "text": " If <code>descriptorCopyCount</code> is not <code>0</code>, <code>pDescriptorCopies</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>descriptorCopyCount</code> valid <code>VkCopyDescriptorSet</code> structures"
-        }
-      ]
-    },
-    "VkWriteDescriptorSet": {
-      "core": [
-        {
-          "vuid": "VUID-VkWriteDescriptorSet-dstBinding-00315",
-          "text": " <code>dstBinding</code> <strong class=\"purple\">must</strong> be less than or equal to the maximum value of <code>binding</code> of all <a href=\"#VkDescriptorSetLayoutBinding\">VkDescriptorSetLayoutBinding</a> structures specified when <code>dstSet</code>&#8217;s descriptor set layout was created"
-        },
-        {
-          "vuid": "VUID-VkWriteDescriptorSet-dstBinding-00316",
-          "text": " <code>dstBinding</code> <strong class=\"purple\">must</strong> be a binding with a non-zero <code>descriptorCount</code>"
-        },
-        {
-          "vuid": "VUID-VkWriteDescriptorSet-descriptorCount-00317",
-          "text": " All consecutive bindings updated via a single <code>VkWriteDescriptorSet</code> structure, except those with a <code>descriptorCount</code> of zero, <strong class=\"purple\">must</strong> have identical <code>descriptorType</code> and <code>stageFlags</code>."
-        },
-        {
-          "vuid": "VUID-VkWriteDescriptorSet-descriptorCount-00318",
-          "text": " All consecutive bindings updated via a single <code>VkWriteDescriptorSet</code> structure, except those with a <code>descriptorCount</code> of zero, <strong class=\"purple\">must</strong> all either use immutable samplers or <strong class=\"purple\">must</strong> all not use immutable samplers."
-        },
-        {
-          "vuid": "VUID-VkWriteDescriptorSet-descriptorType-00319",
-          "text": " <code>descriptorType</code> <strong class=\"purple\">must</strong> match the type of <code>dstBinding</code> within <code>dstSet</code>"
-        },
-        {
-          "vuid": "VUID-VkWriteDescriptorSet-dstSet-00320",
-          "text": " <code>dstSet</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDescriptorSet\">VkDescriptorSet</a> handle"
-        },
-        {
-          "vuid": "VUID-VkWriteDescriptorSet-dstArrayElement-00321",
-          "text": " The sum of <code>dstArrayElement</code> and <code>descriptorCount</code> <strong class=\"purple\">must</strong> be less than or equal to the number of array elements in the descriptor set binding specified by <code>dstBinding</code>, and all applicable consecutive bindings, as described by &amp;amp;lt;&amp;amp;lt;descriptorsets-updates-consecutive&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-VkWriteDescriptorSet-descriptorType-00322",
-          "text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_SAMPLER</code>, <code>VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER</code>, <code>VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE</code>, <code>VK_DESCRIPTOR_TYPE_STORAGE_IMAGE</code>, or <code>VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT</code>, <code>pImageInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>descriptorCount</code> valid <code>VkDescriptorImageInfo</code> structures"
-        },
-        {
-          "vuid": "VUID-VkWriteDescriptorSet-descriptorType-00323",
-          "text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER</code> or <code>VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER</code>, <code>pTexelBufferView</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>descriptorCount</code> valid <code>VkBufferView</code> handles"
-        },
-        {
-          "vuid": "VUID-VkWriteDescriptorSet-descriptorType-00324",
-          "text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER</code>, <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER</code>, <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC</code>, or <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC</code>, <code>pBufferInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>descriptorCount</code> valid <code>VkDescriptorBufferInfo</code> structures"
-        },
-        {
-          "vuid": "VUID-VkWriteDescriptorSet-descriptorType-00325",
-          "text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_SAMPLER</code> or <code>VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER</code>, and <code>dstSet</code> was not allocated with a layout that included immutable samplers for <code>dstBinding</code> with <code>descriptorType</code>, the <code>sampler</code> member of each element of <code>pImageInfo</code> <strong class=\"purple\">must</strong> be a valid <code>VkSampler</code> object"
-        },
-        {
-          "vuid": "VUID-VkWriteDescriptorSet-descriptorType-00326",
-          "text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER</code>, <code>VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE</code>, <code>VK_DESCRIPTOR_TYPE_STORAGE_IMAGE</code>, or <code>VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT</code>, the <code>imageView</code> and <code>imageLayout</code> members of each element of <code>pImageInfo</code> <strong class=\"purple\">must</strong> be a valid <code>VkImageView</code> and <a href=\"#VkImageLayout\">VkImageLayout</a>, respectively"
-        },
-        {
-          "vuid": "VUID-VkWriteDescriptorSet-descriptorType-01402",
-          "text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_STORAGE_IMAGE</code>, for each descriptor that will be accessed via load or store operations the <code>imageLayout</code> member for corresponding elements of <code>pImageInfo</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_GENERAL</code>"
-        },
-        {
-          "vuid": "VUID-VkWriteDescriptorSet-descriptorType-00327",
-          "text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER</code> or <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC</code>, the <code>offset</code> member of each element of <code>pBufferInfo</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceLimits</code>::<code>minUniformBufferOffsetAlignment</code>"
-        },
-        {
-          "vuid": "VUID-VkWriteDescriptorSet-descriptorType-00328",
-          "text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER</code> or <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC</code>, the <code>offset</code> member of each element of <code>pBufferInfo</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceLimits</code>::<code>minStorageBufferOffsetAlignment</code>"
-        },
-        {
-          "vuid": "VUID-VkWriteDescriptorSet-descriptorType-00329",
-          "text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER</code>, <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC</code>, <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER</code>, or <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC</code>, and the <code>buffer</code> member of any element of <code>pBufferInfo</code> is the handle of a non-sparse buffer, then that buffer <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
-        },
-        {
-          "vuid": "VUID-VkWriteDescriptorSet-descriptorType-00330",
-          "text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER</code> or <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC</code>, the <code>buffer</code> member of each element of <code>pBufferInfo</code> <strong class=\"purple\">must</strong> have been created with <code>VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT</code> set"
-        },
-        {
-          "vuid": "VUID-VkWriteDescriptorSet-descriptorType-00331",
-          "text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER</code> or <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC</code>, the <code>buffer</code> member of each element of <code>pBufferInfo</code> <strong class=\"purple\">must</strong> have been created with <code>VK_BUFFER_USAGE_STORAGE_BUFFER_BIT</code> set"
-        },
-        {
-          "vuid": "VUID-VkWriteDescriptorSet-descriptorType-00332",
-          "text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER</code> or <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC</code>, the <code>range</code> member of each element of <code>pBufferInfo</code>, or the effective range if <code>range</code> is <code>VK_WHOLE_SIZE</code>, <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxUniformBufferRange</code>"
-        },
-        {
-          "vuid": "VUID-VkWriteDescriptorSet-descriptorType-00333",
-          "text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER</code> or <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC</code>, the <code>range</code> member of each element of <code>pBufferInfo</code>, or the effective range if <code>range</code> is <code>VK_WHOLE_SIZE</code>, <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxStorageBufferRange</code>"
-        },
-        {
-          "vuid": "VUID-VkWriteDescriptorSet-descriptorType-00334",
-          "text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER</code>, the <code>VkBuffer</code> that each element of <code>pTexelBufferView</code> was created from <strong class=\"purple\">must</strong> have been created with <code>VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT</code> set"
-        },
-        {
-          "vuid": "VUID-VkWriteDescriptorSet-descriptorType-00335",
-          "text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER</code>, the <code>VkBuffer</code> that each element of <code>pTexelBufferView</code> was created from <strong class=\"purple\">must</strong> have been created with <code>VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT</code> set"
-        },
-        {
-          "vuid": "VUID-VkWriteDescriptorSet-descriptorType-00336",
-          "text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_STORAGE_IMAGE</code> or <code>VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT</code>, the <code>imageView</code> member of each element of <code>pImageInfo</code> <strong class=\"purple\">must</strong> have been created with the identity swizzle"
-        },
-        {
-          "vuid": "VUID-VkWriteDescriptorSet-descriptorType-00337",
-          "text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE</code> or <code>VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER</code>, the <code>imageView</code> member of each element of <code>pImageInfo</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_SAMPLED_BIT</code> set"
-        },
-        {
-          "vuid": "VUID-VkWriteDescriptorSet-descriptorType-01403",
-          "text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE</code> or <code>VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER</code>, the <code>imageLayout</code> member of each element of <code>pImageInfo</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_GENERAL</code>"
-        },
-        {
-          "vuid": "VUID-VkWriteDescriptorSet-descriptorType-00338",
-          "text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT</code>, the <code>imageView</code> member of each element of <code>pImageInfo</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT</code> set"
-        },
-        {
-          "vuid": "VUID-VkWriteDescriptorSet-descriptorType-00339",
-          "text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_STORAGE_IMAGE</code>, the <code>imageView</code> member of each element of <code>pImageInfo</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_STORAGE_BIT</code> set"
-        },
-        {
-          "vuid": "VUID-VkWriteDescriptorSet-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET</code>"
-        },
-        {
-          "vuid": "VUID-VkWriteDescriptorSet-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkWriteDescriptorSet-descriptorType-parameter",
-          "text": " <code>descriptorType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDescriptorType\">VkDescriptorType</a> value"
-        },
-        {
-          "vuid": "VUID-VkWriteDescriptorSet-descriptorCount-arraylength",
-          "text": " <code>descriptorCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkWriteDescriptorSet-commonparent",
-          "text": " Both of <code>dstSet</code>, and the elements of <code>pTexelBufferView</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ],
-      "(VK_EXT_descriptor_indexing)": [
-        {
-          "vuid": "VUID-VkWriteDescriptorSet-descriptorCount-03048",
-          "text": " All consecutive bindings updated via a single <code>VkWriteDescriptorSet</code> structure, except those with a <code>descriptorCount</code> of zero, <strong class=\"purple\">must</strong> have identical <a href=\"#VkDescriptorBindingFlagBitsEXT\">VkDescriptorBindingFlagBitsEXT</a>."
-        }
-      ]
-    },
-    "VkDescriptorBufferInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkDescriptorBufferInfo-offset-00340",
-          "text": " <code>offset</code> <strong class=\"purple\">must</strong> be less than the size of <code>buffer</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorBufferInfo-range-00341",
-          "text": " If <code>range</code> is not equal to <code>VK_WHOLE_SIZE</code>, <code>range</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorBufferInfo-range-00342",
-          "text": " If <code>range</code> is not equal to <code>VK_WHOLE_SIZE</code>, <code>range</code> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code> minus <code>offset</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorBufferInfo-buffer-parameter",
-          "text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
-        }
-      ]
-    },
-    "VkDescriptorImageInfo": {
-      "(VK_VERSION_1_1,VK_KHR_maintenance1)": [
-        {
-          "vuid": "VUID-VkDescriptorImageInfo-imageView-00343",
-          "text": " <code>imageView</code> <strong class=\"purple\">must</strong> not be 2D or 2D array image view created from a 3D image"
-        }
-      ],
-      "core": [
-        {
-          "vuid": "VUID-VkDescriptorImageInfo-imageLayout-00344",
-          "text": " <code>imageLayout</code> <strong class=\"purple\">must</strong> match the actual <a href=\"#VkImageLayout\">VkImageLayout</a> of each subresource accessible from <code>imageView</code> at the time this descriptor is accessed"
-        },
-        {
-          "vuid": "VUID-VkDescriptorImageInfo-commonparent",
-          "text": " Both of <code>imageView</code>, and <code>sampler</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
-        {
-          "vuid": "VUID-VkDescriptorImageInfo-sampler-01563",
-          "text": " If <code>sampler</code> is used and enables &amp;amp;lt;&amp;amp;lt;samplers-YCbCr-conversion,sampler Y&#8217;C<sub>B</sub>C<sub>R</sub> conversion&amp;amp;gt;&amp;amp;gt;:"
-        },
-        {
-          "vuid": "VUID-VkDescriptorImageInfo-sampler-01564",
-          "text": " If <code>sampler</code> is used and does not enable &amp;amp;lt;&amp;amp;lt;samplers-YCbCr-conversion, sampler Y&#8217;C<sub>B</sub>C<sub>R</sub> conversion&amp;amp;gt;&amp;amp;gt; and the <a href=\"#VkFormat\">VkFormat</a> of the image is a &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar format&amp;amp;gt;&amp;amp;gt;, the image <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT</code>, and the <code>aspectMask</code> of the <code>imageView</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_ASPECT_PLANE_0_BIT</code>, <code>VK_IMAGE_ASPECT_PLANE_1_BIT</code> or (for three-plane formats only) <code>VK_IMAGE_ASPECT_PLANE_2_BIT</code>"
-        }
-      ]
-    },
-    "VkCopyDescriptorSet": {
-      "core": [
-        {
-          "vuid": "VUID-VkCopyDescriptorSet-srcBinding-00345",
-          "text": " <code>srcBinding</code> <strong class=\"purple\">must</strong> be a valid binding within <code>srcSet</code>"
-        },
-        {
-          "vuid": "VUID-VkCopyDescriptorSet-srcArrayElement-00346",
-          "text": " The sum of <code>srcArrayElement</code> and <code>descriptorCount</code> <strong class=\"purple\">must</strong> be less than or equal to the number of array elements in the descriptor set binding specified by <code>srcBinding</code>, and all applicable consecutive bindings, as described by &amp;amp;lt;&amp;amp;lt;descriptorsets-updates-consecutive&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-VkCopyDescriptorSet-dstBinding-00347",
-          "text": " <code>dstBinding</code> <strong class=\"purple\">must</strong> be a valid binding within <code>dstSet</code>"
-        },
-        {
-          "vuid": "VUID-VkCopyDescriptorSet-dstArrayElement-00348",
-          "text": " The sum of <code>dstArrayElement</code> and <code>descriptorCount</code> <strong class=\"purple\">must</strong> be less than or equal to the number of array elements in the descriptor set binding specified by <code>dstBinding</code>, and all applicable consecutive bindings, as described by &amp;amp;lt;&amp;amp;lt;descriptorsets-updates-consecutive&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-VkCopyDescriptorSet-srcSet-00349",
-          "text": " If <code>srcSet</code> is equal to <code>dstSet</code>, then the source and destination ranges of descriptors <strong class=\"purple\">must</strong> not overlap, where the ranges <strong class=\"purple\">may</strong> include array elements from consecutive bindings as described by &amp;amp;lt;&amp;amp;lt;descriptorsets-updates-consecutive&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-VkCopyDescriptorSet-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET</code>"
-        },
-        {
-          "vuid": "VUID-VkCopyDescriptorSet-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkCopyDescriptorSet-srcSet-parameter",
-          "text": " <code>srcSet</code> <strong class=\"purple\">must</strong> be a valid <code>VkDescriptorSet</code> handle"
-        },
-        {
-          "vuid": "VUID-VkCopyDescriptorSet-dstSet-parameter",
-          "text": " <code>dstSet</code> <strong class=\"purple\">must</strong> be a valid <code>VkDescriptorSet</code> handle"
-        },
-        {
-          "vuid": "VUID-VkCopyDescriptorSet-commonparent",
-          "text": " Both of <code>dstSet</code>, and <code>srcSet</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ],
-      "(VK_EXT_descriptor_indexing)": [
-        {
-          "vuid": "VUID-VkCopyDescriptorSet-srcSet-01918",
-          "text": " If <code>srcSet</code>&#8217;s layout was created with the <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT</code> flag set, then <code>dstSet</code>&#8217;s layout <strong class=\"purple\">must</strong> also have been created with the <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT</code> flag set"
-        },
-        {
-          "vuid": "VUID-VkCopyDescriptorSet-srcSet-01919",
-          "text": " If <code>srcSet</code>&#8217;s layout was created without the <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT</code> flag set, then <code>dstSet</code>&#8217;s layout <strong class=\"purple\">must</strong> also have been created without the <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT</code> flag set"
-        },
-        {
-          "vuid": "VUID-VkCopyDescriptorSet-srcSet-01920",
-          "text": " If the descriptor pool from which <code>srcSet</code> was allocated was created with the <code>VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT</code> flag set, then the descriptor pool from which <code>dstSet</code> was allocated <strong class=\"purple\">must</strong> also have been created with the <code>VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT</code> flag set"
-        },
-        {
-          "vuid": "VUID-VkCopyDescriptorSet-srcSet-01921",
-          "text": " If the descriptor pool from which <code>srcSet</code> was allocated was created without the <code>VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT</code> flag set, then the descriptor pool from which <code>dstSet</code> was allocated <strong class=\"purple\">must</strong> also have been created without the <code>VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT</code> flag set"
-        }
-      ]
-    },
-    "vkCreateDescriptorUpdateTemplate": {
-      "(VK_VERSION_1_1,VK_KHR_descriptor_update_template)": [
-        {
-          "vuid": "VUID-vkCreateDescriptorUpdateTemplate-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateDescriptorUpdateTemplate-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDescriptorUpdateTemplateCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateDescriptorUpdateTemplate-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateDescriptorUpdateTemplate-pDescriptorUpdateTemplate-parameter",
-          "text": " <code>pDescriptorUpdateTemplate</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkDescriptorUpdateTemplate</code> handle"
-        }
-      ]
-    },
-    "VkDescriptorUpdateTemplateCreateInfo": {
-      "(VK_VERSION_1_1,VK_KHR_descriptor_update_template)": [
-        {
-          "vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-templateType-00350",
-          "text": " If <code>templateType</code> is <code>VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET</code>, <code>descriptorSetLayout</code> <strong class=\"purple\">must</strong> be a valid <code>VkDescriptorSetLayout</code> handle"
-        },
-        {
-          "vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-pDescriptorUpdateEntries-parameter",
-          "text": " <code>pDescriptorUpdateEntries</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>descriptorUpdateEntryCount</code> valid <code>VkDescriptorUpdateTemplateEntry</code> structures"
-        },
-        {
-          "vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-templateType-parameter",
-          "text": " <code>templateType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDescriptorUpdateTemplateType\">VkDescriptorUpdateTemplateType</a> value"
-        },
-        {
-          "vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-descriptorSetLayout-parameter",
-          "text": " If <code>descriptorSetLayout</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>descriptorSetLayout</code> <strong class=\"purple\">must</strong> be a valid <code>VkDescriptorSetLayout</code> handle"
-        },
-        {
-          "vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-descriptorUpdateEntryCount-arraylength",
-          "text": " <code>descriptorUpdateEntryCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-commonparent",
-          "text": " Both of <code>descriptorSetLayout</code>, and <code>pipelineLayout</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_descriptor_update_template)+(VK_KHR_push_descriptor)": [
-        {
-          "vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-templateType-00351",
-          "text": " If <code>templateType</code> is <code>VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR</code>, <code>pipelineBindPoint</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipelineBindPoint\">VkPipelineBindPoint</a> value"
-        },
-        {
-          "vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-templateType-00352",
-          "text": " If <code>templateType</code> is <code>VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR</code>, <code>pipelineLayout</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipelineLayout</code> handle"
-        },
-        {
-          "vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-templateType-00353",
-          "text": " If <code>templateType</code> is <code>VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR</code>, <code>set</code> <strong class=\"purple\">must</strong> be the unique set number in the pipeline layout that uses a descriptor set layout that was created with <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR</code>"
-        }
-      ]
-    },
-    "VkDescriptorUpdateTemplateEntry": {
-      "(VK_VERSION_1_1,VK_KHR_descriptor_update_template)": [
-        {
-          "vuid": "VUID-VkDescriptorUpdateTemplateEntry-dstBinding-00354",
-          "text": " <code>dstBinding</code> <strong class=\"purple\">must</strong> be a valid binding in the descriptor set layout implicitly specified when using a descriptor update template to update descriptors."
-        },
-        {
-          "vuid": "VUID-VkDescriptorUpdateTemplateEntry-dstArrayElement-00355",
-          "text": " <code>dstArrayElement</code> and <code>descriptorCount</code> <strong class=\"purple\">must</strong> be less than or equal to the number of array elements in the descriptor set binding implicitly specified when using a descriptor update template to update descriptors, and all applicable consecutive bindings, as described by &amp;amp;lt;&amp;amp;lt;descriptorsets-updates-consecutive&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-VkDescriptorUpdateTemplateEntry-descriptorType-parameter",
-          "text": " <code>descriptorType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDescriptorType\">VkDescriptorType</a> value"
-        }
-      ]
-    },
-    "vkDestroyDescriptorUpdateTemplate": {
-      "(VK_VERSION_1_1,VK_KHR_descriptor_update_template)": [
-        {
-          "vuid": "VUID-vkDestroyDescriptorUpdateTemplate-descriptorSetLayout-00356",
-          "text": " If <code>VkAllocationCallbacks</code> were provided when <code>descriptorSetLayout</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
-        },
-        {
-          "vuid": "VUID-vkDestroyDescriptorUpdateTemplate-descriptorSetLayout-00357",
-          "text": " If no <code>VkAllocationCallbacks</code> were provided when <code>descriptorSetLayout</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-vkDestroyDescriptorUpdateTemplate-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyDescriptorUpdateTemplate-descriptorUpdateTemplate-parameter",
-          "text": " If <code>descriptorUpdateTemplate</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>descriptorUpdateTemplate</code> <strong class=\"purple\">must</strong> be a valid <code>VkDescriptorUpdateTemplate</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyDescriptorUpdateTemplate-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkDestroyDescriptorUpdateTemplate-descriptorUpdateTemplate-parent",
-          "text": " If <code>descriptorUpdateTemplate</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkUpdateDescriptorSetWithTemplate": {
-      "(VK_VERSION_1_1,VK_KHR_descriptor_update_template)": [
-        {
-          "vuid": "VUID-vkUpdateDescriptorSetWithTemplate-pData-01685",
-          "text": " <code>pData</code> <strong class=\"purple\">must</strong> be a valid pointer to a memory that contains one or more valid instances of <a href=\"#VkDescriptorImageInfo\">VkDescriptorImageInfo</a>, <a href=\"#VkDescriptorBufferInfo\">VkDescriptorBufferInfo</a>, or <a href=\"#VkBufferView\">VkBufferView</a> in a layout defined by <code>descriptorUpdateTemplate</code> when it was created with <a href=\"#vkCreateDescriptorUpdateTemplate\">vkCreateDescriptorUpdateTemplate</a>"
-        },
-        {
-          "vuid": "VUID-vkUpdateDescriptorSetWithTemplate-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkUpdateDescriptorSetWithTemplate-descriptorSet-parameter",
-          "text": " <code>descriptorSet</code> <strong class=\"purple\">must</strong> be a valid <code>VkDescriptorSet</code> handle"
-        },
-        {
-          "vuid": "VUID-vkUpdateDescriptorSetWithTemplate-descriptorUpdateTemplate-parameter",
-          "text": " <code>descriptorUpdateTemplate</code> <strong class=\"purple\">must</strong> be a valid <code>VkDescriptorUpdateTemplate</code> handle"
-        },
-        {
-          "vuid": "VUID-vkUpdateDescriptorSetWithTemplate-descriptorUpdateTemplate-parent",
-          "text": " <code>descriptorUpdateTemplate</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkCmdBindDescriptorSets": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdBindDescriptorSets-pDescriptorSets-00358",
-          "text": " Each element of <code>pDescriptorSets</code> <strong class=\"purple\">must</strong> have been allocated with a <code>VkDescriptorSetLayout</code> that matches (is the same as, or identically defined as) the <code>VkDescriptorSetLayout</code> at set <em>n</em> in <code>layout</code>, where <em>n</em> is the sum of <code>firstSet</code> and the index into <code>pDescriptorSets</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdBindDescriptorSets-dynamicOffsetCount-00359",
-          "text": " <code>dynamicOffsetCount</code> <strong class=\"purple\">must</strong> be equal to the total number of dynamic descriptors in <code>pDescriptorSets</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdBindDescriptorSets-firstSet-00360",
-          "text": " The sum of <code>firstSet</code> and <code>descriptorSetCount</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPipelineLayoutCreateInfo</code>::<code>setLayoutCount</code> provided when <code>layout</code> was created"
-        },
-        {
-          "vuid": "VUID-vkCmdBindDescriptorSets-pipelineBindPoint-00361",
-          "text": " <code>pipelineBindPoint</code> <strong class=\"purple\">must</strong> be supported by the <code>commandBuffer</code>&#8217;s parent <code>VkCommandPool</code>&#8217;s queue family"
-        },
-        {
-          "vuid": "VUID-vkCmdBindDescriptorSets-pDynamicOffsets-00362",
-          "text": " Each element of <code>pDynamicOffsets</code> <strong class=\"purple\">must</strong> satisfy the required alignment for the corresponding descriptor binding&#8217;s descriptor type"
-        },
-        {
-          "vuid": "VUID-vkCmdBindDescriptorSets-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdBindDescriptorSets-pipelineBindPoint-parameter",
-          "text": " <code>pipelineBindPoint</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipelineBindPoint\">VkPipelineBindPoint</a> value"
-        },
-        {
-          "vuid": "VUID-vkCmdBindDescriptorSets-layout-parameter",
-          "text": " <code>layout</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipelineLayout</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdBindDescriptorSets-pDescriptorSets-parameter",
-          "text": " <code>pDescriptorSets</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>descriptorSetCount</code> valid <code>VkDescriptorSet</code> handles"
-        },
-        {
-          "vuid": "VUID-vkCmdBindDescriptorSets-pDynamicOffsets-parameter",
-          "text": " If <code>dynamicOffsetCount</code> is not <code>0</code>, <code>pDynamicOffsets</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>dynamicOffsetCount</code> <code>uint32_t</code> values"
-        },
-        {
-          "vuid": "VUID-vkCmdBindDescriptorSets-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdBindDescriptorSets-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
-        },
-        {
-          "vuid": "VUID-vkCmdBindDescriptorSets-descriptorSetCount-arraylength",
-          "text": " <code>descriptorSetCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdBindDescriptorSets-commonparent",
-          "text": " Each of <code>commandBuffer</code>, <code>layout</code>, and the elements of <code>pDescriptorSets</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ]
-    },
-    "vkCmdPushDescriptorSetKHR": {
-      "(VK_KHR_push_descriptor)": [
-        {
-          "vuid": "VUID-vkCmdPushDescriptorSetKHR-pipelineBindPoint-00363",
-          "text": " <code>pipelineBindPoint</code> <strong class=\"purple\">must</strong> be supported by the <code>commandBuffer</code>&#8217;s parent <code>VkCommandPool</code>&#8217;s queue family"
-        },
-        {
-          "vuid": "VUID-vkCmdPushDescriptorSetKHR-set-00364",
-          "text": " <code>set</code> <strong class=\"purple\">must</strong> be less than <code>VkPipelineLayoutCreateInfo</code>::<code>setLayoutCount</code> provided when <code>layout</code> was created"
-        },
-        {
-          "vuid": "VUID-vkCmdPushDescriptorSetKHR-set-00365",
-          "text": " <code>set</code> <strong class=\"purple\">must</strong> be the unique set number in the pipeline layout that uses a descriptor set layout that was created with <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdPushDescriptorSetKHR-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdPushDescriptorSetKHR-pipelineBindPoint-parameter",
-          "text": " <code>pipelineBindPoint</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipelineBindPoint\">VkPipelineBindPoint</a> value"
-        },
-        {
-          "vuid": "VUID-vkCmdPushDescriptorSetKHR-layout-parameter",
-          "text": " <code>layout</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipelineLayout</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdPushDescriptorSetKHR-pDescriptorWrites-parameter",
-          "text": " <code>pDescriptorWrites</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>descriptorWriteCount</code> valid <code>VkWriteDescriptorSet</code> structures"
-        },
-        {
-          "vuid": "VUID-vkCmdPushDescriptorSetKHR-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdPushDescriptorSetKHR-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
-        },
-        {
-          "vuid": "VUID-vkCmdPushDescriptorSetKHR-descriptorWriteCount-arraylength",
-          "text": " <code>descriptorWriteCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdPushDescriptorSetKHR-commonparent",
-          "text": " Both of <code>commandBuffer</code>, and <code>layout</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ]
-    },
-    "vkCmdPushDescriptorSetWithTemplateKHR": {
-      "(VK_KHR_push_descriptor)+(VK_VERSION_1_1,VK_KHR_descriptor_update_template)": [
-        {
-          "vuid": "VUID-vkCmdPushDescriptorSetWithTemplateKHR-commandBuffer-00366",
-          "text": " The pipelineBindPoint specified during the creation of the descriptor update template <strong class=\"purple\">must</strong> be supported by the <code>commandBuffer</code>&#8217;s parent <code>VkCommandPool</code>&#8217;s queue family"
-        },
-        {
-          "vuid": "VUID-vkCmdPushDescriptorSetWithTemplateKHR-pData-01686",
-          "text": " <code>pData</code> <strong class=\"purple\">must</strong> be a valid pointer to a memory that contains one or more valid instances of <a href=\"#VkDescriptorImageInfo\">VkDescriptorImageInfo</a>, <a href=\"#VkDescriptorBufferInfo\">VkDescriptorBufferInfo</a>, or <a href=\"#VkBufferView\">VkBufferView</a> in a layout defined by <code>descriptorUpdateTemplate</code> when it was created with <a href=\"#vkCreateDescriptorUpdateTemplateKHR\">vkCreateDescriptorUpdateTemplateKHR</a>"
-        },
-        {
-          "vuid": "VUID-vkCmdPushDescriptorSetWithTemplateKHR-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdPushDescriptorSetWithTemplateKHR-descriptorUpdateTemplate-parameter",
-          "text": " <code>descriptorUpdateTemplate</code> <strong class=\"purple\">must</strong> be a valid <code>VkDescriptorUpdateTemplate</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdPushDescriptorSetWithTemplateKHR-layout-parameter",
-          "text": " <code>layout</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipelineLayout</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdPushDescriptorSetWithTemplateKHR-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdPushDescriptorSetWithTemplateKHR-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
-        },
-        {
-          "vuid": "VUID-vkCmdPushDescriptorSetWithTemplateKHR-commonparent",
-          "text": " Each of <code>commandBuffer</code>, <code>descriptorUpdateTemplate</code>, and <code>layout</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ]
-    },
-    "vkCmdPushConstants": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdPushConstants-offset-01795",
-          "text": " For each byte in the range specified by <code>offset</code> and <code>size</code> and for each shader stage in <code>stageFlags</code>, there <strong class=\"purple\">must</strong> be a push constant range in <code>layout</code> that includes that byte and that stage"
-        },
-        {
-          "vuid": "VUID-vkCmdPushConstants-offset-01796",
-          "text": " For each byte in the range specified by <code>offset</code> and <code>size</code> and for each push constant range that overlaps that byte, <code>stageFlags</code> <strong class=\"purple\">must</strong> include all stages in that push constant range&#8217;s <a href=\"#VkPushConstantRange\">VkPushConstantRange</a>::<code>stageFlags</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdPushConstants-offset-00368",
-          "text": " <code>offset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdPushConstants-size-00369",
-          "text": " <code>size</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdPushConstants-offset-00370",
-          "text": " <code>offset</code> <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceLimits</code>::<code>maxPushConstantsSize</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdPushConstants-size-00371",
-          "text": " <code>size</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxPushConstantsSize</code> minus <code>offset</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdPushConstants-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdPushConstants-layout-parameter",
-          "text": " <code>layout</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipelineLayout</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdPushConstants-stageFlags-parameter",
-          "text": " <code>stageFlags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkShaderStageFlagBits\">VkShaderStageFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-vkCmdPushConstants-stageFlags-requiredbitmask",
-          "text": " <code>stageFlags</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdPushConstants-pValues-parameter",
-          "text": " <code>pValues</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>size</code> bytes"
-        },
-        {
-          "vuid": "VUID-vkCmdPushConstants-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdPushConstants-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
-        },
-        {
-          "vuid": "VUID-vkCmdPushConstants-size-arraylength",
-          "text": " <code>size</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdPushConstants-commonparent",
-          "text": " Both of <code>commandBuffer</code>, and <code>layout</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ]
-    },
-    "vkCreateQueryPool": {
-      "core": [
-        {
-          "vuid": "VUID-vkCreateQueryPool-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateQueryPool-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkQueryPoolCreateInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateQueryPool-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateQueryPool-pQueryPool-parameter",
-          "text": " <code>pQueryPool</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkQueryPool</code> handle"
-        }
-      ]
-    },
-    "VkQueryPoolCreateInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkQueryPoolCreateInfo-queryType-00791",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-pipelineStatisticsQuery,pipeline statistics queries&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>queryType</code> <strong class=\"purple\">must</strong> not be <code>VK_QUERY_TYPE_PIPELINE_STATISTICS</code>"
-        },
-        {
-          "vuid": "VUID-VkQueryPoolCreateInfo-queryType-00792",
-          "text": " If <code>queryType</code> is <code>VK_QUERY_TYPE_PIPELINE_STATISTICS</code>, <code>pipelineStatistics</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkQueryPipelineStatisticFlagBits\">VkQueryPipelineStatisticFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkQueryPoolCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkQueryPoolCreateInfo-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkQueryPoolCreateInfo-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkQueryPoolCreateInfo-queryType-parameter",
-          "text": " <code>queryType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkQueryType\">VkQueryType</a> value"
-        }
-      ]
-    },
-    "vkDestroyQueryPool": {
-      "core": [
-        {
-          "vuid": "VUID-vkDestroyQueryPool-queryPool-00793",
-          "text": " All submitted commands that refer to <code>queryPool</code> <strong class=\"purple\">must</strong> have completed execution"
-        },
-        {
-          "vuid": "VUID-vkDestroyQueryPool-queryPool-00794",
-          "text": " If <code>VkAllocationCallbacks</code> were provided when <code>queryPool</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
-        },
-        {
-          "vuid": "VUID-vkDestroyQueryPool-queryPool-00795",
-          "text": " If no <code>VkAllocationCallbacks</code> were provided when <code>queryPool</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-vkDestroyQueryPool-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyQueryPool-queryPool-parameter",
-          "text": " If <code>queryPool</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>queryPool</code> <strong class=\"purple\">must</strong> be a valid <code>VkQueryPool</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyQueryPool-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkDestroyQueryPool-queryPool-parent",
-          "text": " If <code>queryPool</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkCmdResetQueryPool": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdResetQueryPool-firstQuery-00796",
-          "text": " <code>firstQuery</code> <strong class=\"purple\">must</strong> be less than the number of queries in <code>queryPool</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdResetQueryPool-firstQuery-00797",
-          "text": " The sum of <code>firstQuery</code> and <code>queryCount</code> <strong class=\"purple\">must</strong> be less than or equal to the number of queries in <code>queryPool</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdResetQueryPool-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdResetQueryPool-queryPool-parameter",
-          "text": " <code>queryPool</code> <strong class=\"purple\">must</strong> be a valid <code>VkQueryPool</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdResetQueryPool-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdResetQueryPool-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
-        },
-        {
-          "vuid": "VUID-vkCmdResetQueryPool-renderpass",
-          "text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
-        },
-        {
-          "vuid": "VUID-vkCmdResetQueryPool-commonparent",
-          "text": " Both of <code>commandBuffer</code>, and <code>queryPool</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ]
-    },
-    "vkCmdBeginQuery": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdBeginQuery-queryPool-01922",
-          "text": " <code>queryPool</code> <strong class=\"purple\">must</strong> have been created with a <code>queryType</code> that differs from that of any queries that are &amp;amp;lt;&amp;amp;lt;queries-operation-active,active&amp;amp;gt;&amp;amp;gt; within <code>commandBuffer</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdBeginQuery-None-00807",
-          "text": " All queries used by the command <strong class=\"purple\">must</strong> be unavailable"
-        },
-        {
-          "vuid": "VUID-vkCmdBeginQuery-queryType-00800",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-occlusionQueryPrecise,precise occlusion queries&amp;amp;gt;&amp;amp;gt; feature is not enabled, or the <code>queryType</code> used to create <code>queryPool</code> was not <code>VK_QUERY_TYPE_OCCLUSION</code>, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_QUERY_CONTROL_PRECISE_BIT</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdBeginQuery-query-00802",
-          "text": " <code>query</code> <strong class=\"purple\">must</strong> be less than the number of queries in <code>queryPool</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdBeginQuery-queryType-00803",
-          "text": " If the <code>queryType</code> used to create <code>queryPool</code> was <code>VK_QUERY_TYPE_OCCLUSION</code>, the <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
-        },
-        {
-          "vuid": "VUID-vkCmdBeginQuery-queryType-00804",
-          "text": " If the <code>queryType</code> used to create <code>queryPool</code> was <code>VK_QUERY_TYPE_PIPELINE_STATISTICS</code> and any of the <code>pipelineStatistics</code> indicate graphics operations, the <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
-        },
-        {
-          "vuid": "VUID-vkCmdBeginQuery-queryType-00805",
-          "text": " If the <code>queryType</code> used to create <code>queryPool</code> was <code>VK_QUERY_TYPE_PIPELINE_STATISTICS</code> and any of the <code>pipelineStatistics</code> indicate compute operations, the <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support compute operations"
-        },
-        {
-          "vuid": "VUID-vkCmdBeginQuery-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdBeginQuery-queryPool-parameter",
-          "text": " <code>queryPool</code> <strong class=\"purple\">must</strong> be a valid <code>VkQueryPool</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdBeginQuery-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkQueryControlFlagBits\">VkQueryControlFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-vkCmdBeginQuery-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdBeginQuery-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
-        },
-        {
-          "vuid": "VUID-vkCmdBeginQuery-commonparent",
-          "text": " Both of <code>commandBuffer</code>, and <code>queryPool</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ],
-      "(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-vkCmdBeginQuery-commandBuffer-01885",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> not be a protected command buffer"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_multiview)": [
-        {
-          "vuid": "VUID-vkCmdBeginQuery-query-00808",
-          "text": " If <code>vkCmdBeginQuery</code> is called within a render pass instance, the sum of <code>query</code> and the number of bits set in the current subpass&#8217;s view mask <strong class=\"purple\">must</strong> be less than or equal to the number of queries in <code>queryPool</code>"
-        }
-      ]
-    },
-    "vkCmdEndQuery": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdEndQuery-None-01923",
-          "text": " All queries used by the command <strong class=\"purple\">must</strong> be &amp;amp;lt;&amp;amp;lt;queries-operation-active,active&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdEndQuery-query-00810",
-          "text": " <code>query</code> <strong class=\"purple\">must</strong> be less than the number of queries in <code>queryPool</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdEndQuery-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdEndQuery-queryPool-parameter",
-          "text": " <code>queryPool</code> <strong class=\"purple\">must</strong> be a valid <code>VkQueryPool</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdEndQuery-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdEndQuery-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
-        },
-        {
-          "vuid": "VUID-vkCmdEndQuery-commonparent",
-          "text": " Both of <code>commandBuffer</code>, and <code>queryPool</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ],
-      "(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-vkCmdEndQuery-commandBuffer-01886",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> not be a protected command buffer"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_multiview)": [
-        {
-          "vuid": "VUID-vkCmdEndQuery-query-00812",
-          "text": " If <code>vkCmdEndQuery</code> is called within a render pass instance, the sum of <code>query</code> and the number of bits set in the current subpass&#8217;s view mask <strong class=\"purple\">must</strong> be less than or equal to the number of queries in <code>queryPool</code>"
-        }
-      ]
-    },
-    "vkGetQueryPoolResults": {
-      "core": [
-        {
-          "vuid": "VUID-vkGetQueryPoolResults-firstQuery-00813",
-          "text": " <code>firstQuery</code> <strong class=\"purple\">must</strong> be less than the number of queries in <code>queryPool</code>"
-        },
-        {
-          "vuid": "VUID-vkGetQueryPoolResults-flags-00814",
-          "text": " If <code>VK_QUERY_RESULT_64_BIT</code> is not set in <code>flags</code> then <code>pData</code> and <code>stride</code> <strong class=\"purple\">must</strong> be multiples of <code>4</code>"
-        },
-        {
-          "vuid": "VUID-vkGetQueryPoolResults-flags-00815",
-          "text": " If <code>VK_QUERY_RESULT_64_BIT</code> is set in <code>flags</code> then <code>pData</code> and <code>stride</code> <strong class=\"purple\">must</strong> be multiples of <code>8</code>"
-        },
-        {
-          "vuid": "VUID-vkGetQueryPoolResults-firstQuery-00816",
-          "text": " The sum of <code>firstQuery</code> and <code>queryCount</code> <strong class=\"purple\">must</strong> be less than or equal to the number of queries in <code>queryPool</code>"
-        },
-        {
-          "vuid": "VUID-vkGetQueryPoolResults-dataSize-00817",
-          "text": " <code>dataSize</code> <strong class=\"purple\">must</strong> be large enough to contain the result of each query, as described &amp;amp;lt;&amp;amp;lt;queries-operation-memorylayout,here&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkGetQueryPoolResults-queryType-00818",
-          "text": " If the <code>queryType</code> used to create <code>queryPool</code> was <code>VK_QUERY_TYPE_TIMESTAMP</code>, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_QUERY_RESULT_PARTIAL_BIT</code>"
-        },
-        {
-          "vuid": "VUID-vkGetQueryPoolResults-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetQueryPoolResults-queryPool-parameter",
-          "text": " <code>queryPool</code> <strong class=\"purple\">must</strong> be a valid <code>VkQueryPool</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetQueryPoolResults-pData-parameter",
-          "text": " <code>pData</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>dataSize</code> bytes"
-        },
-        {
-          "vuid": "VUID-vkGetQueryPoolResults-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkQueryResultFlagBits\">VkQueryResultFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-vkGetQueryPoolResults-dataSize-arraylength",
-          "text": " <code>dataSize</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkGetQueryPoolResults-queryPool-parent",
-          "text": " <code>queryPool</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkCmdCopyQueryPoolResults": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdCopyQueryPoolResults-dstOffset-00819",
-          "text": " <code>dstOffset</code> <strong class=\"purple\">must</strong> be less than the size of <code>dstBuffer</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyQueryPoolResults-firstQuery-00820",
-          "text": " <code>firstQuery</code> <strong class=\"purple\">must</strong> be less than the number of queries in <code>queryPool</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyQueryPoolResults-firstQuery-00821",
-          "text": " The sum of <code>firstQuery</code> and <code>queryCount</code> <strong class=\"purple\">must</strong> be less than or equal to the number of queries in <code>queryPool</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyQueryPoolResults-flags-00822",
-          "text": " If <code>VK_QUERY_RESULT_64_BIT</code> is not set in <code>flags</code> then <code>dstOffset</code> and <code>stride</code> <strong class=\"purple\">must</strong> be multiples of <code>4</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyQueryPoolResults-flags-00823",
-          "text": " If <code>VK_QUERY_RESULT_64_BIT</code> is set in <code>flags</code> then <code>dstOffset</code> and <code>stride</code> <strong class=\"purple\">must</strong> be multiples of <code>8</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyQueryPoolResults-dstBuffer-00824",
-          "text": " <code>dstBuffer</code> <strong class=\"purple\">must</strong> have enough storage, from <code>dstOffset</code>, to contain the result of each query, as described &amp;amp;lt;&amp;amp;lt;queries-operation-memorylayout,here&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyQueryPoolResults-dstBuffer-00825",
-          "text": " <code>dstBuffer</code> <strong class=\"purple\">must</strong> have been created with <code>VK_BUFFER_USAGE_TRANSFER_DST_BIT</code> usage flag"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyQueryPoolResults-dstBuffer-00826",
-          "text": " If <code>dstBuffer</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyQueryPoolResults-queryType-00827",
-          "text": " If the <code>queryType</code> used to create <code>queryPool</code> was <code>VK_QUERY_TYPE_TIMESTAMP</code>, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_QUERY_RESULT_PARTIAL_BIT</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyQueryPoolResults-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyQueryPoolResults-queryPool-parameter",
-          "text": " <code>queryPool</code> <strong class=\"purple\">must</strong> be a valid <code>VkQueryPool</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyQueryPoolResults-dstBuffer-parameter",
-          "text": " <code>dstBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyQueryPoolResults-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkQueryResultFlagBits\">VkQueryResultFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyQueryPoolResults-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyQueryPoolResults-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyQueryPoolResults-renderpass",
-          "text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyQueryPoolResults-commonparent",
-          "text": " Each of <code>commandBuffer</code>, <code>dstBuffer</code>, and <code>queryPool</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ]
-    },
-    "vkCmdWriteTimestamp": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdWriteTimestamp-queryPool-01416",
-          "text": " <code>queryPool</code> <strong class=\"purple\">must</strong> have been created with a <code>queryType</code> of <code>VK_QUERY_TYPE_TIMESTAMP</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdWriteTimestamp-queryPool-00828",
-          "text": " The query identified by <code>queryPool</code> and <code>query</code> <strong class=\"purple\">must</strong> be <em>unavailable</em>"
-        },
-        {
-          "vuid": "VUID-vkCmdWriteTimestamp-timestampValidBits-00829",
-          "text": " The command pool&#8217;s queue family <strong class=\"purple\">must</strong> support a non-zero <code>timestampValidBits</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdWriteTimestamp-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdWriteTimestamp-pipelineStage-parameter",
-          "text": " <code>pipelineStage</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipelineStageFlagBits\">VkPipelineStageFlagBits</a> value"
-        },
-        {
-          "vuid": "VUID-vkCmdWriteTimestamp-queryPool-parameter",
-          "text": " <code>queryPool</code> <strong class=\"purple\">must</strong> be a valid <code>VkQueryPool</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdWriteTimestamp-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdWriteTimestamp-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support transfer, graphics, or compute operations"
-        },
-        {
-          "vuid": "VUID-vkCmdWriteTimestamp-commonparent",
-          "text": " Both of <code>commandBuffer</code>, and <code>queryPool</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_multiview)": [
-        {
-          "vuid": "VUID-vkCmdWriteTimestamp-None-00830",
-          "text": " All queries used by the command <strong class=\"purple\">must</strong> be unavailable"
-        },
-        {
-          "vuid": "VUID-vkCmdWriteTimestamp-query-00831",
-          "text": " If <code>vkCmdWriteTimestamp</code> is called within a render pass instance, the sum of <code>query</code> and the number of bits set in the current subpass&#8217;s view mask <strong class=\"purple\">must</strong> be less than or equal to the number of queries in <code>queryPool</code>"
-        }
-      ]
-    },
-    "vkCmdClearColorImage": {
-      "(VK_VERSION_1_1,VK_KHR_maintenance1)": [
-        {
-          "vuid": "VUID-vkCmdClearColorImage-image-00001",
-          "text": " <code>image</code> <strong class=\"purple\">must</strong> use a format that supports <code>VK_FORMAT_FEATURE_TRANSFER_DST_BIT</code>, which is indicated by <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> (for linearly tiled images) or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> (for optimally tiled images) - as returned by <code>vkGetPhysicalDeviceFormatProperties</code>"
-        }
-      ],
-      "core": [
-        {
-          "vuid": "VUID-vkCmdClearColorImage-image-00002",
-          "text": " <code>image</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_TRANSFER_DST_BIT</code> usage flag"
-        },
-        {
-          "vuid": "VUID-vkCmdClearColorImage-image-00003",
-          "text": " If <code>image</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
-        },
-        {
-          "vuid": "VUID-vkCmdClearColorImage-imageLayout-00004",
-          "text": " <code>imageLayout</code> <strong class=\"purple\">must</strong> specify the layout of the image subresource ranges of <code>image</code> specified in <code>pRanges</code> at the time this command is executed on a <code>VkDevice</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdClearColorImage-baseMipLevel-01470",
-          "text": " The <a href=\"#VkImageSubresourceRange\">VkImageSubresourceRange</a>::<code>baseMipLevel</code> members of the elements of the <code>pRanges</code> array <strong class=\"purple\">must</strong> each be less than the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
-        },
-        {
-          "vuid": "VUID-vkCmdClearColorImage-pRanges-01692",
-          "text": " For each <a href=\"#VkImageSubresourceRange\">VkImageSubresourceRange</a> element of <code>pRanges</code>, if the <code>levelCount</code> member is not <code>VK_REMAINING_MIP_LEVELS</code>, then <span class=\"eq\"><code>baseMipLevel</code> &#43; <code>levelCount</code></span> <strong class=\"purple\">must</strong> be less than the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
-        },
-        {
-          "vuid": "VUID-vkCmdClearColorImage-baseArrayLayer-01472",
-          "text": " The <a href=\"#VkImageSubresourceRange\">VkImageSubresourceRange</a>::<code>baseArrayLayer</code> members of the elements of the <code>pRanges</code> array <strong class=\"purple\">must</strong> each be less than the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
-        },
-        {
-          "vuid": "VUID-vkCmdClearColorImage-pRanges-01693",
-          "text": " For each <a href=\"#VkImageSubresourceRange\">VkImageSubresourceRange</a> element of <code>pRanges</code>, if the <code>layerCount</code> member is not <code>VK_REMAINING_ARRAY_LAYERS</code>, then <span class=\"eq\"><code>baseArrayLayer</code> &#43; <code>layerCount</code></span> <strong class=\"purple\">must</strong> be less than the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
-        },
-        {
-          "vuid": "VUID-vkCmdClearColorImage-image-00007",
-          "text": " <code>image</code> <strong class=\"purple\">must</strong> not have a compressed or depth/stencil format"
-        },
-        {
-          "vuid": "VUID-vkCmdClearColorImage-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdClearColorImage-image-parameter",
-          "text": " <code>image</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdClearColorImage-imageLayout-parameter",
-          "text": " <code>imageLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
-        },
-        {
-          "vuid": "VUID-vkCmdClearColorImage-pColor-parameter",
-          "text": " <code>pColor</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkClearColorValue</code> union"
-        },
-        {
-          "vuid": "VUID-vkCmdClearColorImage-pRanges-parameter",
-          "text": " <code>pRanges</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>rangeCount</code> valid <code>VkImageSubresourceRange</code> structures"
-        },
-        {
-          "vuid": "VUID-vkCmdClearColorImage-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdClearColorImage-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
-        },
-        {
-          "vuid": "VUID-vkCmdClearColorImage-renderpass",
-          "text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
-        },
-        {
-          "vuid": "VUID-vkCmdClearColorImage-rangeCount-arraylength",
-          "text": " <code>rangeCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdClearColorImage-commonparent",
-          "text": " Both of <code>commandBuffer</code>, and <code>image</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
-        {
-          "vuid": "VUID-vkCmdClearColorImage-image-01545",
-          "text": " <code>image</code> <strong class=\"purple\">must</strong> not use a format listed in &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion&amp;amp;gt;&amp;amp;gt;"
-        }
-      ],
-      "!(VK_KHR_shared_presentable_image)": [
-        {
-          "vuid": "VUID-vkCmdClearColorImage-imageLayout-00005",
-          "text": " <code>imageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_GENERAL</code>"
-        }
-      ],
-      "(VK_KHR_shared_presentable_image)": [
-        {
-          "vuid": "VUID-vkCmdClearColorImage-imageLayout-01394",
-          "text": " <code>imageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_GENERAL</code>, or <code>VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR</code>"
-        }
-      ],
-      "(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-vkCmdClearColorImage-commandBuffer-01805",
-          "text": " If <code>commandBuffer</code> is an unprotected command buffer, then <code>image</code> <strong class=\"purple\">must</strong> not be a protected image"
-        },
-        {
-          "vuid": "VUID-vkCmdClearColorImage-commandBuffer-01806",
-          "text": " If <code>commandBuffer</code> is a protected command buffer, then <code>image</code> <strong class=\"purple\">must</strong> not be an unprotected image"
-        }
-      ]
-    },
-    "vkCmdClearDepthStencilImage": {
-      "(VK_VERSION_1_1,VK_KHR_maintenance1)": [
-        {
-          "vuid": "VUID-vkCmdClearDepthStencilImage-image-00008",
-          "text": " <code>image</code> <strong class=\"purple\">must</strong> use a format that supports <code>VK_FORMAT_FEATURE_TRANSFER_DST_BIT</code>, which is indicated by <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> (for linearly tiled images) or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> (for optimally tiled images) - as returned by <code>vkGetPhysicalDeviceFormatProperties</code>"
-        }
-      ],
-      "core": [
-        {
-          "vuid": "VUID-vkCmdClearDepthStencilImage-image-00009",
-          "text": " <code>image</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_TRANSFER_DST_BIT</code> usage flag"
-        },
-        {
-          "vuid": "VUID-vkCmdClearDepthStencilImage-image-00010",
-          "text": " If <code>image</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
-        },
-        {
-          "vuid": "VUID-vkCmdClearDepthStencilImage-imageLayout-00011",
-          "text": " <code>imageLayout</code> <strong class=\"purple\">must</strong> specify the layout of the image subresource ranges of <code>image</code> specified in <code>pRanges</code> at the time this command is executed on a <code>VkDevice</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdClearDepthStencilImage-imageLayout-00012",
-          "text": " <code>imageLayout</code> <strong class=\"purple\">must</strong> be either of <code>VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_GENERAL</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdClearDepthStencilImage-baseMipLevel-01474",
-          "text": " The <a href=\"#VkImageSubresourceRange\">VkImageSubresourceRange</a>::<code>baseMipLevel</code> members of the elements of the <code>pRanges</code> array <strong class=\"purple\">must</strong> each be less than the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
-        },
-        {
-          "vuid": "VUID-vkCmdClearDepthStencilImage-pRanges-01694",
-          "text": " For each <a href=\"#VkImageSubresourceRange\">VkImageSubresourceRange</a> element of <code>pRanges</code>, if the <code>levelCount</code> member is not <code>VK_REMAINING_MIP_LEVELS</code>, then <span class=\"eq\"><code>baseMipLevel</code> &#43; <code>levelCount</code></span> <strong class=\"purple\">must</strong> be less than the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
-        },
-        {
-          "vuid": "VUID-vkCmdClearDepthStencilImage-baseArrayLayer-01476",
-          "text": " The <a href=\"#VkImageSubresourceRange\">VkImageSubresourceRange</a>::<code>baseArrayLayer</code> members of the elements of the <code>pRanges</code> array <strong class=\"purple\">must</strong> each be less than the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
-        },
-        {
-          "vuid": "VUID-vkCmdClearDepthStencilImage-pRanges-01695",
-          "text": " For each <a href=\"#VkImageSubresourceRange\">VkImageSubresourceRange</a> element of <code>pRanges</code>, if the <code>layerCount</code> member is not <code>VK_REMAINING_ARRAY_LAYERS</code>, then <span class=\"eq\"><code>baseArrayLayer</code> &#43; <code>layerCount</code></span> <strong class=\"purple\">must</strong> be less than the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
-        },
-        {
-          "vuid": "VUID-vkCmdClearDepthStencilImage-image-00014",
-          "text": " <code>image</code> <strong class=\"purple\">must</strong> have a depth/stencil format"
-        },
-        {
-          "vuid": "VUID-vkCmdClearDepthStencilImage-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdClearDepthStencilImage-image-parameter",
-          "text": " <code>image</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdClearDepthStencilImage-imageLayout-parameter",
-          "text": " <code>imageLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
-        },
-        {
-          "vuid": "VUID-vkCmdClearDepthStencilImage-pDepthStencil-parameter",
-          "text": " <code>pDepthStencil</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkClearDepthStencilValue</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCmdClearDepthStencilImage-pRanges-parameter",
-          "text": " <code>pRanges</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>rangeCount</code> valid <code>VkImageSubresourceRange</code> structures"
-        },
-        {
-          "vuid": "VUID-vkCmdClearDepthStencilImage-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdClearDepthStencilImage-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
-        },
-        {
-          "vuid": "VUID-vkCmdClearDepthStencilImage-renderpass",
-          "text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
-        },
-        {
-          "vuid": "VUID-vkCmdClearDepthStencilImage-rangeCount-arraylength",
-          "text": " <code>rangeCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdClearDepthStencilImage-commonparent",
-          "text": " Both of <code>commandBuffer</code>, and <code>image</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ],
-      "(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-vkCmdClearDepthStencilImage-commandBuffer-01807",
-          "text": " If <code>commandBuffer</code> is an unprotected command buffer, then <code>image</code> <strong class=\"purple\">must</strong> not be a protected image"
-        },
-        {
-          "vuid": "VUID-vkCmdClearDepthStencilImage-commandBuffer-01808",
-          "text": " If <code>commandBuffer</code> is a protected command buffer, then <code>image</code> <strong class=\"purple\">must</strong> not be an unprotected image"
-        }
-      ]
-    },
-    "vkCmdClearAttachments": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdClearAttachments-aspectMask-00015",
-          "text": " If the <code>aspectMask</code> member of any element of <code>pAttachments</code> contains <code>VK_IMAGE_ASPECT_COLOR_BIT</code>, the <code>colorAttachment</code> member of that element <strong class=\"purple\">must</strong> refer to a valid color attachment in the current subpass"
-        },
-        {
-          "vuid": "VUID-vkCmdClearAttachments-pRects-00016",
-          "text": " The rectangular region specified by each element of <code>pRects</code> <strong class=\"purple\">must</strong> be contained within the render area of the current render pass instance"
-        },
-        {
-          "vuid": "VUID-vkCmdClearAttachments-pRects-00017",
-          "text": " The layers specified by each element of <code>pRects</code> <strong class=\"purple\">must</strong> be contained within every attachment that <code>pAttachments</code> refers to"
-        },
-        {
-          "vuid": "VUID-vkCmdClearAttachments-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdClearAttachments-pAttachments-parameter",
-          "text": " <code>pAttachments</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>attachmentCount</code> valid <code>VkClearAttachment</code> structures"
-        },
-        {
-          "vuid": "VUID-vkCmdClearAttachments-pRects-parameter",
-          "text": " <code>pRects</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>rectCount</code> <code>VkClearRect</code> structures"
-        },
-        {
-          "vuid": "VUID-vkCmdClearAttachments-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdClearAttachments-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
-        },
-        {
-          "vuid": "VUID-vkCmdClearAttachments-renderpass",
-          "text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
-        },
-        {
-          "vuid": "VUID-vkCmdClearAttachments-attachmentCount-arraylength",
-          "text": " <code>attachmentCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdClearAttachments-rectCount-arraylength",
-          "text": " <code>rectCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_multiview)": [
-        {
-          "vuid": "VUID-vkCmdClearAttachments-baseArrayLayer-00018",
-          "text": " If the render pass instance this is recorded in uses multiview, then <code>baseArrayLayer</code> <strong class=\"purple\">must</strong> be zero and <code>layerCount</code> <strong class=\"purple\">must</strong> be one."
-        }
-      ]
-    },
-    "VkClearAttachment": {
-      "core": [
-        {
-          "vuid": "VUID-VkClearAttachment-aspectMask-00019",
-          "text": " If <code>aspectMask</code> includes <code>VK_IMAGE_ASPECT_COLOR_BIT</code>, it <strong class=\"purple\">must</strong> not include <code>VK_IMAGE_ASPECT_DEPTH_BIT</code> or <code>VK_IMAGE_ASPECT_STENCIL_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkClearAttachment-aspectMask-00020",
-          "text": " <code>aspectMask</code> <strong class=\"purple\">must</strong> not include <code>VK_IMAGE_ASPECT_METADATA_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkClearAttachment-clearValue-00021",
-          "text": " <code>clearValue</code> <strong class=\"purple\">must</strong> be a valid <code>VkClearValue</code> union"
-        },
-        {
-          "vuid": "VUID-VkClearAttachment-aspectMask-parameter",
-          "text": " <code>aspectMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageAspectFlagBits\">VkImageAspectFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkClearAttachment-aspectMask-requiredbitmask",
-          "text": " <code>aspectMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        }
-      ],
-      "(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-VkClearAttachment-commandBuffer-01809",
-          "text": " If <code>commandBuffer</code> is an unprotected command buffer, then the attachment to be cleared <strong class=\"purple\">must</strong> not be a protected image."
-        },
-        {
-          "vuid": "VUID-VkClearAttachment-commandBuffer-01810",
-          "text": " If <code>commandBuffer</code> is a protected command buffer, then the attachment to be cleared <strong class=\"purple\">must</strong> not be an unprotected image."
-        }
-      ]
-    },
-    "VkClearDepthStencilValue": {
-      "(VK_EXT_depth_range_unrestricted)": [
-        {
-          "vuid": "VUID-VkClearDepthStencilValue-depth-00022",
-          "text": " Unless the <code><a href=\"#VK_EXT_depth_range_unrestricted\">VK_EXT_depth_range_unrestricted</a></code> extension is enabled <code>depth</code> <strong class=\"purple\">must</strong> be between <code>0.0</code> and <code>1.0</code>, inclusive"
-        }
-      ],
-      "!(VK_EXT_depth_range_unrestricted)": [
-        {
-          "vuid": "VUID-VkClearDepthStencilValue-depth-00022",
-          "text": " <code>depth</code> <strong class=\"purple\">must</strong> be between <code>0.0</code> and <code>1.0</code>, inclusive"
-        }
-      ]
-    },
-    "VkClearValue": {
-      "core": [
-        {
-          "vuid": "VUID-VkClearValue-depthStencil-00023",
-          "text": " <code>depthStencil</code> <strong class=\"purple\">must</strong> be a valid <code>VkClearDepthStencilValue</code> structure"
-        }
-      ]
-    },
-    "vkCmdFillBuffer": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdFillBuffer-dstOffset-00024",
-          "text": " <code>dstOffset</code> <strong class=\"purple\">must</strong> be less than the size of <code>dstBuffer</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdFillBuffer-dstOffset-00025",
-          "text": " <code>dstOffset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdFillBuffer-size-00026",
-          "text": " If <code>size</code> is not equal to <code>VK_WHOLE_SIZE</code>, <code>size</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdFillBuffer-size-00027",
-          "text": " If <code>size</code> is not equal to <code>VK_WHOLE_SIZE</code>, <code>size</code> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>dstBuffer</code> minus <code>dstOffset</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdFillBuffer-size-00028",
-          "text": " If <code>size</code> is not equal to <code>VK_WHOLE_SIZE</code>, <code>size</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdFillBuffer-dstBuffer-00029",
-          "text": " <code>dstBuffer</code> <strong class=\"purple\">must</strong> have been created with <code>VK_BUFFER_USAGE_TRANSFER_DST_BIT</code> usage flag"
-        },
-        {
-          "vuid": "VUID-vkCmdFillBuffer-dstBuffer-00031",
-          "text": " If <code>dstBuffer</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
-        },
-        {
-          "vuid": "VUID-vkCmdFillBuffer-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdFillBuffer-dstBuffer-parameter",
-          "text": " <code>dstBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdFillBuffer-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdFillBuffer-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support transfer, graphics or compute operations"
-        },
-        {
-          "vuid": "VUID-vkCmdFillBuffer-renderpass",
-          "text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
-        },
-        {
-          "vuid": "VUID-vkCmdFillBuffer-commonparent",
-          "text": " Both of <code>commandBuffer</code>, and <code>dstBuffer</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ],
-      "!(VK_VERSION_1_1,VK_KHR_maintenance1)": [
-        {
-          "vuid": "VUID-vkCmdFillBuffer-commandBuffer-00030",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics or compute operations"
-        }
-      ],
-      "(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-vkCmdFillBuffer-commandBuffer-01811",
-          "text": " If <code>commandBuffer</code> is an unprotected command buffer, then <code>dstBuffer</code> <strong class=\"purple\">must</strong> not be a protected buffer"
-        },
-        {
-          "vuid": "VUID-vkCmdFillBuffer-commandBuffer-01812",
-          "text": " If <code>commandBuffer</code> is a protected command buffer, then <code>dstBuffer</code> <strong class=\"purple\">must</strong> not be an unprotected buffer"
-        }
-      ]
-    },
-    "vkCmdUpdateBuffer": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdUpdateBuffer-dstOffset-00032",
-          "text": " <code>dstOffset</code> <strong class=\"purple\">must</strong> be less than the size of <code>dstBuffer</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdUpdateBuffer-dataSize-00033",
-          "text": " <code>dataSize</code> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>dstBuffer</code> minus <code>dstOffset</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdUpdateBuffer-dstBuffer-00034",
-          "text": " <code>dstBuffer</code> <strong class=\"purple\">must</strong> have been created with <code>VK_BUFFER_USAGE_TRANSFER_DST_BIT</code> usage flag"
-        },
-        {
-          "vuid": "VUID-vkCmdUpdateBuffer-dstBuffer-00035",
-          "text": " If <code>dstBuffer</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
-        },
-        {
-          "vuid": "VUID-vkCmdUpdateBuffer-dstOffset-00036",
-          "text": " <code>dstOffset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdUpdateBuffer-dataSize-00037",
-          "text": " <code>dataSize</code> <strong class=\"purple\">must</strong> be less than or equal to <code>65536</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdUpdateBuffer-dataSize-00038",
-          "text": " <code>dataSize</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdUpdateBuffer-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdUpdateBuffer-dstBuffer-parameter",
-          "text": " <code>dstBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdUpdateBuffer-pData-parameter",
-          "text": " <code>pData</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>dataSize</code> bytes"
-        },
-        {
-          "vuid": "VUID-vkCmdUpdateBuffer-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdUpdateBuffer-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support transfer, graphics, or compute operations"
-        },
-        {
-          "vuid": "VUID-vkCmdUpdateBuffer-renderpass",
-          "text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
-        },
-        {
-          "vuid": "VUID-vkCmdUpdateBuffer-dataSize-arraylength",
-          "text": " <code>dataSize</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdUpdateBuffer-commonparent",
-          "text": " Both of <code>commandBuffer</code>, and <code>dstBuffer</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ],
-      "(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-vkCmdUpdateBuffer-commandBuffer-01813",
-          "text": " If <code>commandBuffer</code> is an unprotected command buffer, then <code>dstBuffer</code> <strong class=\"purple\">must</strong> not be a protected buffer"
-        },
-        {
-          "vuid": "VUID-vkCmdUpdateBuffer-commandBuffer-01814",
-          "text": " If <code>commandBuffer</code> is a protected command buffer, then <code>dstBuffer</code> <strong class=\"purple\">must</strong> not be an unprotected buffer"
-        }
-      ]
-    },
-    "vkCmdCopyBuffer": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdCopyBuffer-size-00112",
-          "text": " The <code>size</code> member of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBuffer-srcOffset-00113",
-          "text": " The <code>srcOffset</code> member of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than the size of <code>srcBuffer</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBuffer-dstOffset-00114",
-          "text": " The <code>dstOffset</code> member of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than the size of <code>dstBuffer</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBuffer-size-00115",
-          "text": " The <code>size</code> member of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>srcBuffer</code> minus <code>srcOffset</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBuffer-size-00116",
-          "text": " The <code>size</code> member of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>dstBuffer</code> minus <code>dstOffset</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBuffer-pRegions-00117",
-          "text": " The union of the source regions, and the union of the destination regions, specified by the elements of <code>pRegions</code>, <strong class=\"purple\">must</strong> not overlap in memory"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBuffer-srcBuffer-00118",
-          "text": " <code>srcBuffer</code> <strong class=\"purple\">must</strong> have been created with <code>VK_BUFFER_USAGE_TRANSFER_SRC_BIT</code> usage flag"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBuffer-srcBuffer-00119",
-          "text": " If <code>srcBuffer</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBuffer-dstBuffer-00120",
-          "text": " <code>dstBuffer</code> <strong class=\"purple\">must</strong> have been created with <code>VK_BUFFER_USAGE_TRANSFER_DST_BIT</code> usage flag"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBuffer-dstBuffer-00121",
-          "text": " If <code>dstBuffer</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBuffer-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBuffer-srcBuffer-parameter",
-          "text": " <code>srcBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBuffer-dstBuffer-parameter",
-          "text": " <code>dstBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBuffer-pRegions-parameter",
-          "text": " <code>pRegions</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>regionCount</code> <code>VkBufferCopy</code> structures"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBuffer-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBuffer-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support transfer, graphics, or compute operations"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBuffer-renderpass",
-          "text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBuffer-regionCount-arraylength",
-          "text": " <code>regionCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBuffer-commonparent",
-          "text": " Each of <code>commandBuffer</code>, <code>dstBuffer</code>, and <code>srcBuffer</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ],
-      "(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-vkCmdCopyBuffer-commandBuffer-01822",
-          "text": " If <code>commandBuffer</code> is an unprotected command buffer, then <code>srcBuffer</code> <strong class=\"purple\">must</strong> not be a protected buffer"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBuffer-commandBuffer-01823",
-          "text": " If <code>commandBuffer</code> is an unprotected command buffer, then <code>dstBuffer</code> <strong class=\"purple\">must</strong> not be a protected buffer"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBuffer-commandBuffer-01824",
-          "text": " If <code>commandBuffer</code> is a protected command buffer, then <code>dstBuffer</code> <strong class=\"purple\">must</strong> not be an unprotected buffer"
-        }
-      ]
-    },
-    "vkCmdCopyImage": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdCopyImage-pRegions-00122",
-          "text": " The source region specified by each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be a region that is contained within <code>srcImage</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-pRegions-00123",
-          "text": " The destination region specified by each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be a region that is contained within <code>dstImage</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-pRegions-00124",
-          "text": " The union of all source regions, and the union of all destination regions, specified by the elements of <code>pRegions</code>, <strong class=\"purple\">must</strong> not overlap in memory"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-srcImage-00126",
-          "text": " <code>srcImage</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_TRANSFER_SRC_BIT</code> usage flag"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-srcImageLayout-00128",
-          "text": " <code>srcImageLayout</code> <strong class=\"purple\">must</strong> specify the layout of the image subresources of <code>srcImage</code> specified in <code>pRegions</code> at the time this command is executed on a <code>VkDevice</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-dstImage-00131",
-          "text": " <code>dstImage</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_TRANSFER_DST_BIT</code> usage flag"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-dstImageLayout-00133",
-          "text": " <code>dstImageLayout</code> <strong class=\"purple\">must</strong> specify the layout of the image subresources of <code>dstImage</code> specified in <code>pRegions</code> at the time this command is executed on a <code>VkDevice</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-srcImage-00136",
-          "text": " The sample count of <code>srcImage</code> and <code>dstImage</code> <strong class=\"purple\">must</strong> match"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-srcSubresource-01696",
-          "text": " The <code>srcSubresource.mipLevel</code> member of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>srcImage</code> was created"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-dstSubresource-01697",
-          "text": " The <code>dstSubresource.mipLevel</code> member of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>dstImage</code> was created"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-srcSubresource-01698",
-          "text": " The <span class=\"eq\"><code>srcSubresource.baseArrayLayer</code> &#43; <code>srcSubresource.layerCount</code></span> of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than or equal to the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>srcImage</code> was created"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-dstSubresource-01699",
-          "text": " The <span class=\"eq\"><code>dstSubresource.baseArrayLayer</code> &#43; <code>dstSubresource.layerCount</code></span> of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than or equal to the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>dstImage</code> was created"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-srcOffset-01783",
-          "text": " The <code>srcOffset</code> and and <code>extent</code> members of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> respect the image transfer granularity requirements of <code>commandBuffer</code>&#8217;s command pool&#8217;s queue family, as described in <a href=\"#VkQueueFamilyProperties\">VkQueueFamilyProperties</a>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-dstOffset-01784",
-          "text": " The <code>dstOffset</code> and and <code>extent</code> members of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> respect the image transfer granularity requirements of <code>commandBuffer</code>&#8217;s command pool&#8217;s queue family, as described in <a href=\"#VkQueueFamilyProperties\">VkQueueFamilyProperties</a>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-srcImage-parameter",
-          "text": " <code>srcImage</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-srcImageLayout-parameter",
-          "text": " <code>srcImageLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-dstImage-parameter",
-          "text": " <code>dstImage</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-dstImageLayout-parameter",
-          "text": " <code>dstImageLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-pRegions-parameter",
-          "text": " <code>pRegions</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>regionCount</code> valid <code>VkImageCopy</code> structures"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support transfer, graphics, or compute operations"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-renderpass",
-          "text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-regionCount-arraylength",
-          "text": " <code>regionCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-commonparent",
-          "text": " Each of <code>commandBuffer</code>, <code>dstImage</code>, and <code>srcImage</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_maintenance1)": [
-        {
-          "vuid": "VUID-vkCmdCopyImage-srcImage-00125",
-          "text": " <code>srcImage</code> <strong class=\"purple\">must</strong> use a format that supports <code>VK_FORMAT_FEATURE_TRANSFER_SRC_BIT</code>, which is indicated by <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> (for linearly tiled images) or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> (for optimally tiled images) - as returned by <a href=\"#vkGetPhysicalDeviceFormatProperties\">vkGetPhysicalDeviceFormatProperties</a>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-dstImage-00130",
-          "text": " <code>dstImage</code> <strong class=\"purple\">must</strong> use a format that supports <code>VK_FORMAT_FEATURE_TRANSFER_DST_BIT</code>, which is indicated by <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> (for linearly tiled images) or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> (for optimally tiled images) - as returned by <a href=\"#vkGetPhysicalDeviceFormatProperties\">vkGetPhysicalDeviceFormatProperties</a>"
-        }
-      ],
-      "!(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
-        {
-          "vuid": "VUID-vkCmdCopyImage-srcImage-00127",
-          "text": " If <code>srcImage</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-dstImage-00132",
-          "text": " If <code>dstImage</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-srcImage-00135",
-          "text": " The <a href=\"#VkFormat\">VkFormat</a> of each of <code>srcImage</code> and <code>dstImage</code> <strong class=\"purple\">must</strong> be compatible, as defined &amp;amp;lt;&amp;amp;lt;copies-images-format-compatibility, below&amp;amp;gt;&amp;amp;gt;"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
-        {
-          "vuid": "VUID-vkCmdCopyImage-srcImage-01546",
-          "text": " If <code>srcImage</code> is non-sparse then the image or <em>disjoint</em> plane to be copied <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-dstImage-01547",
-          "text": " If <code>dstImage</code> is non-sparse then the image or <em>disjoint</em> plane that is the destination of the copy <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-srcImage-01548",
-          "text": " If the <a href=\"#VkFormat\">VkFormat</a> of each of <code>srcImage</code> and <code>dstImage</code> is not a &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,<em>multi-planar format</em>&amp;amp;gt;&amp;amp;gt;, the <a href=\"#VkFormat\">VkFormat</a> of each of <code>srcImage</code> and <code>dstImage</code> <strong class=\"purple\">must</strong> be compatible, as defined &amp;amp;lt;&amp;amp;lt;copies-images-format-compatibility, below&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-None-01549",
-          "text": " In a copy to or from a plane of a &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar image&amp;amp;gt;&amp;amp;gt;, the <a href=\"#VkFormat\">VkFormat</a> of the image and plane <strong class=\"purple\">must</strong> be compatible according to &amp;amp;lt;&amp;amp;lt;features-formats-compatible-planes,the description of compatible planes&amp;amp;gt;&amp;amp;gt; for the plane being copied"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-aspectMask-01550",
-          "text": " When a copy is performed to or from an image with a &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar format&amp;amp;gt;&amp;amp;gt;, the <code>aspectMask</code> of the <code>srcSubresource</code> and/or <code>dstSubresource</code> that refers to the multi-planar image <strong class=\"purple\">must</strong> be <code>VK_IMAGE_ASPECT_PLANE_0_BIT</code>, <code>VK_IMAGE_ASPECT_PLANE_1_BIT</code>, or <code>VK_IMAGE_ASPECT_PLANE_2_BIT</code> (with <code>VK_IMAGE_ASPECT_PLANE_2_BIT</code> valid only for a <a href=\"#VkFormat\">VkFormat</a> with three planes)"
-        }
-      ],
-      "!(VK_KHR_shared_presentable_image)": [
-        {
-          "vuid": "VUID-vkCmdCopyImage-srcImageLayout-00129",
-          "text": " <code>srcImageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_GENERAL</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-dstImageLayout-00134",
-          "text": " <code>dstImageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_GENERAL</code>"
-        }
-      ],
-      "(VK_KHR_shared_presentable_image)": [
-        {
-          "vuid": "VUID-vkCmdCopyImage-srcImageLayout-01917",
-          "text": " <code>srcImageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_GENERAL</code>, or <code>VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-dstImageLayout-01395",
-          "text": " <code>dstImageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_GENERAL</code>, or <code>VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR</code>"
-        }
-      ],
-      "(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-vkCmdCopyImage-commandBuffer-01825",
-          "text": " If <code>commandBuffer</code> is an unprotected command buffer, then <code>srcImage</code> <strong class=\"purple\">must</strong> not be a protected image"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-commandBuffer-01826",
-          "text": " If <code>commandBuffer</code> is an unprotected command buffer, then <code>dstImage</code> <strong class=\"purple\">must</strong> not be a protected image"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImage-commandBuffer-01827",
-          "text": " If <code>commandBuffer</code> is a protected command buffer, then <code>dstImage</code> <strong class=\"purple\">must</strong> not be an unprotected image"
-        }
-      ]
-    },
-    "VkImageCopy": {
-      "!(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
-        {
-          "vuid": "VUID-VkImageCopy-aspectMask-00137",
-          "text": " The <code>aspectMask</code> member of <code>srcSubresource</code> and <code>dstSubresource</code> <strong class=\"purple\">must</strong> match"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-srcOffset-00157",
-          "text": " If the calling command&#8217;s <code>srcImage</code> is a compressed image, all members of <code>srcOffset</code> <strong class=\"purple\">must</strong> be a multiple of the corresponding dimensions of the compressed texel block"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-extent-00158",
-          "text": " If the calling command&#8217;s <code>srcImage</code> is a compressed image, <code>extent.width</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block width or <span class=\"eq\">(<code>extent.width</code> &#43; <code>srcOffset.x</code>)</span> <strong class=\"purple\">must</strong> equal the source image subresource width"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-extent-00159",
-          "text": " If the calling command&#8217;s <code>srcImage</code> is a compressed image, <code>extent.height</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block height or <span class=\"eq\">(<code>extent.height</code> &#43; <code>srcOffset.y</code>)</span> <strong class=\"purple\">must</strong> equal the source image subresource height"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-extent-00160",
-          "text": " If the calling command&#8217;s <code>srcImage</code> is a compressed image, <code>extent.depth</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block depth or <span class=\"eq\">(<code>extent.depth</code> &#43; <code>srcOffset.z</code>)</span> <strong class=\"purple\">must</strong> equal the source image subresource depth"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-dstOffset-00162",
-          "text": " If the calling command&#8217;s <code>dstImage</code> is a compressed format image, all members of <code>dstOffset</code> <strong class=\"purple\">must</strong> be a multiple of the corresponding dimensions of the compressed texel block"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-extent-00163",
-          "text": " If the calling command&#8217;s <code>dstImage</code> is a compressed format image, <code>extent.width</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block width or <span class=\"eq\">(<code>extent.width</code> &#43; <code>dstOffset.x</code>)</span> <strong class=\"purple\">must</strong> equal the destination image subresource width"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-extent-00164",
-          "text": " If the calling command&#8217;s <code>dstImage</code> is a compressed format image, <code>extent.height</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block height or <span class=\"eq\">(<code>extent.height</code> &#43; <code>dstOffset.y</code>)</span> <strong class=\"purple\">must</strong> equal the destination image subresource height"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-extent-00165",
-          "text": " If the calling command&#8217;s <code>dstImage</code> is a compressed format image, <code>extent.depth</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block depth or <span class=\"eq\">(<code>extent.depth</code> &#43; <code>dstOffset.z</code>)</span> <strong class=\"purple\">must</strong> equal the destination image subresource depth"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
-        {
-          "vuid": "VUID-VkImageCopy-srcImage-01551",
-          "text": " If neither the calling command&#8217;s <code>srcImage</code> nor the calling command&#8217;s <code>dstImage</code> has a &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion, multi-planar image format&amp;amp;gt;&amp;amp;gt; then the <code>aspectMask</code> member of <code>srcSubresource</code> and <code>dstSubresource</code> <strong class=\"purple\">must</strong> match"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-srcImage-01552",
-          "text": " If the calling command&#8217;s <code>srcImage</code> has a <a href=\"#VkFormat\">VkFormat</a> with &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,two planes&amp;amp;gt;&amp;amp;gt; then the <code>srcSubresource</code> <code>aspectMask</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_ASPECT_PLANE_0_BIT</code> or <code>VK_IMAGE_ASPECT_PLANE_1_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-srcImage-01553",
-          "text": " If the calling command&#8217;s <code>srcImage</code> has a <a href=\"#VkFormat\">VkFormat</a> with &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,three planes&amp;amp;gt;&amp;amp;gt; then the <code>srcSubresource</code> <code>aspectMask</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_ASPECT_PLANE_0_BIT</code>, <code>VK_IMAGE_ASPECT_PLANE_1_BIT</code>, or <code>VK_IMAGE_ASPECT_PLANE_2_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-dstImage-01554",
-          "text": " If the calling command&#8217;s <code>dstImage</code> has a <a href=\"#VkFormat\">VkFormat</a> with &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,two planes&amp;amp;gt;&amp;amp;gt; then the <code>dstSubresource</code> <code>aspectMask</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_ASPECT_PLANE_0_BIT</code> or <code>VK_IMAGE_ASPECT_PLANE_1_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-dstImage-01555",
-          "text": " If the calling command&#8217;s <code>dstImage</code> has a <a href=\"#VkFormat\">VkFormat</a> with &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,three planes&amp;amp;gt;&amp;amp;gt; then the <code>dstSubresource</code> <code>aspectMask</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_ASPECT_PLANE_0_BIT</code>, <code>VK_IMAGE_ASPECT_PLANE_1_BIT</code>, or <code>VK_IMAGE_ASPECT_PLANE_2_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-srcImage-01556",
-          "text": " If the calling command&#8217;s <code>srcImage</code> has a &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar image format&amp;amp;gt;&amp;amp;gt; and the <code>dstImage</code> does not have a multi-planar image format, the <code>dstSubresource</code> <code>aspectMask</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_ASPECT_COLOR_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-dstImage-01557",
-          "text": " If the calling command&#8217;s <code>dstImage</code> has a &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar image format&amp;amp;gt;&amp;amp;gt; and the <code>srcImage</code> does not have a multi-planar image format, the <code>srcSubresource</code> <code>aspectMask</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_ASPECT_COLOR_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-srcImage-01727",
-          "text": " If the calling command&#8217;s <code>srcImage</code> is a compressed image, or a <em>single-plane</em>, &#8220;<code>_422</code>&#8221; image format, all members of <code>srcOffset</code> <strong class=\"purple\">must</strong> be a multiple of the corresponding dimensions of the compressed texel block"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-srcImage-01728",
-          "text": " If the calling command&#8217;s <code>srcImage</code> is a compressed image, or a <em>single-plane</em>, &#8220;<code>_422</code>&#8221; image format, <code>extent.width</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block width or <span class=\"eq\">(<code>extent.width</code> &#43; <code>srcOffset.x</code>)</span> <strong class=\"purple\">must</strong> equal the source image subresource width"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-srcImage-01729",
-          "text": " If the calling command&#8217;s <code>srcImage</code> is a compressed image, or a <em>single-plane</em>, &#8220;<code>_422</code>&#8221; image format, <code>extent.height</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block height or <span class=\"eq\">(<code>extent.height</code> &#43; <code>srcOffset.y</code>)</span> <strong class=\"purple\">must</strong> equal the source image subresource height"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-srcImage-01730",
-          "text": " If the calling command&#8217;s <code>srcImage</code> is a compressed image, or a <em>single-plane</em>, &#8220;<code>_422</code>&#8221; image format, <code>extent.depth</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block depth or <span class=\"eq\">(<code>extent.depth</code> &#43; <code>srcOffset.z</code>)</span> <strong class=\"purple\">must</strong> equal the source image subresource depth"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-dstImage-01731",
-          "text": " If the calling command&#8217;s <code>dstImage</code> is a compressed format image, or a <em>single-plane</em>, &#8220;<code>_422</code>&#8221; image format, all members of <code>dstOffset</code> <strong class=\"purple\">must</strong> be a multiple of the corresponding dimensions of the compressed texel block"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-dstImage-01732",
-          "text": " If the calling command&#8217;s <code>dstImage</code> is a compressed format image, or a <em>single-plane</em>, &#8220;<code>_422</code>&#8221; image format, <code>extent.width</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block width or <span class=\"eq\">(<code>extent.width</code> &#43; <code>dstOffset.x</code>)</span> <strong class=\"purple\">must</strong> equal the destination image subresource width"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-dstImage-01733",
-          "text": " If the calling command&#8217;s <code>dstImage</code> is a compressed format image, or a <em>single-plane</em>, &#8220;<code>_422</code>&#8221; image format, <code>extent.height</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block height or <span class=\"eq\">(<code>extent.height</code> &#43; <code>dstOffset.y</code>)</span> <strong class=\"purple\">must</strong> equal the destination image subresource height"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-dstImage-01734",
-          "text": " If the calling command&#8217;s <code>dstImage</code> is a compressed format image, or a <em>single-plane</em>, &#8220;<code>_422</code>&#8221; image format, <code>extent.depth</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block depth or <span class=\"eq\">(<code>extent.depth</code> &#43; <code>dstOffset.z</code>)</span> <strong class=\"purple\">must</strong> equal the destination image subresource depth"
-        }
-      ],
-      "!(VK_VERSION_1_1,VK_KHR_maintenance1)": [
-        {
-          "vuid": "VUID-VkImageCopy-layerCount-00138",
-          "text": " The <code>layerCount</code> member of <code>srcSubresource</code> and <code>dstSubresource</code> <strong class=\"purple\">must</strong> match"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-srcImage-00139",
-          "text": " If either of the calling command&#8217;s <code>srcImage</code> or <code>dstImage</code> parameters are of <a href=\"#VkImageType\">VkImageType</a> <code>VK_IMAGE_TYPE_3D</code>, the <code>baseArrayLayer</code> and <code>layerCount</code> members of both <code>srcSubresource</code> and <code>dstSubresource</code> <strong class=\"purple\">must</strong> be <code>0</code> and <code>1</code>, respectively"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-srcImage-01789",
-          "text": " If the calling command&#8217;s <code>srcImage</code> or <code>dstImage</code> is of type <code>VK_IMAGE_TYPE_2D</code>, then <code>extent.depth</code> <strong class=\"purple\">must</strong> be <code>1</code>."
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_maintenance1)": [
-        {
-          "vuid": "VUID-VkImageCopy-extent-00140",
-          "text": " The number of slices of the <code>extent</code> (for 3D) or layers of the <code>srcSubresource</code> (for non-3D) <strong class=\"purple\">must</strong> match the number of slices of the <code>extent</code> (for 3D) or layers of the <code>dstSubresource</code> (for non-3D)"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-srcImage-00141",
-          "text": " If either of the calling command&#8217;s <code>srcImage</code> or <code>dstImage</code> parameters are of <a href=\"#VkImageType\">VkImageType</a> <code>VK_IMAGE_TYPE_3D</code>, the <code>baseArrayLayer</code> and <code>layerCount</code> members of the corresponding subresource <strong class=\"purple\">must</strong> be <code>0</code> and <code>1</code>, respectively"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-srcImage-01790",
-          "text": " If both <code>srcImage</code> and <code>dstImage</code> are of type <code>VK_IMAGE_TYPE_2D</code> then then <code>extent.depth</code> <strong class=\"purple\">must</strong> be <code>1</code>."
-        },
-        {
-          "vuid": "VUID-VkImageCopy-srcImage-01791",
-          "text": " If the calling command&#8217;s <code>srcImage</code> is of type <code>VK_IMAGE_TYPE_2D</code>, and the <code>dstImage</code> is of type <code>VK_IMAGE_TYPE_3D</code>, then <code>extent.depth</code> <strong class=\"purple\">must</strong> equal to the <code>layerCount</code> member of <code>srcSubresource</code>."
-        },
-        {
-          "vuid": "VUID-VkImageCopy-dstImage-01792",
-          "text": " If the calling command&#8217;s <code>dstImage</code> is of type <code>VK_IMAGE_TYPE_2D</code>, and the <code>srcImage</code> is of type <code>VK_IMAGE_TYPE_3D</code>, then <code>extent.depth</code> <strong class=\"purple\">must</strong> equal to the <code>layerCount</code> member of <code>dstSubresource</code>."
-        }
-      ],
-      "core": [
-        {
-          "vuid": "VUID-VkImageCopy-aspectMask-00142",
-          "text": " The <code>aspectMask</code> member of <code>srcSubresource</code> <strong class=\"purple\">must</strong> specify aspects present in the calling command&#8217;s <code>srcImage</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-aspectMask-00143",
-          "text": " The <code>aspectMask</code> member of <code>dstSubresource</code> <strong class=\"purple\">must</strong> specify aspects present in the calling command&#8217;s <code>dstImage</code>"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-srcOffset-00144",
-          "text": " <code>srcOffset.x</code> and <span class=\"eq\">(<code>extent.width</code> &#43; <code>srcOffset.x</code>)</span> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the source image subresource width"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-srcOffset-00145",
-          "text": " <code>srcOffset.y</code> and <span class=\"eq\">(<code>extent.height</code> &#43; <code>srcOffset.y</code>)</span> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the source image subresource height"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-srcImage-00146",
-          "text": " If the calling command&#8217;s <code>srcImage</code> is of type <code>VK_IMAGE_TYPE_1D</code>, then <code>srcOffset.y</code> <strong class=\"purple\">must</strong> be <code>0</code> and <code>extent.height</code> <strong class=\"purple\">must</strong> be <code>1</code>."
-        },
-        {
-          "vuid": "VUID-VkImageCopy-srcOffset-00147",
-          "text": " <code>srcOffset.z</code> and <span class=\"eq\">(<code>extent.depth</code> &#43; <code>srcOffset.z</code>)</span> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the source image subresource depth"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-srcImage-01785",
-          "text": " If the calling command&#8217;s <code>srcImage</code> is of type <code>VK_IMAGE_TYPE_1D</code>, then <code>srcOffset.z</code> <strong class=\"purple\">must</strong> be <code>0</code> and <code>extent.depth</code> <strong class=\"purple\">must</strong> be <code>1</code>."
-        },
-        {
-          "vuid": "VUID-VkImageCopy-dstImage-01786",
-          "text": " If the calling command&#8217;s <code>dstImage</code> is of type <code>VK_IMAGE_TYPE_1D</code>, then <code>dstOffset.z</code> <strong class=\"purple\">must</strong> be <code>0</code> and <code>extent.depth</code> <strong class=\"purple\">must</strong> be <code>1</code>."
-        },
-        {
-          "vuid": "VUID-VkImageCopy-srcImage-01787",
-          "text": " If the calling command&#8217;s <code>srcImage</code> is of type <code>VK_IMAGE_TYPE_2D</code>, then <code>srcOffset.z</code> <strong class=\"purple\">must</strong> be <code>0</code>."
-        },
-        {
-          "vuid": "VUID-VkImageCopy-dstImage-01788",
-          "text": " If the calling command&#8217;s <code>dstImage</code> is of type <code>VK_IMAGE_TYPE_2D</code>, then <code>dstOffset.z</code> <strong class=\"purple\">must</strong> be <code>0</code>."
-        },
-        {
-          "vuid": "VUID-VkImageCopy-dstOffset-00150",
-          "text": " <code>dstOffset.x</code> and <span class=\"eq\">(<code>extent.width</code> &#43; <code>dstOffset.x</code>)</span> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the destination image subresource width"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-dstOffset-00151",
-          "text": " <code>dstOffset.y</code> and <span class=\"eq\">(<code>extent.height</code> &#43; <code>dstOffset.y</code>)</span> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the destination image subresource height"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-dstImage-00152",
-          "text": " If the calling command&#8217;s <code>dstImage</code> is of type <code>VK_IMAGE_TYPE_1D</code>, then <code>dstOffset.y</code> <strong class=\"purple\">must</strong> be <code>0</code> and <code>extent.height</code> <strong class=\"purple\">must</strong> be <code>1</code>."
-        },
-        {
-          "vuid": "VUID-VkImageCopy-dstOffset-00153",
-          "text": " <code>dstOffset.z</code> and <span class=\"eq\">(<code>extent.depth</code> &#43; <code>dstOffset.z</code>)</span> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the destination image subresource depth"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-srcSubresource-parameter",
-          "text": " <code>srcSubresource</code> <strong class=\"purple\">must</strong> be a valid <code>VkImageSubresourceLayers</code> structure"
-        },
-        {
-          "vuid": "VUID-VkImageCopy-dstSubresource-parameter",
-          "text": " <code>dstSubresource</code> <strong class=\"purple\">must</strong> be a valid <code>VkImageSubresourceLayers</code> structure"
-        }
-      ]
-    },
-    "VkImageSubresourceLayers": {
-      "core": [
-        {
-          "vuid": "VUID-VkImageSubresourceLayers-aspectMask-00167",
-          "text": " If <code>aspectMask</code> contains <code>VK_IMAGE_ASPECT_COLOR_BIT</code>, it <strong class=\"purple\">must</strong> not contain either of <code>VK_IMAGE_ASPECT_DEPTH_BIT</code> or <code>VK_IMAGE_ASPECT_STENCIL_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageSubresourceLayers-aspectMask-00168",
-          "text": " <code>aspectMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_ASPECT_METADATA_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageSubresourceLayers-layerCount-01700",
-          "text": " <code>layerCount</code> <strong class=\"purple\">must</strong> be greater than 0"
-        },
-        {
-          "vuid": "VUID-VkImageSubresourceLayers-aspectMask-parameter",
-          "text": " <code>aspectMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageAspectFlagBits\">VkImageAspectFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkImageSubresourceLayers-aspectMask-requiredbitmask",
-          "text": " <code>aspectMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        }
-      ]
-    },
-    "vkCmdCopyBufferToImage": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdCopyBufferToImage-pRegions-00171",
-          "text": " The buffer region specified by each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be a region that is contained within <code>srcBuffer</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBufferToImage-pRegions-00172",
-          "text": " The image region specified by each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be a region that is contained within <code>dstImage</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBufferToImage-pRegions-00173",
-          "text": " The union of all source regions, and the union of all destination regions, specified by the elements of <code>pRegions</code>, <strong class=\"purple\">must</strong> not overlap in memory"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBufferToImage-srcBuffer-00174",
-          "text": " <code>srcBuffer</code> <strong class=\"purple\">must</strong> have been created with <code>VK_BUFFER_USAGE_TRANSFER_SRC_BIT</code> usage flag"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBufferToImage-srcBuffer-00176",
-          "text": " If <code>srcBuffer</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBufferToImage-dstImage-00177",
-          "text": " <code>dstImage</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_TRANSFER_DST_BIT</code> usage flag"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBufferToImage-dstImage-00178",
-          "text": " If <code>dstImage</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBufferToImage-dstImage-00179",
-          "text": " <code>dstImage</code> <strong class=\"purple\">must</strong> have a sample count equal to <code>VK_SAMPLE_COUNT_1_BIT</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBufferToImage-dstImageLayout-00180",
-          "text": " <code>dstImageLayout</code> <strong class=\"purple\">must</strong> specify the layout of the image subresources of <code>dstImage</code> specified in <code>pRegions</code> at the time this command is executed on a <code>VkDevice</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBufferToImage-imageSubresource-01701",
-          "text": " The <code>imageSubresource.mipLevel</code> member of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>dstImage</code> was created"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBufferToImage-imageSubresource-01702",
-          "text": " The <span class=\"eq\"><code>imageSubresource.baseArrayLayer</code> &#43; <code>imageSubresource.layerCount</code></span> of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than or equal to the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>dstImage</code> was created"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBufferToImage-imageOffset-01793",
-          "text": " The <code>imageOffset</code> and and <code>imageExtent</code> members of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> respect the image transfer granularity requirements of <code>commandBuffer</code>&#8217;s command pool&#8217;s queue family, as described in <a href=\"#VkQueueFamilyProperties\">VkQueueFamilyProperties</a>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBufferToImage-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBufferToImage-srcBuffer-parameter",
-          "text": " <code>srcBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBufferToImage-dstImage-parameter",
-          "text": " <code>dstImage</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBufferToImage-dstImageLayout-parameter",
-          "text": " <code>dstImageLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBufferToImage-pRegions-parameter",
-          "text": " <code>pRegions</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>regionCount</code> valid <code>VkBufferImageCopy</code> structures"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBufferToImage-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBufferToImage-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support transfer, graphics, or compute operations"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBufferToImage-renderpass",
-          "text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBufferToImage-regionCount-arraylength",
-          "text": " <code>regionCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBufferToImage-commonparent",
-          "text": " Each of <code>commandBuffer</code>, <code>dstImage</code>, and <code>srcBuffer</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_maintenance1)": [
-        {
-          "vuid": "VUID-vkCmdCopyBufferToImage-dstImage-00175",
-          "text": " <code>dstImage</code> <strong class=\"purple\">must</strong> use a format that supports <code>VK_FORMAT_FEATURE_TRANSFER_DST_BIT</code>, which is indicated by <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> (for linearly tiled images) or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> (for optimally tiled images) - as returned by <a href=\"#vkGetPhysicalDeviceFormatProperties\">vkGetPhysicalDeviceFormatProperties</a>"
-        }
-      ],
-      "!(VK_KHR_shared_presentable_image)": [
-        {
-          "vuid": "VUID-vkCmdCopyBufferToImage-dstImageLayout-00181",
-          "text": " <code>dstImageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_GENERAL</code>"
-        }
-      ],
-      "(VK_KHR_shared_presentable_image)": [
-        {
-          "vuid": "VUID-vkCmdCopyBufferToImage-dstImageLayout-01396",
-          "text": " <code>dstImageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_GENERAL</code>, or <code>VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR</code>"
-        }
-      ],
-      "(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-vkCmdCopyBufferToImage-commandBuffer-01828",
-          "text": " If <code>commandBuffer</code> is an unprotected command buffer, then <code>srcBuffer</code> <strong class=\"purple\">must</strong> not be a protected buffer"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBufferToImage-commandBuffer-01829",
-          "text": " If <code>commandBuffer</code> is an unprotected command buffer, then <code>dstImage</code> <strong class=\"purple\">must</strong> not be a protected image"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyBufferToImage-commandBuffer-01830",
-          "text": " If <code>commandBuffer</code> is a protected command buffer, then <code>dstImage</code> <strong class=\"purple\">must</strong> not be an unprotected image"
-        }
-      ]
-    },
-    "vkCmdCopyImageToBuffer": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdCopyImageToBuffer-pRegions-00182",
-          "text": " The image region specified by each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be a region that is contained within <code>srcImage</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImageToBuffer-pRegions-00183",
-          "text": " The buffer region specified by each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be a region that is contained within <code>dstBuffer</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImageToBuffer-pRegions-00184",
-          "text": " The union of all source regions, and the union of all destination regions, specified by the elements of <code>pRegions</code>, <strong class=\"purple\">must</strong> not overlap in memory"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImageToBuffer-srcImage-00186",
-          "text": " <code>srcImage</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_TRANSFER_SRC_BIT</code> usage flag"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImageToBuffer-srcImage-00187",
-          "text": " If <code>srcImage</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImageToBuffer-srcImage-00188",
-          "text": " <code>srcImage</code> <strong class=\"purple\">must</strong> have a sample count equal to <code>VK_SAMPLE_COUNT_1_BIT</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImageToBuffer-srcImageLayout-00189",
-          "text": " <code>srcImageLayout</code> <strong class=\"purple\">must</strong> specify the layout of the image subresources of <code>srcImage</code> specified in <code>pRegions</code> at the time this command is executed on a <code>VkDevice</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImageToBuffer-dstBuffer-00191",
-          "text": " <code>dstBuffer</code> <strong class=\"purple\">must</strong> have been created with <code>VK_BUFFER_USAGE_TRANSFER_DST_BIT</code> usage flag"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImageToBuffer-dstBuffer-00192",
-          "text": " If <code>dstBuffer</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImageToBuffer-imageSubresource-01703",
-          "text": " The <code>imageSubresource.mipLevel</code> member of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>srcImage</code> was created"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImageToBuffer-imageSubresource-01704",
-          "text": " The <span class=\"eq\"><code>imageSubresource.baseArrayLayer</code> &#43; <code>imageSubresource.layerCount</code></span> of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than or equal to the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>srcImage</code> was created"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImageToBuffer-imageOffset-01794",
-          "text": " The <code>imageOffset</code> and and <code>imageExtent</code> members of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> respect the image transfer granularity requirements of <code>commandBuffer</code>&#8217;s command pool&#8217;s queue family, as described in <a href=\"#VkQueueFamilyProperties\">VkQueueFamilyProperties</a>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImageToBuffer-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImageToBuffer-srcImage-parameter",
-          "text": " <code>srcImage</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImageToBuffer-srcImageLayout-parameter",
-          "text": " <code>srcImageLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImageToBuffer-dstBuffer-parameter",
-          "text": " <code>dstBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImageToBuffer-pRegions-parameter",
-          "text": " <code>pRegions</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>regionCount</code> valid <code>VkBufferImageCopy</code> structures"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImageToBuffer-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImageToBuffer-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support transfer, graphics, or compute operations"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImageToBuffer-renderpass",
-          "text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImageToBuffer-regionCount-arraylength",
-          "text": " <code>regionCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImageToBuffer-commonparent",
-          "text": " Each of <code>commandBuffer</code>, <code>dstBuffer</code>, and <code>srcImage</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_maintenance1)": [
-        {
-          "vuid": "VUID-vkCmdCopyImageToBuffer-srcImage-00185",
-          "text": " <code>srcImage</code> <strong class=\"purple\">must</strong> use a format that supports <code>VK_FORMAT_FEATURE_TRANSFER_SRC_BIT</code>, which is indicated by <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> (for linearly tiled images) or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> (for optimally tiled images) - as returned by <a href=\"#vkGetPhysicalDeviceFormatProperties\">vkGetPhysicalDeviceFormatProperties</a>"
-        }
-      ],
-      "!(VK_KHR_shared_presentable_image)": [
-        {
-          "vuid": "VUID-vkCmdCopyImageToBuffer-srcImageLayout-00190",
-          "text": " <code>srcImageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_GENERAL</code>"
-        }
-      ],
-      "(VK_KHR_shared_presentable_image)": [
-        {
-          "vuid": "VUID-vkCmdCopyImageToBuffer-srcImageLayout-01397",
-          "text": " <code>srcImageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR</code>, <code>VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_GENERAL</code>"
-        }
-      ],
-      "(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-vkCmdCopyImageToBuffer-commandBuffer-01831",
-          "text": " If <code>commandBuffer</code> is an unprotected command buffer, then <code>srcImage</code> <strong class=\"purple\">must</strong> not be a protected image"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImageToBuffer-commandBuffer-01832",
-          "text": " If <code>commandBuffer</code> is an unprotected command buffer, then <code>dstBuffer</code> <strong class=\"purple\">must</strong> not be a protected buffer"
-        },
-        {
-          "vuid": "VUID-vkCmdCopyImageToBuffer-commandBuffer-01833",
-          "text": " If <code>commandBuffer</code> is a protected command buffer, then <code>dstBuffer</code> <strong class=\"purple\">must</strong> not be an unprotected buffer"
-        }
-      ]
-    },
-    "VkBufferImageCopy": {
-      "!(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
-        {
-          "vuid": "VUID-VkBufferImageCopy-bufferOffset-00193",
-          "text": " If the calling command&#8217;s <code>VkImage</code> parameter&#8217;s format is not a depth/stencil format, then <code>bufferOffset</code> <strong class=\"purple\">must</strong> be a multiple of the format&#8217;s element size"
-        },
-        {
-          "vuid": "VUID-VkBufferImageCopy-bufferRowLength-00203",
-          "text": " If the calling command&#8217;s <code>VkImage</code> parameter is a compressed image, <code>bufferRowLength</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block width"
-        },
-        {
-          "vuid": "VUID-VkBufferImageCopy-bufferImageHeight-00204",
-          "text": " If the calling command&#8217;s <code>VkImage</code> parameter is a compressed image, <code>bufferImageHeight</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block height"
-        },
-        {
-          "vuid": "VUID-VkBufferImageCopy-imageOffset-00205",
-          "text": " If the calling command&#8217;s <code>VkImage</code> parameter is a compressed image, all members of <code>imageOffset</code> <strong class=\"purple\">must</strong> be a multiple of the corresponding dimensions of the compressed texel block"
-        },
-        {
-          "vuid": "VUID-VkBufferImageCopy-bufferOffset-00206",
-          "text": " If the calling command&#8217;s <code>VkImage</code> parameter is a compressed image, <code>bufferOffset</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block size in bytes"
-        },
-        {
-          "vuid": "VUID-VkBufferImageCopy-imageExtent-00207",
-          "text": " If the calling command&#8217;s <code>VkImage</code> parameter is a compressed image, <code>imageExtent.width</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block width or <span class=\"eq\">(<code>imageExtent.width</code> &#43; <code>imageOffset.x</code>)</span> <strong class=\"purple\">must</strong> equal the image subresource width"
-        },
-        {
-          "vuid": "VUID-VkBufferImageCopy-imageExtent-00208",
-          "text": " If the calling command&#8217;s <code>VkImage</code> parameter is a compressed image, <code>imageExtent.height</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block height or <span class=\"eq\">(<code>imageExtent.height</code> &#43; <code>imageOffset.y</code>)</span> <strong class=\"purple\">must</strong> equal the image subresource height"
-        },
-        {
-          "vuid": "VUID-VkBufferImageCopy-imageExtent-00209",
-          "text": " If the calling command&#8217;s <code>VkImage</code> parameter is a compressed image, <code>imageExtent.depth</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block depth or <span class=\"eq\">(<code>imageExtent.depth</code> &#43; <code>imageOffset.z</code>)</span> <strong class=\"purple\">must</strong> equal the image subresource depth"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
-        {
-          "vuid": "VUID-VkBufferImageCopy-bufferOffset-01558",
-          "text": " If the calling command&#8217;s <code>VkImage</code> parameter&#8217;s format is not a depth/stencil format or a &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar format&amp;amp;gt;&amp;amp;gt;, then <code>bufferOffset</code> <strong class=\"purple\">must</strong> be a multiple of the format&#8217;s element size"
-        },
-        {
-          "vuid": "VUID-VkBufferImageCopy-bufferOffset-01559",
-          "text": " If the calling command&#8217;s <code>VkImage</code> parameter&#8217;s format is a &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar format&amp;amp;gt;&amp;amp;gt;, then <code>bufferOffset</code> <strong class=\"purple\">must</strong> be a multiple of the element size of the compatible format for the format and the <code>aspectMask</code> of the <code>imageSubresource</code> as defined in &amp;amp;lt;&amp;amp;lt;features-formats-compatible-planes&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-VkBufferImageCopy-None-01735",
-          "text": " If the calling command&#8217;s <code>VkImage</code> parameter is a compressed image, or a <em>single-plane</em>, &#8220;<code>_422</code>&#8221; image format, <code>bufferRowLength</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block width"
-        },
-        {
-          "vuid": "VUID-VkBufferImageCopy-None-01736",
-          "text": " If the calling command&#8217;s <code>VkImage</code> parameter is a compressed image, or a <em>single-plane</em>, &#8220;<code>_422</code>&#8221; image format, <code>bufferImageHeight</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block height"
-        },
-        {
-          "vuid": "VUID-VkBufferImageCopy-None-01737",
-          "text": " If the calling command&#8217;s <code>VkImage</code> parameter is a compressed image, or a <em>single-plane</em>, &#8220;<code>_422</code>&#8221; image format, all members of <code>imageOffset</code> <strong class=\"purple\">must</strong> be a multiple of the corresponding dimensions of the compressed texel block"
-        },
-        {
-          "vuid": "VUID-VkBufferImageCopy-None-01738",
-          "text": " If the calling command&#8217;s <code>VkImage</code> parameter is a compressed image, or a <em>single-plane</em>, &#8220;<code>_422</code>&#8221; image format, <code>bufferOffset</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block size in bytes"
-        },
-        {
-          "vuid": "VUID-VkBufferImageCopy-None-01739",
-          "text": " If the calling command&#8217;s <code>VkImage</code> parameter is a compressed image, or a <em>single-plane</em>, &#8220;<code>_422</code>&#8221; image format, <code>imageExtent.width</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block width or <span class=\"eq\">(<code>imageExtent.width</code> &#43; <code>imageOffset.x</code>)</span> <strong class=\"purple\">must</strong> equal the image subresource width"
-        },
-        {
-          "vuid": "VUID-VkBufferImageCopy-None-01740",
-          "text": " If the calling command&#8217;s <code>VkImage</code> parameter is a compressed image, or a <em>single-plane</em>, &#8220;<code>_422</code>&#8221; image format, <code>imageExtent.height</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block height or <span class=\"eq\">(<code>imageExtent.height</code> &#43; <code>imageOffset.y</code>)</span> <strong class=\"purple\">must</strong> equal the image subresource height"
-        },
-        {
-          "vuid": "VUID-VkBufferImageCopy-None-01741",
-          "text": " If the calling command&#8217;s <code>VkImage</code> parameter is a compressed image, or a <em>single-plane</em>, &#8220;<code>_422</code>&#8221; image format, <code>imageExtent.depth</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block depth or <span class=\"eq\">(<code>imageExtent.depth</code> &#43; <code>imageOffset.z</code>)</span> <strong class=\"purple\">must</strong> equal the image subresource depth"
-        },
-        {
-          "vuid": "VUID-VkBufferImageCopy-aspectMask-01560",
-          "text": " If the calling command&#8217;s <code>VkImage</code> parameter&#8217;s format is a &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar format&amp;amp;gt;&amp;amp;gt;, then the <code>aspectMask</code> member of <code>imageSubresource</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_ASPECT_PLANE_0_BIT</code>, <code>VK_IMAGE_ASPECT_PLANE_1_BIT</code>, or <code>VK_IMAGE_ASPECT_PLANE_2_BIT</code> (with <code>VK_IMAGE_ASPECT_PLANE_2_BIT</code> valid only for image formats with three planes)"
-        }
-      ],
-      "core": [
-        {
-          "vuid": "VUID-VkBufferImageCopy-bufferOffset-00194",
-          "text": " <code>bufferOffset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferImageCopy-bufferRowLength-00195",
-          "text": " <code>bufferRowLength</code> <strong class=\"purple\">must</strong> be <code>0</code>, or greater than or equal to the <code>width</code> member of <code>imageExtent</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferImageCopy-bufferImageHeight-00196",
-          "text": " <code>bufferImageHeight</code> <strong class=\"purple\">must</strong> be <code>0</code>, or greater than or equal to the <code>height</code> member of <code>imageExtent</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferImageCopy-imageOffset-00197",
-          "text": " <code>imageOffset.x</code> and <span class=\"eq\">(<code>imageExtent.width</code> &#43; <code>imageOffset.x</code>)</span> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the image subresource width"
-        },
-        {
-          "vuid": "VUID-VkBufferImageCopy-imageOffset-00198",
-          "text": " <code>imageOffset.y</code> and <span class=\"eq\">(imageExtent.height &#43; <code>imageOffset.y</code>)</span> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the image subresource height"
-        },
-        {
-          "vuid": "VUID-VkBufferImageCopy-srcImage-00199",
-          "text": " If the calling command&#8217;s <code>srcImage</code> (<a href=\"#vkCmdCopyImageToBuffer\">vkCmdCopyImageToBuffer</a>) or <code>dstImage</code> (<a href=\"#vkCmdCopyBufferToImage\">vkCmdCopyBufferToImage</a>) is of type <code>VK_IMAGE_TYPE_1D</code>, then <code>imageOffset.y</code> <strong class=\"purple\">must</strong> be <code>0</code> and <code>imageExtent.height</code> <strong class=\"purple\">must</strong> be <code>1</code>."
-        },
-        {
-          "vuid": "VUID-VkBufferImageCopy-imageOffset-00200",
-          "text": " <code>imageOffset.z</code> and <span class=\"eq\">(imageExtent.depth &#43; <code>imageOffset.z</code>)</span> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the image subresource depth"
-        },
-        {
-          "vuid": "VUID-VkBufferImageCopy-srcImage-00201",
-          "text": " If the calling command&#8217;s <code>srcImage</code> (<a href=\"#vkCmdCopyImageToBuffer\">vkCmdCopyImageToBuffer</a>) or <code>dstImage</code> (<a href=\"#vkCmdCopyBufferToImage\">vkCmdCopyBufferToImage</a>) is of type <code>VK_IMAGE_TYPE_1D</code> or <code>VK_IMAGE_TYPE_2D</code>, then <code>imageOffset.z</code> <strong class=\"purple\">must</strong> be <code>0</code> and <code>imageExtent.depth</code> <strong class=\"purple\">must</strong> be <code>1</code>"
-        },
-        {
-          "vuid": "VUID-VkBufferImageCopy-aspectMask-00211",
-          "text": " The <code>aspectMask</code> member of <code>imageSubresource</code> <strong class=\"purple\">must</strong> specify aspects present in the calling command&#8217;s <code>VkImage</code> parameter"
-        },
-        {
-          "vuid": "VUID-VkBufferImageCopy-aspectMask-00212",
-          "text": " The <code>aspectMask</code> member of <code>imageSubresource</code> <strong class=\"purple\">must</strong> only have a single bit set"
-        },
-        {
-          "vuid": "VUID-VkBufferImageCopy-baseArrayLayer-00213",
-          "text": " If the calling command&#8217;s <code>VkImage</code> parameter is of <a href=\"#VkImageType\">VkImageType</a> <code>VK_IMAGE_TYPE_3D</code>, the <code>baseArrayLayer</code> and <code>layerCount</code> members of <code>imageSubresource</code> <strong class=\"purple\">must</strong> be <code>0</code> and <code>1</code>, respectively"
-        },
-        {
-          "vuid": "VUID-VkBufferImageCopy-None-00214",
-          "text": " When copying to the depth aspect of an image subresource, the data in the source buffer <strong class=\"purple\">must</strong> be in the range <span class=\"eq\">[0,1]</span>"
-        },
-        {
-          "vuid": "VUID-VkBufferImageCopy-imageSubresource-parameter",
-          "text": " <code>imageSubresource</code> <strong class=\"purple\">must</strong> be a valid <code>VkImageSubresourceLayers</code> structure"
-        }
-      ]
-    },
-    "vkCmdBlitImage": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdBlitImage-pRegions-00215",
-          "text": " The source region specified by each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be a region that is contained within <code>srcImage</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-pRegions-00216",
-          "text": " The destination region specified by each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be a region that is contained within <code>dstImage</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-pRegions-00217",
-          "text": " The union of all destination regions, specified by the elements of <code>pRegions</code>, <strong class=\"purple\">must</strong> not overlap in memory with any texel that <strong class=\"purple\">may</strong> be sampled during the blit operation"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-srcImage-00218",
-          "text": " <code>srcImage</code> <strong class=\"purple\">must</strong> use a format that supports <code>VK_FORMAT_FEATURE_BLIT_SRC_BIT</code>, which is indicated by <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> (for linearly tiled images) or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> (for optimally tiled images) - as returned by <code>vkGetPhysicalDeviceFormatProperties</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-srcImage-00219",
-          "text": " <code>srcImage</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_TRANSFER_SRC_BIT</code> usage flag"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-srcImage-00220",
-          "text": " If <code>srcImage</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-srcImageLayout-00221",
-          "text": " <code>srcImageLayout</code> <strong class=\"purple\">must</strong> specify the layout of the image subresources of <code>srcImage</code> specified in <code>pRegions</code> at the time this command is executed on a <code>VkDevice</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-dstImage-00223",
-          "text": " <code>dstImage</code> <strong class=\"purple\">must</strong> use a format that supports <code>VK_FORMAT_FEATURE_BLIT_DST_BIT</code>, which is indicated by <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> (for linearly tiled images) or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> (for optimally tiled images) - as returned by <code>vkGetPhysicalDeviceFormatProperties</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-dstImage-00224",
-          "text": " <code>dstImage</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_TRANSFER_DST_BIT</code> usage flag"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-dstImage-00225",
-          "text": " If <code>dstImage</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-dstImageLayout-00226",
-          "text": " <code>dstImageLayout</code> <strong class=\"purple\">must</strong> specify the layout of the image subresources of <code>dstImage</code> specified in <code>pRegions</code> at the time this command is executed on a <code>VkDevice</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-srcImage-00228",
-          "text": " The sample count of <code>srcImage</code> and <code>dstImage</code> <strong class=\"purple\">must</strong> both be equal to <code>VK_SAMPLE_COUNT_1_BIT</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-srcImage-00229",
-          "text": " If either of <code>srcImage</code> or <code>dstImage</code> was created with a signed integer <a href=\"#VkFormat\">VkFormat</a>, the other <strong class=\"purple\">must</strong> also have been created with a signed integer <a href=\"#VkFormat\">VkFormat</a>"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-srcImage-00230",
-          "text": " If either of <code>srcImage</code> or <code>dstImage</code> was created with an unsigned integer <a href=\"#VkFormat\">VkFormat</a>, the other <strong class=\"purple\">must</strong> also have been created with an unsigned integer <a href=\"#VkFormat\">VkFormat</a>"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-srcImage-00231",
-          "text": " If either of <code>srcImage</code> or <code>dstImage</code> was created with a depth/stencil format, the other <strong class=\"purple\">must</strong> have exactly the same format"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-srcImage-00232",
-          "text": " If <code>srcImage</code> was created with a depth/stencil format, <code>filter</code> <strong class=\"purple\">must</strong> be <code>VK_FILTER_NEAREST</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-srcImage-00233",
-          "text": " <code>srcImage</code> <strong class=\"purple\">must</strong> have been created with a <code>samples</code> value of <code>VK_SAMPLE_COUNT_1_BIT</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-dstImage-00234",
-          "text": " <code>dstImage</code> <strong class=\"purple\">must</strong> have been created with a <code>samples</code> value of <code>VK_SAMPLE_COUNT_1_BIT</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-filter-00235",
-          "text": " If <code>filter</code> is <code>VK_FILTER_LINEAR</code>, <code>srcImage</code> <strong class=\"purple\">must</strong> be of a format which supports linear filtering, as specified by the <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT</code> flag in <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> (for a linear image) or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code>(for an optimally tiled image) returned by <code>vkGetPhysicalDeviceFormatProperties</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-srcSubresource-01705",
-          "text": " The <code>srcSubresource.mipLevel</code> member of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>srcImage</code> was created"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-dstSubresource-01706",
-          "text": " The <code>dstSubresource.mipLevel</code> member of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>dstImage</code> was created"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-srcSubresource-01707",
-          "text": " The <span class=\"eq\"><code>srcSubresource.baseArrayLayer</code> &#43; <code>srcSubresource.layerCount</code></span> of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than or equal to the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>srcImage</code> was created"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-dstSubresource-01708",
-          "text": " The <span class=\"eq\"><code>dstSubresource.baseArrayLayer</code> &#43; <code>dstSubresource.layerCount</code></span> of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than or equal to the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>dstImage</code> was created"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-srcImage-parameter",
-          "text": " <code>srcImage</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-srcImageLayout-parameter",
-          "text": " <code>srcImageLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-dstImage-parameter",
-          "text": " <code>dstImage</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-dstImageLayout-parameter",
-          "text": " <code>dstImageLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-pRegions-parameter",
-          "text": " <code>pRegions</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>regionCount</code> valid <code>VkImageBlit</code> structures"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-filter-parameter",
-          "text": " <code>filter</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFilter\">VkFilter</a> value"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-renderpass",
-          "text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-regionCount-arraylength",
-          "text": " <code>regionCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-commonparent",
-          "text": " Each of <code>commandBuffer</code>, <code>dstImage</code>, and <code>srcImage</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
-        {
-          "vuid": "VUID-vkCmdBlitImage-srcImage-01561",
-          "text": " <code>srcImage</code> <strong class=\"purple\">must</strong> not use a format listed in &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-dstImage-01562",
-          "text": " <code>dstImage</code> <strong class=\"purple\">must</strong> not use a format listed in &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion&amp;amp;gt;&amp;amp;gt;"
-        }
-      ],
-      "!(VK_KHR_shared_presentable_image)": [
-        {
-          "vuid": "VUID-vkCmdBlitImage-srcImageLayout-00222",
-          "text": " <code>srcImageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_GENERAL</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-dstImageLayout-00227",
-          "text": " <code>dstImageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_GENERAL</code>"
-        }
-      ],
-      "(VK_KHR_shared_presentable_image)": [
-        {
-          "vuid": "VUID-vkCmdBlitImage-srcImageLayout-01398",
-          "text": " <code>srcImageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR</code>, <code>VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_GENERAL</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-dstImageLayout-01399",
-          "text": " <code>dstImageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR</code>, <code>VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_GENERAL</code>"
-        }
-      ],
-      "(VK_IMG_filter_cubic)": [
-        {
-          "vuid": "VUID-vkCmdBlitImage-filter-00236",
-          "text": " If <code>filter</code> is <code>VK_FILTER_CUBIC_IMG</code>, <code>srcImage</code> <strong class=\"purple\">must</strong> be of a format which supports cubic filtering, as specified by the <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG</code> flag in <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> (for a linear image) or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code>(for an optimally tiled image) returned by <code>vkGetPhysicalDeviceFormatProperties</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-filter-00237",
-          "text": " If <code>filter</code> is <code>VK_FILTER_CUBIC_IMG</code>, <code>srcImage</code> <strong class=\"purple\">must</strong> have a <a href=\"#VkImageType\">VkImageType</a> of <code>VK_IMAGE_TYPE_3D</code>"
-        }
-      ],
-      "(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-vkCmdBlitImage-commandBuffer-01834",
-          "text": " If <code>commandBuffer</code> is an unprotected command buffer, then <code>srcImage</code> <strong class=\"purple\">must</strong> not be a protected image"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-commandBuffer-01835",
-          "text": " If <code>commandBuffer</code> is an unprotected command buffer, then <code>dstImage</code> <strong class=\"purple\">must</strong> not be a protected image"
-        },
-        {
-          "vuid": "VUID-vkCmdBlitImage-commandBuffer-01836",
-          "text": " If <code>commandBuffer</code> is a protected command buffer, then <code>dstImage</code> <strong class=\"purple\">must</strong> not be an unprotected image"
-        }
-      ]
-    },
-    "VkImageBlit": {
-      "core": [
-        {
-          "vuid": "VUID-VkImageBlit-aspectMask-00238",
-          "text": " The <code>aspectMask</code> member of <code>srcSubresource</code> and <code>dstSubresource</code> <strong class=\"purple\">must</strong> match"
-        },
-        {
-          "vuid": "VUID-VkImageBlit-layerCount-00239",
-          "text": " The <code>layerCount</code> member of <code>srcSubresource</code> and <code>dstSubresource</code> <strong class=\"purple\">must</strong> match"
-        },
-        {
-          "vuid": "VUID-VkImageBlit-srcImage-00240",
-          "text": " If either of the calling command&#8217;s <code>srcImage</code> or <code>dstImage</code> parameters are of <a href=\"#VkImageType\">VkImageType</a> <code>VK_IMAGE_TYPE_3D</code>, the <code>baseArrayLayer</code> and <code>layerCount</code> members of both <code>srcSubresource</code> and <code>dstSubresource</code> <strong class=\"purple\">must</strong> be <code>0</code> and <code>1</code>, respectively"
-        },
-        {
-          "vuid": "VUID-VkImageBlit-aspectMask-00241",
-          "text": " The <code>aspectMask</code> member of <code>srcSubresource</code> <strong class=\"purple\">must</strong> specify aspects present in the calling command&#8217;s <code>srcImage</code>"
-        },
-        {
-          "vuid": "VUID-VkImageBlit-aspectMask-00242",
-          "text": " The <code>aspectMask</code> member of <code>dstSubresource</code> <strong class=\"purple\">must</strong> specify aspects present in the calling command&#8217;s <code>dstImage</code>"
-        },
-        {
-          "vuid": "VUID-VkImageBlit-srcOffset-00243",
-          "text": " <code>srcOffset</code>[0].<code>x</code> and <code>srcOffset</code>[1].<code>x</code> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the source image subresource width"
-        },
-        {
-          "vuid": "VUID-VkImageBlit-srcOffset-00244",
-          "text": " <code>srcOffset</code>[0].<code>y</code> and <code>srcOffset</code>[1].<code>y</code> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the source image subresource height"
-        },
-        {
-          "vuid": "VUID-VkImageBlit-srcImage-00245",
-          "text": " If the calling command&#8217;s <code>srcImage</code> is of type <code>VK_IMAGE_TYPE_1D</code>, then <code>srcOffset</code>[0].y <strong class=\"purple\">must</strong> be <code>0</code> and <code>srcOffset</code>[1].y <strong class=\"purple\">must</strong> be <code>1</code>."
-        },
-        {
-          "vuid": "VUID-VkImageBlit-srcOffset-00246",
-          "text": " <code>srcOffset</code>[0].<code>z</code> and <code>srcOffset</code>[1].<code>z</code> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the source image subresource depth"
-        },
-        {
-          "vuid": "VUID-VkImageBlit-srcImage-00247",
-          "text": " If the calling command&#8217;s <code>srcImage</code> is of type <code>VK_IMAGE_TYPE_1D</code> or <code>VK_IMAGE_TYPE_2D</code>, then <code>srcOffset</code>[0].z <strong class=\"purple\">must</strong> be <code>0</code> and <code>srcOffset</code>[1].z <strong class=\"purple\">must</strong> be <code>1</code>."
-        },
-        {
-          "vuid": "VUID-VkImageBlit-dstOffset-00248",
-          "text": " <code>dstOffset</code>[0].<code>x</code> and <code>dstOffset</code>[1].<code>x</code> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the destination image subresource width"
-        },
-        {
-          "vuid": "VUID-VkImageBlit-dstOffset-00249",
-          "text": " <code>dstOffset</code>[0].<code>y</code> and <code>dstOffset</code>[1].<code>y</code> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the destination image subresource height"
-        },
-        {
-          "vuid": "VUID-VkImageBlit-dstImage-00250",
-          "text": " If the calling command&#8217;s <code>dstImage</code> is of type <code>VK_IMAGE_TYPE_1D</code>, then <code>dstOffset</code>[0].y <strong class=\"purple\">must</strong> be <code>0</code> and <code>dstOffset</code>[1].y <strong class=\"purple\">must</strong> be <code>1</code>."
-        },
-        {
-          "vuid": "VUID-VkImageBlit-dstOffset-00251",
-          "text": " <code>dstOffset</code>[0].<code>z</code> and <code>dstOffset</code>[1].<code>z</code> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the destination image subresource depth"
-        },
-        {
-          "vuid": "VUID-VkImageBlit-dstImage-00252",
-          "text": " If the calling command&#8217;s <code>dstImage</code> is of type <code>VK_IMAGE_TYPE_1D</code> or <code>VK_IMAGE_TYPE_2D</code>, then <code>dstOffset</code>[0].z <strong class=\"purple\">must</strong> be <code>0</code> and <code>dstOffset</code>[1].z <strong class=\"purple\">must</strong> be <code>1</code>."
-        },
-        {
-          "vuid": "VUID-VkImageBlit-srcSubresource-parameter",
-          "text": " <code>srcSubresource</code> <strong class=\"purple\">must</strong> be a valid <code>VkImageSubresourceLayers</code> structure"
-        },
-        {
-          "vuid": "VUID-VkImageBlit-dstSubresource-parameter",
-          "text": " <code>dstSubresource</code> <strong class=\"purple\">must</strong> be a valid <code>VkImageSubresourceLayers</code> structure"
-        }
-      ]
-    },
-    "vkCmdResolveImage": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdResolveImage-pRegions-00253",
-          "text": " The source region specified by each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be a region that is contained within <code>srcImage</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdResolveImage-pRegions-00254",
-          "text": " The destination region specified by each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be a region that is contained within <code>dstImage</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdResolveImage-pRegions-00255",
-          "text": " The union of all source regions, and the union of all destination regions, specified by the elements of <code>pRegions</code>, <strong class=\"purple\">must</strong> not overlap in memory"
-        },
-        {
-          "vuid": "VUID-vkCmdResolveImage-srcImage-00256",
-          "text": " If <code>srcImage</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
-        },
-        {
-          "vuid": "VUID-vkCmdResolveImage-srcImage-00257",
-          "text": " <code>srcImage</code> <strong class=\"purple\">must</strong> have a sample count equal to any valid sample count value other than <code>VK_SAMPLE_COUNT_1_BIT</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdResolveImage-dstImage-00258",
-          "text": " If <code>dstImage</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
-        },
-        {
-          "vuid": "VUID-vkCmdResolveImage-dstImage-00259",
-          "text": " <code>dstImage</code> <strong class=\"purple\">must</strong> have a sample count equal to <code>VK_SAMPLE_COUNT_1_BIT</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdResolveImage-srcImageLayout-00260",
-          "text": " <code>srcImageLayout</code> <strong class=\"purple\">must</strong> specify the layout of the image subresources of <code>srcImage</code> specified in <code>pRegions</code> at the time this command is executed on a <code>VkDevice</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdResolveImage-dstImageLayout-00262",
-          "text": " <code>dstImageLayout</code> <strong class=\"purple\">must</strong> specify the layout of the image subresources of <code>dstImage</code> specified in <code>pRegions</code> at the time this command is executed on a <code>VkDevice</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdResolveImage-dstImage-00264",
-          "text": " If <code>dstImage</code> was created with <code>tiling</code> equal to <code>VK_IMAGE_TILING_LINEAR</code>, <code>dstImage</code> <strong class=\"purple\">must</strong> have been created with a <code>format</code> that supports being a color attachment, as specified by the <code>VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT</code> flag in <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdResolveImage-dstImage-00265",
-          "text": " If <code>dstImage</code> was created with <code>tiling</code> equal to <code>VK_IMAGE_TILING_OPTIMAL</code>, <code>dstImage</code> <strong class=\"purple\">must</strong> have been created with a <code>format</code> that supports being a color attachment, as specified by the <code>VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT</code> flag in <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdResolveImage-srcImage-01386",
-          "text": " <code>srcImage</code> and <code>dstImage</code> <strong class=\"purple\">must</strong> have been created with the same image format"
-        },
-        {
-          "vuid": "VUID-vkCmdResolveImage-srcSubresource-01709",
-          "text": " The <code>srcSubresource.mipLevel</code> member of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>srcImage</code> was created"
-        },
-        {
-          "vuid": "VUID-vkCmdResolveImage-dstSubresource-01710",
-          "text": " The <code>dstSubresource.mipLevel</code> member of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>dstImage</code> was created"
-        },
-        {
-          "vuid": "VUID-vkCmdResolveImage-srcSubresource-01711",
-          "text": " The <span class=\"eq\"><code>srcSubresource.baseArrayLayer</code> &#43; <code>srcSubresource.layerCount</code></span> of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than or equal to the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>srcImage</code> was created"
-        },
-        {
-          "vuid": "VUID-vkCmdResolveImage-dstSubresource-01712",
-          "text": " The <span class=\"eq\"><code>dstSubresource.baseArrayLayer</code> &#43; <code>dstSubresource.layerCount</code></span> of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than or equal to the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>dstImage</code> was created"
-        },
-        {
-          "vuid": "VUID-vkCmdResolveImage-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdResolveImage-srcImage-parameter",
-          "text": " <code>srcImage</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdResolveImage-srcImageLayout-parameter",
-          "text": " <code>srcImageLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
-        },
-        {
-          "vuid": "VUID-vkCmdResolveImage-dstImage-parameter",
-          "text": " <code>dstImage</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdResolveImage-dstImageLayout-parameter",
-          "text": " <code>dstImageLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
-        },
-        {
-          "vuid": "VUID-vkCmdResolveImage-pRegions-parameter",
-          "text": " <code>pRegions</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>regionCount</code> valid <code>VkImageResolve</code> structures"
-        },
-        {
-          "vuid": "VUID-vkCmdResolveImage-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdResolveImage-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
-        },
-        {
-          "vuid": "VUID-vkCmdResolveImage-renderpass",
-          "text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
-        },
-        {
-          "vuid": "VUID-vkCmdResolveImage-regionCount-arraylength",
-          "text": " <code>regionCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdResolveImage-commonparent",
-          "text": " Each of <code>commandBuffer</code>, <code>dstImage</code>, and <code>srcImage</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ],
-      "!(VK_KHR_shared_presentable_image)": [
-        {
-          "vuid": "VUID-vkCmdResolveImage-srcImageLayout-00261",
-          "text": " <code>srcImageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_GENERAL</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdResolveImage-dstImageLayout-00263",
-          "text": " <code>dstImageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_GENERAL</code>"
-        }
-      ],
-      "(VK_KHR_shared_presentable_image)": [
-        {
-          "vuid": "VUID-vkCmdResolveImage-srcImageLayout-01400",
-          "text": " <code>srcImageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR</code>, <code>VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_GENERAL</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdResolveImage-dstImageLayout-01401",
-          "text": " <code>dstImageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR</code>, <code>VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_GENERAL</code>"
-        }
-      ],
-      "(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-vkCmdResolveImage-commandBuffer-01837",
-          "text": " If <code>commandBuffer</code> is an unprotected command buffer, then <code>srcImage</code> <strong class=\"purple\">must</strong> not be a protected image"
-        },
-        {
-          "vuid": "VUID-vkCmdResolveImage-commandBuffer-01838",
-          "text": " If <code>commandBuffer</code> is an unprotected command buffer, then <code>dstImage</code> <strong class=\"purple\">must</strong> not be a protected image"
-        },
-        {
-          "vuid": "VUID-vkCmdResolveImage-commandBuffer-01839",
-          "text": " If <code>commandBuffer</code> is a protected command buffer, then <code>dstImage</code> <strong class=\"purple\">must</strong> not be an unprotected image"
-        }
-      ]
-    },
-    "VkImageResolve": {
-      "core": [
-        {
-          "vuid": "VUID-VkImageResolve-aspectMask-00266",
-          "text": " The <code>aspectMask</code> member of <code>srcSubresource</code> and <code>dstSubresource</code> <strong class=\"purple\">must</strong> only contain <code>VK_IMAGE_ASPECT_COLOR_BIT</code>"
-        },
-        {
-          "vuid": "VUID-VkImageResolve-layerCount-00267",
-          "text": " The <code>layerCount</code> member of <code>srcSubresource</code> and <code>dstSubresource</code> <strong class=\"purple\">must</strong> match"
-        },
-        {
-          "vuid": "VUID-VkImageResolve-srcImage-00268",
-          "text": " If either of the calling command&#8217;s <code>srcImage</code> or <code>dstImage</code> parameters are of <a href=\"#VkImageType\">VkImageType</a> <code>VK_IMAGE_TYPE_3D</code>, the <code>baseArrayLayer</code> and <code>layerCount</code> members of both <code>srcSubresource</code> and <code>dstSubresource</code> <strong class=\"purple\">must</strong> be <code>0</code> and <code>1</code>, respectively"
-        },
-        {
-          "vuid": "VUID-VkImageResolve-srcOffset-00269",
-          "text": " <code>srcOffset.x</code> and <span class=\"eq\">(<code>extent.width</code> &#43; <code>srcOffset.x</code>)</span> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the source image subresource width"
-        },
-        {
-          "vuid": "VUID-VkImageResolve-srcOffset-00270",
-          "text": " <code>srcOffset.y</code> and <span class=\"eq\">(<code>extent.height</code> &#43; <code>srcOffset.y</code>)</span> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the source image subresource height"
-        },
-        {
-          "vuid": "VUID-VkImageResolve-srcImage-00271",
-          "text": " If the calling command&#8217;s <code>srcImage</code> is of type <code>VK_IMAGE_TYPE_1D</code>, then <code>srcOffset.y</code> <strong class=\"purple\">must</strong> be <code>0</code> and <code>extent.height</code> <strong class=\"purple\">must</strong> be <code>1</code>."
-        },
-        {
-          "vuid": "VUID-VkImageResolve-srcOffset-00272",
-          "text": " <code>srcOffset.z</code> and <span class=\"eq\">(<code>extent.depth</code> &#43; <code>srcOffset.z</code>)</span> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the source image subresource depth"
-        },
-        {
-          "vuid": "VUID-VkImageResolve-srcImage-00273",
-          "text": " If the calling command&#8217;s <code>srcImage</code> is of type <code>VK_IMAGE_TYPE_1D</code> or <code>VK_IMAGE_TYPE_2D</code>, then <code>srcOffset.z</code> <strong class=\"purple\">must</strong> be <code>0</code> and <code>extent.depth</code> <strong class=\"purple\">must</strong> be <code>1</code>."
-        },
-        {
-          "vuid": "VUID-VkImageResolve-dstOffset-00274",
-          "text": " <code>dstOffset.x</code> and <span class=\"eq\">(<code>extent.width</code> &#43; <code>dstOffset.x</code>)</span> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the destination image subresource width"
-        },
-        {
-          "vuid": "VUID-VkImageResolve-dstOffset-00275",
-          "text": " <code>dstOffset.y</code> and <span class=\"eq\">(<code>extent.height</code> &#43; <code>dstOffset.y</code>)</span> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the destination image subresource height"
-        },
-        {
-          "vuid": "VUID-VkImageResolve-dstImage-00276",
-          "text": " If the calling command&#8217;s <code>dstImage</code> is of type <code>VK_IMAGE_TYPE_1D</code>, then <code>dstOffset.y</code> <strong class=\"purple\">must</strong> be <code>0</code> and <code>extent.height</code> <strong class=\"purple\">must</strong> be <code>1</code>."
-        },
-        {
-          "vuid": "VUID-VkImageResolve-dstOffset-00277",
-          "text": " <code>dstOffset.z</code> and <span class=\"eq\">(<code>extent.depth</code> &#43; <code>dstOffset.z</code>)</span> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the destination image subresource depth"
-        },
-        {
-          "vuid": "VUID-VkImageResolve-dstImage-00278",
-          "text": " If the calling command&#8217;s <code>dstImage</code> is of type <code>VK_IMAGE_TYPE_1D</code> or <code>VK_IMAGE_TYPE_2D</code>, then <code>dstOffset.z</code> <strong class=\"purple\">must</strong> be <code>0</code> and <code>extent.depth</code> <strong class=\"purple\">must</strong> be <code>1</code>."
-        },
-        {
-          "vuid": "VUID-VkImageResolve-srcSubresource-parameter",
-          "text": " <code>srcSubresource</code> <strong class=\"purple\">must</strong> be a valid <code>VkImageSubresourceLayers</code> structure"
-        },
-        {
-          "vuid": "VUID-VkImageResolve-dstSubresource-parameter",
-          "text": " <code>dstSubresource</code> <strong class=\"purple\">must</strong> be a valid <code>VkImageSubresourceLayers</code> structure"
-        }
-      ]
-    },
-    "vkCmdWriteBufferMarkerAMD": {
-      "(VK_AMD_buffer_marker)": [
-        {
-          "vuid": "VUID-vkCmdWriteBufferMarkerAMD-dstOffset-01798",
-          "text": " <code>dstOffset</code> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>dstBuffer</code> minus <code>4</code>."
-        },
-        {
-          "vuid": "VUID-vkCmdWriteBufferMarkerAMD-dstBuffer-01799",
-          "text": " <code>dstBuffer</code> <strong class=\"purple\">must</strong> have been created with <code>VK_BUFFER_USAGE_TRANSFER_DST_BIT</code> usage flag"
-        },
-        {
-          "vuid": "VUID-vkCmdWriteBufferMarkerAMD-dstBuffer-01800",
-          "text": " If <code>dstBuffer</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
-        },
-        {
-          "vuid": "VUID-vkCmdWriteBufferMarkerAMD-dstOffset-01801",
-          "text": " <code>dstOffset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdWriteBufferMarkerAMD-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdWriteBufferMarkerAMD-pipelineStage-parameter",
-          "text": " <code>pipelineStage</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipelineStageFlagBits\">VkPipelineStageFlagBits</a> value"
-        },
-        {
-          "vuid": "VUID-vkCmdWriteBufferMarkerAMD-dstBuffer-parameter",
-          "text": " <code>dstBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdWriteBufferMarkerAMD-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdWriteBufferMarkerAMD-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support transfer, graphics, or compute operations"
-        },
-        {
-          "vuid": "VUID-vkCmdWriteBufferMarkerAMD-commonparent",
-          "text": " Both of <code>commandBuffer</code>, and <code>dstBuffer</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ]
-    },
-    "VkPipelineInputAssemblyStateCreateInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkPipelineInputAssemblyStateCreateInfo-topology-00428",
-          "text": " If <code>topology</code> is <code>VK_PRIMITIVE_TOPOLOGY_POINT_LIST</code>, <code>VK_PRIMITIVE_TOPOLOGY_LINE_LIST</code>, <code>VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST</code>, <code>VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY</code>, <code>VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY</code> or <code>VK_PRIMITIVE_TOPOLOGY_PATCH_LIST</code>, <code>primitiveRestartEnable</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineInputAssemblyStateCreateInfo-topology-00429",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-geometryShader,geometry shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>topology</code> <strong class=\"purple\">must</strong> not be any of <code>VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY</code>, <code>VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY</code>, <code>VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY</code> or <code>VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineInputAssemblyStateCreateInfo-topology-00430",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-tessellationShader,tessellation shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>topology</code> <strong class=\"purple\">must</strong> not be <code>VK_PRIMITIVE_TOPOLOGY_PATCH_LIST</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineInputAssemblyStateCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineInputAssemblyStateCreateInfo-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineInputAssemblyStateCreateInfo-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineInputAssemblyStateCreateInfo-topology-parameter",
-          "text": " <code>topology</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPrimitiveTopology\">VkPrimitiveTopology</a> value"
-        }
-      ]
-    },
-    "vkCmdBindIndexBuffer": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdBindIndexBuffer-offset-00431",
-          "text": " <code>offset</code> <strong class=\"purple\">must</strong> be less than the size of <code>buffer</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdBindIndexBuffer-offset-00432",
-          "text": " The sum of <code>offset</code> and the address of the range of <code>VkDeviceMemory</code> object that is backing <code>buffer</code>, <strong class=\"purple\">must</strong> be a multiple of the type indicated by <code>indexType</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdBindIndexBuffer-buffer-00433",
-          "text": " <code>buffer</code> <strong class=\"purple\">must</strong> have been created with the <code>VK_BUFFER_USAGE_INDEX_BUFFER_BIT</code> flag"
-        },
-        {
-          "vuid": "VUID-vkCmdBindIndexBuffer-buffer-00434",
-          "text": " If <code>buffer</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
-        },
-        {
-          "vuid": "VUID-vkCmdBindIndexBuffer-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdBindIndexBuffer-buffer-parameter",
-          "text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdBindIndexBuffer-indexType-parameter",
-          "text": " <code>indexType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkIndexType\">VkIndexType</a> value"
-        },
-        {
-          "vuid": "VUID-vkCmdBindIndexBuffer-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdBindIndexBuffer-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
-        },
-        {
-          "vuid": "VUID-vkCmdBindIndexBuffer-commonparent",
-          "text": " Both of <code>buffer</code>, and <code>commandBuffer</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ]
-    },
-    "vkCmdDraw": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdDraw-renderPass-00435",
-          "text": " The current render pass <strong class=\"purple\">must</strong> be &amp;amp;lt;&amp;amp;lt;renderpass-compatibility,compatible&amp;amp;gt;&amp;amp;gt; with the <code>renderPass</code> member of the <code>VkGraphicsPipelineCreateInfo</code> structure specified when creating the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>."
-        },
-        {
-          "vuid": "VUID-vkCmdDraw-subpass-00436",
-          "text": " The subpass index of the current render pass <strong class=\"purple\">must</strong> be equal to the <code>subpass</code> member of the <code>VkGraphicsPipelineCreateInfo</code> structure specified when creating the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>."
-        },
-        {
-          "vuid": "VUID-vkCmdDraw-None-00437",
-          "text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, with a <code>VkPipelineLayout</code> that is compatible for set <em>n</em>, with the <code>VkPipelineLayout</code> used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdDraw-None-00438",
-          "text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, a push constant value <strong class=\"purple\">must</strong> have been set for <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, with a <code>VkPipelineLayout</code> that is compatible for push constants, with the <code>VkPipelineLayout</code> used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdDraw-None-00439",
-          "text": " Descriptors in each bound descriptor set, specified via <code>vkCmdBindDescriptorSets</code>, <strong class=\"purple\">must</strong> be valid if they are statically used by the bound <code>VkPipeline</code> object, specified via <code>vkCmdBindPipeline</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDraw-None-00440",
-          "text": " All vertex input bindings accessed via vertex input variables declared in the vertex shader entry point&#8217;s interface <strong class=\"purple\">must</strong> have valid buffers bound"
-        },
-        {
-          "vuid": "VUID-vkCmdDraw-None-00441",
-          "text": " For a given vertex buffer binding, any attribute data fetched <strong class=\"purple\">must</strong> be entirely contained within the corresponding vertex buffer binding, as described in &amp;amp;lt;&amp;amp;lt;fxvertex-input&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdDraw-None-00442",
-          "text": " A valid graphics pipeline <strong class=\"purple\">must</strong> be bound to the current command buffer with <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDraw-None-00443",
-          "text": " If the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> requires any dynamic state, that state <strong class=\"purple\">must</strong> have been set on the current command buffer"
-        },
-        {
-          "vuid": "VUID-vkCmdDraw-None-00444",
-          "text": " Every input attachment used by the current subpass <strong class=\"purple\">must</strong> be bound to the pipeline via a descriptor set"
-        },
-        {
-          "vuid": "VUID-vkCmdDraw-None-00445",
-          "text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used to sample from any <code>VkImage</code> with a <code>VkImageView</code> of the type <code>VK_IMAGE_VIEW_TYPE_3D</code>, <code>VK_IMAGE_VIEW_TYPE_CUBE</code>, <code>VK_IMAGE_VIEW_TYPE_1D_ARRAY</code>, <code>VK_IMAGE_VIEW_TYPE_2D_ARRAY</code> or <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code>, in any shader stage"
-        },
-        {
-          "vuid": "VUID-vkCmdDraw-None-00446",
-          "text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used with any of the SPIR-V <code>OpImageSample*</code> or <code>OpImageSparseSample*</code> instructions with <code>ImplicitLod</code>, <code>Dref</code> or <code>Proj</code> in their name, in any shader stage"
-        },
-        {
-          "vuid": "VUID-vkCmdDraw-None-00447",
-          "text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used with any of the SPIR-V <code>OpImageSample*</code> or <code>OpImageSparseSample*</code> instructions that includes a LOD bias or any offset values, in any shader stage"
-        },
-        {
-          "vuid": "VUID-vkCmdDraw-None-00448",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
-        },
-        {
-          "vuid": "VUID-vkCmdDraw-None-00449",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
-        },
-        {
-          "vuid": "VUID-vkCmdDraw-linearTilingFeatures-00450",
-          "text": " Any <code>VkImageView</code> being sampled with <code>VK_FILTER_LINEAR</code> as a result of this command <strong class=\"purple\">must</strong> be of a format which supports linear filtering, as specified by the <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT</code> flag in <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> (for a linear image) or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code>(for an optimally tiled image) returned by <code>vkGetPhysicalDeviceFormatProperties</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDraw-None-01499",
-          "text": " Image subresources used as attachments in the current render pass <strong class=\"purple\">must</strong> not be accessed in any way other than as an attachment by this command."
-        },
-        {
-          "vuid": "VUID-vkCmdDraw-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdDraw-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdDraw-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
-        },
-        {
-          "vuid": "VUID-vkCmdDraw-renderpass",
-          "text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
-        }
-      ],
-      "(VK_IMG_filter_cubic)": [
-        {
-          "vuid": "VUID-vkCmdDraw-linearTilingFeatures-00451",
-          "text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_IMG</code> as a result of this command <strong class=\"purple\">must</strong> be of a format which supports cubic filtering, as specified by the <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG</code> flag in <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> (for a linear image) or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code>(for an optimally tiled image) returned by <code>vkGetPhysicalDeviceFormatProperties</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDraw-None-00452",
-          "text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_IMG</code> as a result of this command <strong class=\"purple\">must</strong> not have a <a href=\"#VkImageViewType\">VkImageViewType</a> of <code>VK_IMAGE_VIEW_TYPE_3D</code>, <code>VK_IMAGE_VIEW_TYPE_CUBE</code>, or <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_multiview)": [
-        {
-          "vuid": "VUID-vkCmdDraw-maxMultiviewInstanceIndex-00453",
-          "text": " If the draw is recorded in a render pass instance with multiview enabled, the maximum instance index <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkPhysicalDeviceMultiviewProperties\">VkPhysicalDeviceMultiviewProperties</a>::<code>maxMultiviewInstanceIndex</code>."
-        }
-      ],
-      "(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-vkCmdDraw-commandBuffer-01850",
-          "text": " If <code>commandBuffer</code> is an unprotected command buffer, and any pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> reads from or writes to any image or buffer, that image or buffer <strong class=\"purple\">must</strong> not be a protected image or protected buffer."
-        },
-        {
-          "vuid": "VUID-vkCmdDraw-commandBuffer-01851",
-          "text": " If <code>commandBuffer</code> is a protected command buffer, and any pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> writes to any image or buffer, that image or buffer <strong class=\"purple\">must</strong> not be an unprotected image or unprotected buffer."
-        },
-        {
-          "vuid": "VUID-vkCmdDraw-commandBuffer-01852",
-          "text": " If <code>commandBuffer</code> is a protected command buffer, and any pipeline stage other than the framebuffer-space pipeline stages in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> reads from or writes to any image or buffer, the image or buffer <strong class=\"purple\">must</strong> not be a protected image or protected buffer."
-        }
-      ],
-      "(VK_EXT_sample_locations)": [
-        {
-          "vuid": "VUID-vkCmdDraw-sampleLocationsEnable-01512",
-          "text": " If the bound graphics pipeline was created with <a href=\"#VkPipelineSampleLocationsStateCreateInfoEXT\">VkPipelineSampleLocationsStateCreateInfoEXT</a>::<code>sampleLocationsEnable</code> set to <code>VK_TRUE</code> and the current subpass has a depth/stencil attachment, then that attachment <strong class=\"purple\">must</strong> have been created with the <code>VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT</code> bit set"
-        }
-      ]
-    },
-    "vkCmdDrawIndexed": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdDrawIndexed-renderPass-00454",
-          "text": " The current render pass <strong class=\"purple\">must</strong> be &amp;amp;lt;&amp;amp;lt;renderpass-compatibility,compatible&amp;amp;gt;&amp;amp;gt; with the <code>renderPass</code> member of the <code>VkGraphicsPipelineCreateInfo</code> structure specified when creating the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>."
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexed-subpass-00455",
-          "text": " The subpass index of the current render pass <strong class=\"purple\">must</strong> be equal to the <code>subpass</code> member of the <code>VkGraphicsPipelineCreateInfo</code> structure specified when creating the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>."
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexed-None-00456",
-          "text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, with a <code>VkPipelineLayout</code> that is compatible for set <em>n</em>, with the <code>VkPipelineLayout</code> used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexed-None-00457",
-          "text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, a push constant value <strong class=\"purple\">must</strong> have been set for <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, with a <code>VkPipelineLayout</code> that is compatible for push constants, with the <code>VkPipelineLayout</code> used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexed-None-00458",
-          "text": " Descriptors in each bound descriptor set, specified via <code>vkCmdBindDescriptorSets</code>, <strong class=\"purple\">must</strong> be valid if they are statically used by the bound <code>VkPipeline</code> object, specified via <code>vkCmdBindPipeline</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexed-None-00459",
-          "text": " All vertex input bindings accessed via vertex input variables declared in the vertex shader entry point&#8217;s interface <strong class=\"purple\">must</strong> have valid buffers bound"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexed-None-00460",
-          "text": " For a given vertex buffer binding, any attribute data fetched <strong class=\"purple\">must</strong> be entirely contained within the corresponding vertex buffer binding, as described in &amp;amp;lt;&amp;amp;lt;fxvertex-input&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexed-None-00461",
-          "text": " A valid graphics pipeline <strong class=\"purple\">must</strong> be bound to the current command buffer with <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexed-None-00462",
-          "text": " If the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> requires any dynamic state, that state <strong class=\"purple\">must</strong> have been set on the current command buffer"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexed-indexSize-00463",
-          "text": " <span class=\"eq\">(<code>indexSize</code> * (<code>firstIndex</code> &#43; <code>indexCount</code>) &#43; <code>offset</code>)</span> <strong class=\"purple\">must</strong> be less than or equal to the size of the bound index buffer, with indexSize being based on the type specified by <code>indexType</code>, where the index buffer, <code>indexType</code>, and <code>offset</code> are specified via <code>vkCmdBindIndexBuffer</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexed-None-00464",
-          "text": " Every input attachment used by the current subpass <strong class=\"purple\">must</strong> be bound to the pipeline via a descriptor set"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexed-None-00465",
-          "text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used to sample from any <code>VkImage</code> with a <code>VkImageView</code> of the type <code>VK_IMAGE_VIEW_TYPE_3D</code>, <code>VK_IMAGE_VIEW_TYPE_CUBE</code>, <code>VK_IMAGE_VIEW_TYPE_1D_ARRAY</code>, <code>VK_IMAGE_VIEW_TYPE_2D_ARRAY</code> or <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code>, in any shader stage"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexed-None-00466",
-          "text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used with any of the SPIR-V <code>OpImageSample*</code> or <code>OpImageSparseSample*</code> instructions with <code>ImplicitLod</code>, <code>Dref</code> or <code>Proj</code> in their name, in any shader stage"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexed-None-00467",
-          "text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used with any of the SPIR-V <code>OpImageSample*</code> or <code>OpImageSparseSample*</code> instructions that includes a LOD bias or any offset values, in any shader stage"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexed-None-00468",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexed-None-00469",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexed-linearTilingFeatures-00470",
-          "text": " Any <code>VkImageView</code> being sampled with <code>VK_FILTER_LINEAR</code> as a result of this command <strong class=\"purple\">must</strong> be of a format which supports linear filtering, as specified by the <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT</code> flag in <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> (for a linear image) or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code>(for an optimally tiled image) returned by <code>vkGetPhysicalDeviceFormatProperties</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexed-None-01500",
-          "text": " Image subresources used as attachments in the current render pass <strong class=\"purple\">must</strong> not be accessed in any way other than as an attachment by this command."
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexed-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexed-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexed-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexed-renderpass",
-          "text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
-        }
-      ],
-      "(VK_IMG_filter_cubic)": [
-        {
-          "vuid": "VUID-vkCmdDrawIndexed-linearTilingFeatures-00471",
-          "text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_IMG</code> as a result of this command <strong class=\"purple\">must</strong> be of a format which supports cubic filtering, as specified by the <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG</code> flag in <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> (for a linear image) or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code>(for an optimally tiled image) returned by <code>vkGetPhysicalDeviceFormatProperties</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexed-None-00472",
-          "text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_IMG</code> as a result of this command <strong class=\"purple\">must</strong> not have a <a href=\"#VkImageViewType\">VkImageViewType</a> of <code>VK_IMAGE_VIEW_TYPE_3D</code>, <code>VK_IMAGE_VIEW_TYPE_CUBE</code>, or <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_multiview)": [
-        {
-          "vuid": "VUID-vkCmdDrawIndexed-maxMultiviewInstanceIndex-00473",
-          "text": " If the draw is recorded in a render pass instance with multiview enabled, the maximum instance index <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkPhysicalDeviceMultiviewProperties\">VkPhysicalDeviceMultiviewProperties</a>::<code>maxMultiviewInstanceIndex</code>."
-        }
-      ],
-      "(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-vkCmdDrawIndexed-commandBuffer-01853",
-          "text": " If <code>commandBuffer</code> is an unprotected command buffer, and any pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> reads from or writes to any image or buffer, that image or buffer <strong class=\"purple\">must</strong> not be a protected image or protected buffer."
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexed-commandBuffer-01854",
-          "text": " If <code>commandBuffer</code> is a protected command buffer, and any pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> writes to any image or buffer, that image or buffer <strong class=\"purple\">must</strong> not be an unprotected image or unprotected buffer."
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexed-commandBuffer-01855",
-          "text": " If <code>commandBuffer</code> is a protected command buffer, and any pipeline stage other than the framebuffer-space pipeline stages in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> reads from or writes to any image or buffer, the image or buffer <strong class=\"purple\">must</strong> not be a protected image or protected buffer."
-        }
-      ],
-      "(VK_EXT_sample_locations)": [
-        {
-          "vuid": "VUID-vkCmdDrawIndexed-sampleLocationsEnable-01513",
-          "text": " If the bound graphics pipeline was created with <a href=\"#VkPipelineSampleLocationsStateCreateInfoEXT\">VkPipelineSampleLocationsStateCreateInfoEXT</a>::<code>sampleLocationsEnable</code> set to <code>VK_TRUE</code> and the current subpass has a depth/stencil attachment, then that attachment <strong class=\"purple\">must</strong> have been created with the <code>VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT</code> bit set"
-        }
-      ]
-    },
-    "vkCmdDrawIndirect": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-buffer-00474",
-          "text": " If <code>buffer</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-buffer-01660",
-          "text": " <code>buffer</code> <strong class=\"purple\">must</strong> have been created with the <code>VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT</code> bit set"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-offset-00475",
-          "text": " <code>offset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-drawCount-00476",
-          "text": " If <code>drawCount</code> is greater than <code>1</code>, <code>stride</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code> and <strong class=\"purple\">must</strong> be greater than or equal to <code>sizeof</code>(<code>VkDrawIndirectCommand</code>)"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-drawCount-00477",
-          "text": " If the <a href=\"#features-features-multiDrawIndirect\">multi-draw indirect</a> feature is not enabled, <code>drawCount</code> <strong class=\"purple\">must</strong> be <code>0</code> or <code>1</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-firstInstance-00478",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-drawIndirectFirstInstance,drawIndirectFirstInstance&amp;amp;gt;&amp;amp;gt; feature is not enabled, all the <code>firstInstance</code> members of the <code>VkDrawIndirectCommand</code> structures accessed by this command <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-renderPass-00479",
-          "text": " The current render pass <strong class=\"purple\">must</strong> be &amp;amp;lt;&amp;amp;lt;renderpass-compatibility,compatible&amp;amp;gt;&amp;amp;gt; with the <code>renderPass</code> member of the <code>VkGraphicsPipelineCreateInfo</code> structure specified when creating the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>."
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-subpass-00480",
-          "text": " The subpass index of the current render pass <strong class=\"purple\">must</strong> be equal to the <code>subpass</code> member of the <code>VkGraphicsPipelineCreateInfo</code> structure specified when creating the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>."
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-None-00481",
-          "text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, with a <code>VkPipelineLayout</code> that is compatible for set <em>n</em>, with the <code>VkPipelineLayout</code> used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-None-00482",
-          "text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, a push constant value <strong class=\"purple\">must</strong> have been set for <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, with a <code>VkPipelineLayout</code> that is compatible for push constants, with the <code>VkPipelineLayout</code> used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-None-00483",
-          "text": " Descriptors in each bound descriptor set, specified via <code>vkCmdBindDescriptorSets</code>, <strong class=\"purple\">must</strong> be valid if they are statically used by the bound <code>VkPipeline</code> object, specified via <code>vkCmdBindPipeline</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-None-00484",
-          "text": " All vertex input bindings accessed via vertex input variables declared in the vertex shader entry point&#8217;s interface <strong class=\"purple\">must</strong> have valid buffers bound"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-None-00485",
-          "text": " A valid graphics pipeline <strong class=\"purple\">must</strong> be bound to the current command buffer with <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-None-00486",
-          "text": " If the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> requires any dynamic state, that state <strong class=\"purple\">must</strong> have been set on the current command buffer"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-drawCount-00487",
-          "text": " If <code>drawCount</code> is equal to <code>1</code>, <span class=\"eq\">(<code>offset</code> &#43; <code>sizeof</code>(<a href=\"#VkDrawIndirectCommand\">VkDrawIndirectCommand</a>))</span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-drawCount-00488",
-          "text": " If <code>drawCount</code> is greater than <code>1</code>, <span class=\"eq\">(<code>stride</code> {times} (<code>drawCount</code> - 1) &#43; <code>offset</code> &#43; <code>sizeof</code>(<a href=\"#VkDrawIndirectCommand\">VkDrawIndirectCommand</a>))</span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-drawCount-00489",
-          "text": " <code>drawCount</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxDrawIndirectCount</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-None-00490",
-          "text": " Every input attachment used by the current subpass <strong class=\"purple\">must</strong> be bound to the pipeline via a descriptor set"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-None-00491",
-          "text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used to sample from any <code>VkImage</code> with a <code>VkImageView</code> of the type <code>VK_IMAGE_VIEW_TYPE_3D</code>, <code>VK_IMAGE_VIEW_TYPE_CUBE</code>, <code>VK_IMAGE_VIEW_TYPE_1D_ARRAY</code>, <code>VK_IMAGE_VIEW_TYPE_2D_ARRAY</code> or <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code>, in any shader stage"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-None-00492",
-          "text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used with any of the SPIR-V <code>OpImageSample*</code> or <code>OpImageSparseSample*</code> instructions with <code>ImplicitLod</code>, <code>Dref</code> or <code>Proj</code> in their name, in any shader stage"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-None-00493",
-          "text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used with any of the SPIR-V <code>OpImageSample*</code> or <code>OpImageSparseSample*</code> instructions that includes a LOD bias or any offset values, in any shader stage"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-None-00494",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-None-00495",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-linearTilingFeatures-00496",
-          "text": " Any <code>VkImageView</code> being sampled with <code>VK_FILTER_LINEAR</code> as a result of this command <strong class=\"purple\">must</strong> be of a format which supports linear filtering, as specified by the <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT</code> flag in <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> (for a linear image) or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code>(for an optimally tiled image) returned by <code>vkGetPhysicalDeviceFormatProperties</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-None-01501",
-          "text": " Image subresources used as attachments in the current render pass <strong class=\"purple\">must</strong> not be accessed in any way other than as an attachment by this command."
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-buffer-parameter",
-          "text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-renderpass",
-          "text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-commonparent",
-          "text": " Both of <code>buffer</code>, and <code>commandBuffer</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ],
-      "(VK_IMG_filter_cubic)": [
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-linearTilingFeatures-00497",
-          "text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_IMG</code> as a result of this command <strong class=\"purple\">must</strong> be of a format which supports cubic filtering, as specified by the <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG</code> flag in <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> (for a linear image) or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code>(for an optimally tiled image) returned by <code>vkGetPhysicalDeviceFormatProperties</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-None-00498",
-          "text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_IMG</code> as a result of this command <strong class=\"purple\">must</strong> not have a <a href=\"#VkImageViewType\">VkImageViewType</a> of <code>VK_IMAGE_VIEW_TYPE_3D</code>, <code>VK_IMAGE_VIEW_TYPE_CUBE</code>, or <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_multiview)": [
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-maxMultiviewInstanceIndex-00499",
-          "text": " If the draw is recorded in a render pass instance with multiview enabled, the maximum instance index <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkPhysicalDeviceMultiviewProperties\">VkPhysicalDeviceMultiviewProperties</a>::<code>maxMultiviewInstanceIndex</code>."
-        }
-      ],
-      "(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-commandBuffer-01856",
-          "text": " If <code>commandBuffer</code> is an unprotected command buffer, and any pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> reads from or writes to any image or buffer, that image or buffer <strong class=\"purple\">must</strong> not be a protected image or protected buffer."
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-commandBuffer-01857",
-          "text": " If <code>commandBuffer</code> is a protected command buffer, and any pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> writes to any image or buffer, that image or buffer <strong class=\"purple\">must</strong> not be an unprotected image or unprotected buffer."
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-commandBuffer-01858",
-          "text": " If <code>commandBuffer</code> is a protected command buffer, and any pipeline stage other than the framebuffer-space pipeline stages in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> reads from or writes to any image or buffer, the image or buffer <strong class=\"purple\">must</strong> not be a protected image or protected buffer."
-        }
-      ],
-      "(VK_EXT_sample_locations)": [
-        {
-          "vuid": "VUID-vkCmdDrawIndirect-sampleLocationsEnable-01514",
-          "text": " If the bound graphics pipeline was created with <a href=\"#VkPipelineSampleLocationsStateCreateInfoEXT\">VkPipelineSampleLocationsStateCreateInfoEXT</a>::<code>sampleLocationsEnable</code> set to <code>VK_TRUE</code> and the current subpass has a depth/stencil attachment, then that attachment <strong class=\"purple\">must</strong> have been created with the <code>VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT</code> bit set"
-        }
-      ]
-    },
-    "VkDrawIndirectCommand": {
-      "core": [
-        {
-          "vuid": "VUID-VkDrawIndirectCommand-None-00500",
-          "text": " For a given vertex buffer binding, any attribute data fetched <strong class=\"purple\">must</strong> be entirely contained within the corresponding vertex buffer binding, as described in &amp;amp;lt;&amp;amp;lt;fxvertex-input&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-VkDrawIndirectCommand-firstInstance-00501",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-drawIndirectFirstInstance,drawIndirectFirstInstance&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>firstInstance</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        }
-      ]
-    },
-    "vkCmdDrawIndirectCountAMD": {
-      "(VK_AMD_draw_indirect_count)": [
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-buffer-01661",
-          "text": " If <code>buffer</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-buffer-01662",
-          "text": " <code>buffer</code> <strong class=\"purple\">must</strong> have been created with the <code>VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT</code> bit set"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-countBuffer-01663",
-          "text": " If <code>countBuffer</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-countBuffer-01664",
-          "text": " <code>countBuffer</code> <strong class=\"purple\">must</strong> have been created with the <code>VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT</code> bit set"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-offset-00502",
-          "text": " <code>offset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-countBufferOffset-00503",
-          "text": " <code>countBufferOffset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-stride-00504",
-          "text": " <code>stride</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code> and <strong class=\"purple\">must</strong> be greater than or equal to <code>sizeof</code>(<code>VkDrawIndirectCommand</code>)"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-maxDrawCount-00505",
-          "text": " If <code>maxDrawCount</code> is greater than or equal to <code>1</code>, <span class=\"eq\">(<code>stride</code> {times} (<code>maxDrawCount</code> - 1) &#43; <code>offset</code> &#43; <code>sizeof</code>(<code>VkDrawIndirectCommand</code>))</span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-firstInstance-00506",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-drawIndirectFirstInstance,drawIndirectFirstInstance&amp;amp;gt;&amp;amp;gt; feature is not enabled, all the <code>firstInstance</code> members of the <code>VkDrawIndirectCommand</code> structures accessed by this command <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-renderPass-00507",
-          "text": " The current render pass <strong class=\"purple\">must</strong> be &amp;amp;lt;&amp;amp;lt;renderpass-compatibility,compatible&amp;amp;gt;&amp;amp;gt; with the <code>renderPass</code> member of the <code>VkGraphicsPipelineCreateInfo</code> structure specified when creating the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>."
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-subpass-00508",
-          "text": " The subpass index of the current render pass <strong class=\"purple\">must</strong> be equal to the <code>subpass</code> member of the <code>VkGraphicsPipelineCreateInfo</code> structure specified when creating the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>."
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-None-00509",
-          "text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, with a <code>VkPipelineLayout</code> that is compatible for set <em>n</em>, with the <code>VkPipelineLayout</code> used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-None-00510",
-          "text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, a push constant value <strong class=\"purple\">must</strong> have been set for <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, with a <code>VkPipelineLayout</code> that is compatible for push constants, with the <code>VkPipelineLayout</code> used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-None-00511",
-          "text": " Descriptors in each bound descriptor set, specified via <code>vkCmdBindDescriptorSets</code>, <strong class=\"purple\">must</strong> be valid if they are statically used by the bound <code>VkPipeline</code> object, specified via <code>vkCmdBindPipeline</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-None-00512",
-          "text": " All vertex input bindings accessed via vertex input variables declared in the vertex shader entry point&#8217;s interface <strong class=\"purple\">must</strong> have valid buffers bound"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-None-00513",
-          "text": " A valid graphics pipeline <strong class=\"purple\">must</strong> be bound to the current command buffer with <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-None-00514",
-          "text": " If the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> requires any dynamic state, that state <strong class=\"purple\">must</strong> have been set on the current command buffer"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-countBuffer-00515",
-          "text": " If the count stored in <code>countBuffer</code> is equal to <code>1</code>, <span class=\"eq\">(<code>offset</code> &#43; <code>sizeof</code>(<code>VkDrawIndirectCommand</code>))</span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-countBuffer-00516",
-          "text": " If the count stored in <code>countBuffer</code> is greater than <code>1</code>, <span class=\"eq\">(<code>stride</code> {times} (<code>drawCount</code> - 1) &#43; <code>offset</code> &#43; <code>sizeof</code>(<code>VkDrawIndirectCommand</code>))</span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-countBuffer-00517",
-          "text": " The count stored in <code>countBuffer</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxDrawIndirectCount</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-None-00518",
-          "text": " Every input attachment used by the current subpass <strong class=\"purple\">must</strong> be bound to the pipeline via a descriptor set"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-None-00519",
-          "text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used to sample from any <code>VkImage</code> with a <code>VkImageView</code> of the type <code>VK_IMAGE_VIEW_TYPE_3D</code>, <code>VK_IMAGE_VIEW_TYPE_CUBE</code>, <code>VK_IMAGE_VIEW_TYPE_1D_ARRAY</code>, <code>VK_IMAGE_VIEW_TYPE_2D_ARRAY</code> or <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code>, in any shader stage"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-None-00520",
-          "text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used with any of the SPIR-V <code>OpImageSample*</code> or <code>OpImageSparseSample*</code> instructions with <code>ImplicitLod</code>, <code>Dref</code> or <code>Proj</code> in their name, in any shader stage"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-None-00521",
-          "text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used with any of the SPIR-V <code>OpImageSample*</code> or <code>OpImageSparseSample*</code> instructions that includes a LOD bias or any offset values, in any shader stage"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-None-00522",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-None-00523",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-linearTilingFeatures-00524",
-          "text": " Any <code>VkImageView</code> being sampled with <code>VK_FILTER_LINEAR</code> as a result of this command <strong class=\"purple\">must</strong> be of a format which supports linear filtering, as specified by the <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT</code> flag in <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> (for a linear image) or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code>(for an optimally tiled image) returned by <code>vkGetPhysicalDeviceFormatProperties</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-None-01502",
-          "text": " Image subresources used as attachments in the current render pass <strong class=\"purple\">must</strong> not be accessed in any way other than as an attachment by this command."
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-buffer-parameter",
-          "text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-countBuffer-parameter",
-          "text": " <code>countBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-renderpass",
-          "text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-commonparent",
-          "text": " Each of <code>buffer</code>, <code>commandBuffer</code>, and <code>countBuffer</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ],
-      "(VK_AMD_draw_indirect_count)+(VK_VERSION_1_1,VK_KHR_multiview)": [
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-maxMultiviewInstanceIndex-00525",
-          "text": " If the draw is recorded in a render pass instance with multiview enabled, the maximum instance index <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkPhysicalDeviceMultiviewProperties\">VkPhysicalDeviceMultiviewProperties</a>::<code>maxMultiviewInstanceIndex</code>."
-        }
-      ],
-      "(VK_AMD_draw_indirect_count)+(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-commandBuffer-01859",
-          "text": " If <code>commandBuffer</code> is an unprotected command buffer, and any pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> reads from or writes to any image or buffer, that image or buffer <strong class=\"purple\">must</strong> not be a protected image or protected buffer."
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-commandBuffer-01860",
-          "text": " If <code>commandBuffer</code> is a protected command buffer, and any pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> writes to any image or buffer, that image or buffer <strong class=\"purple\">must</strong> not be an unprotected image or unprotected buffer."
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-commandBuffer-01861",
-          "text": " If <code>commandBuffer</code> is a protected command buffer, and any pipeline stage other than the framebuffer-space pipeline stages in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> reads from or writes to any image or buffer, the image or buffer <strong class=\"purple\">must</strong> not be a protected image or protected buffer."
-        }
-      ],
-      "(VK_AMD_draw_indirect_count)+(VK_EXT_sample_locations)": [
-        {
-          "vuid": "VUID-vkCmdDrawIndirectCountAMD-sampleLocationsEnable-01515",
-          "text": " If the bound graphics pipeline was created with <a href=\"#VkPipelineSampleLocationsStateCreateInfoEXT\">VkPipelineSampleLocationsStateCreateInfoEXT</a>::<code>sampleLocationsEnable</code> set to <code>VK_TRUE</code> and the current subpass has a depth/stencil attachment, then that attachment <strong class=\"purple\">must</strong> have been created with the <code>VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT</code> bit set"
-        }
-      ]
-    },
-    "vkCmdDrawIndexedIndirect": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-buffer-00526",
-          "text": " If <code>buffer</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-buffer-01665",
-          "text": " <code>buffer</code> <strong class=\"purple\">must</strong> have been created with the <code>VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT</code> bit set"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-offset-00527",
-          "text": " <code>offset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-drawCount-00528",
-          "text": " If <code>drawCount</code> is greater than <code>1</code>, <code>stride</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code> and <strong class=\"purple\">must</strong> be greater than or equal to <code>sizeof</code>(<code>VkDrawIndexedIndirectCommand</code>)"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-drawCount-00529",
-          "text": " If the <a href=\"#features-features-multiDrawIndirect\">multi-draw indirect</a> feature is not enabled, <code>drawCount</code> <strong class=\"purple\">must</strong> be <code>0</code> or <code>1</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-firstInstance-00530",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-drawIndirectFirstInstance,drawIndirectFirstInstance&amp;amp;gt;&amp;amp;gt; feature is not enabled, all the <code>firstInstance</code> members of the <code>VkDrawIndexedIndirectCommand</code> structures accessed by this command <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-renderPass-00531",
-          "text": " The current render pass <strong class=\"purple\">must</strong> be &amp;amp;lt;&amp;amp;lt;renderpass-compatibility,compatible&amp;amp;gt;&amp;amp;gt; with the <code>renderPass</code> member of the <code>VkGraphicsPipelineCreateInfo</code> structure specified when creating the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>."
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-subpass-00532",
-          "text": " The subpass index of the current render pass <strong class=\"purple\">must</strong> be equal to the <code>subpass</code> member of the <code>VkGraphicsPipelineCreateInfo</code> structure specified when creating the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>."
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-None-00533",
-          "text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, with a <code>VkPipelineLayout</code> that is compatible for set <em>n</em>, with the <code>VkPipelineLayout</code> used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-None-00534",
-          "text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, a push constant value <strong class=\"purple\">must</strong> have been set for <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, with a <code>VkPipelineLayout</code> that is compatible for push constants, with the <code>VkPipelineLayout</code> used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-None-00535",
-          "text": " Descriptors in each bound descriptor set, specified via <code>vkCmdBindDescriptorSets</code>, <strong class=\"purple\">must</strong> be valid if they are statically used by the bound <code>VkPipeline</code> object, specified via <code>vkCmdBindPipeline</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-None-00536",
-          "text": " All vertex input bindings accessed via vertex input variables declared in the vertex shader entry point&#8217;s interface <strong class=\"purple\">must</strong> have valid buffers bound"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-None-00537",
-          "text": " A valid graphics pipeline <strong class=\"purple\">must</strong> be bound to the current command buffer with <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-None-00538",
-          "text": " If the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> requires any dynamic state, that state <strong class=\"purple\">must</strong> have been set on the current command buffer"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-drawCount-00539",
-          "text": " If <code>drawCount</code> is equal to <code>1</code>, <span class=\"eq\">(<code>offset</code> &#43; <code>sizeof</code>(<code>VkDrawIndexedIndirectCommand</code>))</span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-drawCount-00540",
-          "text": " If <code>drawCount</code> is greater than <code>1</code>, <span class=\"eq\">(<code>stride</code> {times} (<code>drawCount</code> - 1) &#43; <code>offset</code> &#43; <code>sizeof</code>(<code>VkDrawIndexedIndirectCommand</code>))</span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-drawCount-00541",
-          "text": " <code>drawCount</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxDrawIndirectCount</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-None-00542",
-          "text": " Every input attachment used by the current subpass <strong class=\"purple\">must</strong> be bound to the pipeline via a descriptor set"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-None-00543",
-          "text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used to sample from any <code>VkImage</code> with a <code>VkImageView</code> of the type <code>VK_IMAGE_VIEW_TYPE_3D</code>, <code>VK_IMAGE_VIEW_TYPE_CUBE</code>, <code>VK_IMAGE_VIEW_TYPE_1D_ARRAY</code>, <code>VK_IMAGE_VIEW_TYPE_2D_ARRAY</code> or <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code>, in any shader stage"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-None-00544",
-          "text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used with any of the SPIR-V <code>OpImageSample*</code> or <code>OpImageSparseSample*</code> instructions with <code>ImplicitLod</code>, <code>Dref</code> or <code>Proj</code> in their name, in any shader stage"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-None-00545",
-          "text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used with any of the SPIR-V <code>OpImageSample*</code> or <code>OpImageSparseSample*</code> instructions that includes a LOD bias or any offset values, in any shader stage"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-None-00546",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-None-00547",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-linearTilingFeatures-00548",
-          "text": " Any <code>VkImageView</code> being sampled with <code>VK_FILTER_LINEAR</code> as a result of this command <strong class=\"purple\">must</strong> be of a format which supports linear filtering, as specified by the <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT</code> flag in <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> (for a linear image) or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code>(for an optimally tiled image) returned by <code>vkGetPhysicalDeviceFormatProperties</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-None-01503",
-          "text": " Image subresources used as attachments in the current render pass <strong class=\"purple\">must</strong> not be accessed in any way other than as an attachment by this command."
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-buffer-parameter",
-          "text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-renderpass",
-          "text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-commonparent",
-          "text": " Both of <code>buffer</code>, and <code>commandBuffer</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ],
-      "(VK_IMG_filter_cubic)": [
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-linearTilingFeatures-00549",
-          "text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_IMG</code> as a result of this command <strong class=\"purple\">must</strong> be of a format which supports cubic filtering, as specified by the <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG</code> flag in <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> (for a linear image) or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code>(for an optimally tiled image) returned by <code>vkGetPhysicalDeviceFormatProperties</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-None-00550",
-          "text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_IMG</code> as a result of this command <strong class=\"purple\">must</strong> not have a <a href=\"#VkImageViewType\">VkImageViewType</a> of <code>VK_IMAGE_VIEW_TYPE_3D</code>, <code>VK_IMAGE_VIEW_TYPE_CUBE</code>, or <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_multiview)": [
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-maxMultiviewInstanceIndex-00551",
-          "text": " If the draw is recorded in a render pass instance with multiview enabled, the maximum instance index <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkPhysicalDeviceMultiviewProperties\">VkPhysicalDeviceMultiviewProperties</a>::<code>maxMultiviewInstanceIndex</code>."
-        }
-      ],
-      "(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-commandBuffer-01862",
-          "text": " If <code>commandBuffer</code> is an unprotected command buffer, and any pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> reads from or writes to any image or buffer, that image or buffer <strong class=\"purple\">must</strong> not be a protected image or protected buffer."
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-commandBuffer-01863",
-          "text": " If <code>commandBuffer</code> is a protected command buffer, and any pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> writes to any image or buffer, that image or buffer <strong class=\"purple\">must</strong> not be an unprotected image or unprotected buffer."
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-commandBuffer-01864",
-          "text": " If <code>commandBuffer</code> is a protected command buffer, and any pipeline stage other than the framebuffer-space pipeline stages in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> reads from or writes to any image or buffer, the image or buffer <strong class=\"purple\">must</strong> not be a protected image or protected buffer."
-        }
-      ],
-      "(VK_EXT_sample_locations)": [
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirect-sampleLocationsEnable-01516",
-          "text": " If the bound graphics pipeline was created with <a href=\"#VkPipelineSampleLocationsStateCreateInfoEXT\">VkPipelineSampleLocationsStateCreateInfoEXT</a>::<code>sampleLocationsEnable</code> set to <code>VK_TRUE</code> and the current subpass has a depth/stencil attachment, then that attachment <strong class=\"purple\">must</strong> have been created with the <code>VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT</code> bit set"
-        }
-      ]
-    },
-    "VkDrawIndexedIndirectCommand": {
-      "core": [
-        {
-          "vuid": "VUID-VkDrawIndexedIndirectCommand-None-00552",
-          "text": " For a given vertex buffer binding, any attribute data fetched <strong class=\"purple\">must</strong> be entirely contained within the corresponding vertex buffer binding, as described in &amp;amp;lt;&amp;amp;lt;fxvertex-input&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-VkDrawIndexedIndirectCommand-indexSize-00553",
-          "text": " <span class=\"eq\">(<code>indexSize</code> * (<code>firstIndex</code> &#43; <code>indexCount</code>) &#43; <code>offset</code>)</span> <strong class=\"purple\">must</strong> be less than or equal to the size of the bound index buffer, with <code>indexSize</code> being based on the type specified by <code>indexType</code>, where the index buffer, <code>indexType</code>, and <code>offset</code> are specified via <code>vkCmdBindIndexBuffer</code>"
-        },
-        {
-          "vuid": "VUID-VkDrawIndexedIndirectCommand-firstInstance-00554",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-drawIndirectFirstInstance,drawIndirectFirstInstance&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>firstInstance</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        }
-      ]
-    },
-    "vkCmdDrawIndexedIndirectCountAMD": {
-      "(VK_AMD_draw_indirect_count)": [
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-buffer-01666",
-          "text": " If <code>buffer</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-buffer-01667",
-          "text": " <code>buffer</code> <strong class=\"purple\">must</strong> have been created with the <code>VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT</code> bit set"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-countBuffer-01668",
-          "text": " If <code>countBuffer</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-countBuffer-01669",
-          "text": " <code>countBuffer</code> <strong class=\"purple\">must</strong> have been created with the <code>VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT</code> bit set"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-offset-00555",
-          "text": " <code>offset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-countBufferOffset-00556",
-          "text": " <code>countBufferOffset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-stride-00557",
-          "text": " <code>stride</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code> and <strong class=\"purple\">must</strong> be greater than or equal to <code>sizeof</code>(<code>VkDrawIndirectCommand</code>)"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-maxDrawCount-00558",
-          "text": " If <code>maxDrawCount</code> is greater than or equal to <code>1</code>, <span class=\"eq\">(<code>stride</code> {times} (<code>maxDrawCount</code> - 1) &#43; <code>offset</code> &#43; <code>sizeof</code>(<code>VkDrawIndirectCommand</code>))</span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-firstInstance-00559",
-          "text": " If the <a href=\"#features-features-drawIndirectFirstInstance\">drawIndirectFirstInstance</a> feature is not enabled, all the <code>firstInstance</code> members of the <code>VkDrawIndexedIndirectCommand</code> structures accessed by this command <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-renderPass-00560",
-          "text": " The current render pass <strong class=\"purple\">must</strong> be &amp;amp;lt;&amp;amp;lt;renderpass-compatibility,compatible&amp;amp;gt;&amp;amp;gt; with the <code>renderPass</code> member of the <code>VkGraphicsPipelineCreateInfo</code> structure specified when creating the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>."
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-subpass-00561",
-          "text": " The subpass index of the current render pass <strong class=\"purple\">must</strong> be equal to the <code>subpass</code> member of the <code>VkGraphicsPipelineCreateInfo</code> structure specified when creating the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>."
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-None-00562",
-          "text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, with a <code>VkPipelineLayout</code> that is compatible for set <em>n</em>, with the <code>VkPipelineLayout</code> used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-None-00563",
-          "text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, a push constant value <strong class=\"purple\">must</strong> have been set for <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, with a <code>VkPipelineLayout</code> that is compatible for push constants, with the <code>VkPipelineLayout</code> used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-None-00564",
-          "text": " Descriptors in each bound descriptor set, specified via <code>vkCmdBindDescriptorSets</code>, <strong class=\"purple\">must</strong> be valid if they are statically used by the bound <code>VkPipeline</code> object, specified via <code>vkCmdBindPipeline</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-None-00565",
-          "text": " All vertex input bindings accessed via vertex input variables declared in the vertex shader entry point&#8217;s interface <strong class=\"purple\">must</strong> have valid buffers bound"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-None-00566",
-          "text": " A valid graphics pipeline <strong class=\"purple\">must</strong> be bound to the current command buffer with <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-None-00567",
-          "text": " If the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> requires any dynamic state, that state <strong class=\"purple\">must</strong> have been set on the current command buffer"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-countBuffer-00568",
-          "text": " If count stored in <code>countBuffer</code> is equal to <code>1</code>, <span class=\"eq\">(<code>offset</code> &#43; <code>sizeof</code>(<code>VkDrawIndexedIndirectCommand</code>))</span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-countBuffer-00569",
-          "text": " If count stored in <code>countBuffer</code> is greater than <code>1</code>, <span class=\"eq\">(<code>stride</code> {times} (<code>drawCount</code> - 1) &#43; <code>offset</code> &#43; <code>sizeof</code>(<code>VkDrawIndexedIndirectCommand</code>))</span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-drawCount-00570",
-          "text": " <code>drawCount</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxDrawIndirectCount</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-None-00571",
-          "text": " Every input attachment used by the current subpass <strong class=\"purple\">must</strong> be bound to the pipeline via a descriptor set"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-None-00572",
-          "text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used to sample from any <code>VkImage</code> with a <code>VkImageView</code> of the type <code>VK_IMAGE_VIEW_TYPE_3D</code>, <code>VK_IMAGE_VIEW_TYPE_CUBE</code>, <code>VK_IMAGE_VIEW_TYPE_1D_ARRAY</code>, <code>VK_IMAGE_VIEW_TYPE_2D_ARRAY</code> or <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code>, in any shader stage"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-None-00573",
-          "text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used with any of the SPIR-V <code>OpImageSample*</code> or <code>OpImageSparseSample*</code> instructions with <code>ImplicitLod</code>, <code>Dref</code> or <code>Proj</code> in their name, in any shader stage"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-None-00574",
-          "text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used with any of the SPIR-V <code>OpImageSample*</code> or <code>OpImageSparseSample*</code> instructions that includes a LOD bias or any offset values, in any shader stage"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-None-00575",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-None-00576",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-linearTilingFeatures-00577",
-          "text": " Any <code>VkImageView</code> being sampled with <code>VK_FILTER_LINEAR</code> as a result of this command <strong class=\"purple\">must</strong> be of a format which supports linear filtering, as specified by the <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT</code> flag in <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> (for a linear image) or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code>(for an optimally tiled image) returned by <code>vkGetPhysicalDeviceFormatProperties</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-None-01504",
-          "text": " Image subresources used as attachments in the current render pass <strong class=\"purple\">must</strong> not be accessed in any way other than as an attachment by this command."
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-buffer-parameter",
-          "text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-countBuffer-parameter",
-          "text": " <code>countBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-renderpass",
-          "text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-commonparent",
-          "text": " Each of <code>buffer</code>, <code>commandBuffer</code>, and <code>countBuffer</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ],
-      "(VK_AMD_draw_indirect_count)+(VK_VERSION_1_1,VK_KHR_multiview)": [
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-maxMultiviewInstanceIndex-00578",
-          "text": " If the draw is recorded in a render pass instance with multiview enabled, the maximum instance index <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkPhysicalDeviceMultiviewProperties\">VkPhysicalDeviceMultiviewProperties</a>::<code>maxMultiviewInstanceIndex</code>."
-        }
-      ],
-      "(VK_AMD_draw_indirect_count)+(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-commandBuffer-01865",
-          "text": " If <code>commandBuffer</code> is an unprotected command buffer, and any pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> reads from or writes to any image or buffer, that image or buffer <strong class=\"purple\">must</strong> not be a protected image or protected buffer."
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-commandBuffer-01866",
-          "text": " If <code>commandBuffer</code> is a protected command buffer, and any pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> writes to any image or buffer, that image or buffer <strong class=\"purple\">must</strong> not be an unprotected image or unprotected buffer."
-        },
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-commandBuffer-01867",
-          "text": " If <code>commandBuffer</code> is a protected command buffer, and any pipeline stage other than the framebuffer-space pipeline stages in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> reads from or writes to any image or buffer, the image or buffer <strong class=\"purple\">must</strong> not be a protected image or protected buffer."
-        }
-      ],
-      "(VK_AMD_draw_indirect_count)+(VK_EXT_sample_locations)": [
-        {
-          "vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-sampleLocationsEnable-01517",
-          "text": " If the bound graphics pipeline was created with <a href=\"#VkPipelineSampleLocationsStateCreateInfoEXT\">VkPipelineSampleLocationsStateCreateInfoEXT</a>::<code>sampleLocationsEnable</code> set to <code>VK_TRUE</code> and the current subpass has a depth/stencil attachment, then that attachment <strong class=\"purple\">must</strong> have been created with the <code>VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT</code> bit set"
-        }
-      ]
-    },
-    "VkPipelineVertexInputStateCreateInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkPipelineVertexInputStateCreateInfo-vertexBindingDescriptionCount-00613",
-          "text": " <code>vertexBindingDescriptionCount</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxVertexInputBindings</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineVertexInputStateCreateInfo-vertexAttributeDescriptionCount-00614",
-          "text": " <code>vertexAttributeDescriptionCount</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxVertexInputAttributes</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineVertexInputStateCreateInfo-binding-00615",
-          "text": " For every <code>binding</code> specified by each element of <code>pVertexAttributeDescriptions</code>, a <code>VkVertexInputBindingDescription</code> <strong class=\"purple\">must</strong> exist in <code>pVertexBindingDescriptions</code> with the same value of <code>binding</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineVertexInputStateCreateInfo-pVertexBindingDescriptions-00616",
-          "text": " All elements of <code>pVertexBindingDescriptions</code> <strong class=\"purple\">must</strong> describe distinct binding numbers"
-        },
-        {
-          "vuid": "VUID-VkPipelineVertexInputStateCreateInfo-pVertexAttributeDescriptions-00617",
-          "text": " All elements of <code>pVertexAttributeDescriptions</code> <strong class=\"purple\">must</strong> describe distinct attribute locations"
-        },
-        {
-          "vuid": "VUID-VkPipelineVertexInputStateCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineVertexInputStateCreateInfo-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkPipelineVertexInputDivisorStateCreateInfoEXT\">VkPipelineVertexInputDivisorStateCreateInfoEXT</a>"
-        },
-        {
-          "vuid": "VUID-VkPipelineVertexInputStateCreateInfo-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineVertexInputStateCreateInfo-pVertexBindingDescriptions-parameter",
-          "text": " If <code>vertexBindingDescriptionCount</code> is not <code>0</code>, <code>pVertexBindingDescriptions</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>vertexBindingDescriptionCount</code> valid <code>VkVertexInputBindingDescription</code> structures"
-        },
-        {
-          "vuid": "VUID-VkPipelineVertexInputStateCreateInfo-pVertexAttributeDescriptions-parameter",
-          "text": " If <code>vertexAttributeDescriptionCount</code> is not <code>0</code>, <code>pVertexAttributeDescriptions</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>vertexAttributeDescriptionCount</code> valid <code>VkVertexInputAttributeDescription</code> structures"
-        }
-      ]
-    },
-    "VkVertexInputBindingDescription": {
-      "core": [
-        {
-          "vuid": "VUID-VkVertexInputBindingDescription-binding-00618",
-          "text": " <code>binding</code> <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceLimits</code>::<code>maxVertexInputBindings</code>"
-        },
-        {
-          "vuid": "VUID-VkVertexInputBindingDescription-stride-00619",
-          "text": " <code>stride</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxVertexInputBindingStride</code>"
-        },
-        {
-          "vuid": "VUID-VkVertexInputBindingDescription-inputRate-parameter",
-          "text": " <code>inputRate</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkVertexInputRate\">VkVertexInputRate</a> value"
-        }
-      ]
-    },
-    "VkVertexInputAttributeDescription": {
-      "core": [
-        {
-          "vuid": "VUID-VkVertexInputAttributeDescription-location-00620",
-          "text": " <code>location</code> <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceLimits</code>::<code>maxVertexInputAttributes</code>"
-        },
-        {
-          "vuid": "VUID-VkVertexInputAttributeDescription-binding-00621",
-          "text": " <code>binding</code> <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceLimits</code>::<code>maxVertexInputBindings</code>"
-        },
-        {
-          "vuid": "VUID-VkVertexInputAttributeDescription-offset-00622",
-          "text": " <code>offset</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxVertexInputAttributeOffset</code>"
-        },
-        {
-          "vuid": "VUID-VkVertexInputAttributeDescription-format-00623",
-          "text": " <code>format</code> <strong class=\"purple\">must</strong> be allowed as a vertex buffer format, as specified by the <code>VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT</code> flag in <code>VkFormatProperties</code>::<code>bufferFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code>"
-        },
-        {
-          "vuid": "VUID-VkVertexInputAttributeDescription-format-parameter",
-          "text": " <code>format</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFormat\">VkFormat</a> value"
-        }
-      ]
-    },
-    "vkCmdBindVertexBuffers": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdBindVertexBuffers-firstBinding-00624",
-          "text": " <code>firstBinding</code> <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceLimits</code>::<code>maxVertexInputBindings</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdBindVertexBuffers-firstBinding-00625",
-          "text": " The sum of <code>firstBinding</code> and <code>bindingCount</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxVertexInputBindings</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdBindVertexBuffers-pOffsets-00626",
-          "text": " All elements of <code>pOffsets</code> <strong class=\"purple\">must</strong> be less than the size of the corresponding element in <code>pBuffers</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdBindVertexBuffers-pBuffers-00627",
-          "text": " All elements of <code>pBuffers</code> <strong class=\"purple\">must</strong> have been created with the <code>VK_BUFFER_USAGE_VERTEX_BUFFER_BIT</code> flag"
-        },
-        {
-          "vuid": "VUID-vkCmdBindVertexBuffers-pBuffers-00628",
-          "text": " Each element of <code>pBuffers</code> that is non-sparse <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
-        },
-        {
-          "vuid": "VUID-vkCmdBindVertexBuffers-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdBindVertexBuffers-pBuffers-parameter",
-          "text": " <code>pBuffers</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>bindingCount</code> valid <code>VkBuffer</code> handles"
-        },
-        {
-          "vuid": "VUID-vkCmdBindVertexBuffers-pOffsets-parameter",
-          "text": " <code>pOffsets</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>bindingCount</code> <code>VkDeviceSize</code> values"
-        },
-        {
-          "vuid": "VUID-vkCmdBindVertexBuffers-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdBindVertexBuffers-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
-        },
-        {
-          "vuid": "VUID-vkCmdBindVertexBuffers-bindingCount-arraylength",
-          "text": " <code>bindingCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdBindVertexBuffers-commonparent",
-          "text": " Both of <code>commandBuffer</code>, and the elements of <code>pBuffers</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ]
-    },
-    "VkPipelineVertexInputDivisorStateCreateInfoEXT": {
-      "(VK_EXT_vertex_attribute_divisor)": [
-        {
-          "vuid": "VUID-VkPipelineVertexInputDivisorStateCreateInfoEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineVertexInputDivisorStateCreateInfoEXT-pVertexBindingDivisors-parameter",
-          "text": " <code>pVertexBindingDivisors</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>vertexBindingDivisorCount</code> <code>VkVertexInputBindingDivisorDescriptionEXT</code> structures"
-        },
-        {
-          "vuid": "VUID-VkPipelineVertexInputDivisorStateCreateInfoEXT-vertexBindingDivisorCount-arraylength",
-          "text": " <code>vertexBindingDivisorCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ]
-    },
-    "VkVertexInputBindingDivisorDescriptionEXT": {
-      "(VK_EXT_vertex_attribute_divisor)": [
-        {
-          "vuid": "VUID-VkVertexInputBindingDivisorDescriptionEXT-binding-01869",
-          "text": " <code>binding</code> <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceLimits</code>::<code>maxVertexInputBindings</code>"
-        },
-        {
-          "vuid": "VUID-VkVertexInputBindingDivisorDescriptionEXT-divisor-01870",
-          "text": " <code>divisor</code> <strong class=\"purple\">must</strong> be a value between <code>0</code> and <code>VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT</code>::<code>maxVertexAttribDivisor</code>, inclusive."
-        },
-        {
-          "vuid": "VUID-VkVertexInputBindingDivisorDescriptionEXT-inputRate-01871",
-          "text": " <a href=\"#VkVertexInputBindingDescription\">VkVertexInputBindingDescription</a>::<code>inputRate</code> <strong class=\"purple\">must</strong> be of type <code>VK_VERTEX_INPUT_RATE_INSTANCE</code> for this <code>binding</code>."
-        }
-      ]
-    },
-    "VkPipelineTessellationStateCreateInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkPipelineTessellationStateCreateInfo-patchControlPoints-01214",
-          "text": " <code>patchControlPoints</code> <strong class=\"purple\">must</strong> be greater than zero and less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxTessellationPatchSize</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineTessellationStateCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineTessellationStateCreateInfo-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkPipelineTessellationDomainOriginStateCreateInfo\">VkPipelineTessellationDomainOriginStateCreateInfo</a>"
-        },
-        {
-          "vuid": "VUID-VkPipelineTessellationStateCreateInfo-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        }
-      ]
-    },
-    "VkPipelineTessellationDomainOriginStateCreateInfo": {
-      "(VK_VERSION_1_1,VK_KHR_maintenance2)": [
-        {
-          "vuid": "VUID-VkPipelineTessellationDomainOriginStateCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineTessellationDomainOriginStateCreateInfo-domainOrigin-parameter",
-          "text": " <code>domainOrigin</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkTessellationDomainOrigin\">VkTessellationDomainOrigin</a> value"
-        }
-      ]
-    },
-    "VkPipelineViewportSwizzleStateCreateInfoNV": {
-      "(VK_NV_viewport_swizzle)": [
-        {
-          "vuid": "VUID-VkPipelineViewportSwizzleStateCreateInfoNV-viewportCount-01215",
-          "text": " <code>viewportCount</code> <strong class=\"purple\">must</strong> match the <code>viewportCount</code> set in <code>VkPipelineViewportStateCreateInfo</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineViewportSwizzleStateCreateInfoNV-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineViewportSwizzleStateCreateInfoNV-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineViewportSwizzleStateCreateInfoNV-viewportCount-arraylength",
-          "text": " <code>viewportCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ]
-    },
-    "VkViewportSwizzleNV": {
-      "(VK_NV_viewport_swizzle)": [
-        {
-          "vuid": "VUID-VkViewportSwizzleNV-x-parameter",
-          "text": " <code>x</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkViewportCoordinateSwizzleNV\">VkViewportCoordinateSwizzleNV</a> value"
-        },
-        {
-          "vuid": "VUID-VkViewportSwizzleNV-y-parameter",
-          "text": " <code>y</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkViewportCoordinateSwizzleNV\">VkViewportCoordinateSwizzleNV</a> value"
-        },
-        {
-          "vuid": "VUID-VkViewportSwizzleNV-z-parameter",
-          "text": " <code>z</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkViewportCoordinateSwizzleNV\">VkViewportCoordinateSwizzleNV</a> value"
-        },
-        {
-          "vuid": "VUID-VkViewportSwizzleNV-w-parameter",
-          "text": " <code>w</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkViewportCoordinateSwizzleNV\">VkViewportCoordinateSwizzleNV</a> value"
-        }
-      ]
-    },
-    "VkPipelineViewportWScalingStateCreateInfoNV": {
-      "(VK_NV_clip_space_w_scaling)": [
-        {
-          "vuid": "VUID-VkPipelineViewportWScalingStateCreateInfoNV-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineViewportWScalingStateCreateInfoNV-viewportCount-arraylength",
-          "text": " <code>viewportCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ]
-    },
-    "vkCmdSetViewportWScalingNV": {
-      "(VK_NV_clip_space_w_scaling)": [
-        {
-          "vuid": "VUID-vkCmdSetViewportWScalingNV-None-01322",
-          "text": " The bound graphics pipeline <strong class=\"purple\">must</strong> have been created with the <code>VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV</code> dynamic state enabled"
-        },
-        {
-          "vuid": "VUID-vkCmdSetViewportWScalingNV-firstViewport-01323",
-          "text": " <code>firstViewport</code> <strong class=\"purple\">must</strong> be less than <a href=\"#VkPhysicalDeviceLimits\">VkPhysicalDeviceLimits</a>::<code>maxViewports</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdSetViewportWScalingNV-firstViewport-01324",
-          "text": " The sum of <code>firstViewport</code> and <code>viewportCount</code> <strong class=\"purple\">must</strong> be between <code>1</code> and <a href=\"#VkPhysicalDeviceLimits\">VkPhysicalDeviceLimits</a>::<code>maxViewports</code>, inclusive"
-        },
-        {
-          "vuid": "VUID-vkCmdSetViewportWScalingNV-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdSetViewportWScalingNV-pViewportWScalings-parameter",
-          "text": " <code>pViewportWScalings</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>viewportCount</code> <code>VkViewportWScalingNV</code> structures"
-        },
-        {
-          "vuid": "VUID-vkCmdSetViewportWScalingNV-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdSetViewportWScalingNV-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
-        },
-        {
-          "vuid": "VUID-vkCmdSetViewportWScalingNV-viewportCount-arraylength",
-          "text": " <code>viewportCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ]
-    },
-    "VkPipelineViewportStateCreateInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkPipelineViewportStateCreateInfo-viewportCount-01216",
-          "text": " If the <a href=\"#features-features-multiViewport\">multiple viewports</a> feature is not enabled, <code>viewportCount</code> <strong class=\"purple\">must</strong> be <code>1</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineViewportStateCreateInfo-scissorCount-01217",
-          "text": " If the <a href=\"#features-features-multiViewport\">multiple viewports</a> feature is not enabled, <code>scissorCount</code> <strong class=\"purple\">must</strong> be <code>1</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineViewportStateCreateInfo-viewportCount-01218",
-          "text": " <code>viewportCount</code> <strong class=\"purple\">must</strong> be between <code>1</code> and <code>VkPhysicalDeviceLimits</code>::<code>maxViewports</code>, inclusive"
-        },
-        {
-          "vuid": "VUID-VkPipelineViewportStateCreateInfo-scissorCount-01219",
-          "text": " <code>scissorCount</code> <strong class=\"purple\">must</strong> be between <code>1</code> and <code>VkPhysicalDeviceLimits</code>::<code>maxViewports</code>, inclusive"
-        },
-        {
-          "vuid": "VUID-VkPipelineViewportStateCreateInfo-scissorCount-01220",
-          "text": " <code>scissorCount</code> and <code>viewportCount</code> <strong class=\"purple\">must</strong> be identical"
-        },
-        {
-          "vuid": "VUID-VkPipelineViewportStateCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineViewportStateCreateInfo-pNext-pNext",
-          "text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkPipelineViewportSwizzleStateCreateInfoNV\">VkPipelineViewportSwizzleStateCreateInfoNV</a> or <a href=\"#VkPipelineViewportWScalingStateCreateInfoNV\">VkPipelineViewportWScalingStateCreateInfoNV</a>"
-        },
-        {
-          "vuid": "VUID-VkPipelineViewportStateCreateInfo-sType-unique",
-          "text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
-        },
-        {
-          "vuid": "VUID-VkPipelineViewportStateCreateInfo-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineViewportStateCreateInfo-viewportCount-arraylength",
-          "text": " <code>viewportCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineViewportStateCreateInfo-scissorCount-arraylength",
-          "text": " <code>scissorCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ],
-      "(VK_NV_clip_space_w_scaling)": [
-        {
-          "vuid": "VUID-VkPipelineViewportStateCreateInfo-viewportWScalingEnable-01726",
-          "text": " If the <code>viewportWScalingEnable</code> member of a <a href=\"#VkPipelineViewportWScalingStateCreateInfoNV\">VkPipelineViewportWScalingStateCreateInfoNV</a> structure chained to the <code>pNext</code> chain is <code>VK_TRUE</code>, the <code>viewportCount</code> member of the <a href=\"#VkPipelineViewportWScalingStateCreateInfoNV\">VkPipelineViewportWScalingStateCreateInfoNV</a> structure <strong class=\"purple\">must</strong> be equal to <code>viewportCount</code>"
-        }
-      ]
-    },
-    "vkCmdSetViewport": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdSetViewport-None-01221",
-          "text": " The bound graphics pipeline <strong class=\"purple\">must</strong> have been created with the <code>VK_DYNAMIC_STATE_VIEWPORT</code> dynamic state enabled"
-        },
-        {
-          "vuid": "VUID-vkCmdSetViewport-firstViewport-01222",
-          "text": " <code>firstViewport</code> <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceLimits</code>::<code>maxViewports</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdSetViewport-firstViewport-01223",
-          "text": " The sum of <code>firstViewport</code> and <code>viewportCount</code> <strong class=\"purple\">must</strong> be between <code>1</code> and <code>VkPhysicalDeviceLimits</code>::<code>maxViewports</code>, inclusive"
-        },
-        {
-          "vuid": "VUID-vkCmdSetViewport-firstViewport-01224",
-          "text": " If the <a href=\"#features-features-multiViewport\">multiple viewports</a> feature is not enabled, <code>firstViewport</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdSetViewport-viewportCount-01225",
-          "text": " If the <a href=\"#features-features-multiViewport\">multiple viewports</a> feature is not enabled, <code>viewportCount</code> <strong class=\"purple\">must</strong> be <code>1</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdSetViewport-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdSetViewport-pViewports-parameter",
-          "text": " <code>pViewports</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>viewportCount</code> <code>VkViewport</code> structures"
-        },
-        {
-          "vuid": "VUID-vkCmdSetViewport-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdSetViewport-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
-        },
-        {
-          "vuid": "VUID-vkCmdSetViewport-viewportCount-arraylength",
-          "text": " <code>viewportCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ]
-    },
-    "VkViewport": {
-      "core": [
-        {
-          "vuid": "VUID-VkViewport-width-01770",
-          "text": " <code>width</code> <strong class=\"purple\">must</strong> be greater than <code>0.0</code>"
-        },
-        {
-          "vuid": "VUID-VkViewport-width-01771",
-          "text": " <code>width</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxViewportDimensions</code>[0]"
-        },
-        {
-          "vuid": "VUID-VkViewport-height-01773",
-          "text": " The absolute value of <code>height</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxViewportDimensions</code>[1]"
-        },
-        {
-          "vuid": "VUID-VkViewport-x-01774",
-          "text": " <code>x</code> <strong class=\"purple\">must</strong> be greater than or equal to <code>viewportBoundsRange</code>[0]"
-        },
-        {
-          "vuid": "VUID-VkViewport-x-01232",
-          "text": " <span class=\"eq\">(<code>x</code> &#43; <code>width</code>)</span> <strong class=\"purple\">must</strong> be less than or equal to <code>viewportBoundsRange</code>[1]"
-        },
-        {
-          "vuid": "VUID-VkViewport-y-01775",
-          "text": " <code>y</code> <strong class=\"purple\">must</strong> be greater than or equal to <code>viewportBoundsRange</code>[0]"
-        },
-        {
-          "vuid": "VUID-VkViewport-y-01233",
-          "text": " <span class=\"eq\">(<code>y</code> &#43; <code>height</code>)</span> <strong class=\"purple\">must</strong> be less than or equal to <code>viewportBoundsRange</code>[1]"
-        }
-      ],
-      "!(VK_VERSION_1_1,VK_KHR_maintenance1,VK_AMD_negative_viewport_height)": [
-        {
-          "vuid": "VUID-VkViewport-height-01772",
-          "text": " <code>height</code> <strong class=\"purple\">must</strong> be greater than <code>0.0</code>"
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_maintenance1,VK_AMD_negative_viewport_height)": [
-        {
-          "vuid": "VUID-VkViewport-y-01776",
-          "text": " <code>y</code> <strong class=\"purple\">must</strong> be less than or equal to <code>viewportBoundsRange</code>[1]"
-        },
-        {
-          "vuid": "VUID-VkViewport-y-01777",
-          "text": " <span class=\"eq\">(<code>y</code> &#43; <code>height</code>)</span> <strong class=\"purple\">must</strong> be greater than or equal to <code>viewportBoundsRange</code>[0]"
-        }
-      ],
-      "(VK_EXT_depth_range_unrestricted)": [
-        {
-          "vuid": "VUID-VkViewport-minDepth-01234",
-          "text": " Unless <code><a href=\"#VK_EXT_depth_range_unrestricted\">VK_EXT_depth_range_unrestricted</a></code> extension is enabled <code>minDepth</code> <strong class=\"purple\">must</strong> be between <code>0.0</code> and <code>1.0</code>, inclusive"
-        },
-        {
-          "vuid": "VUID-VkViewport-maxDepth-01235",
-          "text": " Unless <code><a href=\"#VK_EXT_depth_range_unrestricted\">VK_EXT_depth_range_unrestricted</a></code> extension is enabled <code>maxDepth</code> <strong class=\"purple\">must</strong> be between <code>0.0</code> and <code>1.0</code>, inclusive"
-        }
-      ],
-      "!(VK_EXT_depth_range_unrestricted)": [
-        {
-          "vuid": "VUID-VkViewport-minDepth-01234",
-          "text": " <code>minDepth</code> <strong class=\"purple\">must</strong> be between <code>0.0</code> and <code>1.0</code>, inclusive"
-        },
-        {
-          "vuid": "VUID-VkViewport-maxDepth-01235",
-          "text": " <code>maxDepth</code> <strong class=\"purple\">must</strong> be between <code>0.0</code> and <code>1.0</code>, inclusive"
-        }
-      ]
-    },
-    "VkPipelineRasterizationStateCreateInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkPipelineRasterizationStateCreateInfo-depthClampEnable-00782",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-depthClamp,depth clamping&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>depthClampEnable</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineRasterizationStateCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineRasterizationStateCreateInfo-pNext-pNext",
-          "text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkPipelineRasterizationConservativeStateCreateInfoEXT\">VkPipelineRasterizationConservativeStateCreateInfoEXT</a> or <a href=\"#VkPipelineRasterizationStateRasterizationOrderAMD\">VkPipelineRasterizationStateRasterizationOrderAMD</a>"
-        },
-        {
-          "vuid": "VUID-VkPipelineRasterizationStateCreateInfo-sType-unique",
-          "text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
-        },
-        {
-          "vuid": "VUID-VkPipelineRasterizationStateCreateInfo-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineRasterizationStateCreateInfo-polygonMode-parameter",
-          "text": " <code>polygonMode</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPolygonMode\">VkPolygonMode</a> value"
-        },
-        {
-          "vuid": "VUID-VkPipelineRasterizationStateCreateInfo-cullMode-parameter",
-          "text": " <code>cullMode</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkCullModeFlagBits\">VkCullModeFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkPipelineRasterizationStateCreateInfo-frontFace-parameter",
-          "text": " <code>frontFace</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFrontFace\">VkFrontFace</a> value"
-        }
-      ],
-      "!(VK_NV_fill_rectangle)": [
-        {
-          "vuid": "VUID-VkPipelineRasterizationStateCreateInfo-polygonMode-01413",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-fillModeNonSolid,non-solid fill modes&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>polygonMode</code> <strong class=\"purple\">must</strong> be <code>VK_POLYGON_MODE_FILL</code>"
-        }
-      ],
-      "(VK_NV_fill_rectangle)": [
-        {
-          "vuid": "VUID-VkPipelineRasterizationStateCreateInfo-polygonMode-01507",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-fillModeNonSolid,non-solid fill modes&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>polygonMode</code> <strong class=\"purple\">must</strong> be <code>VK_POLYGON_MODE_FILL</code> or <code>VK_POLYGON_MODE_FILL_RECTANGLE_NV</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineRasterizationStateCreateInfo-polygonMode-01414",
-          "text": " If the <code><a href=\"#VK_NV_fill_rectangle\">VK_NV_fill_rectangle</a></code> extension is not enabled, <code>polygonMode</code> <strong class=\"purple\">must</strong> not be <code>VK_POLYGON_MODE_FILL_RECTANGLE_NV</code>"
-        }
-      ]
-    },
-    "VkPipelineMultisampleStateCreateInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkPipelineMultisampleStateCreateInfo-sampleShadingEnable-00784",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-sampleRateShading,sample rate shading&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>sampleShadingEnable</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineMultisampleStateCreateInfo-alphaToOneEnable-00785",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-alphaToOne,alpha to one&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>alphaToOneEnable</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineMultisampleStateCreateInfo-minSampleShading-00786",
-          "text": " <code>minSampleShading</code> <strong class=\"purple\">must</strong> be in the range <span class=\"eq\">[0,1]</span>"
-        },
-        {
-          "vuid": "VUID-VkPipelineMultisampleStateCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineMultisampleStateCreateInfo-pNext-pNext",
-          "text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkPipelineCoverageModulationStateCreateInfoNV\">VkPipelineCoverageModulationStateCreateInfoNV</a>, <a href=\"#VkPipelineCoverageToColorStateCreateInfoNV\">VkPipelineCoverageToColorStateCreateInfoNV</a>, or <a href=\"#VkPipelineSampleLocationsStateCreateInfoEXT\">VkPipelineSampleLocationsStateCreateInfoEXT</a>"
-        },
-        {
-          "vuid": "VUID-VkPipelineMultisampleStateCreateInfo-sType-unique",
-          "text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
-        },
-        {
-          "vuid": "VUID-VkPipelineMultisampleStateCreateInfo-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineMultisampleStateCreateInfo-rasterizationSamples-parameter",
-          "text": " <code>rasterizationSamples</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSampleCountFlagBits\">VkSampleCountFlagBits</a> value"
-        },
-        {
-          "vuid": "VUID-VkPipelineMultisampleStateCreateInfo-pSampleMask-parameter",
-          "text": " If <code>pSampleMask</code> is not <code>NULL</code>, <code>pSampleMask</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of \\(\\lceil{\\mathit{rasterizationSamples} \\over 32}\\rceil\\) <code>VkSampleMask</code> values"
-        }
-      ],
-      "(VK_NV_framebuffer_mixed_samples)": [
-        {
-          "vuid": "VUID-VkPipelineMultisampleStateCreateInfo-rasterizationSamples-01415",
-          "text": " If the subpass has any color attachments and <code>rasterizationSamples</code> is greater than the number of color samples, then <code>sampleShadingEnable</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
-        }
-      ]
-    },
-    "VkPipelineRasterizationStateRasterizationOrderAMD": {
-      "(VK_AMD_rasterization_order)": [
-        {
-          "vuid": "VUID-VkPipelineRasterizationStateRasterizationOrderAMD-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineRasterizationStateRasterizationOrderAMD-rasterizationOrder-parameter",
-          "text": " <code>rasterizationOrder</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkRasterizationOrderAMD\">VkRasterizationOrderAMD</a> value"
-        }
-      ]
-    },
-    "VkPipelineSampleLocationsStateCreateInfoEXT": {
-      "(VK_EXT_sample_locations)": [
-        {
-          "vuid": "VUID-VkPipelineSampleLocationsStateCreateInfoEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineSampleLocationsStateCreateInfoEXT-sampleLocationsInfo-parameter",
-          "text": " <code>sampleLocationsInfo</code> <strong class=\"purple\">must</strong> be a valid <code>VkSampleLocationsInfoEXT</code> structure"
-        }
-      ]
-    },
-    "VkSampleLocationsInfoEXT": {
-      "(VK_EXT_sample_locations)": [
-        {
-          "vuid": "VUID-VkSampleLocationsInfoEXT-sampleLocationsPerPixel-01526",
-          "text": " <code>sampleLocationsPerPixel</code> <strong class=\"purple\">must</strong> be a bit value that is set in <a href=\"#VkPhysicalDeviceSampleLocationsPropertiesEXT\">VkPhysicalDeviceSampleLocationsPropertiesEXT</a>::<code>sampleLocationSampleCounts</code>"
-        },
-        {
-          "vuid": "VUID-VkSampleLocationsInfoEXT-sampleLocationsCount-01527",
-          "text": " <code>sampleLocationsCount</code> <strong class=\"purple\">must</strong> equal <span class=\"eq\"><code>sampleLocationsPerPixel</code> {times} <code>sampleLocationGridSize.width</code> {times} <code>sampleLocationGridSize.height</code></span>"
-        },
-        {
-          "vuid": "VUID-VkSampleLocationsInfoEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkSampleLocationsInfoEXT-sampleLocationsPerPixel-parameter",
-          "text": " <code>sampleLocationsPerPixel</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSampleCountFlagBits\">VkSampleCountFlagBits</a> value"
-        },
-        {
-          "vuid": "VUID-VkSampleLocationsInfoEXT-pSampleLocations-parameter",
-          "text": " <code>pSampleLocations</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>sampleLocationsCount</code> <code>VkSampleLocationEXT</code> structures"
-        },
-        {
-          "vuid": "VUID-VkSampleLocationsInfoEXT-sampleLocationsCount-arraylength",
-          "text": " <code>sampleLocationsCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ]
-    },
-    "vkCmdSetSampleLocationsEXT": {
-      "(VK_EXT_sample_locations)": [
-        {
-          "vuid": "VUID-vkCmdSetSampleLocationsEXT-None-01528",
-          "text": " The bound graphics pipeline <strong class=\"purple\">must</strong> have been created with the <code>VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT</code> dynamic state enabled"
-        },
-        {
-          "vuid": "VUID-vkCmdSetSampleLocationsEXT-sampleLocationsPerPixel-01529",
-          "text": " The <code>sampleLocationsPerPixel</code> member of <code>pSampleLocationsInfo</code> <strong class=\"purple\">must</strong> equal the <code>rasterizationSamples</code> member of the <a href=\"#VkPipelineMultisampleStateCreateInfo\">VkPipelineMultisampleStateCreateInfo</a> structure the bound graphics pipeline has been created with"
-        },
-        {
-          "vuid": "VUID-vkCmdSetSampleLocationsEXT-variableSampleLocations-01530",
-          "text": " If <a href=\"#VkPhysicalDeviceSampleLocationsPropertiesEXT\">VkPhysicalDeviceSampleLocationsPropertiesEXT</a>::<code>variableSampleLocations</code> is <code>VK_FALSE</code> then the current render pass <strong class=\"purple\">must</strong> have been begun by specifying a <a href=\"#VkRenderPassSampleLocationsBeginInfoEXT\">VkRenderPassSampleLocationsBeginInfoEXT</a> structure whose <code>pPostSubpassSampleLocations</code> member contains an element with a <code>subpassIndex</code> matching the current subpass index and the <code>sampleLocationsInfo</code> member of that element <strong class=\"purple\">must</strong> match the sample locations state pointed to by <code>pSampleLocationsInfo</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdSetSampleLocationsEXT-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdSetSampleLocationsEXT-pSampleLocationsInfo-parameter",
-          "text": " <code>pSampleLocationsInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkSampleLocationsInfoEXT</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCmdSetSampleLocationsEXT-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdSetSampleLocationsEXT-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
-        }
-      ]
-    },
-    "vkCmdSetLineWidth": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdSetLineWidth-None-00787",
-          "text": " The bound graphics pipeline <strong class=\"purple\">must</strong> have been created with the <code>VK_DYNAMIC_STATE_LINE_WIDTH</code> dynamic state enabled"
-        },
-        {
-          "vuid": "VUID-vkCmdSetLineWidth-lineWidth-00788",
-          "text": " If the <a href=\"#features-features-wideLines\">wide lines</a> feature is not enabled, <code>lineWidth</code> <strong class=\"purple\">must</strong> be <code>1.0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdSetLineWidth-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdSetLineWidth-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdSetLineWidth-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
-        }
-      ]
-    },
-    "vkCmdSetDepthBias": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdSetDepthBias-None-00789",
-          "text": " The bound graphics pipeline <strong class=\"purple\">must</strong> have been created with the <code>VK_DYNAMIC_STATE_DEPTH_BIAS</code> dynamic state enabled"
-        },
-        {
-          "vuid": "VUID-vkCmdSetDepthBias-depthBiasClamp-00790",
-          "text": " If the <a href=\"#features-features-depthBiasClamp\">depth bias clamping</a> feature is not enabled, <code>depthBiasClamp</code> <strong class=\"purple\">must</strong> be <code>0.0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdSetDepthBias-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdSetDepthBias-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdSetDepthBias-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
-        }
-      ]
-    },
-    "VkPipelineRasterizationConservativeStateCreateInfoEXT": {
-      "(VK_EXT_conservative_rasterization)": [
-        {
-          "vuid": "VUID-VkPipelineRasterizationConservativeStateCreateInfoEXT-extraPrimitiveOverestimationSize-01769",
-          "text": " <code>extraPrimitiveOverestimationSize</code> <strong class=\"purple\">must</strong> be in the range of <code>0.0</code> to <code>VkPhysicalDeviceConservativeRasterizationPropertiesEXT</code>::<code>maxExtraPrimitiveOverestimationSize</code> inclusive"
-        },
-        {
-          "vuid": "VUID-VkPipelineRasterizationConservativeStateCreateInfoEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineRasterizationConservativeStateCreateInfoEXT-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineRasterizationConservativeStateCreateInfoEXT-conservativeRasterizationMode-parameter",
-          "text": " <code>conservativeRasterizationMode</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkConservativeRasterizationModeEXT\">VkConservativeRasterizationModeEXT</a> value"
-        }
-      ]
-    },
-    "VkPipelineDiscardRectangleStateCreateInfoEXT": {
-      "(VK_EXT_discard_rectangles)": [
-        {
-          "vuid": "VUID-VkPipelineDiscardRectangleStateCreateInfoEXT-discardRectangleCount-00582",
-          "text": " <code>discardRectangleCount</code> <strong class=\"purple\">must</strong> be between <code>0</code> and <code>VkPhysicalDeviceDiscardRectanglePropertiesEXT</code>::<code>maxDiscardRectangles</code>, inclusive"
-        },
-        {
-          "vuid": "VUID-VkPipelineDiscardRectangleStateCreateInfoEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineDiscardRectangleStateCreateInfoEXT-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineDiscardRectangleStateCreateInfoEXT-discardRectangleMode-parameter",
-          "text": " <code>discardRectangleMode</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDiscardRectangleModeEXT\">VkDiscardRectangleModeEXT</a> value"
-        }
-      ]
-    },
-    "vkCmdSetDiscardRectangleEXT": {
-      "(VK_EXT_discard_rectangles)": [
-        {
-          "vuid": "VUID-vkCmdSetDiscardRectangleEXT-None-00583",
-          "text": " The bound graphics pipeline <strong class=\"purple\">must</strong> have been created with the <code>VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT</code> dynamic state enabled"
-        },
-        {
-          "vuid": "VUID-vkCmdSetDiscardRectangleEXT-firstDiscardRectangle-00585",
-          "text": " The sum of <code>firstDiscardRectangle</code> and <code>discardRectangleCount</code> <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkPhysicalDeviceDiscardRectanglePropertiesEXT\">VkPhysicalDeviceDiscardRectanglePropertiesEXT</a>::<code>maxDiscardRectangles</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdSetDiscardRectangleEXT-x-00587",
-          "text": " The <code>x</code> and <code>y</code> member of <code>offset</code> in each <a href=\"#VkRect2D\">VkRect2D</a> element of <code>pDiscardRectangles</code> <strong class=\"purple\">must</strong> be greater than or equal to <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdSetDiscardRectangleEXT-offset-00588",
-          "text": " Evaluation of <span class=\"eq\">(<code>offset.x</code> &#43; <code>extent.width</code>)</span> in each <a href=\"#VkRect2D\">VkRect2D</a> element of <code>pDiscardRectangles</code> <strong class=\"purple\">must</strong> not cause a signed integer addition overflow"
-        },
-        {
-          "vuid": "VUID-vkCmdSetDiscardRectangleEXT-offset-00589",
-          "text": " Evaluation of <span class=\"eq\">(<code>offset.y</code> &#43; <code>extent.height</code>)</span> in each <a href=\"#VkRect2D\">VkRect2D</a> element of <code>pDiscardRectangles</code> <strong class=\"purple\">must</strong> not cause a signed integer addition overflow"
-        },
-        {
-          "vuid": "VUID-vkCmdSetDiscardRectangleEXT-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdSetDiscardRectangleEXT-pDiscardRectangles-parameter",
-          "text": " <code>pDiscardRectangles</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>discardRectangleCount</code> <code>VkRect2D</code> structures"
-        },
-        {
-          "vuid": "VUID-vkCmdSetDiscardRectangleEXT-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdSetDiscardRectangleEXT-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
-        },
-        {
-          "vuid": "VUID-vkCmdSetDiscardRectangleEXT-discardRectangleCount-arraylength",
-          "text": " <code>discardRectangleCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ]
-    },
-    "vkCmdSetScissor": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdSetScissor-None-00590",
-          "text": " The bound graphics pipeline <strong class=\"purple\">must</strong> have been created with the <code>VK_DYNAMIC_STATE_SCISSOR</code> dynamic state enabled"
-        },
-        {
-          "vuid": "VUID-vkCmdSetScissor-firstScissor-00591",
-          "text": " <code>firstScissor</code> <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceLimits</code>::<code>maxViewports</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdSetScissor-firstScissor-00592",
-          "text": " The sum of <code>firstScissor</code> and <code>scissorCount</code> <strong class=\"purple\">must</strong> be between <code>1</code> and <code>VkPhysicalDeviceLimits</code>::<code>maxViewports</code>, inclusive"
-        },
-        {
-          "vuid": "VUID-vkCmdSetScissor-firstScissor-00593",
-          "text": " If the <a href=\"#features-features-multiViewport\">multiple viewports</a> feature is not enabled, <code>firstScissor</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdSetScissor-scissorCount-00594",
-          "text": " If the <a href=\"#features-features-multiViewport\">multiple viewports</a> feature is not enabled, <code>scissorCount</code> <strong class=\"purple\">must</strong> be <code>1</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdSetScissor-x-00595",
-          "text": " The <code>x</code> and <code>y</code> members of <code>offset</code> <strong class=\"purple\">must</strong> be greater than or equal to <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdSetScissor-offset-00596",
-          "text": " Evaluation of <span class=\"eq\">(<code>offset.x</code> &#43; <code>extent.width</code>)</span> <strong class=\"purple\">must</strong> not cause a signed integer addition overflow"
-        },
-        {
-          "vuid": "VUID-vkCmdSetScissor-offset-00597",
-          "text": " Evaluation of <span class=\"eq\">(<code>offset.y</code> &#43; <code>extent.height</code>)</span> <strong class=\"purple\">must</strong> not cause a signed integer addition overflow"
-        },
-        {
-          "vuid": "VUID-vkCmdSetScissor-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdSetScissor-pScissors-parameter",
-          "text": " <code>pScissors</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>scissorCount</code> <code>VkRect2D</code> structures"
-        },
-        {
-          "vuid": "VUID-vkCmdSetScissor-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdSetScissor-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
-        },
-        {
-          "vuid": "VUID-vkCmdSetScissor-scissorCount-arraylength",
-          "text": " <code>scissorCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ]
-    },
-    "VkPipelineDepthStencilStateCreateInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkPipelineDepthStencilStateCreateInfo-depthBoundsTestEnable-00598",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-depthBounds,depth bounds testing&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>depthBoundsTestEnable</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineDepthStencilStateCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineDepthStencilStateCreateInfo-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineDepthStencilStateCreateInfo-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineDepthStencilStateCreateInfo-depthCompareOp-parameter",
-          "text": " <code>depthCompareOp</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCompareOp\">VkCompareOp</a> value"
-        },
-        {
-          "vuid": "VUID-VkPipelineDepthStencilStateCreateInfo-front-parameter",
-          "text": " <code>front</code> <strong class=\"purple\">must</strong> be a valid <code>VkStencilOpState</code> structure"
-        },
-        {
-          "vuid": "VUID-VkPipelineDepthStencilStateCreateInfo-back-parameter",
-          "text": " <code>back</code> <strong class=\"purple\">must</strong> be a valid <code>VkStencilOpState</code> structure"
-        }
-      ]
-    },
-    "vkCmdSetDepthBounds": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdSetDepthBounds-None-00599",
-          "text": " The bound graphics pipeline <strong class=\"purple\">must</strong> have been created with the <code>VK_DYNAMIC_STATE_DEPTH_BOUNDS</code> dynamic state enabled"
-        },
-        {
-          "vuid": "VUID-vkCmdSetDepthBounds-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdSetDepthBounds-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdSetDepthBounds-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
-        }
-      ],
-      "(VK_EXT_depth_range_unrestricted)": [
-        {
-          "vuid": "VUID-vkCmdSetDepthBounds-minDepthBounds-00600",
-          "text": " Unless the <code><a href=\"#VK_EXT_depth_range_unrestricted\">VK_EXT_depth_range_unrestricted</a></code> extension is enabled <code>minDepthBounds</code> <strong class=\"purple\">must</strong> be between <code>0.0</code> and <code>1.0</code>, inclusive"
-        },
-        {
-          "vuid": "VUID-vkCmdSetDepthBounds-maxDepthBounds-00601",
-          "text": " Unless the <code><a href=\"#VK_EXT_depth_range_unrestricted\">VK_EXT_depth_range_unrestricted</a></code> extension is enabled <code>maxDepthBounds</code> <strong class=\"purple\">must</strong> be between <code>0.0</code> and <code>1.0</code>, inclusive"
-        }
-      ],
-      "!(VK_EXT_depth_range_unrestricted)": [
-        {
-          "vuid": "VUID-vkCmdSetDepthBounds-minDepthBounds-00600",
-          "text": " <code>minDepthBounds</code> <strong class=\"purple\">must</strong> be between <code>0.0</code> and <code>1.0</code>, inclusive"
-        },
-        {
-          "vuid": "VUID-vkCmdSetDepthBounds-maxDepthBounds-00601",
-          "text": " <code>maxDepthBounds</code> <strong class=\"purple\">must</strong> be between <code>0.0</code> and <code>1.0</code>, inclusive"
-        }
-      ]
-    },
-    "VkStencilOpState": {
-      "core": [
-        {
-          "vuid": "VUID-VkStencilOpState-failOp-parameter",
-          "text": " <code>failOp</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkStencilOp\">VkStencilOp</a> value"
-        },
-        {
-          "vuid": "VUID-VkStencilOpState-passOp-parameter",
-          "text": " <code>passOp</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkStencilOp\">VkStencilOp</a> value"
-        },
-        {
-          "vuid": "VUID-VkStencilOpState-depthFailOp-parameter",
-          "text": " <code>depthFailOp</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkStencilOp\">VkStencilOp</a> value"
-        },
-        {
-          "vuid": "VUID-VkStencilOpState-compareOp-parameter",
-          "text": " <code>compareOp</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCompareOp\">VkCompareOp</a> value"
-        }
-      ]
-    },
-    "vkCmdSetStencilCompareMask": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdSetStencilCompareMask-None-00602",
-          "text": " The bound graphics pipeline <strong class=\"purple\">must</strong> have been created with the <code>VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK</code> dynamic state enabled"
-        },
-        {
-          "vuid": "VUID-vkCmdSetStencilCompareMask-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdSetStencilCompareMask-faceMask-parameter",
-          "text": " <code>faceMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkStencilFaceFlagBits\">VkStencilFaceFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-vkCmdSetStencilCompareMask-faceMask-requiredbitmask",
-          "text": " <code>faceMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdSetStencilCompareMask-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdSetStencilCompareMask-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
-        }
-      ]
-    },
-    "vkCmdSetStencilWriteMask": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdSetStencilWriteMask-None-00603",
-          "text": " The bound graphics pipeline <strong class=\"purple\">must</strong> have been created with the <code>VK_DYNAMIC_STATE_STENCIL_WRITE_MASK</code> dynamic state enabled"
-        },
-        {
-          "vuid": "VUID-vkCmdSetStencilWriteMask-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdSetStencilWriteMask-faceMask-parameter",
-          "text": " <code>faceMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkStencilFaceFlagBits\">VkStencilFaceFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-vkCmdSetStencilWriteMask-faceMask-requiredbitmask",
-          "text": " <code>faceMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdSetStencilWriteMask-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdSetStencilWriteMask-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
-        }
-      ]
-    },
-    "vkCmdSetStencilReference": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdSetStencilReference-None-00604",
-          "text": " The bound graphics pipeline <strong class=\"purple\">must</strong> have been created with the <code>VK_DYNAMIC_STATE_STENCIL_REFERENCE</code> dynamic state enabled"
-        },
-        {
-          "vuid": "VUID-vkCmdSetStencilReference-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdSetStencilReference-faceMask-parameter",
-          "text": " <code>faceMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkStencilFaceFlagBits\">VkStencilFaceFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-vkCmdSetStencilReference-faceMask-requiredbitmask",
-          "text": " <code>faceMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdSetStencilReference-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdSetStencilReference-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
-        }
-      ]
-    },
-    "VkPipelineCoverageToColorStateCreateInfoNV": {
-      "(VK_NV_fragment_coverage_to_color)": [
-        {
-          "vuid": "VUID-VkPipelineCoverageToColorStateCreateInfoNV-coverageToColorEnable-01404",
-          "text": " If <code>coverageToColorEnable</code> is <code>VK_TRUE</code>, then the render pass subpass indicated by <a href=\"#VkGraphicsPipelineCreateInfo\">VkGraphicsPipelineCreateInfo</a>::<code>renderPass</code> and <a href=\"#VkGraphicsPipelineCreateInfo\">VkGraphicsPipelineCreateInfo</a>::<code>subpass</code> <strong class=\"purple\">must</strong> have a color attachment at the location selected by <code>coverageToColorLocation</code>, with a <a href=\"#VkFormat\">VkFormat</a> of <code>VK_FORMAT_R8_UINT</code>, <code>VK_FORMAT_R8_SINT</code>, <code>VK_FORMAT_R16_UINT</code>, <code>VK_FORMAT_R16_SINT</code>, <code>VK_FORMAT_R32_UINT</code>, or <code>VK_FORMAT_R32_SINT</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineCoverageToColorStateCreateInfoNV-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineCoverageToColorStateCreateInfoNV-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        }
-      ]
-    },
-    "VkPipelineCoverageModulationStateCreateInfoNV": {
-      "(VK_NV_framebuffer_mixed_samples)": [
-        {
-          "vuid": "VUID-VkPipelineCoverageModulationStateCreateInfoNV-coverageModulationTableEnable-01405",
-          "text": " If <code>coverageModulationTableEnable</code> is <code>VK_TRUE</code>, <code>coverageModulationTableCount</code> <strong class=\"purple\">must</strong> be equal to the number of rasterization samples divided by the number of color samples in the subpass."
-        },
-        {
-          "vuid": "VUID-VkPipelineCoverageModulationStateCreateInfoNV-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineCoverageModulationStateCreateInfoNV-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineCoverageModulationStateCreateInfoNV-coverageModulationMode-parameter",
-          "text": " <code>coverageModulationMode</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCoverageModulationModeNV\">VkCoverageModulationModeNV</a> value"
-        },
-        {
-          "vuid": "VUID-VkPipelineCoverageModulationStateCreateInfoNV-coverageModulationTableCount-arraylength",
-          "text": " <code>coverageModulationTableCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ]
-    },
-    "VkPipelineColorBlendStateCreateInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-independentBlend,independent blending&amp;amp;gt;&amp;amp;gt; feature is not enabled, all elements of <code>pAttachments</code> <strong class=\"purple\">must</strong> be identical"
-        },
-        {
-          "vuid": "VUID-VkPipelineColorBlendStateCreateInfo-logicOpEnable-00606",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-logicOp,logic operations&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>logicOpEnable</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineColorBlendStateCreateInfo-logicOpEnable-00607",
-          "text": " If <code>logicOpEnable</code> is <code>VK_TRUE</code>, <code>logicOp</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkLogicOp\">VkLogicOp</a> value"
-        },
-        {
-          "vuid": "VUID-VkPipelineColorBlendStateCreateInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineColorBlendStateCreateInfo-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkPipelineColorBlendAdvancedStateCreateInfoEXT\">VkPipelineColorBlendAdvancedStateCreateInfoEXT</a>"
-        },
-        {
-          "vuid": "VUID-VkPipelineColorBlendStateCreateInfo-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-parameter",
-          "text": " If <code>attachmentCount</code> is not <code>0</code>, <code>pAttachments</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>attachmentCount</code> valid <code>VkPipelineColorBlendAttachmentState</code> structures"
-        }
-      ]
-    },
-    "VkPipelineColorBlendAttachmentState": {
-      "core": [
-        {
-          "vuid": "VUID-VkPipelineColorBlendAttachmentState-srcColorBlendFactor-00608",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-dualSrcBlend,dual source blending&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>srcColorBlendFactor</code> <strong class=\"purple\">must</strong> not be <code>VK_BLEND_FACTOR_SRC1_COLOR</code>, <code>VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR</code>, <code>VK_BLEND_FACTOR_SRC1_ALPHA</code>, or <code>VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineColorBlendAttachmentState-dstColorBlendFactor-00609",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-dualSrcBlend,dual source blending&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>dstColorBlendFactor</code> <strong class=\"purple\">must</strong> not be <code>VK_BLEND_FACTOR_SRC1_COLOR</code>, <code>VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR</code>, <code>VK_BLEND_FACTOR_SRC1_ALPHA</code>, or <code>VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineColorBlendAttachmentState-srcAlphaBlendFactor-00610",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-dualSrcBlend,dual source blending&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>srcAlphaBlendFactor</code> <strong class=\"purple\">must</strong> not be <code>VK_BLEND_FACTOR_SRC1_COLOR</code>, <code>VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR</code>, <code>VK_BLEND_FACTOR_SRC1_ALPHA</code>, or <code>VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineColorBlendAttachmentState-dstAlphaBlendFactor-00611",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-dualSrcBlend,dual source blending&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>dstAlphaBlendFactor</code> <strong class=\"purple\">must</strong> not be <code>VK_BLEND_FACTOR_SRC1_COLOR</code>, <code>VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR</code>, <code>VK_BLEND_FACTOR_SRC1_ALPHA</code>, or <code>VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineColorBlendAttachmentState-srcColorBlendFactor-parameter",
-          "text": " <code>srcColorBlendFactor</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBlendFactor\">VkBlendFactor</a> value"
-        },
-        {
-          "vuid": "VUID-VkPipelineColorBlendAttachmentState-dstColorBlendFactor-parameter",
-          "text": " <code>dstColorBlendFactor</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBlendFactor\">VkBlendFactor</a> value"
-        },
-        {
-          "vuid": "VUID-VkPipelineColorBlendAttachmentState-colorBlendOp-parameter",
-          "text": " <code>colorBlendOp</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBlendOp\">VkBlendOp</a> value"
-        },
-        {
-          "vuid": "VUID-VkPipelineColorBlendAttachmentState-srcAlphaBlendFactor-parameter",
-          "text": " <code>srcAlphaBlendFactor</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBlendFactor\">VkBlendFactor</a> value"
-        },
-        {
-          "vuid": "VUID-VkPipelineColorBlendAttachmentState-dstAlphaBlendFactor-parameter",
-          "text": " <code>dstAlphaBlendFactor</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBlendFactor\">VkBlendFactor</a> value"
-        },
-        {
-          "vuid": "VUID-VkPipelineColorBlendAttachmentState-alphaBlendOp-parameter",
-          "text": " <code>alphaBlendOp</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBlendOp\">VkBlendOp</a> value"
-        },
-        {
-          "vuid": "VUID-VkPipelineColorBlendAttachmentState-colorWriteMask-parameter",
-          "text": " <code>colorWriteMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkColorComponentFlagBits\">VkColorComponentFlagBits</a> values"
-        }
-      ],
-      "(VK_EXT_blend_operation_advanced)": [
-        {
-          "vuid": "VUID-VkPipelineColorBlendAttachmentState-colorBlendOp-01406",
-          "text": " If either of <code>colorBlendOp</code> or <code>alphaBlendOp</code> is an &amp;amp;lt;&amp;amp;lt;framebuffer-blend-advanced,advanced blend operation&amp;amp;gt;&amp;amp;gt;, then <code>colorBlendOp</code> <strong class=\"purple\">must</strong> equal <code>alphaBlendOp</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineColorBlendAttachmentState-advancedBlendIndependentBlend-01407",
-          "text": " If <a href=\"#VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT\">VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT</a>::<code>advancedBlendIndependentBlend</code> is <code>VK_FALSE</code> and <code>colorBlendOp</code> is an &amp;amp;lt;&amp;amp;lt;framebuffer-blend-advanced,advanced blend operation&amp;amp;gt;&amp;amp;gt;, then <code>colorBlendOp</code> <strong class=\"purple\">must</strong> be the same for all attachments."
-        },
-        {
-          "vuid": "VUID-VkPipelineColorBlendAttachmentState-advancedBlendIndependentBlend-01408",
-          "text": " If <a href=\"#VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT\">VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT</a>::<code>advancedBlendIndependentBlend</code> is <code>VK_FALSE</code> and <code>alphaBlendOp</code> is an &amp;amp;lt;&amp;amp;lt;framebuffer-blend-advanced,advanced blend operation&amp;amp;gt;&amp;amp;gt;, then <code>alphaBlendOp</code> <strong class=\"purple\">must</strong> be the same for all attachments."
-        },
-        {
-          "vuid": "VUID-VkPipelineColorBlendAttachmentState-advancedBlendAllOperations-01409",
-          "text": " If <a href=\"#VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT\">VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT</a>::<code>advancedBlendAllOperations</code> is <code>VK_FALSE</code>, then <code>colorBlendOp</code> <strong class=\"purple\">must</strong> not be <code>VK_BLEND_OP_ZERO_EXT</code>, <code>VK_BLEND_OP_SRC_EXT</code>, <code>VK_BLEND_OP_DST_EXT</code>, <code>VK_BLEND_OP_SRC_OVER_EXT</code>, <code>VK_BLEND_OP_DST_OVER_EXT</code>, <code>VK_BLEND_OP_SRC_IN_EXT</code>, <code>VK_BLEND_OP_DST_IN_EXT</code>, <code>VK_BLEND_OP_SRC_OUT_EXT</code>, <code>VK_BLEND_OP_DST_OUT_EXT</code>, <code>VK_BLEND_OP_SRC_ATOP_EXT</code>, <code>VK_BLEND_OP_DST_ATOP_EXT</code>, <code>VK_BLEND_OP_XOR_EXT</code>, <code>VK_BLEND_OP_INVERT_EXT</code>, <code>VK_BLEND_OP_INVERT_RGB_EXT</code>, <code>VK_BLEND_OP_LINEARDODGE_EXT</code>, <code>VK_BLEND_OP_LINEARBURN_EXT</code>, <code>VK_BLEND_OP_VIVIDLIGHT_EXT</code>, <code>VK_BLEND_OP_LINEARLIGHT_EXT</code>, <code>VK_BLEND_OP_PINLIGHT_EXT</code>, <code>VK_BLEND_OP_HARDMIX_EXT</code>, <code>VK_BLEND_OP_PLUS_EXT</code>, <code>VK_BLEND_OP_PLUS_CLAMPED_EXT</code>, <code>VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT</code>, <code>VK_BLEND_OP_PLUS_DARKER_EXT</code>, <code>VK_BLEND_OP_MINUS_EXT</code>, <code>VK_BLEND_OP_MINUS_CLAMPED_EXT</code>, <code>VK_BLEND_OP_CONTRAST_EXT</code>, <code>VK_BLEND_OP_INVERT_OVG_EXT</code>, <code>VK_BLEND_OP_RED_EXT</code>, <code>VK_BLEND_OP_GREEN_EXT</code>, or <code>VK_BLEND_OP_BLUE_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineColorBlendAttachmentState-colorBlendOp-01410",
-          "text": " If <code>colorBlendOp</code> or <code>alphaBlendOp</code> is an &amp;amp;lt;&amp;amp;lt;framebuffer-blend-advanced,advanced blend operation&amp;amp;gt;&amp;amp;gt;, then <a href=\"#VkSubpassDescription\">VkSubpassDescription</a>::<code>colorAttachmentCount</code> of the subpass this pipeline is compiled against <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT\">VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT</a>::advancedBlendMaxColorAttachments"
-        }
-      ]
-    },
-    "vkCmdSetBlendConstants": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdSetBlendConstants-None-00612",
-          "text": " The bound graphics pipeline <strong class=\"purple\">must</strong> have been created with the <code>VK_DYNAMIC_STATE_BLEND_CONSTANTS</code> dynamic state enabled"
-        },
-        {
-          "vuid": "VUID-vkCmdSetBlendConstants-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdSetBlendConstants-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdSetBlendConstants-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
-        }
-      ]
-    },
-    "VkPipelineColorBlendAdvancedStateCreateInfoEXT": {
-      "(VK_EXT_blend_operation_advanced)": [
-        {
-          "vuid": "VUID-VkPipelineColorBlendAdvancedStateCreateInfoEXT-srcPremultiplied-01424",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-limits-advancedBlendNonPremultipliedSrcColor,non-premultiplied source color&amp;amp;gt;&amp;amp;gt; property is not supported, <code>srcPremultiplied</code> <strong class=\"purple\">must</strong> be <code>VK_TRUE</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineColorBlendAdvancedStateCreateInfoEXT-dstPremultiplied-01425",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-limits-advancedBlendNonPremultipliedDstColor,non-premultiplied destination color&amp;amp;gt;&amp;amp;gt; property is not supported, <code>dstPremultiplied</code> <strong class=\"purple\">must</strong> be <code>VK_TRUE</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineColorBlendAdvancedStateCreateInfoEXT-blendOverlap-01426",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-limits-advancedBlendCorrelatedOverlap,correlated overlap&amp;amp;gt;&amp;amp;gt; property is not supported, <code>blendOverlap</code> <strong class=\"purple\">must</strong> be <code>VK_BLEND_OVERLAP_UNCORRELATED_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineColorBlendAdvancedStateCreateInfoEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkPipelineColorBlendAdvancedStateCreateInfoEXT-blendOverlap-parameter",
-          "text": " <code>blendOverlap</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBlendOverlapEXT\">VkBlendOverlapEXT</a> value"
-        }
-      ]
-    },
-    "vkCmdDispatch": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdDispatch-groupCountX-00386",
-          "text": " <code>groupCountX</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxComputeWorkGroupCount</code>[0]"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatch-groupCountY-00387",
-          "text": " <code>groupCountY</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxComputeWorkGroupCount</code>[1]"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatch-groupCountZ-00388",
-          "text": " <code>groupCountZ</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxComputeWorkGroupCount</code>[2]"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatch-None-00389",
-          "text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_COMPUTE</code>, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at <code>VK_PIPELINE_BIND_POINT_COMPUTE</code>, with a <code>VkPipelineLayout</code> that is compatible for set <em>n</em>, with the <code>VkPipelineLayout</code> used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatch-None-00390",
-          "text": " Descriptors in each bound descriptor set, specified via <code>vkCmdBindDescriptorSets</code>, <strong class=\"purple\">must</strong> be valid if they are statically used by the bound <code>VkPipeline</code> object, specified via <code>vkCmdBindPipeline</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatch-None-00391",
-          "text": " A valid compute pipeline <strong class=\"purple\">must</strong> be bound to the current command buffer with <code>VK_PIPELINE_BIND_POINT_COMPUTE</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatch-None-00392",
-          "text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_COMPUTE</code>, a push constant value <strong class=\"purple\">must</strong> have been set for <code>VK_PIPELINE_BIND_POINT_COMPUTE</code>, with a <code>VkPipelineLayout</code> that is compatible for push constants with the one used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatch-None-00393",
-          "text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_COMPUTE</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used to sample from any <code>VkImage</code> with a <code>VkImageView</code> of the type <code>VK_IMAGE_VIEW_TYPE_3D</code>, <code>VK_IMAGE_VIEW_TYPE_CUBE</code>, <code>VK_IMAGE_VIEW_TYPE_1D_ARRAY</code>, <code>VK_IMAGE_VIEW_TYPE_2D_ARRAY</code> or <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code>, in any shader stage"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatch-None-00394",
-          "text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_COMPUTE</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used with any of the SPIR-V <code>OpImageSample*</code> or <code>OpImageSparseSample*</code> instructions with <code>ImplicitLod</code>, <code>Dref</code> or <code>Proj</code> in their name, in any shader stage"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatch-None-00395",
-          "text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_COMPUTE</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used with any of the SPIR-V <code>OpImageSample*</code> or <code>OpImageSparseSample*</code> instructions that includes a LOD bias or any offset values, in any shader stage"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatch-None-00396",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_COMPUTE</code> accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatch-None-00397",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_COMPUTE</code> accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatch-linearTilingFeatures-00398",
-          "text": " Any <code>VkImageView</code> being sampled with <code>VK_FILTER_LINEAR</code> as a result of this command <strong class=\"purple\">must</strong> be of a format which supports linear filtering, as specified by the <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT</code> flag in <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> (for a linear image) or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code>(for an optimally tiled image) returned by <code>vkGetPhysicalDeviceFormatProperties</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatch-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatch-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatch-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support compute operations"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatch-renderpass",
-          "text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
-        }
-      ],
-      "(VK_IMG_filter_cubic)": [
-        {
-          "vuid": "VUID-vkCmdDispatch-linearTilingFeatures-00399",
-          "text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_IMG</code> as a result of this command <strong class=\"purple\">must</strong> be of a format which supports cubic filtering, as specified by the <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG</code> flag in <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> (for a linear image) or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code>(for an optimally tiled image) returned by <code>vkGetPhysicalDeviceFormatProperties</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatch-None-00400",
-          "text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_IMG</code> as a result of this command <strong class=\"purple\">must</strong> not have a <a href=\"#VkImageViewType\">VkImageViewType</a> of <code>VK_IMAGE_VIEW_TYPE_3D</code>, <code>VK_IMAGE_VIEW_TYPE_CUBE</code>, or <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code>"
-        }
-      ],
-      "(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-vkCmdDispatch-commandBuffer-01844",
-          "text": " If <code>commandBuffer</code> is an unprotected command buffer, and any pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_COMPUTE</code> reads from or writes to any image or buffer, that image or buffer <strong class=\"purple\">must</strong> not be a protected image or protected buffer."
-        },
-        {
-          "vuid": "VUID-vkCmdDispatch-commandBuffer-01845",
-          "text": " If <code>commandBuffer</code> is a protected command buffer, and any pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_POINT_COMPUTE</code> writes to any image or buffer, that image or buffer <strong class=\"purple\">must</strong> not be an unprotected image or unprotected buffer."
-        },
-        {
-          "vuid": "VUID-vkCmdDispatch-commandBuffer-01846",
-          "text": " If <code>commandBuffer</code> is a protected command buffer, and any pipeline stage other than the compute pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_POINT_COMPUTE</code> reads from any image or buffer, the image or buffer <strong class=\"purple\">must</strong> not be a protected image or protected buffer."
-        }
-      ]
-    },
-    "vkCmdDispatchIndirect": {
-      "core": [
-        {
-          "vuid": "VUID-vkCmdDispatchIndirect-buffer-00401",
-          "text": " If <code>buffer</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatchIndirect-None-00402",
-          "text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_COMPUTE</code>, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at <code>VK_PIPELINE_BIND_POINT_COMPUTE</code>, with a <code>VkPipelineLayout</code> that is compatible for set <em>n</em>, with the <code>VkPipelineLayout</code> used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatchIndirect-None-00403",
-          "text": " Descriptors in each bound descriptor set, specified via <code>vkCmdBindDescriptorSets</code>, <strong class=\"purple\">must</strong> be valid if they are statically used by the bound <code>VkPipeline</code> object, specified via <code>vkCmdBindPipeline</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatchIndirect-None-00404",
-          "text": " A valid compute pipeline <strong class=\"purple\">must</strong> be bound to the current command buffer with <code>VK_PIPELINE_BIND_POINT_COMPUTE</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatchIndirect-buffer-00405",
-          "text": " <code>buffer</code> <strong class=\"purple\">must</strong> have been created with the <code>VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT</code> bit set"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatchIndirect-offset-00406",
-          "text": " <code>offset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatchIndirect-offset-00407",
-          "text": " The sum of <code>offset</code> and the size of <code>VkDispatchIndirectCommand</code> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatchIndirect-None-00408",
-          "text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_COMPUTE</code>, a push constant value <strong class=\"purple\">must</strong> have been set for <code>VK_PIPELINE_BIND_POINT_COMPUTE</code>, with a <code>VkPipelineLayout</code> that is compatible for push constants with the one used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatchIndirect-None-00409",
-          "text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_COMPUTE</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used to sample from any <code>VkImage</code> with a <code>VkImageView</code> of the type <code>VK_IMAGE_VIEW_TYPE_3D</code>, <code>VK_IMAGE_VIEW_TYPE_CUBE</code>, <code>VK_IMAGE_VIEW_TYPE_1D_ARRAY</code>, <code>VK_IMAGE_VIEW_TYPE_2D_ARRAY</code> or <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code>, in any shader stage"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatchIndirect-None-00410",
-          "text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_COMPUTE</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used with any of the SPIR-V <code>OpImageSample*</code> or <code>OpImageSparseSample*</code> instructions with <code>ImplicitLod</code>, <code>Dref</code> or <code>Proj</code> in their name, in any shader stage"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatchIndirect-None-00411",
-          "text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_COMPUTE</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used with any of the SPIR-V <code>OpImageSample*</code> or <code>OpImageSparseSample*</code> instructions that includes a LOD bias or any offset values, in any shader stage"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatchIndirect-None-00412",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_COMPUTE</code> accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatchIndirect-None-00413",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_COMPUTE</code> accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatchIndirect-linearTilingFeatures-00414",
-          "text": " Any <code>VkImageView</code> being sampled with <code>VK_FILTER_LINEAR</code> as a result of this command <strong class=\"purple\">must</strong> be of a format which supports linear filtering, as specified by the <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT</code> flag in <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> (for a linear image) or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code>(for an optimally tiled image) returned by <code>vkGetPhysicalDeviceFormatProperties</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatchIndirect-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatchIndirect-buffer-parameter",
-          "text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatchIndirect-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatchIndirect-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support compute operations"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatchIndirect-renderpass",
-          "text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatchIndirect-commonparent",
-          "text": " Both of <code>buffer</code>, and <code>commandBuffer</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ],
-      "(VK_IMG_filter_cubic)": [
-        {
-          "vuid": "VUID-vkCmdDispatchIndirect-linearTilingFeatures-00415",
-          "text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_IMG</code> as a result of this command <strong class=\"purple\">must</strong> be of a format which supports cubic filtering, as specified by the <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG</code> flag in <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> (for a linear image) or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code>(for an optimally tiled image) returned by <code>vkGetPhysicalDeviceFormatProperties</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatchIndirect-None-00416",
-          "text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_IMG</code> as a result of this command <strong class=\"purple\">must</strong> not have a <a href=\"#VkImageViewType\">VkImageViewType</a> of <code>VK_IMAGE_VIEW_TYPE_3D</code>, <code>VK_IMAGE_VIEW_TYPE_CUBE</code>, or <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code>"
-        }
-      ],
-      "(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-vkCmdDispatchIndirect-commandBuffer-01847",
-          "text": " If <code>commandBuffer</code> is an unprotected command buffer, and any pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_COMPUTE</code> reads from or writes to any image or buffer, that image or buffer <strong class=\"purple\">must</strong> not be a protected image or protected buffer."
-        },
-        {
-          "vuid": "VUID-vkCmdDispatchIndirect-commandBuffer-01848",
-          "text": " If <code>commandBuffer</code> is a protected command buffer, and any pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_POINT_COMPUTE</code> writes to any image or buffer, that image or buffer <strong class=\"purple\">must</strong> not be an unprotected image or unprotected buffer."
-        },
-        {
-          "vuid": "VUID-vkCmdDispatchIndirect-commandBuffer-01849",
-          "text": " If <code>commandBuffer</code> is a protected command buffer, and any pipeline stage other than the compute pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_POINT_COMPUTE</code> reads from any image or buffer, the image or buffer <strong class=\"purple\">must</strong> not be a protected image or protected buffer."
-        }
-      ]
-    },
-    "VkDispatchIndirectCommand": {
-      "core": [
-        {
-          "vuid": "VUID-VkDispatchIndirectCommand-x-00417",
-          "text": " <code>x</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxComputeWorkGroupCount</code>[0]"
-        },
-        {
-          "vuid": "VUID-VkDispatchIndirectCommand-y-00418",
-          "text": " <code>y</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxComputeWorkGroupCount</code>[1]"
-        },
-        {
-          "vuid": "VUID-VkDispatchIndirectCommand-z-00419",
-          "text": " <code>z</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxComputeWorkGroupCount</code>[2]"
-        }
-      ]
-    },
-    "vkCmdDispatchBase": {
-      "(VK_VERSION_1_1,VK_KHR_device_group)": [
-        {
-          "vuid": "VUID-vkCmdDispatchBase-None-00420",
-          "text": " All valid usage rules from <a href=\"#vkCmdDispatch\">vkCmdDispatch</a> apply"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatchBase-baseGroupX-00421",
-          "text": " <code>baseGroupX</code> <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceLimits</code>::<code>maxComputeWorkGroupCount</code>[0]"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatchBase-baseGroupX-00422",
-          "text": " <code>baseGroupX</code> <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceLimits</code>::<code>maxComputeWorkGroupCount</code>[1]"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatchBase-baseGroupZ-00423",
-          "text": " <code>baseGroupZ</code> <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceLimits</code>::<code>maxComputeWorkGroupCount</code>[2]"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatchBase-groupCountX-00424",
-          "text": " <code>groupCountX</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxComputeWorkGroupCount</code>[0] minus <code>baseGroupX</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatchBase-groupCountY-00425",
-          "text": " <code>groupCountY</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxComputeWorkGroupCount</code>[1] minus <code>baseGroupY</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatchBase-groupCountZ-00426",
-          "text": " <code>groupCountZ</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxComputeWorkGroupCount</code>[2] minus <code>baseGroupZ</code>"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatchBase-baseGroupX-00427",
-          "text": " If any of <code>baseGroupX</code>, <code>baseGroupY</code>, or <code>baseGroupZ</code> are not zero, then the bound compute pipeline <strong class=\"purple\">must</strong> have been created with the <code>VK_PIPELINE_CREATE_DISPATCH_BASE</code> flag."
-        },
-        {
-          "vuid": "VUID-vkCmdDispatchBase-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatchBase-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatchBase-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support compute operations"
-        },
-        {
-          "vuid": "VUID-vkCmdDispatchBase-renderpass",
-          "text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX": {
-      "(VK_NVX_device_generated_commands)": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX-pFeatures-parameter",
-          "text": " <code>pFeatures</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkDeviceGeneratedCommandsFeaturesNVX</code> structure"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX-pLimits-parameter",
-          "text": " <code>pLimits</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkDeviceGeneratedCommandsLimitsNVX</code> structure"
-        }
-      ]
-    },
-    "VkDeviceGeneratedCommandsFeaturesNVX": {
-      "(VK_NVX_device_generated_commands)": [
-        {
-          "vuid": "VUID-VkDeviceGeneratedCommandsFeaturesNVX-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVX</code>"
-        },
-        {
-          "vuid": "VUID-VkDeviceGeneratedCommandsFeaturesNVX-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        }
-      ]
-    },
-    "VkDeviceGeneratedCommandsLimitsNVX": {
-      "(VK_NVX_device_generated_commands)": [
-        {
-          "vuid": "VUID-VkDeviceGeneratedCommandsLimitsNVX-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVX</code>"
-        },
-        {
-          "vuid": "VUID-VkDeviceGeneratedCommandsLimitsNVX-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        }
-      ]
-    },
-    "vkCreateObjectTableNVX": {
-      "(VK_NVX_device_generated_commands)": [
-        {
-          "vuid": "VUID-vkCreateObjectTableNVX-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateObjectTableNVX-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkObjectTableCreateInfoNVX</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateObjectTableNVX-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateObjectTableNVX-pObjectTable-parameter",
-          "text": " <code>pObjectTable</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkObjectTableNVX</code> handle"
-        }
-      ]
-    },
-    "VkObjectTableCreateInfoNVX": {
-      "(VK_NVX_device_generated_commands)": [
-        {
-          "vuid": "VUID-VkObjectTableCreateInfoNVX-computeBindingPointSupport-01355",
-          "text": " If the <code>VkDeviceGeneratedCommandsFeaturesNVX</code>::<code>computeBindingPointSupport</code> feature is not enabled, <code>pObjectEntryUsageFlags</code> <strong class=\"purple\">must</strong> not contain <code>VK_OBJECT_ENTRY_USAGE_COMPUTE_BIT_NVX</code>"
-        },
-        {
-          "vuid": "VUID-VkObjectTableCreateInfoNVX-pObjectEntryCounts-01356",
-          "text": " Any value within <code>pObjectEntryCounts</code> <strong class=\"purple\">must</strong> not exceed <code>VkDeviceGeneratedCommandsLimitsNVX</code>::<code>maxObjectEntryCounts</code>"
-        },
-        {
-          "vuid": "VUID-VkObjectTableCreateInfoNVX-maxUniformBuffersPerDescriptor-01357",
-          "text": " <code>maxUniformBuffersPerDescriptor</code> <strong class=\"purple\">must</strong> be within the limits supported by the device."
-        },
-        {
-          "vuid": "VUID-VkObjectTableCreateInfoNVX-maxStorageBuffersPerDescriptor-01358",
-          "text": " <code>maxStorageBuffersPerDescriptor</code> <strong class=\"purple\">must</strong> be within the limits supported by the device."
-        },
-        {
-          "vuid": "VUID-VkObjectTableCreateInfoNVX-maxStorageImagesPerDescriptor-01359",
-          "text": " <code>maxStorageImagesPerDescriptor</code> <strong class=\"purple\">must</strong> be within the limits supported by the device."
-        },
-        {
-          "vuid": "VUID-VkObjectTableCreateInfoNVX-maxSampledImagesPerDescriptor-01360",
-          "text": " <code>maxSampledImagesPerDescriptor</code> <strong class=\"purple\">must</strong> be within the limits supported by the device."
-        },
-        {
-          "vuid": "VUID-VkObjectTableCreateInfoNVX-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX</code>"
-        },
-        {
-          "vuid": "VUID-VkObjectTableCreateInfoNVX-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkObjectTableCreateInfoNVX-pObjectEntryTypes-parameter",
-          "text": " <code>pObjectEntryTypes</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>objectCount</code> valid <a href=\"#VkObjectEntryTypeNVX\">VkObjectEntryTypeNVX</a> values"
-        },
-        {
-          "vuid": "VUID-VkObjectTableCreateInfoNVX-pObjectEntryCounts-parameter",
-          "text": " <code>pObjectEntryCounts</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>objectCount</code> <code>uint32_t</code> values"
-        },
-        {
-          "vuid": "VUID-VkObjectTableCreateInfoNVX-pObjectEntryUsageFlags-parameter",
-          "text": " <code>pObjectEntryUsageFlags</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>objectCount</code> valid combinations of <a href=\"#VkObjectEntryUsageFlagBitsNVX\">VkObjectEntryUsageFlagBitsNVX</a> values"
-        },
-        {
-          "vuid": "VUID-VkObjectTableCreateInfoNVX-pObjectEntryUsageFlags-requiredbitmask",
-          "text": " Each element of <code>pObjectEntryUsageFlags</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkObjectTableCreateInfoNVX-objectCount-arraylength",
-          "text": " <code>objectCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ]
-    },
-    "vkDestroyObjectTableNVX": {
-      "(VK_NVX_device_generated_commands)": [
-        {
-          "vuid": "VUID-vkDestroyObjectTableNVX-objectTable-01361",
-          "text": " All submitted commands that refer to <code>objectTable</code> <strong class=\"purple\">must</strong> have completed execution."
-        },
-        {
-          "vuid": "VUID-vkDestroyObjectTableNVX-objectTable-01362",
-          "text": " If <code>VkAllocationCallbacks</code> were provided when <code>objectTable</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here."
-        },
-        {
-          "vuid": "VUID-vkDestroyObjectTableNVX-objectTable-01363",
-          "text": " If no <code>VkAllocationCallbacks</code> were provided when <code>objectTable</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>."
-        },
-        {
-          "vuid": "VUID-vkDestroyObjectTableNVX-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyObjectTableNVX-objectTable-parameter",
-          "text": " <code>objectTable</code> <strong class=\"purple\">must</strong> be a valid <code>VkObjectTableNVX</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyObjectTableNVX-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkDestroyObjectTableNVX-objectTable-parent",
-          "text": " <code>objectTable</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkRegisterObjectsNVX": {
-      "(VK_NVX_device_generated_commands)": [
-        {
-          "vuid": "VUID-vkRegisterObjectsNVX-pObjectTableEntry-01364",
-          "text": " The contents of <code>pObjectTableEntry</code> <strong class=\"purple\">must</strong> yield plausible bindings supported by the device."
-        },
-        {
-          "vuid": "VUID-vkRegisterObjectsNVX-pObjectIndices-01365",
-          "text": " At any <code>pObjectIndices</code> there <strong class=\"purple\">must</strong> not be a registered resource already."
-        },
-        {
-          "vuid": "VUID-vkRegisterObjectsNVX-pObjectIndices-01366",
-          "text": " Any value inside <code>pObjectIndices</code> <strong class=\"purple\">must</strong> be below the appropriate <code>VkObjectTableCreateInfoNVX</code>::<code>pObjectEntryCounts</code> limits provided at <code>objectTable</code> creation time."
-        },
-        {
-          "vuid": "VUID-vkRegisterObjectsNVX-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkRegisterObjectsNVX-objectTable-parameter",
-          "text": " <code>objectTable</code> <strong class=\"purple\">must</strong> be a valid <code>VkObjectTableNVX</code> handle"
-        },
-        {
-          "vuid": "VUID-vkRegisterObjectsNVX-ppObjectTableEntries-parameter",
-          "text": " <code>ppObjectTableEntries</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>objectCount</code> valid <code>VkObjectTableEntryNVX</code> structures"
-        },
-        {
-          "vuid": "VUID-vkRegisterObjectsNVX-pObjectIndices-parameter",
-          "text": " <code>pObjectIndices</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>objectCount</code> <code>uint32_t</code> values"
-        },
-        {
-          "vuid": "VUID-vkRegisterObjectsNVX-objectCount-arraylength",
-          "text": " <code>objectCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkRegisterObjectsNVX-objectTable-parent",
-          "text": " <code>objectTable</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "VkObjectTableEntryNVX": {
-      "(VK_NVX_device_generated_commands)": [
-        {
-          "vuid": "VUID-VkObjectTableEntryNVX-computeBindingPointSupport-01367",
-          "text": " If the <code>VkDeviceGeneratedCommandsFeaturesNVX</code>::<code>computeBindingPointSupport</code> feature is not enabled, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_OBJECT_ENTRY_USAGE_COMPUTE_BIT_NVX</code>"
-        },
-        {
-          "vuid": "VUID-VkObjectTableEntryNVX-type-parameter",
-          "text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkObjectEntryTypeNVX\">VkObjectEntryTypeNVX</a> value"
-        },
-        {
-          "vuid": "VUID-VkObjectTableEntryNVX-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkObjectEntryUsageFlagBitsNVX\">VkObjectEntryUsageFlagBitsNVX</a> values"
-        },
-        {
-          "vuid": "VUID-VkObjectTableEntryNVX-flags-requiredbitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        }
-      ]
-    },
-    "VkObjectTablePipelineEntryNVX": {
-      "(VK_NVX_device_generated_commands)": [
-        {
-          "vuid": "VUID-VkObjectTablePipelineEntryNVX-type-01368",
-          "text": " <code>type</code> <strong class=\"purple\">must</strong> be <code>VK_OBJECT_ENTRY_TYPE_PIPELINE_NVX</code>"
-        },
-        {
-          "vuid": "VUID-VkObjectTablePipelineEntryNVX-type-parameter",
-          "text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkObjectEntryTypeNVX\">VkObjectEntryTypeNVX</a> value"
-        },
-        {
-          "vuid": "VUID-VkObjectTablePipelineEntryNVX-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkObjectEntryUsageFlagBitsNVX\">VkObjectEntryUsageFlagBitsNVX</a> values"
-        },
-        {
-          "vuid": "VUID-VkObjectTablePipelineEntryNVX-flags-requiredbitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkObjectTablePipelineEntryNVX-pipeline-parameter",
-          "text": " <code>pipeline</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipeline</code> handle"
-        }
-      ]
-    },
-    "VkObjectTableDescriptorSetEntryNVX": {
-      "(VK_NVX_device_generated_commands)": [
-        {
-          "vuid": "VUID-VkObjectTableDescriptorSetEntryNVX-type-01369",
-          "text": " <code>type</code> <strong class=\"purple\">must</strong> be <code>VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX</code>"
-        },
-        {
-          "vuid": "VUID-VkObjectTableDescriptorSetEntryNVX-type-parameter",
-          "text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkObjectEntryTypeNVX\">VkObjectEntryTypeNVX</a> value"
-        },
-        {
-          "vuid": "VUID-VkObjectTableDescriptorSetEntryNVX-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkObjectEntryUsageFlagBitsNVX\">VkObjectEntryUsageFlagBitsNVX</a> values"
-        },
-        {
-          "vuid": "VUID-VkObjectTableDescriptorSetEntryNVX-flags-requiredbitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkObjectTableDescriptorSetEntryNVX-pipelineLayout-parameter",
-          "text": " <code>pipelineLayout</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipelineLayout</code> handle"
-        },
-        {
-          "vuid": "VUID-VkObjectTableDescriptorSetEntryNVX-descriptorSet-parameter",
-          "text": " <code>descriptorSet</code> <strong class=\"purple\">must</strong> be a valid <code>VkDescriptorSet</code> handle"
-        },
-        {
-          "vuid": "VUID-VkObjectTableDescriptorSetEntryNVX-commonparent",
-          "text": " Both of <code>descriptorSet</code>, and <code>pipelineLayout</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ]
-    },
-    "VkObjectTableVertexBufferEntryNVX": {
-      "(VK_NVX_device_generated_commands)": [
-        {
-          "vuid": "VUID-VkObjectTableVertexBufferEntryNVX-type-01370",
-          "text": " <code>type</code> <strong class=\"purple\">must</strong> be <code>VK_OBJECT_ENTRY_TYPE_VERTEX_BUFFER_NVX</code>"
-        },
-        {
-          "vuid": "VUID-VkObjectTableVertexBufferEntryNVX-type-parameter",
-          "text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkObjectEntryTypeNVX\">VkObjectEntryTypeNVX</a> value"
-        },
-        {
-          "vuid": "VUID-VkObjectTableVertexBufferEntryNVX-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkObjectEntryUsageFlagBitsNVX\">VkObjectEntryUsageFlagBitsNVX</a> values"
-        },
-        {
-          "vuid": "VUID-VkObjectTableVertexBufferEntryNVX-flags-requiredbitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkObjectTableVertexBufferEntryNVX-buffer-parameter",
-          "text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
-        }
-      ]
-    },
-    "VkObjectTableIndexBufferEntryNVX": {
-      "(VK_NVX_device_generated_commands)": [
-        {
-          "vuid": "VUID-VkObjectTableIndexBufferEntryNVX-type-01371",
-          "text": " <code>type</code> <strong class=\"purple\">must</strong> be <code>VK_OBJECT_ENTRY_TYPE_INDEX_BUFFER_NVX</code>"
-        },
-        {
-          "vuid": "VUID-VkObjectTableIndexBufferEntryNVX-type-parameter",
-          "text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkObjectEntryTypeNVX\">VkObjectEntryTypeNVX</a> value"
-        },
-        {
-          "vuid": "VUID-VkObjectTableIndexBufferEntryNVX-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkObjectEntryUsageFlagBitsNVX\">VkObjectEntryUsageFlagBitsNVX</a> values"
-        },
-        {
-          "vuid": "VUID-VkObjectTableIndexBufferEntryNVX-flags-requiredbitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkObjectTableIndexBufferEntryNVX-buffer-parameter",
-          "text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-VkObjectTableIndexBufferEntryNVX-indexType-parameter",
-          "text": " <code>indexType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkIndexType\">VkIndexType</a> value"
-        }
-      ]
-    },
-    "VkObjectTablePushConstantEntryNVX": {
-      "(VK_NVX_device_generated_commands)": [
-        {
-          "vuid": "VUID-VkObjectTablePushConstantEntryNVX-type-01372",
-          "text": " <code>type</code> <strong class=\"purple\">must</strong> be <code>VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX</code>"
-        },
-        {
-          "vuid": "VUID-VkObjectTablePushConstantEntryNVX-type-parameter",
-          "text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkObjectEntryTypeNVX\">VkObjectEntryTypeNVX</a> value"
-        },
-        {
-          "vuid": "VUID-VkObjectTablePushConstantEntryNVX-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkObjectEntryUsageFlagBitsNVX\">VkObjectEntryUsageFlagBitsNVX</a> values"
-        },
-        {
-          "vuid": "VUID-VkObjectTablePushConstantEntryNVX-flags-requiredbitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkObjectTablePushConstantEntryNVX-pipelineLayout-parameter",
-          "text": " <code>pipelineLayout</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipelineLayout</code> handle"
-        },
-        {
-          "vuid": "VUID-VkObjectTablePushConstantEntryNVX-stageFlags-parameter",
-          "text": " <code>stageFlags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkShaderStageFlagBits\">VkShaderStageFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkObjectTablePushConstantEntryNVX-stageFlags-requiredbitmask",
-          "text": " <code>stageFlags</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        }
-      ]
-    },
-    "vkUnregisterObjectsNVX": {
-      "(VK_NVX_device_generated_commands)": [
-        {
-          "vuid": "VUID-vkUnregisterObjectsNVX-pObjectIndices-01373",
-          "text": " At any <code>pObjectIndices</code> there <strong class=\"purple\">must</strong> be a registered resource already."
-        },
-        {
-          "vuid": "VUID-vkUnregisterObjectsNVX-pObjectEntryTypes-01374",
-          "text": " The <code>pObjectEntryTypes</code> of the resource at <code>pObjectIndices</code> <strong class=\"purple\">must</strong> match."
-        },
-        {
-          "vuid": "VUID-vkUnregisterObjectsNVX-None-01375",
-          "text": " All operations on the device using the registered resource <strong class=\"purple\">must</strong> have been completed."
-        },
-        {
-          "vuid": "VUID-vkUnregisterObjectsNVX-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkUnregisterObjectsNVX-objectTable-parameter",
-          "text": " <code>objectTable</code> <strong class=\"purple\">must</strong> be a valid <code>VkObjectTableNVX</code> handle"
-        },
-        {
-          "vuid": "VUID-vkUnregisterObjectsNVX-pObjectEntryTypes-parameter",
-          "text": " <code>pObjectEntryTypes</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>objectCount</code> valid <a href=\"#VkObjectEntryTypeNVX\">VkObjectEntryTypeNVX</a> values"
-        },
-        {
-          "vuid": "VUID-vkUnregisterObjectsNVX-pObjectIndices-parameter",
-          "text": " <code>pObjectIndices</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>objectCount</code> <code>uint32_t</code> values"
-        },
-        {
-          "vuid": "VUID-vkUnregisterObjectsNVX-objectCount-arraylength",
-          "text": " <code>objectCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkUnregisterObjectsNVX-objectTable-parent",
-          "text": " <code>objectTable</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "VkIndirectCommandsLayoutTokenNVX": {
-      "(VK_NVX_device_generated_commands)": [
-        {
-          "vuid": "VUID-VkIndirectCommandsLayoutTokenNVX-bindingUnit-01342",
-          "text": " <code>bindingUnit</code> <strong class=\"purple\">must</strong> stay within device supported limits for the appropriate commands."
-        },
-        {
-          "vuid": "VUID-VkIndirectCommandsLayoutTokenNVX-dynamicCount-01343",
-          "text": " <code>dynamicCount</code> <strong class=\"purple\">must</strong> stay within device supported limits for the appropriate commands."
-        },
-        {
-          "vuid": "VUID-VkIndirectCommandsLayoutTokenNVX-divisor-01344",
-          "text": " <code>divisor</code> <strong class=\"purple\">must</strong> be greater than <code>0</code> and a power of two."
-        },
-        {
-          "vuid": "VUID-VkIndirectCommandsLayoutTokenNVX-tokenType-parameter",
-          "text": " <code>tokenType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkIndirectCommandsTokenTypeNVX\">VkIndirectCommandsTokenTypeNVX</a> value"
-        }
-      ]
-    },
-    "VkIndirectCommandsTokenNVX": {
-      "(VK_NVX_device_generated_commands)": [
-        {
-          "vuid": "VUID-VkIndirectCommandsTokenNVX-buffer-01345",
-          "text": " The <code>buffer</code>&#8217;s usage flag <strong class=\"purple\">must</strong> have the <code>VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT</code> bit set."
-        },
-        {
-          "vuid": "VUID-VkIndirectCommandsTokenNVX-offset-01346",
-          "text": " The <code>offset</code> <strong class=\"purple\">must</strong> be aligned to <code>VkDeviceGeneratedCommandsLimitsNVX</code>::<code>minCommandsTokenBufferOffsetAlignment</code>."
-        },
-        {
-          "vuid": "VUID-VkIndirectCommandsTokenNVX-tokenType-parameter",
-          "text": " <code>tokenType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkIndirectCommandsTokenTypeNVX\">VkIndirectCommandsTokenTypeNVX</a> value"
-        },
-        {
-          "vuid": "VUID-VkIndirectCommandsTokenNVX-buffer-parameter",
-          "text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
-        }
-      ]
-    },
-    "vkCreateIndirectCommandsLayoutNVX": {
-      "(VK_NVX_device_generated_commands)": [
-        {
-          "vuid": "VUID-vkCreateIndirectCommandsLayoutNVX-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateIndirectCommandsLayoutNVX-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkIndirectCommandsLayoutCreateInfoNVX</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateIndirectCommandsLayoutNVX-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateIndirectCommandsLayoutNVX-pIndirectCommandsLayout-parameter",
-          "text": " <code>pIndirectCommandsLayout</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkIndirectCommandsLayoutNVX</code> handle"
-        }
-      ]
-    },
-    "VkIndirectCommandsLayoutCreateInfoNVX": {
-      "(VK_NVX_device_generated_commands)": [
-        {
-          "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNVX-tokenCount-01347",
-          "text": " <code>tokenCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code> and below <code>VkDeviceGeneratedCommandsLimitsNVX</code>::<code>maxIndirectCommandsLayoutTokenCount</code>"
-        },
-        {
-          "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNVX-computeBindingPointSupport-01348",
-          "text": " If the <code>VkDeviceGeneratedCommandsFeaturesNVX</code>::<code>computeBindingPointSupport</code> feature is not enabled, then <code>pipelineBindPoint</code> <strong class=\"purple\">must</strong> not be <code>VK_PIPELINE_BIND_POINT_COMPUTE</code>"
-        },
-        {
-          "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNVX-pTokens-01349",
-          "text": " If <code>pTokens</code> contains an entry of <code>VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX</code> it <strong class=\"purple\">must</strong> be the first element of the array and there <strong class=\"purple\">must</strong> be only a single element of such token type."
-        },
-        {
-          "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNVX-pTokens-01350",
-          "text": " All state binding tokens in <code>pTokens</code> <strong class=\"purple\">must</strong> occur prior work provoking tokens (<code>VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX</code>, <code>VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NVX</code>, <code>VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX</code>)."
-        },
-        {
-          "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNVX-pTokens-01351",
-          "text": " The content of <code>pTokens</code> <strong class=\"purple\">must</strong> include one single work provoking token that is compatible with the <code>pipelineBindPoint</code>."
-        },
-        {
-          "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNVX-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX</code>"
-        },
-        {
-          "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNVX-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNVX-pipelineBindPoint-parameter",
-          "text": " <code>pipelineBindPoint</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipelineBindPoint\">VkPipelineBindPoint</a> value"
-        },
-        {
-          "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNVX-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkIndirectCommandsLayoutUsageFlagBitsNVX\">VkIndirectCommandsLayoutUsageFlagBitsNVX</a> values"
-        },
-        {
-          "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNVX-flags-requiredbitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNVX-pTokens-parameter",
-          "text": " <code>pTokens</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>tokenCount</code> valid <code>VkIndirectCommandsLayoutTokenNVX</code> structures"
-        },
-        {
-          "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNVX-tokenCount-arraylength",
-          "text": " <code>tokenCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ]
-    },
-    "vkDestroyIndirectCommandsLayoutNVX": {
-      "(VK_NVX_device_generated_commands)": [
-        {
-          "vuid": "VUID-vkDestroyIndirectCommandsLayoutNVX-indirectCommandsLayout-01352",
-          "text": " All submitted commands that refer to <code>indirectCommandsLayout</code> <strong class=\"purple\">must</strong> have completed execution"
-        },
-        {
-          "vuid": "VUID-vkDestroyIndirectCommandsLayoutNVX-objectTable-01353",
-          "text": " If <code>VkAllocationCallbacks</code> were provided when <code>objectTable</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
-        },
-        {
-          "vuid": "VUID-vkDestroyIndirectCommandsLayoutNVX-objectTable-01354",
-          "text": " If no <code>VkAllocationCallbacks</code> were provided when <code>objectTable</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-vkDestroyIndirectCommandsLayoutNVX-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyIndirectCommandsLayoutNVX-indirectCommandsLayout-parameter",
-          "text": " <code>indirectCommandsLayout</code> <strong class=\"purple\">must</strong> be a valid <code>VkIndirectCommandsLayoutNVX</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyIndirectCommandsLayoutNVX-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkDestroyIndirectCommandsLayoutNVX-indirectCommandsLayout-parent",
-          "text": " <code>indirectCommandsLayout</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkCmdReserveSpaceForCommandsNVX": {
-      "(VK_NVX_device_generated_commands)": [
-        {
-          "vuid": "VUID-vkCmdReserveSpaceForCommandsNVX-commandBuffer-01329",
-          "text": " The provided <code>commandBuffer</code> <strong class=\"purple\">must</strong> not have had a prior space reservation since its creation or the last reset."
-        },
-        {
-          "vuid": "VUID-vkCmdReserveSpaceForCommandsNVX-commandBuffer-01330",
-          "text": " The state of the <code>commandBuffer</code> <strong class=\"purple\">must</strong> be legal to execute all commands within the sequence provided by the <code>indirectCommandsLayout</code> member of <code>pProcessCommandsInfo</code>."
-        },
-        {
-          "vuid": "VUID-vkCmdReserveSpaceForCommandsNVX-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdReserveSpaceForCommandsNVX-pReserveSpaceInfo-parameter",
-          "text": " <code>pReserveSpaceInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkCmdReserveSpaceForCommandsInfoNVX</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCmdReserveSpaceForCommandsNVX-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdReserveSpaceForCommandsNVX-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
-        },
-        {
-          "vuid": "VUID-vkCmdReserveSpaceForCommandsNVX-renderpass",
-          "text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
-        },
-        {
-          "vuid": "VUID-vkCmdReserveSpaceForCommandsNVX-bufferlevel",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a secondary <code>VkCommandBuffer</code>"
-        }
-      ]
-    },
-    "VkCmdReserveSpaceForCommandsInfoNVX": {
-      "(VK_NVX_device_generated_commands)": [
-        {
-          "vuid": "VUID-VkCmdReserveSpaceForCommandsInfoNVX-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVX</code>"
-        },
-        {
-          "vuid": "VUID-VkCmdReserveSpaceForCommandsInfoNVX-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkCmdReserveSpaceForCommandsInfoNVX-objectTable-parameter",
-          "text": " <code>objectTable</code> <strong class=\"purple\">must</strong> be a valid <code>VkObjectTableNVX</code> handle"
-        },
-        {
-          "vuid": "VUID-VkCmdReserveSpaceForCommandsInfoNVX-indirectCommandsLayout-parameter",
-          "text": " <code>indirectCommandsLayout</code> <strong class=\"purple\">must</strong> be a valid <code>VkIndirectCommandsLayoutNVX</code> handle"
-        },
-        {
-          "vuid": "VUID-VkCmdReserveSpaceForCommandsInfoNVX-commonparent",
-          "text": " Both of <code>indirectCommandsLayout</code>, and <code>objectTable</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ]
-    },
-    "vkCmdProcessCommandsNVX": {
-      "(VK_NVX_device_generated_commands)": [
-        {
-          "vuid": "VUID-vkCmdProcessCommandsNVX-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdProcessCommandsNVX-pProcessCommandsInfo-parameter",
-          "text": " <code>pProcessCommandsInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkCmdProcessCommandsInfoNVX</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCmdProcessCommandsNVX-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdProcessCommandsNVX-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
-        },
-        {
-          "vuid": "VUID-vkCmdProcessCommandsNVX-renderpass",
-          "text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
-        }
-      ]
-    },
-    "VkCmdProcessCommandsInfoNVX": {
-      "(VK_NVX_device_generated_commands)": [
-        {
-          "vuid": "VUID-VkCmdProcessCommandsInfoNVX-objectTable-01331",
-          "text": " The provided <code>objectTable</code> <strong class=\"purple\">must</strong> include all objects referenced by the generation process."
-        },
-        {
-          "vuid": "VUID-VkCmdProcessCommandsInfoNVX-indirectCommandsTokenCount-01332",
-          "text": " <code>indirectCommandsTokenCount</code> <strong class=\"purple\">must</strong> match the <code>indirectCommandsLayout</code>&#8217;s <code>tokenCount</code>."
-        },
-        {
-          "vuid": "VUID-VkCmdProcessCommandsInfoNVX-tokenType-01333",
-          "text": " The <code>tokenType</code> member of each entry in the <code>pIndirectCommandsTokens</code> array <strong class=\"purple\">must</strong> match the values used at creation time of <code>indirectCommandsLayout</code>"
-        },
-        {
-          "vuid": "VUID-VkCmdProcessCommandsInfoNVX-targetCommandBuffer-01334",
-          "text": " If <code>targetCommandBuffer</code> is provided, it <strong class=\"purple\">must</strong> have reserved command space."
-        },
-        {
-          "vuid": "VUID-VkCmdProcessCommandsInfoNVX-targetCommandBuffer-01335",
-          "text": " If <code>targetCommandBuffer</code> is provided, the <code>objectTable</code> <strong class=\"purple\">must</strong> match the reservation&#8217;s objectTable and <strong class=\"purple\">must</strong> have had all referenced objects registered at reservation time."
-        },
-        {
-          "vuid": "VUID-VkCmdProcessCommandsInfoNVX-targetCommandBuffer-01336",
-          "text": " If <code>targetCommandBuffer</code> is provided, the <code>indirectCommandsLayout</code> <strong class=\"purple\">must</strong> match the reservation&#8217;s indirectCommandsLayout."
-        },
-        {
-          "vuid": "VUID-VkCmdProcessCommandsInfoNVX-targetCommandBuffer-01337",
-          "text": " If <code>targetCommandBuffer</code> is provided, the <code>maxSequencesCount</code> <strong class=\"purple\">must</strong> not exceed the reservation&#8217;s maxSequencesCount."
-        },
-        {
-          "vuid": "VUID-VkCmdProcessCommandsInfoNVX-sequencesCountBuffer-01338",
-          "text": " If <code>sequencesCountBuffer</code> is used, its usage flag <strong class=\"purple\">must</strong> have <code>VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT</code> bit set."
-        },
-        {
-          "vuid": "VUID-VkCmdProcessCommandsInfoNVX-sequencesCountBuffer-01339",
-          "text": " If <code>sequencesCountBuffer</code> is used, <code>sequencesCountOffset</code> <strong class=\"purple\">must</strong> be aligned to <code>VkDeviceGeneratedCommandsLimitsNVX</code>::<code>minSequenceCountBufferOffsetAlignment</code>."
-        },
-        {
-          "vuid": "VUID-VkCmdProcessCommandsInfoNVX-sequencesIndexBuffer-01340",
-          "text": " If <code>sequencesIndexBuffer</code> is used, its usage flag <strong class=\"purple\">must</strong> have <code>VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT</code> bit set."
-        },
-        {
-          "vuid": "VUID-VkCmdProcessCommandsInfoNVX-sequencesIndexBuffer-01341",
-          "text": " If <code>sequencesIndexBuffer</code> is used, <code>sequencesIndexOffset</code> <strong class=\"purple\">must</strong> be aligned to <code>VkDeviceGeneratedCommandsLimitsNVX</code>::<code>minSequenceIndexBufferOffsetAlignment</code>."
-        },
-        {
-          "vuid": "VUID-VkCmdProcessCommandsInfoNVX-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVX</code>"
-        },
-        {
-          "vuid": "VUID-VkCmdProcessCommandsInfoNVX-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkCmdProcessCommandsInfoNVX-objectTable-parameter",
-          "text": " <code>objectTable</code> <strong class=\"purple\">must</strong> be a valid <code>VkObjectTableNVX</code> handle"
-        },
-        {
-          "vuid": "VUID-VkCmdProcessCommandsInfoNVX-indirectCommandsLayout-parameter",
-          "text": " <code>indirectCommandsLayout</code> <strong class=\"purple\">must</strong> be a valid <code>VkIndirectCommandsLayoutNVX</code> handle"
-        },
-        {
-          "vuid": "VUID-VkCmdProcessCommandsInfoNVX-pIndirectCommandsTokens-parameter",
-          "text": " <code>pIndirectCommandsTokens</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>indirectCommandsTokenCount</code> valid <code>VkIndirectCommandsTokenNVX</code> structures"
-        },
-        {
-          "vuid": "VUID-VkCmdProcessCommandsInfoNVX-targetCommandBuffer-parameter",
-          "text": " If <code>targetCommandBuffer</code> is not <code>NULL</code>, <code>targetCommandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-VkCmdProcessCommandsInfoNVX-sequencesCountBuffer-parameter",
-          "text": " If <code>sequencesCountBuffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>sequencesCountBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-VkCmdProcessCommandsInfoNVX-sequencesIndexBuffer-parameter",
-          "text": " If <code>sequencesIndexBuffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>sequencesIndexBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-VkCmdProcessCommandsInfoNVX-indirectCommandsTokenCount-arraylength",
-          "text": " <code>indirectCommandsTokenCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkCmdProcessCommandsInfoNVX-commonparent",
-          "text": " Each of <code>indirectCommandsLayout</code>, <code>objectTable</code>, <code>sequencesCountBuffer</code>, <code>sequencesIndexBuffer</code>, and <code>targetCommandBuffer</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceSparseImageFormatProperties": {
-      "core": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties-samples-01094",
-          "text": " <code>samples</code> <strong class=\"purple\">must</strong> be a bit value that is set in <code>VkImageFormatProperties</code>::<code>sampleCounts</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties</code> with <code>format</code>, <code>type</code>, <code>tiling</code>, and <code>usage</code> equal to those in this command and <code>flags</code> equal to the value that is set in <code>VkImageCreateInfo</code>::<code>flags</code> when the image is created"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties-format-parameter",
-          "text": " <code>format</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFormat\">VkFormat</a> value"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties-type-parameter",
-          "text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageType\">VkImageType</a> value"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties-samples-parameter",
-          "text": " <code>samples</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSampleCountFlagBits\">VkSampleCountFlagBits</a> value"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties-usage-parameter",
-          "text": " <code>usage</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageUsageFlagBits\">VkImageUsageFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties-usage-requiredbitmask",
-          "text": " <code>usage</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties-tiling-parameter",
-          "text": " <code>tiling</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageTiling\">VkImageTiling</a> value"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties-pPropertyCount-parameter",
-          "text": " <code>pPropertyCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties-pProperties-parameter",
-          "text": " If the value referenced by <code>pPropertyCount</code> is not <code>0</code>, and <code>pProperties</code> is not <code>NULL</code>, <code>pProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pPropertyCount</code> <code>VkSparseImageFormatProperties</code> structures"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceSparseImageFormatProperties2": {
-      "(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties2-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties2-pFormatInfo-parameter",
-          "text": " <code>pFormatInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPhysicalDeviceSparseImageFormatInfo2</code> structure"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties2-pPropertyCount-parameter",
-          "text": " <code>pPropertyCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties2-pProperties-parameter",
-          "text": " If the value referenced by <code>pPropertyCount</code> is not <code>0</code>, and <code>pProperties</code> is not <code>NULL</code>, <code>pProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pPropertyCount</code> <code>VkSparseImageFormatProperties2</code> structures"
-        }
-      ]
-    },
-    "VkPhysicalDeviceSparseImageFormatInfo2": {
-      "(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
-        {
-          "vuid": "VUID-VkPhysicalDeviceSparseImageFormatInfo2-samples-01095",
-          "text": " <code>samples</code> <strong class=\"purple\">must</strong> be a bit value that is set in <code>VkImageFormatProperties</code>::<code>sampleCounts</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties</code> with <code>format</code>, <code>type</code>, <code>tiling</code>, and <code>usage</code> equal to those in this command and <code>flags</code> equal to the value that is set in <code>VkImageCreateInfo</code>::<code>flags</code> when the image is created"
-        },
-        {
-          "vuid": "VUID-VkPhysicalDeviceSparseImageFormatInfo2-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2</code>"
-        },
-        {
-          "vuid": "VUID-VkPhysicalDeviceSparseImageFormatInfo2-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkPhysicalDeviceSparseImageFormatInfo2-format-parameter",
-          "text": " <code>format</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFormat\">VkFormat</a> value"
-        },
-        {
-          "vuid": "VUID-VkPhysicalDeviceSparseImageFormatInfo2-type-parameter",
-          "text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageType\">VkImageType</a> value"
-        },
-        {
-          "vuid": "VUID-VkPhysicalDeviceSparseImageFormatInfo2-samples-parameter",
-          "text": " <code>samples</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSampleCountFlagBits\">VkSampleCountFlagBits</a> value"
-        },
-        {
-          "vuid": "VUID-VkPhysicalDeviceSparseImageFormatInfo2-usage-parameter",
-          "text": " <code>usage</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageUsageFlagBits\">VkImageUsageFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkPhysicalDeviceSparseImageFormatInfo2-usage-requiredbitmask",
-          "text": " <code>usage</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkPhysicalDeviceSparseImageFormatInfo2-tiling-parameter",
-          "text": " <code>tiling</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageTiling\">VkImageTiling</a> value"
-        }
-      ]
-    },
-    "VkSparseImageFormatProperties2": {
-      "(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
-        {
-          "vuid": "VUID-VkSparseImageFormatProperties2-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2</code>"
-        },
-        {
-          "vuid": "VUID-VkSparseImageFormatProperties2-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        }
-      ]
-    },
-    "vkGetImageSparseMemoryRequirements": {
-      "core": [
-        {
-          "vuid": "VUID-vkGetImageSparseMemoryRequirements-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetImageSparseMemoryRequirements-image-parameter",
-          "text": " <code>image</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetImageSparseMemoryRequirements-pSparseMemoryRequirementCount-parameter",
-          "text": " <code>pSparseMemoryRequirementCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
-        },
-        {
-          "vuid": "VUID-vkGetImageSparseMemoryRequirements-pSparseMemoryRequirements-parameter",
-          "text": " If the value referenced by <code>pSparseMemoryRequirementCount</code> is not <code>0</code>, and <code>pSparseMemoryRequirements</code> is not <code>NULL</code>, <code>pSparseMemoryRequirements</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pSparseMemoryRequirementCount</code> <code>VkSparseImageMemoryRequirements</code> structures"
-        },
-        {
-          "vuid": "VUID-vkGetImageSparseMemoryRequirements-image-parent",
-          "text": " <code>image</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        }
-      ]
-    },
-    "vkGetImageSparseMemoryRequirements2": {
-      "(VK_VERSION_1_1,VK_KHR_get_memory_requirements2)": [
-        {
-          "vuid": "VUID-vkGetImageSparseMemoryRequirements2-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetImageSparseMemoryRequirements2-pInfo-parameter",
-          "text": " <code>pInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkImageSparseMemoryRequirementsInfo2</code> structure"
-        },
-        {
-          "vuid": "VUID-vkGetImageSparseMemoryRequirements2-pSparseMemoryRequirementCount-parameter",
-          "text": " <code>pSparseMemoryRequirementCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
-        },
-        {
-          "vuid": "VUID-vkGetImageSparseMemoryRequirements2-pSparseMemoryRequirements-parameter",
-          "text": " If the value referenced by <code>pSparseMemoryRequirementCount</code> is not <code>0</code>, and <code>pSparseMemoryRequirements</code> is not <code>NULL</code>, <code>pSparseMemoryRequirements</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pSparseMemoryRequirementCount</code> <code>VkSparseImageMemoryRequirements2</code> structures"
-        }
-      ]
-    },
-    "VkImageSparseMemoryRequirementsInfo2": {
-      "(VK_VERSION_1_1,VK_KHR_get_memory_requirements2)": [
-        {
-          "vuid": "VUID-VkImageSparseMemoryRequirementsInfo2-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2</code>"
-        },
-        {
-          "vuid": "VUID-VkImageSparseMemoryRequirementsInfo2-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkImageSparseMemoryRequirementsInfo2-image-parameter",
-          "text": " <code>image</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
-        }
-      ]
-    },
-    "VkSparseImageMemoryRequirements2": {
-      "(VK_VERSION_1_1,VK_KHR_get_memory_requirements2)": [
-        {
-          "vuid": "VUID-VkSparseImageMemoryRequirements2-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2</code>"
-        },
-        {
-          "vuid": "VUID-VkSparseImageMemoryRequirements2-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        }
-      ]
-    },
-    "VkSparseMemoryBind": {
-      "core": [
-        {
-          "vuid": "VUID-VkSparseMemoryBind-memory-01096",
-          "text": " If <code>memory</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>memory</code> and <code>memoryOffset</code> <strong class=\"purple\">must</strong> match the memory requirements of the resource, as described in section &amp;amp;lt;&amp;amp;lt;resources-association&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-VkSparseMemoryBind-memory-01097",
-          "text": " If <code>memory</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>memory</code> <strong class=\"purple\">must</strong> not have been created with a memory type that reports <code>VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT</code> bit set"
-        },
-        {
-          "vuid": "VUID-VkSparseMemoryBind-size-01098",
-          "text": " <code>size</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkSparseMemoryBind-resourceOffset-01099",
-          "text": " <code>resourceOffset</code> <strong class=\"purple\">must</strong> be less than the size of the resource"
-        },
-        {
-          "vuid": "VUID-VkSparseMemoryBind-size-01100",
-          "text": " <code>size</code> <strong class=\"purple\">must</strong> be less than or equal to the size of the resource minus <code>resourceOffset</code>"
-        },
-        {
-          "vuid": "VUID-VkSparseMemoryBind-memoryOffset-01101",
-          "text": " <code>memoryOffset</code> <strong class=\"purple\">must</strong> be less than the size of <code>memory</code>"
-        },
-        {
-          "vuid": "VUID-VkSparseMemoryBind-size-01102",
-          "text": " <code>size</code> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>memory</code> minus <code>memoryOffset</code>"
-        },
-        {
-          "vuid": "VUID-VkSparseMemoryBind-memory-parameter",
-          "text": " If <code>memory</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>memory</code> <strong class=\"purple\">must</strong> be a valid <code>VkDeviceMemory</code> handle"
-        },
-        {
-          "vuid": "VUID-VkSparseMemoryBind-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkSparseMemoryBindFlagBits\">VkSparseMemoryBindFlagBits</a> values"
-        }
-      ]
-    },
-    "VkSparseBufferMemoryBindInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkSparseBufferMemoryBindInfo-buffer-parameter",
-          "text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-VkSparseBufferMemoryBindInfo-pBinds-parameter",
-          "text": " <code>pBinds</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>bindCount</code> valid <code>VkSparseMemoryBind</code> structures"
-        },
-        {
-          "vuid": "VUID-VkSparseBufferMemoryBindInfo-bindCount-arraylength",
-          "text": " <code>bindCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ]
-    },
-    "VkSparseImageOpaqueMemoryBindInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkSparseImageOpaqueMemoryBindInfo-pBinds-01103",
-          "text": " If the <code>flags</code> member of any element of <code>pBinds</code> contains <code>VK_SPARSE_MEMORY_BIND_METADATA_BIT</code>, the binding range defined <strong class=\"purple\">must</strong> be within the mip tail region of the metadata aspect of <code>image</code>"
-        },
-        {
-          "vuid": "VUID-VkSparseImageOpaqueMemoryBindInfo-image-parameter",
-          "text": " <code>image</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
-        },
-        {
-          "vuid": "VUID-VkSparseImageOpaqueMemoryBindInfo-pBinds-parameter",
-          "text": " <code>pBinds</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>bindCount</code> valid <code>VkSparseMemoryBind</code> structures"
-        },
-        {
-          "vuid": "VUID-VkSparseImageOpaqueMemoryBindInfo-bindCount-arraylength",
-          "text": " <code>bindCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ]
-    },
-    "VkSparseImageMemoryBindInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkSparseImageMemoryBindInfo-subresource-01722",
-          "text": " The <code>subresource.mipLevel</code> member of each element of <code>pBinds</code> <strong class=\"purple\">must</strong> be less than the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
-        },
-        {
-          "vuid": "VUID-VkSparseImageMemoryBindInfo-subresource-01723",
-          "text": " The <code>subresource.arrayLayer</code> member of each element of <code>pBinds</code> <strong class=\"purple\">must</strong> be less than the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
-        },
-        {
-          "vuid": "VUID-VkSparseImageMemoryBindInfo-image-parameter",
-          "text": " <code>image</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
-        },
-        {
-          "vuid": "VUID-VkSparseImageMemoryBindInfo-pBinds-parameter",
-          "text": " <code>pBinds</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>bindCount</code> valid <code>VkSparseImageMemoryBind</code> structures"
-        },
-        {
-          "vuid": "VUID-VkSparseImageMemoryBindInfo-bindCount-arraylength",
-          "text": " <code>bindCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ]
-    },
-    "VkSparseImageMemoryBind": {
-      "core": [
-        {
-          "vuid": "VUID-VkSparseImageMemoryBind-memory-01104",
-          "text": " If the &amp;amp;lt;&amp;amp;lt;features-features-sparseResidencyAliased,sparse aliased residency&amp;amp;gt;&amp;amp;gt; feature is not enabled, and if any other resources are bound to ranges of <code>memory</code>, the range of <code>memory</code> being bound <strong class=\"purple\">must</strong> not overlap with those bound ranges"
-        },
-        {
-          "vuid": "VUID-VkSparseImageMemoryBind-memory-01105",
-          "text": " <code>memory</code> and <code>memoryOffset</code> <strong class=\"purple\">must</strong> match the memory requirements of the calling command&#8217;s <code>image</code>, as described in section &amp;amp;lt;&amp;amp;lt;resources-association&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-VkSparseImageMemoryBind-subresource-01106",
-          "text": " <code>subresource</code> <strong class=\"purple\">must</strong> be a valid image subresource for <code>image</code> (see &amp;amp;lt;&amp;amp;lt;resources-image-views&amp;amp;gt;&amp;amp;gt;)"
-        },
-        {
-          "vuid": "VUID-VkSparseImageMemoryBind-offset-01107",
-          "text": " <code>offset.x</code> <strong class=\"purple\">must</strong> be a multiple of the sparse image block width (<code>VkSparseImageFormatProperties</code>::<code>imageGranularity.width</code>) of the image"
-        },
-        {
-          "vuid": "VUID-VkSparseImageMemoryBind-extent-01108",
-          "text": " <code>extent.width</code> <strong class=\"purple\">must</strong> either be a multiple of the sparse image block width of the image, or else <span class=\"eq\">(<code>extent.width</code> &#43; <code>offset.x</code>)</span> <strong class=\"purple\">must</strong> equal the width of the image subresource"
-        },
-        {
-          "vuid": "VUID-VkSparseImageMemoryBind-offset-01109",
-          "text": " <code>offset.y</code> <strong class=\"purple\">must</strong> be a multiple of the sparse image block height (<code>VkSparseImageFormatProperties</code>::<code>imageGranularity.height</code>) of the image"
-        },
-        {
-          "vuid": "VUID-VkSparseImageMemoryBind-extent-01110",
-          "text": " <code>extent.height</code> <strong class=\"purple\">must</strong> either be a multiple of the sparse image block height of the image, or else <span class=\"eq\">(<code>extent.height</code> &#43; <code>offset.y</code>)</span> <strong class=\"purple\">must</strong> equal the height of the image subresource"
-        },
-        {
-          "vuid": "VUID-VkSparseImageMemoryBind-offset-01111",
-          "text": " <code>offset.z</code> <strong class=\"purple\">must</strong> be a multiple of the sparse image block depth (<code>VkSparseImageFormatProperties</code>::<code>imageGranularity.depth</code>) of the image"
-        },
-        {
-          "vuid": "VUID-VkSparseImageMemoryBind-extent-01112",
-          "text": " <code>extent.depth</code> <strong class=\"purple\">must</strong> either be a multiple of the sparse image block depth of the image, or else <span class=\"eq\">(<code>extent.depth</code> &#43; <code>offset.z</code>)</span> <strong class=\"purple\">must</strong> equal the depth of the image subresource"
-        },
-        {
-          "vuid": "VUID-VkSparseImageMemoryBind-subresource-parameter",
-          "text": " <code>subresource</code> <strong class=\"purple\">must</strong> be a valid <code>VkImageSubresource</code> structure"
-        },
-        {
-          "vuid": "VUID-VkSparseImageMemoryBind-memory-parameter",
-          "text": " If <code>memory</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>memory</code> <strong class=\"purple\">must</strong> be a valid <code>VkDeviceMemory</code> handle"
-        },
-        {
-          "vuid": "VUID-VkSparseImageMemoryBind-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkSparseMemoryBindFlagBits\">VkSparseMemoryBindFlagBits</a> values"
-        }
-      ]
-    },
-    "vkQueueBindSparse": {
-      "core": [
-        {
-          "vuid": "VUID-vkQueueBindSparse-fence-01113",
-          "text": " If <code>fence</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>fence</code> <strong class=\"purple\">must</strong> be unsignaled"
-        },
-        {
-          "vuid": "VUID-vkQueueBindSparse-fence-01114",
-          "text": " If <code>fence</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>fence</code> <strong class=\"purple\">must</strong> not be associated with any other queue command that has not yet completed execution on that queue"
-        },
-        {
-          "vuid": "VUID-vkQueueBindSparse-pSignalSemaphores-01115",
-          "text": " Each element of the <code>pSignalSemaphores</code> member of each element of <code>pBindInfo</code> <strong class=\"purple\">must</strong> be unsignaled when the semaphore signal operation it defines is executed on the device"
-        },
-        {
-          "vuid": "VUID-vkQueueBindSparse-pWaitSemaphores-01116",
-          "text": " When a semaphore unsignal operation defined by any element of the <code>pWaitSemaphores</code> member of any element of <code>pBindInfo</code> executes on <code>queue</code>, no other queue <strong class=\"purple\">must</strong> be waiting on the same semaphore."
-        },
-        {
-          "vuid": "VUID-vkQueueBindSparse-pWaitSemaphores-01117",
-          "text": " All elements of the <code>pWaitSemaphores</code> member of all elements of <code>pBindInfo</code> <strong class=\"purple\">must</strong> be semaphores that are signaled, or have &amp;amp;lt;&amp;amp;lt;synchronization-semaphores-signaling, semaphore signal operations&amp;amp;gt;&amp;amp;gt; previously submitted for execution."
-        },
-        {
-          "vuid": "VUID-vkQueueBindSparse-queue-parameter",
-          "text": " <code>queue</code> <strong class=\"purple\">must</strong> be a valid <code>VkQueue</code> handle"
-        },
-        {
-          "vuid": "VUID-vkQueueBindSparse-pBindInfo-parameter",
-          "text": " If <code>bindInfoCount</code> is not <code>0</code>, <code>pBindInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>bindInfoCount</code> valid <code>VkBindSparseInfo</code> structures"
-        },
-        {
-          "vuid": "VUID-vkQueueBindSparse-fence-parameter",
-          "text": " If <code>fence</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>fence</code> <strong class=\"purple\">must</strong> be a valid <code>VkFence</code> handle"
-        },
-        {
-          "vuid": "VUID-vkQueueBindSparse-queuetype",
-          "text": " The <code>queue</code> <strong class=\"purple\">must</strong> support sparse binding operations"
-        },
-        {
-          "vuid": "VUID-vkQueueBindSparse-commonparent",
-          "text": " Both of <code>fence</code>, and <code>queue</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ]
-    },
-    "VkBindSparseInfo": {
-      "core": [
-        {
-          "vuid": "VUID-VkBindSparseInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_BIND_SPARSE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkBindSparseInfo-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkDeviceGroupBindSparseInfo\">VkDeviceGroupBindSparseInfo</a>"
-        },
-        {
-          "vuid": "VUID-VkBindSparseInfo-pWaitSemaphores-parameter",
-          "text": " If <code>waitSemaphoreCount</code> is not <code>0</code>, <code>pWaitSemaphores</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>waitSemaphoreCount</code> valid <code>VkSemaphore</code> handles"
-        },
-        {
-          "vuid": "VUID-VkBindSparseInfo-pBufferBinds-parameter",
-          "text": " If <code>bufferBindCount</code> is not <code>0</code>, <code>pBufferBinds</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>bufferBindCount</code> valid <code>VkSparseBufferMemoryBindInfo</code> structures"
-        },
-        {
-          "vuid": "VUID-VkBindSparseInfo-pImageOpaqueBinds-parameter",
-          "text": " If <code>imageOpaqueBindCount</code> is not <code>0</code>, <code>pImageOpaqueBinds</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>imageOpaqueBindCount</code> valid <code>VkSparseImageOpaqueMemoryBindInfo</code> structures"
-        },
-        {
-          "vuid": "VUID-VkBindSparseInfo-pImageBinds-parameter",
-          "text": " If <code>imageBindCount</code> is not <code>0</code>, <code>pImageBinds</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>imageBindCount</code> valid <code>VkSparseImageMemoryBindInfo</code> structures"
-        },
-        {
-          "vuid": "VUID-VkBindSparseInfo-pSignalSemaphores-parameter",
-          "text": " If <code>signalSemaphoreCount</code> is not <code>0</code>, <code>pSignalSemaphores</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>signalSemaphoreCount</code> valid <code>VkSemaphore</code> handles"
-        },
-        {
-          "vuid": "VUID-VkBindSparseInfo-commonparent",
-          "text": " Both of the elements of <code>pSignalSemaphores</code>, and the elements of <code>pWaitSemaphores</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
-        }
-      ]
-    },
-    "VkDeviceGroupBindSparseInfo": {
-      "(VK_VERSION_1_1,VK_KHR_device_group)": [
-        {
-          "vuid": "VUID-VkDeviceGroupBindSparseInfo-resourceDeviceIndex-01118",
-          "text": " <code>resourceDeviceIndex</code> and <code>memoryDeviceIndex</code> <strong class=\"purple\">must</strong> both be valid device indices."
-        },
-        {
-          "vuid": "VUID-VkDeviceGroupBindSparseInfo-memoryDeviceIndex-01119",
-          "text": " Each memory allocation bound in this batch <strong class=\"purple\">must</strong> have allocated an instance for <code>memoryDeviceIndex</code>."
-        },
-        {
-          "vuid": "VUID-VkDeviceGroupBindSparseInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO</code>"
-        }
-      ]
-    },
-    "vkCreateAndroidSurfaceKHR": {
-      "(VK_KHR_surface)+(VK_KHR_android_surface)": [
-        {
-          "vuid": "VUID-vkCreateAndroidSurfaceKHR-instance-parameter",
-          "text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateAndroidSurfaceKHR-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAndroidSurfaceCreateInfoKHR</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateAndroidSurfaceKHR-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateAndroidSurfaceKHR-pSurface-parameter",
-          "text": " <code>pSurface</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSurfaceKHR</code> handle"
-        }
-      ]
-    },
-    "VkAndroidSurfaceCreateInfoKHR": {
-      "(VK_KHR_surface)+(VK_KHR_android_surface)": [
-        {
-          "vuid": "VUID-VkAndroidSurfaceCreateInfoKHR-window-01248",
-          "text": " <code>window</code> <strong class=\"purple\">must</strong> point to a valid Android <code>ANativeWindow</code>."
-        },
-        {
-          "vuid": "VUID-VkAndroidSurfaceCreateInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkAndroidSurfaceCreateInfoKHR-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkAndroidSurfaceCreateInfoKHR-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        }
-      ]
-    },
-    "vkCreateMirSurfaceKHR": {
-      "(VK_KHR_surface)+(VK_KHR_mir_surface)": [
-        {
-          "vuid": "VUID-vkCreateMirSurfaceKHR-instance-parameter",
-          "text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateMirSurfaceKHR-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkMirSurfaceCreateInfoKHR</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateMirSurfaceKHR-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateMirSurfaceKHR-pSurface-parameter",
-          "text": " <code>pSurface</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSurfaceKHR</code> handle"
-        }
-      ]
-    },
-    "VkMirSurfaceCreateInfoKHR": {
-      "(VK_KHR_surface)+(VK_KHR_mir_surface)": [
-        {
-          "vuid": "VUID-VkMirSurfaceCreateInfoKHR-connection-01263",
-          "text": " <code>connection</code> <strong class=\"purple\">must</strong> point to a valid <code>MirConnection</code>."
-        },
-        {
-          "vuid": "VUID-VkMirSurfaceCreateInfoKHR-surface-01264",
-          "text": " <code>surface</code> <strong class=\"purple\">must</strong> point to a valid <code>MirSurface</code>."
-        },
-        {
-          "vuid": "VUID-VkMirSurfaceCreateInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkMirSurfaceCreateInfoKHR-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkMirSurfaceCreateInfoKHR-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        }
-      ]
-    },
-    "vkCreateWaylandSurfaceKHR": {
-      "(VK_KHR_surface)+(VK_KHR_wayland_surface)": [
-        {
-          "vuid": "VUID-vkCreateWaylandSurfaceKHR-instance-parameter",
-          "text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateWaylandSurfaceKHR-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkWaylandSurfaceCreateInfoKHR</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateWaylandSurfaceKHR-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateWaylandSurfaceKHR-pSurface-parameter",
-          "text": " <code>pSurface</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSurfaceKHR</code> handle"
-        }
-      ]
-    },
-    "VkWaylandSurfaceCreateInfoKHR": {
-      "(VK_KHR_surface)+(VK_KHR_wayland_surface)": [
-        {
-          "vuid": "VUID-VkWaylandSurfaceCreateInfoKHR-display-01304",
-          "text": " <code>display</code> <strong class=\"purple\">must</strong> point to a valid Wayland <code>wl_display</code>."
-        },
-        {
-          "vuid": "VUID-VkWaylandSurfaceCreateInfoKHR-surface-01305",
-          "text": " <code>surface</code> <strong class=\"purple\">must</strong> point to a valid Wayland <code>wl_surface</code>."
-        },
-        {
-          "vuid": "VUID-VkWaylandSurfaceCreateInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkWaylandSurfaceCreateInfoKHR-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkWaylandSurfaceCreateInfoKHR-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        }
-      ]
-    },
-    "vkCreateWin32SurfaceKHR": {
-      "(VK_KHR_surface)+(VK_KHR_win32_surface)": [
-        {
-          "vuid": "VUID-vkCreateWin32SurfaceKHR-instance-parameter",
-          "text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateWin32SurfaceKHR-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkWin32SurfaceCreateInfoKHR</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateWin32SurfaceKHR-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateWin32SurfaceKHR-pSurface-parameter",
-          "text": " <code>pSurface</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSurfaceKHR</code> handle"
-        }
-      ]
-    },
-    "VkWin32SurfaceCreateInfoKHR": {
-      "(VK_KHR_surface)+(VK_KHR_win32_surface)": [
-        {
-          "vuid": "VUID-VkWin32SurfaceCreateInfoKHR-hinstance-01307",
-          "text": " <code>hinstance</code> <strong class=\"purple\">must</strong> be a valid Win32 <code>HINSTANCE</code>."
-        },
-        {
-          "vuid": "VUID-VkWin32SurfaceCreateInfoKHR-hwnd-01308",
-          "text": " <code>hwnd</code> <strong class=\"purple\">must</strong> be a valid Win32 <code>HWND</code>."
-        },
-        {
-          "vuid": "VUID-VkWin32SurfaceCreateInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkWin32SurfaceCreateInfoKHR-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkWin32SurfaceCreateInfoKHR-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        }
-      ]
-    },
-    "vkCreateXcbSurfaceKHR": {
-      "(VK_KHR_surface)+(VK_KHR_xcb_surface)": [
-        {
-          "vuid": "VUID-vkCreateXcbSurfaceKHR-instance-parameter",
-          "text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateXcbSurfaceKHR-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkXcbSurfaceCreateInfoKHR</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateXcbSurfaceKHR-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateXcbSurfaceKHR-pSurface-parameter",
-          "text": " <code>pSurface</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSurfaceKHR</code> handle"
-        }
-      ]
-    },
-    "VkXcbSurfaceCreateInfoKHR": {
-      "(VK_KHR_surface)+(VK_KHR_xcb_surface)": [
-        {
-          "vuid": "VUID-VkXcbSurfaceCreateInfoKHR-connection-01310",
-          "text": " <code>connection</code> <strong class=\"purple\">must</strong> point to a valid X11 <code>xcb_connection_t</code>."
-        },
-        {
-          "vuid": "VUID-VkXcbSurfaceCreateInfoKHR-window-01311",
-          "text": " <code>window</code> <strong class=\"purple\">must</strong> be a valid X11 <code>xcb_window_t</code>."
-        },
-        {
-          "vuid": "VUID-VkXcbSurfaceCreateInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkXcbSurfaceCreateInfoKHR-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkXcbSurfaceCreateInfoKHR-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        }
-      ]
-    },
-    "vkCreateXlibSurfaceKHR": {
-      "(VK_KHR_surface)+(VK_KHR_xlib_surface)": [
-        {
-          "vuid": "VUID-vkCreateXlibSurfaceKHR-instance-parameter",
-          "text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateXlibSurfaceKHR-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkXlibSurfaceCreateInfoKHR</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateXlibSurfaceKHR-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateXlibSurfaceKHR-pSurface-parameter",
-          "text": " <code>pSurface</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSurfaceKHR</code> handle"
-        }
-      ]
-    },
-    "VkXlibSurfaceCreateInfoKHR": {
-      "(VK_KHR_surface)+(VK_KHR_xlib_surface)": [
-        {
-          "vuid": "VUID-VkXlibSurfaceCreateInfoKHR-dpy-01313",
-          "text": " <code>dpy</code> <strong class=\"purple\">must</strong> point to a valid Xlib <code>Display</code>."
-        },
-        {
-          "vuid": "VUID-VkXlibSurfaceCreateInfoKHR-window-01314",
-          "text": " <code>window</code> <strong class=\"purple\">must</strong> be a valid Xlib <code>Window</code>."
-        },
-        {
-          "vuid": "VUID-VkXlibSurfaceCreateInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkXlibSurfaceCreateInfoKHR-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkXlibSurfaceCreateInfoKHR-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        }
-      ]
-    },
-    "vkCreateIOSSurfaceMVK": {
-      "(VK_KHR_surface)+(VK_MVK_ios_surface)": [
-        {
-          "vuid": "VUID-vkCreateIOSSurfaceMVK-instance-parameter",
-          "text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateIOSSurfaceMVK-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkIOSSurfaceCreateInfoMVK</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateIOSSurfaceMVK-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateIOSSurfaceMVK-pSurface-parameter",
-          "text": " <code>pSurface</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSurfaceKHR</code> handle"
-        }
-      ]
-    },
-    "VkIOSSurfaceCreateInfoMVK": {
-      "(VK_KHR_surface)+(VK_MVK_ios_surface)": [
-        {
-          "vuid": "VUID-VkIOSSurfaceCreateInfoMVK-pView-01316",
-          "text": " <code>pView</code> <strong class=\"purple\">must</strong> be a valid <code>UIView</code> and <strong class=\"purple\">must</strong> be backed by a <code>CALayer</code> instance of type <code>CAMetalLayer</code>."
-        },
-        {
-          "vuid": "VUID-VkIOSSurfaceCreateInfoMVK-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK</code>"
-        },
-        {
-          "vuid": "VUID-VkIOSSurfaceCreateInfoMVK-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkIOSSurfaceCreateInfoMVK-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        }
-      ]
-    },
-    "vkCreateMacOSSurfaceMVK": {
-      "(VK_KHR_surface)+(VK_MVK_macos_surface)": [
-        {
-          "vuid": "VUID-vkCreateMacOSSurfaceMVK-instance-parameter",
-          "text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateMacOSSurfaceMVK-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkMacOSSurfaceCreateInfoMVK</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateMacOSSurfaceMVK-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateMacOSSurfaceMVK-pSurface-parameter",
-          "text": " <code>pSurface</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSurfaceKHR</code> handle"
-        }
-      ]
-    },
-    "VkMacOSSurfaceCreateInfoMVK": {
-      "(VK_KHR_surface)+(VK_MVK_macos_surface)": [
-        {
-          "vuid": "VUID-VkMacOSSurfaceCreateInfoMVK-pView-01317",
-          "text": " <code>pView</code> <strong class=\"purple\">must</strong> be a valid <code>NSView</code> and <strong class=\"purple\">must</strong> be backed by a <code>CALayer</code> instance of type <code>CAMetalLayer</code>."
-        },
-        {
-          "vuid": "VUID-VkMacOSSurfaceCreateInfoMVK-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK</code>"
-        },
-        {
-          "vuid": "VUID-VkMacOSSurfaceCreateInfoMVK-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkMacOSSurfaceCreateInfoMVK-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        }
-      ]
-    },
-    "vkCreateViSurfaceNN": {
-      "(VK_KHR_surface)+(VK_NN_vi_surface)": [
-        {
-          "vuid": "VUID-vkCreateViSurfaceNN-instance-parameter",
-          "text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateViSurfaceNN-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkViSurfaceCreateInfoNN</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateViSurfaceNN-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateViSurfaceNN-pSurface-parameter",
-          "text": " <code>pSurface</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSurfaceKHR</code> handle"
-        }
-      ]
-    },
-    "VkViSurfaceCreateInfoNN": {
-      "(VK_KHR_surface)+(VK_NN_vi_surface)": [
-        {
-          "vuid": "VUID-VkViSurfaceCreateInfoNN-window-01318",
-          "text": " <code>window</code> <strong class=\"purple\">must</strong> be a valid <code>nn</code>::<code>vi</code>::<code>NativeWindowHandle</code>"
-        },
-        {
-          "vuid": "VUID-VkViSurfaceCreateInfoNN-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN</code>"
-        },
-        {
-          "vuid": "VUID-VkViSurfaceCreateInfoNN-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkViSurfaceCreateInfoNN-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        }
-      ]
-    },
-    "vkDestroySurfaceKHR": {
-      "(VK_KHR_surface)": [
-        {
-          "vuid": "VUID-vkDestroySurfaceKHR-surface-01266",
-          "text": " All <code>VkSwapchainKHR</code> objects created for <code>surface</code> <strong class=\"purple\">must</strong> have been destroyed prior to destroying <code>surface</code>"
-        },
-        {
-          "vuid": "VUID-vkDestroySurfaceKHR-surface-01267",
-          "text": " If <code>VkAllocationCallbacks</code> were provided when <code>surface</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
-        },
-        {
-          "vuid": "VUID-vkDestroySurfaceKHR-surface-01268",
-          "text": " If no <code>VkAllocationCallbacks</code> were provided when <code>surface</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-vkDestroySurfaceKHR-instance-parameter",
-          "text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroySurfaceKHR-surface-parameter",
-          "text": " If <code>surface</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>surface</code> <strong class=\"purple\">must</strong> be a valid <code>VkSurfaceKHR</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroySurfaceKHR-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkDestroySurfaceKHR-surface-parent",
-          "text": " If <code>surface</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>instance</code>"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceDisplayPropertiesKHR": {
-      "(VK_KHR_surface)+(VK_KHR_display)": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceDisplayPropertiesKHR-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceDisplayPropertiesKHR-pPropertyCount-parameter",
-          "text": " <code>pPropertyCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceDisplayPropertiesKHR-pProperties-parameter",
-          "text": " If the value referenced by <code>pPropertyCount</code> is not <code>0</code>, and <code>pProperties</code> is not <code>NULL</code>, <code>pProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pPropertyCount</code> <code>VkDisplayPropertiesKHR</code> structures"
-        }
-      ]
-    },
-    "vkAcquireXlibDisplayEXT": {
-      "(VK_KHR_surface)+(VK_KHR_display)+(VK_EXT_direct_mode_display)+(VK_EXT_acquire_xlib_display)": [
-        {
-          "vuid": "VUID-vkAcquireXlibDisplayEXT-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkAcquireXlibDisplayEXT-dpy-parameter",
-          "text": " <code>dpy</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>Display</code> value"
-        },
-        {
-          "vuid": "VUID-vkAcquireXlibDisplayEXT-display-parameter",
-          "text": " <code>display</code> <strong class=\"purple\">must</strong> be a valid <code>VkDisplayKHR</code> handle"
-        }
-      ]
-    },
-    "vkGetRandROutputDisplayEXT": {
-      "(VK_KHR_surface)+(VK_KHR_display)+(VK_EXT_direct_mode_display)+(VK_EXT_acquire_xlib_display)": [
-        {
-          "vuid": "VUID-vkGetRandROutputDisplayEXT-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetRandROutputDisplayEXT-dpy-parameter",
-          "text": " <code>dpy</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>Display</code> value"
-        },
-        {
-          "vuid": "VUID-vkGetRandROutputDisplayEXT-pDisplay-parameter",
-          "text": " <code>pDisplay</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkDisplayKHR</code> handle"
-        }
-      ]
-    },
-    "vkReleaseDisplayEXT": {
-      "(VK_KHR_surface)+(VK_KHR_display)+(VK_EXT_direct_mode_display)": [
-        {
-          "vuid": "VUID-vkReleaseDisplayEXT-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkReleaseDisplayEXT-display-parameter",
-          "text": " <code>display</code> <strong class=\"purple\">must</strong> be a valid <code>VkDisplayKHR</code> handle"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceDisplayPlanePropertiesKHR": {
-      "(VK_KHR_surface)+(VK_KHR_display)": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceDisplayPlanePropertiesKHR-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceDisplayPlanePropertiesKHR-pPropertyCount-parameter",
-          "text": " <code>pPropertyCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceDisplayPlanePropertiesKHR-pProperties-parameter",
-          "text": " If the value referenced by <code>pPropertyCount</code> is not <code>0</code>, and <code>pProperties</code> is not <code>NULL</code>, <code>pProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pPropertyCount</code> <code>VkDisplayPlanePropertiesKHR</code> structures"
-        }
-      ]
-    },
-    "vkGetDisplayPlaneSupportedDisplaysKHR": {
-      "(VK_KHR_surface)+(VK_KHR_display)": [
-        {
-          "vuid": "VUID-vkGetDisplayPlaneSupportedDisplaysKHR-planeIndex-01249",
-          "text": " <code>planeIndex</code> <strong class=\"purple\">must</strong> be less than the number of display planes supported by the device as determined by calling <code>vkGetPhysicalDeviceDisplayPlanePropertiesKHR</code>"
-        },
-        {
-          "vuid": "VUID-vkGetDisplayPlaneSupportedDisplaysKHR-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetDisplayPlaneSupportedDisplaysKHR-pDisplayCount-parameter",
-          "text": " <code>pDisplayCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
-        },
-        {
-          "vuid": "VUID-vkGetDisplayPlaneSupportedDisplaysKHR-pDisplays-parameter",
-          "text": " If the value referenced by <code>pDisplayCount</code> is not <code>0</code>, and <code>pDisplays</code> is not <code>NULL</code>, <code>pDisplays</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pDisplayCount</code> <code>VkDisplayKHR</code> handles"
-        }
-      ]
-    },
-    "vkGetDisplayModePropertiesKHR": {
-      "(VK_KHR_surface)+(VK_KHR_display)": [
-        {
-          "vuid": "VUID-vkGetDisplayModePropertiesKHR-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetDisplayModePropertiesKHR-display-parameter",
-          "text": " <code>display</code> <strong class=\"purple\">must</strong> be a valid <code>VkDisplayKHR</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetDisplayModePropertiesKHR-pPropertyCount-parameter",
-          "text": " <code>pPropertyCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
-        },
-        {
-          "vuid": "VUID-vkGetDisplayModePropertiesKHR-pProperties-parameter",
-          "text": " If the value referenced by <code>pPropertyCount</code> is not <code>0</code>, and <code>pProperties</code> is not <code>NULL</code>, <code>pProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pPropertyCount</code> <code>VkDisplayModePropertiesKHR</code> structures"
-        }
-      ]
-    },
-    "vkCreateDisplayModeKHR": {
-      "(VK_KHR_surface)+(VK_KHR_display)": [
-        {
-          "vuid": "VUID-vkCreateDisplayModeKHR-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateDisplayModeKHR-display-parameter",
-          "text": " <code>display</code> <strong class=\"purple\">must</strong> be a valid <code>VkDisplayKHR</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateDisplayModeKHR-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDisplayModeCreateInfoKHR</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateDisplayModeKHR-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateDisplayModeKHR-pMode-parameter",
-          "text": " <code>pMode</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkDisplayModeKHR</code> handle"
-        }
-      ]
-    },
-    "VkDisplayModeCreateInfoKHR": {
-      "(VK_KHR_surface)+(VK_KHR_display)": [
-        {
-          "vuid": "VUID-VkDisplayModeCreateInfoKHR-width-01250",
-          "text": " The <code>width</code> and <code>height</code> members of the <code>visibleRegion</code> member of <code>parameters</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkDisplayModeCreateInfoKHR-refreshRate-01251",
-          "text": " The <code>refreshRate</code> member of <code>parameters</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkDisplayModeCreateInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkDisplayModeCreateInfoKHR-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkDisplayModeCreateInfoKHR-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        }
-      ]
-    },
-    "vkGetDisplayPlaneCapabilitiesKHR": {
-      "(VK_KHR_surface)+(VK_KHR_display)": [
-        {
-          "vuid": "VUID-vkGetDisplayPlaneCapabilitiesKHR-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetDisplayPlaneCapabilitiesKHR-mode-parameter",
-          "text": " <code>mode</code> <strong class=\"purple\">must</strong> be a valid <code>VkDisplayModeKHR</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetDisplayPlaneCapabilitiesKHR-pCapabilities-parameter",
-          "text": " <code>pCapabilities</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkDisplayPlaneCapabilitiesKHR</code> structure"
-        }
-      ]
-    },
-    "vkDisplayPowerControlEXT": {
-      "(VK_KHR_surface)+(VK_KHR_display)+(VK_EXT_display_control)": [
-        {
-          "vuid": "VUID-vkDisplayPowerControlEXT-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDisplayPowerControlEXT-display-parameter",
-          "text": " <code>display</code> <strong class=\"purple\">must</strong> be a valid <code>VkDisplayKHR</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDisplayPowerControlEXT-pDisplayPowerInfo-parameter",
-          "text": " <code>pDisplayPowerInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDisplayPowerInfoEXT</code> structure"
-        }
-      ]
-    },
-    "VkDisplayPowerInfoEXT": {
-      "(VK_KHR_surface)+(VK_KHR_display)+(VK_EXT_display_control)": [
-        {
-          "vuid": "VUID-VkDisplayPowerInfoEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkDisplayPowerInfoEXT-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkDisplayPowerInfoEXT-powerState-parameter",
-          "text": " <code>powerState</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDisplayPowerStateEXT\">VkDisplayPowerStateEXT</a> value"
-        }
-      ]
-    },
-    "vkCreateDisplayPlaneSurfaceKHR": {
-      "(VK_KHR_surface)+(VK_KHR_display)": [
-        {
-          "vuid": "VUID-vkCreateDisplayPlaneSurfaceKHR-instance-parameter",
-          "text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateDisplayPlaneSurfaceKHR-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDisplaySurfaceCreateInfoKHR</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateDisplayPlaneSurfaceKHR-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateDisplayPlaneSurfaceKHR-pSurface-parameter",
-          "text": " <code>pSurface</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSurfaceKHR</code> handle"
-        }
-      ]
-    },
-    "VkDisplaySurfaceCreateInfoKHR": {
-      "(VK_KHR_surface)+(VK_KHR_display)": [
-        {
-          "vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-planeIndex-01252",
-          "text": " <code>planeIndex</code> <strong class=\"purple\">must</strong> be less than the number of display planes supported by the device as determined by calling <code>vkGetPhysicalDeviceDisplayPlanePropertiesKHR</code>"
-        },
-        {
-          "vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-planeReorderPossible-01253",
-          "text": " If the <code>planeReorderPossible</code> member of the <code>VkDisplayPropertiesKHR</code> structure returned by <code>vkGetPhysicalDeviceDisplayPropertiesKHR</code> for the display corresponding to <code>displayMode</code> is <code>VK_TRUE</code> then <code>planeStackIndex</code> <strong class=\"purple\">must</strong> be less than the number of display planes supported by the device as determined by calling <code>vkGetPhysicalDeviceDisplayPlanePropertiesKHR</code>; otherwise <code>planeStackIndex</code> <strong class=\"purple\">must</strong> equal the <code>currentStackIndex</code> member of <code>VkDisplayPlanePropertiesKHR</code> returned by <code>vkGetPhysicalDeviceDisplayPlanePropertiesKHR</code> for the display plane corresponding to <code>displayMode</code>"
-        },
-        {
-          "vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-alphaMode-01254",
-          "text": " If <code>alphaMode</code> is <code>VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR</code> then <code>globalAlpha</code> <strong class=\"purple\">must</strong> be between <code>0</code> and <code>1</code>, inclusive"
-        },
-        {
-          "vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-alphaMode-01255",
-          "text": " <code>alphaMode</code> <strong class=\"purple\">must</strong> be <code>0</code> or one of the bits present in the <code>supportedAlpha</code> member of <code>VkDisplayPlaneCapabilitiesKHR</code> returned by <code>vkGetDisplayPlaneCapabilitiesKHR</code> for the display plane corresponding to <code>displayMode</code>"
-        },
-        {
-          "vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-width-01256",
-          "text": " The <code>width</code> and <code>height</code> members of <code>imageExtent</code> <strong class=\"purple\">must</strong> be less than the <code>maxImageDimensions2D</code> member of <code>VkPhysicalDeviceLimits</code>"
-        },
-        {
-          "vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-displayMode-parameter",
-          "text": " <code>displayMode</code> <strong class=\"purple\">must</strong> be a valid <code>VkDisplayModeKHR</code> handle"
-        },
-        {
-          "vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-transform-parameter",
-          "text": " <code>transform</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSurfaceTransformFlagBitsKHR\">VkSurfaceTransformFlagBitsKHR</a> value"
-        },
-        {
-          "vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-alphaMode-parameter",
-          "text": " <code>alphaMode</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDisplayPlaneAlphaFlagBitsKHR\">VkDisplayPlaneAlphaFlagBitsKHR</a> value"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceSurfaceSupportKHR": {
-      "(VK_KHR_surface)": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSurfaceSupportKHR-queueFamilyIndex-01269",
-          "text": " <code>queueFamilyIndex</code> <strong class=\"purple\">must</strong> be less than <code>pQueueFamilyPropertyCount</code> returned by <code>vkGetPhysicalDeviceQueueFamilyProperties</code> for the given <code>physicalDevice</code>"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSurfaceSupportKHR-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSurfaceSupportKHR-surface-parameter",
-          "text": " <code>surface</code> <strong class=\"purple\">must</strong> be a valid <code>VkSurfaceKHR</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSurfaceSupportKHR-pSupported-parameter",
-          "text": " <code>pSupported</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkBool32</code> value"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSurfaceSupportKHR-commonparent",
-          "text": " Both of <code>physicalDevice</code>, and <code>surface</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkInstance</code>"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceMirPresentationSupportKHR": {
-      "(VK_KHR_surface)+(VK_KHR_mir_surface)": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceMirPresentationSupportKHR-queueFamilyIndex-01265",
-          "text": " <code>queueFamilyIndex</code> <strong class=\"purple\">must</strong> be less than <code>pQueueFamilyPropertyCount</code> returned by <code>vkGetPhysicalDeviceQueueFamilyProperties</code> for the given <code>physicalDevice</code>"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceMirPresentationSupportKHR-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceMirPresentationSupportKHR-connection-parameter",
-          "text": " <code>connection</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>MirConnection</code> value"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceWaylandPresentationSupportKHR": {
-      "(VK_KHR_surface)+(VK_KHR_wayland_surface)": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceWaylandPresentationSupportKHR-queueFamilyIndex-01306",
-          "text": " <code>queueFamilyIndex</code> <strong class=\"purple\">must</strong> be less than <code>pQueueFamilyPropertyCount</code> returned by <code>vkGetPhysicalDeviceQueueFamilyProperties</code> for the given <code>physicalDevice</code>"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceWaylandPresentationSupportKHR-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceWaylandPresentationSupportKHR-display-parameter",
-          "text": " <code>display</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>wl_display</code> value"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceWin32PresentationSupportKHR": {
-      "(VK_KHR_surface)+(VK_KHR_win32_surface)": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceWin32PresentationSupportKHR-queueFamilyIndex-01309",
-          "text": " <code>queueFamilyIndex</code> <strong class=\"purple\">must</strong> be less than <code>pQueueFamilyPropertyCount</code> returned by <code>vkGetPhysicalDeviceQueueFamilyProperties</code> for the given <code>physicalDevice</code>"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceWin32PresentationSupportKHR-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceXcbPresentationSupportKHR": {
-      "(VK_KHR_surface)+(VK_KHR_xcb_surface)": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceXcbPresentationSupportKHR-queueFamilyIndex-01312",
-          "text": " <code>queueFamilyIndex</code> <strong class=\"purple\">must</strong> be less than <code>pQueueFamilyPropertyCount</code> returned by <code>vkGetPhysicalDeviceQueueFamilyProperties</code> for the given <code>physicalDevice</code>"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceXcbPresentationSupportKHR-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceXcbPresentationSupportKHR-connection-parameter",
-          "text": " <code>connection</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>xcb_connection_t</code> value"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceXlibPresentationSupportKHR": {
-      "(VK_KHR_surface)+(VK_KHR_xlib_surface)": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceXlibPresentationSupportKHR-queueFamilyIndex-01315",
-          "text": " <code>queueFamilyIndex</code> <strong class=\"purple\">must</strong> be less than <code>pQueueFamilyPropertyCount</code> returned by <code>vkGetPhysicalDeviceQueueFamilyProperties</code> for the given <code>physicalDevice</code>"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceXlibPresentationSupportKHR-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceXlibPresentationSupportKHR-dpy-parameter",
-          "text": " <code>dpy</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>Display</code> value"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceSurfaceCapabilitiesKHR": {
-      "(VK_KHR_surface)": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilitiesKHR-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilitiesKHR-surface-parameter",
-          "text": " <code>surface</code> <strong class=\"purple\">must</strong> be a valid <code>VkSurfaceKHR</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilitiesKHR-pSurfaceCapabilities-parameter",
-          "text": " <code>pSurfaceCapabilities</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSurfaceCapabilitiesKHR</code> structure"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilitiesKHR-commonparent",
-          "text": " Both of <code>physicalDevice</code>, and <code>surface</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkInstance</code>"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceSurfaceCapabilities2KHR": {
-      "(VK_KHR_surface)+(VK_KHR_get_surface_capabilities2)": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-pSurfaceInfo-parameter",
-          "text": " <code>pSurfaceInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPhysicalDeviceSurfaceInfo2KHR</code> structure"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-pSurfaceCapabilities-parameter",
-          "text": " <code>pSurfaceCapabilities</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSurfaceCapabilities2KHR</code> structure"
-        }
-      ]
-    },
-    "VkPhysicalDeviceSurfaceInfo2KHR": {
-      "(VK_KHR_surface)+(VK_KHR_get_surface_capabilities2)": [
-        {
-          "vuid": "VUID-VkPhysicalDeviceSurfaceInfo2KHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkPhysicalDeviceSurfaceInfo2KHR-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkPhysicalDeviceSurfaceInfo2KHR-surface-parameter",
-          "text": " <code>surface</code> <strong class=\"purple\">must</strong> be a valid <code>VkSurfaceKHR</code> handle"
-        }
-      ]
-    },
-    "VkSurfaceCapabilities2KHR": {
-      "(VK_KHR_surface)+(VK_KHR_get_surface_capabilities2)": [
-        {
-          "vuid": "VUID-VkSurfaceCapabilities2KHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkSurfaceCapabilities2KHR-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkSharedPresentSurfaceCapabilitiesKHR\">VkSharedPresentSurfaceCapabilitiesKHR</a>"
-        }
-      ]
-    },
-    "VkSharedPresentSurfaceCapabilitiesKHR": {
-      "(VK_KHR_surface)+(VK_KHR_get_surface_capabilities2)+(VK_KHR_shared_presentable_image)": [
-        {
-          "vuid": "VUID-VkSharedPresentSurfaceCapabilitiesKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR</code>"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceSurfaceCapabilities2EXT": {
-      "(VK_KHR_surface)+(VK_EXT_display_surface_counter)": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2EXT-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2EXT-surface-parameter",
-          "text": " <code>surface</code> <strong class=\"purple\">must</strong> be a valid <code>VkSurfaceKHR</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2EXT-pSurfaceCapabilities-parameter",
-          "text": " <code>pSurfaceCapabilities</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSurfaceCapabilities2EXT</code> structure"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2EXT-commonparent",
-          "text": " Both of <code>physicalDevice</code>, and <code>surface</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkInstance</code>"
-        }
-      ]
-    },
-    "VkSurfaceCapabilities2EXT": {
-      "(VK_KHR_surface)+(VK_EXT_display_surface_counter)": [
-        {
-          "vuid": "VUID-VkSurfaceCapabilities2EXT-supportedSurfaceCounters-01246",
-          "text": " <code>supportedSurfaceCounters</code> <strong class=\"purple\">must</strong> not include <code>VK_SURFACE_COUNTER_VBLANK_EXT</code> unless the surface queried is a &amp;amp;lt;&amp;amp;lt;wsi-display-surfaces,display surface&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-VkSurfaceCapabilities2EXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkSurfaceCapabilities2EXT-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceSurfaceFormatsKHR": {
-      "(VK_KHR_surface)": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSurfaceFormatsKHR-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSurfaceFormatsKHR-surface-parameter",
-          "text": " <code>surface</code> <strong class=\"purple\">must</strong> be a valid <code>VkSurfaceKHR</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSurfaceFormatsKHR-pSurfaceFormatCount-parameter",
-          "text": " <code>pSurfaceFormatCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSurfaceFormatsKHR-pSurfaceFormats-parameter",
-          "text": " If the value referenced by <code>pSurfaceFormatCount</code> is not <code>0</code>, and <code>pSurfaceFormats</code> is not <code>NULL</code>, <code>pSurfaceFormats</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pSurfaceFormatCount</code> <code>VkSurfaceFormatKHR</code> structures"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSurfaceFormatsKHR-commonparent",
-          "text": " Both of <code>physicalDevice</code>, and <code>surface</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkInstance</code>"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceSurfaceFormats2KHR": {
-      "(VK_KHR_surface)+(VK_KHR_get_surface_capabilities2)": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSurfaceFormats2KHR-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSurfaceFormats2KHR-pSurfaceInfo-parameter",
-          "text": " <code>pSurfaceInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPhysicalDeviceSurfaceInfo2KHR</code> structure"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSurfaceFormats2KHR-pSurfaceFormatCount-parameter",
-          "text": " <code>pSurfaceFormatCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSurfaceFormats2KHR-pSurfaceFormats-parameter",
-          "text": " If the value referenced by <code>pSurfaceFormatCount</code> is not <code>0</code>, and <code>pSurfaceFormats</code> is not <code>NULL</code>, <code>pSurfaceFormats</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pSurfaceFormatCount</code> <code>VkSurfaceFormat2KHR</code> structures"
-        }
-      ]
-    },
-    "VkSurfaceFormat2KHR": {
-      "(VK_KHR_surface)+(VK_KHR_get_surface_capabilities2)": [
-        {
-          "vuid": "VUID-VkSurfaceFormat2KHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkSurfaceFormat2KHR-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceSurfacePresentModesKHR": {
-      "(VK_KHR_surface)": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSurfacePresentModesKHR-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSurfacePresentModesKHR-surface-parameter",
-          "text": " <code>surface</code> <strong class=\"purple\">must</strong> be a valid <code>VkSurfaceKHR</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSurfacePresentModesKHR-pPresentModeCount-parameter",
-          "text": " <code>pPresentModeCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSurfacePresentModesKHR-pPresentModes-parameter",
-          "text": " If the value referenced by <code>pPresentModeCount</code> is not <code>0</code>, and <code>pPresentModes</code> is not <code>NULL</code>, <code>pPresentModes</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pPresentModeCount</code> <a href=\"#VkPresentModeKHR\">VkPresentModeKHR</a> values"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceSurfacePresentModesKHR-commonparent",
-          "text": " Both of <code>physicalDevice</code>, and <code>surface</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkInstance</code>"
-        }
-      ]
-    },
-    "vkGetDeviceGroupPresentCapabilitiesKHR": {
-      "(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_VERSION_1_1,VK_KHR_device_group)": [
-        {
-          "vuid": "VUID-vkGetDeviceGroupPresentCapabilitiesKHR-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetDeviceGroupPresentCapabilitiesKHR-pDeviceGroupPresentCapabilities-parameter",
-          "text": " <code>pDeviceGroupPresentCapabilities</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkDeviceGroupPresentCapabilitiesKHR</code> structure"
-        }
-      ]
-    },
-    "VkDeviceGroupPresentCapabilitiesKHR": {
-      "(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_VERSION_1_1,VK_KHR_device_group)": [
-        {
-          "vuid": "VUID-VkDeviceGroupPresentCapabilitiesKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkDeviceGroupPresentCapabilitiesKHR-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        }
-      ]
-    },
-    "vkGetDeviceGroupSurfacePresentModesKHR": {
-      "(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_VERSION_1_1,VK_KHR_device_group)": [
-        {
-          "vuid": "VUID-vkGetDeviceGroupSurfacePresentModesKHR-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetDeviceGroupSurfacePresentModesKHR-surface-parameter",
-          "text": " <code>surface</code> <strong class=\"purple\">must</strong> be a valid <code>VkSurfaceKHR</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetDeviceGroupSurfacePresentModesKHR-pModes-parameter",
-          "text": " <code>pModes</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkDeviceGroupPresentModeFlagsKHR\">VkDeviceGroupPresentModeFlagsKHR</a> value"
-        },
-        {
-          "vuid": "VUID-vkGetDeviceGroupSurfacePresentModesKHR-commonparent",
-          "text": " Both of <code>device</code>, and <code>surface</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkInstance</code>"
-        }
-      ]
-    },
-    "vkGetPhysicalDevicePresentRectanglesKHR": {
-      "(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_VERSION_1_1,VK_KHR_device_group)": [
-        {
-          "vuid": "VUID-vkGetPhysicalDevicePresentRectanglesKHR-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDevicePresentRectanglesKHR-surface-parameter",
-          "text": " <code>surface</code> <strong class=\"purple\">must</strong> be a valid <code>VkSurfaceKHR</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDevicePresentRectanglesKHR-pRectCount-parameter",
-          "text": " <code>pRectCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDevicePresentRectanglesKHR-pRects-parameter",
-          "text": " If the value referenced by <code>pRectCount</code> is not <code>0</code>, and <code>pRects</code> is not <code>NULL</code>, <code>pRects</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pRectCount</code> <code>VkRect2D</code> structures"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDevicePresentRectanglesKHR-commonparent",
-          "text": " Both of <code>physicalDevice</code>, and <code>surface</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkInstance</code>"
-        }
-      ]
-    },
-    "vkGetRefreshCycleDurationGOOGLE": {
-      "(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_GOOGLE_display_timing)": [
-        {
-          "vuid": "VUID-vkGetRefreshCycleDurationGOOGLE-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetRefreshCycleDurationGOOGLE-swapchain-parameter",
-          "text": " <code>swapchain</code> <strong class=\"purple\">must</strong> be a valid <code>VkSwapchainKHR</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetRefreshCycleDurationGOOGLE-pDisplayTimingProperties-parameter",
-          "text": " <code>pDisplayTimingProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkRefreshCycleDurationGOOGLE</code> structure"
-        },
-        {
-          "vuid": "VUID-vkGetRefreshCycleDurationGOOGLE-commonparent",
-          "text": " Both of <code>device</code>, and <code>swapchain</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkInstance</code>"
-        }
-      ]
-    },
-    "vkGetPastPresentationTimingGOOGLE": {
-      "(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_GOOGLE_display_timing)": [
-        {
-          "vuid": "VUID-vkGetPastPresentationTimingGOOGLE-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPastPresentationTimingGOOGLE-swapchain-parameter",
-          "text": " <code>swapchain</code> <strong class=\"purple\">must</strong> be a valid <code>VkSwapchainKHR</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPastPresentationTimingGOOGLE-pPresentationTimingCount-parameter",
-          "text": " <code>pPresentationTimingCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
-        },
-        {
-          "vuid": "VUID-vkGetPastPresentationTimingGOOGLE-pPresentationTimings-parameter",
-          "text": " If the value referenced by <code>pPresentationTimingCount</code> is not <code>0</code>, and <code>pPresentationTimings</code> is not <code>NULL</code>, <code>pPresentationTimings</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pPresentationTimingCount</code> <code>VkPastPresentationTimingGOOGLE</code> structures"
-        },
-        {
-          "vuid": "VUID-vkGetPastPresentationTimingGOOGLE-commonparent",
-          "text": " Both of <code>device</code>, and <code>swapchain</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkInstance</code>"
-        }
-      ]
-    },
-    "vkGetSwapchainStatusKHR": {
-      "(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_KHR_shared_presentable_image)": [
-        {
-          "vuid": "VUID-vkGetSwapchainStatusKHR-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetSwapchainStatusKHR-swapchain-parameter",
-          "text": " <code>swapchain</code> <strong class=\"purple\">must</strong> be a valid <code>VkSwapchainKHR</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetSwapchainStatusKHR-commonparent",
-          "text": " Both of <code>device</code>, and <code>swapchain</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkInstance</code>"
-        }
-      ]
-    },
-    "vkCreateSwapchainKHR": {
-      "(VK_KHR_surface)+(VK_KHR_swapchain)": [
-        {
-          "vuid": "VUID-vkCreateSwapchainKHR-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateSwapchainKHR-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkSwapchainCreateInfoKHR</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateSwapchainKHR-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateSwapchainKHR-pSwapchain-parameter",
-          "text": " <code>pSwapchain</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSwapchainKHR</code> handle"
-        }
-      ]
-    },
-    "VkSwapchainCreateInfoKHR": {
-      "(VK_KHR_surface)+(VK_KHR_swapchain)": [
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-surface-01270",
-          "text": " <code>surface</code> <strong class=\"purple\">must</strong> be a surface that is supported by the device as determined using <code>vkGetPhysicalDeviceSurfaceSupportKHR</code>"
-        },
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-minImageCount-01271",
-          "text": " <code>minImageCount</code> <strong class=\"purple\">must</strong> be greater than or equal to the value returned in the <code>minImageCount</code> member of the <code>VkSurfaceCapabilitiesKHR</code> structure returned by <code>vkGetPhysicalDeviceSurfaceCapabilitiesKHR</code> for the surface"
-        },
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-minImageCount-01272",
-          "text": " <code>minImageCount</code> <strong class=\"purple\">must</strong> be less than or equal to the value returned in the <code>maxImageCount</code> member of the <code>VkSurfaceCapabilitiesKHR</code> structure returned by <code>vkGetPhysicalDeviceSurfaceCapabilitiesKHR</code> for the surface if the returned <code>maxImageCount</code> is not zero"
-        },
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-imageFormat-01273",
-          "text": " <code>imageFormat</code> and <code>imageColorSpace</code> <strong class=\"purple\">must</strong> match the <code>format</code> and <code>colorSpace</code> members, respectively, of one of the <code>VkSurfaceFormatKHR</code> structures returned by <code>vkGetPhysicalDeviceSurfaceFormatsKHR</code> for the surface"
-        },
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-imageExtent-01274",
-          "text": " <code>imageExtent</code> <strong class=\"purple\">must</strong> be between <code>minImageExtent</code> and <code>maxImageExtent</code>, inclusive, where <code>minImageExtent</code> and <code>maxImageExtent</code> are members of the <code>VkSurfaceCapabilitiesKHR</code> structure returned by <code>vkGetPhysicalDeviceSurfaceCapabilitiesKHR</code> for the surface"
-        },
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-imageExtent-01689",
-          "text": " <code>imageExtent</code> members <code>width</code> and <code>height</code> <strong class=\"purple\">must</strong> both be non-zero"
-        },
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-imageArrayLayers-01275",
-          "text": " <code>imageArrayLayers</code> <strong class=\"purple\">must</strong> be greater than <code>0</code> and less than or equal to the <code>maxImageArrayLayers</code> member of the <code>VkSurfaceCapabilitiesKHR</code> structure returned by <code>vkGetPhysicalDeviceSurfaceCapabilitiesKHR</code> for the surface"
-        },
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-imageSharingMode-01277",
-          "text": " If <code>imageSharingMode</code> is <code>VK_SHARING_MODE_CONCURRENT</code>, <code>pQueueFamilyIndices</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>queueFamilyIndexCount</code> <code>uint32_t</code> values"
-        },
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-imageSharingMode-01278",
-          "text": " If <code>imageSharingMode</code> is <code>VK_SHARING_MODE_CONCURRENT</code>, <code>queueFamilyIndexCount</code> <strong class=\"purple\">must</strong> be greater than <code>1</code>"
-        },
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-preTransform-01279",
-          "text": " <code>preTransform</code> <strong class=\"purple\">must</strong> be one of the bits present in the <code>supportedTransforms</code> member of the <code>VkSurfaceCapabilitiesKHR</code> structure returned by <code>vkGetPhysicalDeviceSurfaceCapabilitiesKHR</code> for the surface"
-        },
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-compositeAlpha-01280",
-          "text": " <code>compositeAlpha</code> <strong class=\"purple\">must</strong> be one of the bits present in the <code>supportedCompositeAlpha</code> member of the <code>VkSurfaceCapabilitiesKHR</code> structure returned by <code>vkGetPhysicalDeviceSurfaceCapabilitiesKHR</code> for the surface"
-        },
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-presentMode-01281",
-          "text": " <code>presentMode</code> <strong class=\"purple\">must</strong> be one of the <a href=\"#VkPresentModeKHR\">VkPresentModeKHR</a> values returned by <code>vkGetPhysicalDeviceSurfacePresentModesKHR</code> for the surface"
-        },
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-oldSwapchain-01674",
-          "text": " <code>oldSwapchain</code> <strong class=\"purple\">must</strong> not be in the retired state"
-        },
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-imageFormat-01778",
-          "text": " <code>imageFormat</code>, <code>imageUsage</code>, <code>imageExtent</code>, and <code>imageArrayLayers</code> <strong class=\"purple\">must</strong> be supported for <code>VK_IMAGE_TYPE_2D</code> <code>VK_IMAGE_TILING_OPTIMAL</code> images as reported by <a href=\"#vkGetPhysicalDeviceImageFormatProperties\">vkGetPhysicalDeviceImageFormatProperties</a>."
-        },
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-pNext-pNext",
-          "text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkDeviceGroupSwapchainCreateInfoKHR\">VkDeviceGroupSwapchainCreateInfoKHR</a> or <a href=\"#VkSwapchainCounterCreateInfoEXT\">VkSwapchainCounterCreateInfoEXT</a>"
-        },
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-sType-unique",
-          "text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
-        },
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkSwapchainCreateFlagBitsKHR\">VkSwapchainCreateFlagBitsKHR</a> values"
-        },
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-surface-parameter",
-          "text": " <code>surface</code> <strong class=\"purple\">must</strong> be a valid <code>VkSurfaceKHR</code> handle"
-        },
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-imageFormat-parameter",
-          "text": " <code>imageFormat</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFormat\">VkFormat</a> value"
-        },
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-imageColorSpace-parameter",
-          "text": " <code>imageColorSpace</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkColorSpaceKHR\">VkColorSpaceKHR</a> value"
-        },
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-imageUsage-parameter",
-          "text": " <code>imageUsage</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageUsageFlagBits\">VkImageUsageFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-imageUsage-requiredbitmask",
-          "text": " <code>imageUsage</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-imageSharingMode-parameter",
-          "text": " <code>imageSharingMode</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSharingMode\">VkSharingMode</a> value"
-        },
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-preTransform-parameter",
-          "text": " <code>preTransform</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSurfaceTransformFlagBitsKHR\">VkSurfaceTransformFlagBitsKHR</a> value"
-        },
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-compositeAlpha-parameter",
-          "text": " <code>compositeAlpha</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCompositeAlphaFlagBitsKHR\">VkCompositeAlphaFlagBitsKHR</a> value"
-        },
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-presentMode-parameter",
-          "text": " <code>presentMode</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPresentModeKHR\">VkPresentModeKHR</a> value"
-        },
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-oldSwapchain-parameter",
-          "text": " If <code>oldSwapchain</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>oldSwapchain</code> <strong class=\"purple\">must</strong> be a valid <code>VkSwapchainKHR</code> handle"
-        },
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-oldSwapchain-parent",
-          "text": " If <code>oldSwapchain</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>surface</code>"
-        },
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-commonparent",
-          "text": " Both of <code>oldSwapchain</code>, and <code>surface</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkInstance</code>"
-        }
-      ],
-      "(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_KHR_shared_presentable_image)": [
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-minImageCount-01383",
-          "text": " <code>minImageCount</code> <strong class=\"purple\">must</strong> be <code>1</code> if <code>presentMode</code> is either <code>VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR</code> or <code>VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-presentMode-01427",
-          "text": " If <code>presentMode</code> is <code>VK_PRESENT_MODE_IMMEDIATE_KHR</code>, <code>VK_PRESENT_MODE_MAILBOX_KHR</code>, <code>VK_PRESENT_MODE_FIFO_KHR</code> or <code>VK_PRESENT_MODE_FIFO_RELAXED_KHR</code>, <code>imageUsage</code> <strong class=\"purple\">must</strong> be a subset of the supported usage flags present in the <code>supportedUsageFlags</code> member of the <a href=\"#VkSurfaceCapabilitiesKHR\">VkSurfaceCapabilitiesKHR</a> structure returned by <a href=\"#vkGetPhysicalDeviceSurfaceCapabilitiesKHR\">vkGetPhysicalDeviceSurfaceCapabilitiesKHR</a> for <code>surface</code>"
-        },
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-imageUsage-01384",
-          "text": " If <code>presentMode</code> is <code>VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR</code> or <code>VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR</code>, <code>imageUsage</code> <strong class=\"purple\">must</strong> be a subset of the supported usage flags present in the <code>sharedPresentSupportedUsageFlags</code> member of the <a href=\"#VkSharedPresentSurfaceCapabilitiesKHR\">VkSharedPresentSurfaceCapabilitiesKHR</a> structure returned by <a href=\"#vkGetPhysicalDeviceSurfaceCapabilities2KHR\">vkGetPhysicalDeviceSurfaceCapabilities2KHR</a> for <code>surface</code>"
-        }
-      ],
-      "(VK_KHR_surface)+(VK_KHR_swapchain)+!(VK_KHR_shared_presentable_image)": [
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-imageUsage-01276",
-          "text": " <code>imageUsage</code> <strong class=\"purple\">must</strong> be a subset of the supported usage flags present in the <code>supportedUsageFlags</code> member of the <code>VkSurfaceCapabilitiesKHR</code> structure returned by <code>vkGetPhysicalDeviceSurfaceCapabilitiesKHR</code> for the surface"
-        }
-      ],
-      "(VK_KHR_surface)+(VK_KHR_swapchain)+!(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-imageSharingMode-01393",
-          "text": " If <code>imageSharingMode</code> is <code>VK_SHARING_MODE_CONCURRENT</code>, each element of <code>pQueueFamilyIndices</code> <strong class=\"purple\">must</strong> be unique and <strong class=\"purple\">must</strong> be less than <code>pQueueFamilyPropertyCount</code> returned by <a href=\"#vkGetPhysicalDeviceQueueFamilyProperties\">vkGetPhysicalDeviceQueueFamilyProperties</a> for the <code>physicalDevice</code> that was used to create <code>device</code>"
-        }
-      ],
-      "(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-imageSharingMode-01428",
-          "text": " If <code>imageSharingMode</code> is <code>VK_SHARING_MODE_CONCURRENT</code>, each element of <code>pQueueFamilyIndices</code> <strong class=\"purple\">must</strong> be unique and <strong class=\"purple\">must</strong> be less than <code>pQueueFamilyPropertyCount</code> returned by either <a href=\"#vkGetPhysicalDeviceQueueFamilyProperties\">vkGetPhysicalDeviceQueueFamilyProperties</a> or <a href=\"#vkGetPhysicalDeviceQueueFamilyProperties2\">vkGetPhysicalDeviceQueueFamilyProperties2</a> for the <code>physicalDevice</code> that was used to create <code>device</code>"
-        }
-      ],
-      "(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_VERSION_1_1,VK_KHR_device_group)": [
-        {
-          "vuid": "VUID-VkSwapchainCreateInfoKHR-physicalDeviceCount-01429",
-          "text": " If the logical device was created with <a href=\"#VkDeviceGroupDeviceCreateInfo\">VkDeviceGroupDeviceCreateInfo</a>::<code>physicalDeviceCount</code> equal to 1, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR</code>"
-        }
-      ]
-    },
-    "VkDeviceGroupSwapchainCreateInfoKHR": {
-      "(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_VERSION_1_1,VK_KHR_device_group)": [
-        {
-          "vuid": "VUID-VkDeviceGroupSwapchainCreateInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkDeviceGroupSwapchainCreateInfoKHR-modes-parameter",
-          "text": " <code>modes</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkDeviceGroupPresentModeFlagBitsKHR\">VkDeviceGroupPresentModeFlagBitsKHR</a> values"
-        },
-        {
-          "vuid": "VUID-VkDeviceGroupSwapchainCreateInfoKHR-modes-requiredbitmask",
-          "text": " <code>modes</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        }
-      ]
-    },
-    "VkSwapchainCounterCreateInfoEXT": {
-      "(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_EXT_display_control)": [
-        {
-          "vuid": "VUID-VkSwapchainCounterCreateInfoEXT-surfaceCounters-01244",
-          "text": " The bits in <code>surfaceCounters</code> <strong class=\"purple\">must</strong> be supported by <a href=\"#VkSwapchainCreateInfoKHR\">VkSwapchainCreateInfoKHR</a>::<code>surface</code>, as reported by <a href=\"#vkGetPhysicalDeviceSurfaceCapabilities2EXT\">vkGetPhysicalDeviceSurfaceCapabilities2EXT</a>."
-        },
-        {
-          "vuid": "VUID-VkSwapchainCounterCreateInfoEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkSwapchainCounterCreateInfoEXT-surfaceCounters-parameter",
-          "text": " <code>surfaceCounters</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkSurfaceCounterFlagBitsEXT\">VkSurfaceCounterFlagBitsEXT</a> values"
-        }
-      ]
-    },
-    "vkGetSwapchainCounterEXT": {
-      "(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_EXT_display_control)": [
-        {
-          "vuid": "VUID-vkGetSwapchainCounterEXT-swapchain-01245",
-          "text": " One or more present commands on <code>swapchain</code> <strong class=\"purple\">must</strong> have been processed by the presentation engine."
-        },
-        {
-          "vuid": "VUID-vkGetSwapchainCounterEXT-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetSwapchainCounterEXT-swapchain-parameter",
-          "text": " <code>swapchain</code> <strong class=\"purple\">must</strong> be a valid <code>VkSwapchainKHR</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetSwapchainCounterEXT-counter-parameter",
-          "text": " <code>counter</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSurfaceCounterFlagBitsEXT\">VkSurfaceCounterFlagBitsEXT</a> value"
-        },
-        {
-          "vuid": "VUID-vkGetSwapchainCounterEXT-pCounterValue-parameter",
-          "text": " <code>pCounterValue</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint64_t</code> value"
-        },
-        {
-          "vuid": "VUID-vkGetSwapchainCounterEXT-commonparent",
-          "text": " Both of <code>device</code>, and <code>swapchain</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkInstance</code>"
-        }
-      ]
-    },
-    "vkDestroySwapchainKHR": {
-      "(VK_KHR_surface)+(VK_KHR_swapchain)": [
-        {
-          "vuid": "VUID-vkDestroySwapchainKHR-swapchain-01282",
-          "text": " All uses of presentable images acquired from <code>swapchain</code> <strong class=\"purple\">must</strong> have completed execution"
-        },
-        {
-          "vuid": "VUID-vkDestroySwapchainKHR-swapchain-01283",
-          "text": " If <code>VkAllocationCallbacks</code> were provided when <code>swapchain</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
-        },
-        {
-          "vuid": "VUID-vkDestroySwapchainKHR-swapchain-01284",
-          "text": " If no <code>VkAllocationCallbacks</code> were provided when <code>swapchain</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-vkDestroySwapchainKHR-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroySwapchainKHR-swapchain-parameter",
-          "text": " If <code>swapchain</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>swapchain</code> <strong class=\"purple\">must</strong> be a valid <code>VkSwapchainKHR</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroySwapchainKHR-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkDestroySwapchainKHR-commonparent",
-          "text": " Both of <code>device</code>, and <code>swapchain</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkInstance</code>"
-        }
-      ]
-    },
-    "vkCreateSharedSwapchainsKHR": {
-      "(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_KHR_display_swapchain)": [
-        {
-          "vuid": "VUID-vkCreateSharedSwapchainsKHR-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateSharedSwapchainsKHR-pCreateInfos-parameter",
-          "text": " <code>pCreateInfos</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>swapchainCount</code> valid <code>VkSwapchainCreateInfoKHR</code> structures"
-        },
-        {
-          "vuid": "VUID-vkCreateSharedSwapchainsKHR-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateSharedSwapchainsKHR-pSwapchains-parameter",
-          "text": " <code>pSwapchains</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>swapchainCount</code> <code>VkSwapchainKHR</code> handles"
-        },
-        {
-          "vuid": "VUID-vkCreateSharedSwapchainsKHR-swapchainCount-arraylength",
-          "text": " <code>swapchainCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ]
-    },
-    "vkGetSwapchainImagesKHR": {
-      "(VK_KHR_surface)+(VK_KHR_swapchain)": [
-        {
-          "vuid": "VUID-vkGetSwapchainImagesKHR-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetSwapchainImagesKHR-swapchain-parameter",
-          "text": " <code>swapchain</code> <strong class=\"purple\">must</strong> be a valid <code>VkSwapchainKHR</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetSwapchainImagesKHR-pSwapchainImageCount-parameter",
-          "text": " <code>pSwapchainImageCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
-        },
-        {
-          "vuid": "VUID-vkGetSwapchainImagesKHR-pSwapchainImages-parameter",
-          "text": " If the value referenced by <code>pSwapchainImageCount</code> is not <code>0</code>, and <code>pSwapchainImages</code> is not <code>NULL</code>, <code>pSwapchainImages</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pSwapchainImageCount</code> <code>VkImage</code> handles"
-        },
-        {
-          "vuid": "VUID-vkGetSwapchainImagesKHR-commonparent",
-          "text": " Both of <code>device</code>, and <code>swapchain</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkInstance</code>"
-        }
-      ]
-    },
-    "vkAcquireNextImageKHR": {
-      "(VK_KHR_surface)+(VK_KHR_swapchain)": [
-        {
-          "vuid": "VUID-vkAcquireNextImageKHR-swapchain-01285",
-          "text": " <code>swapchain</code> <strong class=\"purple\">must</strong> not be in the retired state"
-        },
-        {
-          "vuid": "VUID-vkAcquireNextImageKHR-semaphore-01286",
-          "text": " If <code>semaphore</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a> it <strong class=\"purple\">must</strong> be unsignaled"
-        },
-        {
-          "vuid": "VUID-vkAcquireNextImageKHR-semaphore-01779",
-          "text": " If <code>semaphore</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a> it <strong class=\"purple\">must</strong> not have any uncompleted signal or wait operations pending"
-        },
-        {
-          "vuid": "VUID-vkAcquireNextImageKHR-fence-01287",
-          "text": " If <code>fence</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a> it <strong class=\"purple\">must</strong> be unsignaled and <strong class=\"purple\">must</strong> not be associated with any other queue command that has not yet completed execution on that queue"
-        },
-        {
-          "vuid": "VUID-vkAcquireNextImageKHR-semaphore-01780",
-          "text": " <code>semaphore</code> and <code>fence</code> <strong class=\"purple\">must</strong> not both be equal to <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
-        },
-        {
-          "vuid": "VUID-vkAcquireNextImageKHR-swapchain-01802",
-          "text": " If the number of currently acquired images is greater than the difference between the number of images in <code>swapchain</code> and the value of <a href=\"#VkSurfaceCapabilitiesKHR\">VkSurfaceCapabilitiesKHR</a>::<code>minImageCount</code> as returned by a call to <a href=\"#vkGetPhysicalDeviceSurfaceCapabilities2KHR\">vkGetPhysicalDeviceSurfaceCapabilities2KHR</a> with the <code>surface</code> used to create <code>swapchain</code>, <code>timeout</code> <strong class=\"purple\">must</strong> not be <code>UINT64_MAX</code>"
-        },
-        {
-          "vuid": "VUID-vkAcquireNextImageKHR-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkAcquireNextImageKHR-swapchain-parameter",
-          "text": " <code>swapchain</code> <strong class=\"purple\">must</strong> be a valid <code>VkSwapchainKHR</code> handle"
-        },
-        {
-          "vuid": "VUID-vkAcquireNextImageKHR-semaphore-parameter",
-          "text": " If <code>semaphore</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>semaphore</code> <strong class=\"purple\">must</strong> be a valid <code>VkSemaphore</code> handle"
-        },
-        {
-          "vuid": "VUID-vkAcquireNextImageKHR-fence-parameter",
-          "text": " If <code>fence</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>fence</code> <strong class=\"purple\">must</strong> be a valid <code>VkFence</code> handle"
-        },
-        {
-          "vuid": "VUID-vkAcquireNextImageKHR-pImageIndex-parameter",
-          "text": " <code>pImageIndex</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
-        },
-        {
-          "vuid": "VUID-vkAcquireNextImageKHR-semaphore-parent",
-          "text": " If <code>semaphore</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        },
-        {
-          "vuid": "VUID-vkAcquireNextImageKHR-fence-parent",
-          "text": " If <code>fence</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
-        },
-        {
-          "vuid": "VUID-vkAcquireNextImageKHR-commonparent",
-          "text": " Both of <code>device</code>, and <code>swapchain</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkInstance</code>"
-        }
-      ]
-    },
-    "vkAcquireNextImage2KHR": {
-      "(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_VERSION_1_1,VK_KHR_device_group)": [
-        {
-          "vuid": "VUID-vkAcquireNextImage2KHR-swapchain-01803",
-          "text": " If the number of currently acquired images is greater than the difference between the number of images in the <code>swapchain</code> member of <code>pAcquireInfo</code> and the value of <a href=\"#VkSurfaceCapabilitiesKHR\">VkSurfaceCapabilitiesKHR</a>::<code>minImageCount</code> as returned by a call to <a href=\"#vkGetPhysicalDeviceSurfaceCapabilities2KHR\">vkGetPhysicalDeviceSurfaceCapabilities2KHR</a> with the <code>surface</code> used to create <code>swapchain</code>, the <code>timeout</code> member of <code>pAcquireInfo</code> <strong class=\"purple\">must</strong> not be <code>UINT64_MAX</code>"
-        },
-        {
-          "vuid": "VUID-vkAcquireNextImage2KHR-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkAcquireNextImage2KHR-pAcquireInfo-parameter",
-          "text": " <code>pAcquireInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAcquireNextImageInfoKHR</code> structure"
-        },
-        {
-          "vuid": "VUID-vkAcquireNextImage2KHR-pImageIndex-parameter",
-          "text": " <code>pImageIndex</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
-        }
-      ]
-    },
-    "VkAcquireNextImageInfoKHR": {
-      "(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_VERSION_1_1,VK_KHR_device_group)": [
-        {
-          "vuid": "VUID-VkAcquireNextImageInfoKHR-swapchain-01675",
-          "text": " <code>swapchain</code> <strong class=\"purple\">must</strong> not be in the retired state"
-        },
-        {
-          "vuid": "VUID-VkAcquireNextImageInfoKHR-semaphore-01288",
-          "text": " If <code>semaphore</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a> it <strong class=\"purple\">must</strong> be unsignaled"
-        },
-        {
-          "vuid": "VUID-VkAcquireNextImageInfoKHR-semaphore-01781",
-          "text": " If <code>semaphore</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a> it <strong class=\"purple\">must</strong> not have any uncompleted signal or wait operations pending"
-        },
-        {
-          "vuid": "VUID-VkAcquireNextImageInfoKHR-fence-01289",
-          "text": " If <code>fence</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a> it <strong class=\"purple\">must</strong> be unsignaled and <strong class=\"purple\">must</strong> not be associated with any other queue command that has not yet completed execution on that queue"
-        },
-        {
-          "vuid": "VUID-VkAcquireNextImageInfoKHR-semaphore-01782",
-          "text": " <code>semaphore</code> and <code>fence</code> <strong class=\"purple\">must</strong> not both be equal to <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
-        },
-        {
-          "vuid": "VUID-VkAcquireNextImageInfoKHR-deviceMask-01290",
-          "text": " <code>deviceMask</code> <strong class=\"purple\">must</strong> be a valid device mask"
-        },
-        {
-          "vuid": "VUID-VkAcquireNextImageInfoKHR-deviceMask-01291",
-          "text": " <code>deviceMask</code> <strong class=\"purple\">must</strong> not be zero"
-        },
-        {
-          "vuid": "VUID-VkAcquireNextImageInfoKHR-semaphore-01804",
-          "text": " <code>semaphore</code> and <code>fence</code> <strong class=\"purple\">must</strong> not both be equal to <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>."
-        },
-        {
-          "vuid": "VUID-VkAcquireNextImageInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkAcquireNextImageInfoKHR-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkAcquireNextImageInfoKHR-swapchain-parameter",
-          "text": " <code>swapchain</code> <strong class=\"purple\">must</strong> be a valid <code>VkSwapchainKHR</code> handle"
-        },
-        {
-          "vuid": "VUID-VkAcquireNextImageInfoKHR-semaphore-parameter",
-          "text": " If <code>semaphore</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>semaphore</code> <strong class=\"purple\">must</strong> be a valid <code>VkSemaphore</code> handle"
-        },
-        {
-          "vuid": "VUID-VkAcquireNextImageInfoKHR-fence-parameter",
-          "text": " If <code>fence</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>fence</code> <strong class=\"purple\">must</strong> be a valid <code>VkFence</code> handle"
-        },
-        {
-          "vuid": "VUID-VkAcquireNextImageInfoKHR-commonparent",
-          "text": " Each of <code>fence</code>, <code>semaphore</code>, and <code>swapchain</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkInstance</code>"
-        }
-      ]
-    },
-    "vkQueuePresentKHR": {
-      "(VK_KHR_surface)+(VK_KHR_swapchain)": [
-        {
-          "vuid": "VUID-vkQueuePresentKHR-pSwapchains-01292",
-          "text": " Each element of <code>pSwapchains</code> member of <code>pPresentInfo</code> <strong class=\"purple\">must</strong> be a swapchain that is created for a surface for which presentation is supported from <code>queue</code> as determined using a call to <code>vkGetPhysicalDeviceSurfaceSupportKHR</code>"
-        },
-        {
-          "vuid": "VUID-vkQueuePresentKHR-pWaitSemaphores-01294",
-          "text": " When a semaphore unsignal operation defined by the elements of the <code>pWaitSemaphores</code> member of <code>pPresentInfo</code> executes on <code>queue</code>, no other queue <strong class=\"purple\">must</strong> be waiting on the same semaphore."
-        },
-        {
-          "vuid": "VUID-vkQueuePresentKHR-pWaitSemaphores-01295",
-          "text": " All elements of the <code>pWaitSemaphores</code> member of <code>pPresentInfo</code> <strong class=\"purple\">must</strong> be semaphores that are signaled, or have &amp;amp;lt;&amp;amp;lt;synchronization-semaphores-signaling, semaphore signal operations&amp;amp;gt;&amp;amp;gt; previously submitted for execution."
-        },
-        {
-          "vuid": "VUID-vkQueuePresentKHR-queue-parameter",
-          "text": " <code>queue</code> <strong class=\"purple\">must</strong> be a valid <code>VkQueue</code> handle"
-        },
-        {
-          "vuid": "VUID-vkQueuePresentKHR-pPresentInfo-parameter",
-          "text": " <code>pPresentInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPresentInfoKHR</code> structure"
-        }
-      ],
-      "(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_KHR_display_swapchain)": [
-        {
-          "vuid": "VUID-vkQueuePresentKHR-pSwapchains-01293",
-          "text": " If more than one member of <code>pSwapchains</code> was created from a display surface, all display surfaces referenced that refer to the same display <strong class=\"purple\">must</strong> use the same display mode"
-        }
-      ]
-    },
-    "VkPresentInfoKHR": {
-      "(VK_KHR_surface)+(VK_KHR_swapchain)+!(VK_KHR_shared_presentable_image)": [
-        {
-          "vuid": "VUID-VkPresentInfoKHR-pImageIndices-01296",
-          "text": " Each element of <code>pImageIndices</code> <strong class=\"purple\">must</strong> be the index of a presentable image acquired from the swapchain specified by the corresponding element of the <code>pSwapchains</code> array, and the presented image subresource <strong class=\"purple\">must</strong> be in the <code>VK_IMAGE_LAYOUT_PRESENT_SRC_KHR</code> layout at the time the operation is executed on a <code>VkDevice</code>"
-        }
-      ],
-      "(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_KHR_shared_presentable_image)": [
-        {
-          "vuid": "VUID-VkPresentInfoKHR-pImageIndices-01430",
-          "text": " Each element of <code>pImageIndices</code> <strong class=\"purple\">must</strong> be the index of a presentable image acquired from the swapchain specified by the corresponding element of the <code>pSwapchains</code> array, and the presented image subresource <strong class=\"purple\">must</strong> be in the <code>VK_IMAGE_LAYOUT_PRESENT_SRC_KHR</code> or <code>VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR</code> layout at the time the operation is executed on a <code>VkDevice</code>"
-        }
-      ],
-      "(VK_KHR_surface)+(VK_KHR_swapchain)": [
-        {
-          "vuid": "VUID-VkPresentInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PRESENT_INFO_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkPresentInfoKHR-pNext-pNext",
-          "text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkDeviceGroupPresentInfoKHR\">VkDeviceGroupPresentInfoKHR</a>, <a href=\"#VkDisplayPresentInfoKHR\">VkDisplayPresentInfoKHR</a>, <a href=\"#VkPresentRegionsKHR\">VkPresentRegionsKHR</a>, or <a href=\"#VkPresentTimesInfoGOOGLE\">VkPresentTimesInfoGOOGLE</a>"
-        },
-        {
-          "vuid": "VUID-VkPresentInfoKHR-sType-unique",
-          "text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
-        },
-        {
-          "vuid": "VUID-VkPresentInfoKHR-pWaitSemaphores-parameter",
-          "text": " If <code>waitSemaphoreCount</code> is not <code>0</code>, <code>pWaitSemaphores</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>waitSemaphoreCount</code> valid <code>VkSemaphore</code> handles"
-        },
-        {
-          "vuid": "VUID-VkPresentInfoKHR-pSwapchains-parameter",
-          "text": " <code>pSwapchains</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>swapchainCount</code> valid <code>VkSwapchainKHR</code> handles"
-        },
-        {
-          "vuid": "VUID-VkPresentInfoKHR-pImageIndices-parameter",
-          "text": " <code>pImageIndices</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>swapchainCount</code> <code>uint32_t</code> values"
-        },
-        {
-          "vuid": "VUID-VkPresentInfoKHR-pResults-parameter",
-          "text": " If <code>pResults</code> is not <code>NULL</code>, <code>pResults</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>swapchainCount</code> <a href=\"#VkResult\">VkResult</a> values"
-        },
-        {
-          "vuid": "VUID-VkPresentInfoKHR-swapchainCount-arraylength",
-          "text": " <code>swapchainCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkPresentInfoKHR-commonparent",
-          "text": " Both of the elements of <code>pSwapchains</code>, and the elements of <code>pWaitSemaphores</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkInstance</code>"
-        }
-      ]
-    },
-    "VkPresentRegionsKHR": {
-      "(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_KHR_incremental_present)": [
-        {
-          "vuid": "VUID-VkPresentRegionsKHR-swapchainCount-01260",
-          "text": " <code>swapchainCount</code> <strong class=\"purple\">must</strong> be the same value as <code>VkPresentInfoKHR</code>::<code>swapchainCount</code>, where <code>VkPresentInfoKHR</code> is in the pNext-chain of this <code>VkPresentRegionsKHR</code> structure."
-        },
-        {
-          "vuid": "VUID-VkPresentRegionsKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkPresentRegionsKHR-pRegions-parameter",
-          "text": " If <code>pRegions</code> is not <code>NULL</code>, <code>pRegions</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>swapchainCount</code> valid <code>VkPresentRegionKHR</code> structures"
-        },
-        {
-          "vuid": "VUID-VkPresentRegionsKHR-swapchainCount-arraylength",
-          "text": " <code>swapchainCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ]
-    },
-    "VkPresentRegionKHR": {
-      "(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_KHR_incremental_present)": [
-        {
-          "vuid": "VUID-VkPresentRegionKHR-pRectangles-parameter",
-          "text": " If <code>rectangleCount</code> is not <code>0</code>, and <code>pRectangles</code> is not <code>NULL</code>, <code>pRectangles</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>rectangleCount</code> <code>VkRectLayerKHR</code> structures"
-        }
-      ]
-    },
-    "VkRectLayerKHR": {
-      "(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_KHR_incremental_present)": [
-        {
-          "vuid": "VUID-VkRectLayerKHR-offset-01261",
-          "text": " The sum of <code>offset</code> and <code>extent</code> <strong class=\"purple\">must</strong> be no greater than the <code>imageExtent</code> member of the <code>VkSwapchainCreateInfoKHR</code> structure given to <a href=\"#vkCreateSwapchainKHR\">vkCreateSwapchainKHR</a>."
-        },
-        {
-          "vuid": "VUID-VkRectLayerKHR-layer-01262",
-          "text": " <code>layer</code> <strong class=\"purple\">must</strong> be less than <code>imageArrayLayers</code> member of the <code>VkSwapchainCreateInfoKHR</code> structure given to <a href=\"#vkCreateSwapchainKHR\">vkCreateSwapchainKHR</a>."
-        }
-      ]
-    },
-    "VkDisplayPresentInfoKHR": {
-      "(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_KHR_display_swapchain)": [
-        {
-          "vuid": "VUID-VkDisplayPresentInfoKHR-srcRect-01257",
-          "text": " <code>srcRect</code> <strong class=\"purple\">must</strong> specify a rectangular region that is a subset of the image being presented"
-        },
-        {
-          "vuid": "VUID-VkDisplayPresentInfoKHR-dstRect-01258",
-          "text": " <code>dstRect</code> <strong class=\"purple\">must</strong> specify a rectangular region that is a subset of the <code>visibleRegion</code> parameter of the display mode the swapchain being presented uses"
-        },
-        {
-          "vuid": "VUID-VkDisplayPresentInfoKHR-persistentContent-01259",
-          "text": " If the <code>persistentContent</code> member of the <code>VkDisplayPropertiesKHR</code> structure returned by <code>vkGetPhysicalDeviceDisplayPropertiesKHR</code> for the display the present operation targets then <code>persistent</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
-        },
-        {
-          "vuid": "VUID-VkDisplayPresentInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR</code>"
-        }
-      ]
-    },
-    "VkDeviceGroupPresentInfoKHR": {
-      "(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_VERSION_1_1,VK_KHR_device_group)": [
-        {
-          "vuid": "VUID-VkDeviceGroupPresentInfoKHR-swapchainCount-01297",
-          "text": " <code>swapchainCount</code> <strong class=\"purple\">must</strong> equal <code>0</code> or <a href=\"#VkPresentInfoKHR\">VkPresentInfoKHR</a>::<code>swapchainCount</code>"
-        },
-        {
-          "vuid": "VUID-VkDeviceGroupPresentInfoKHR-mode-01298",
-          "text": " If <code>mode</code> is <code>VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR</code>, then each element of <code>pDeviceMasks</code> <strong class=\"purple\">must</strong> have exactly one bit set, and the corresponding element of <a href=\"#VkDeviceGroupPresentCapabilitiesKHR\">VkDeviceGroupPresentCapabilitiesKHR</a>::<code>presentMask</code> <strong class=\"purple\">must</strong> be non-zero"
-        },
-        {
-          "vuid": "VUID-VkDeviceGroupPresentInfoKHR-mode-01299",
-          "text": " If <code>mode</code> is <code>VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR</code>, then each element of <code>pDeviceMasks</code> <strong class=\"purple\">must</strong> have exactly one bit set, and some physical device in the logical device <strong class=\"purple\">must</strong> include that bit in its <a href=\"#VkDeviceGroupPresentCapabilitiesKHR\">VkDeviceGroupPresentCapabilitiesKHR</a>::<code>presentMask</code>."
-        },
-        {
-          "vuid": "VUID-VkDeviceGroupPresentInfoKHR-mode-01300",
-          "text": " If <code>mode</code> is <code>VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR</code>, then each element of <code>pDeviceMasks</code> <strong class=\"purple\">must</strong> have a value for which all set bits are set in one of the elements of <a href=\"#VkDeviceGroupPresentCapabilitiesKHR\">VkDeviceGroupPresentCapabilitiesKHR</a>::<code>presentMask</code>"
-        },
-        {
-          "vuid": "VUID-VkDeviceGroupPresentInfoKHR-mode-01301",
-          "text": " If <code>mode</code> is <code>VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR</code>, then for each bit set in each element of <code>pDeviceMasks</code>, the corresponding element of <a href=\"#VkDeviceGroupPresentCapabilitiesKHR\">VkDeviceGroupPresentCapabilitiesKHR</a>::<code>presentMask</code> <strong class=\"purple\">must</strong> be non-zero"
-        },
-        {
-          "vuid": "VUID-VkDeviceGroupPresentInfoKHR-pDeviceMasks-01302",
-          "text": " The value of each element of <code>pDeviceMasks</code> <strong class=\"purple\">must</strong> be equal to the device mask passed in <a href=\"#VkAcquireNextImageInfoKHR\">VkAcquireNextImageInfoKHR</a>::<code>deviceMask</code> when the image index was last acquired"
-        },
-        {
-          "vuid": "VUID-VkDeviceGroupPresentInfoKHR-mode-01303",
-          "text": " <code>mode</code> <strong class=\"purple\">must</strong> have exactly one bit set, and that bit <strong class=\"purple\">must</strong> have been included in <a href=\"#VkDeviceGroupSwapchainCreateInfoKHR\">VkDeviceGroupSwapchainCreateInfoKHR</a>::<code>modes</code>"
-        },
-        {
-          "vuid": "VUID-VkDeviceGroupPresentInfoKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR</code>"
-        },
-        {
-          "vuid": "VUID-VkDeviceGroupPresentInfoKHR-pDeviceMasks-parameter",
-          "text": " If <code>swapchainCount</code> is not <code>0</code>, <code>pDeviceMasks</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>swapchainCount</code> <code>uint32_t</code> values"
-        },
-        {
-          "vuid": "VUID-VkDeviceGroupPresentInfoKHR-mode-parameter",
-          "text": " <code>mode</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDeviceGroupPresentModeFlagBitsKHR\">VkDeviceGroupPresentModeFlagBitsKHR</a> value"
-        }
-      ]
-    },
-    "VkPresentTimesInfoGOOGLE": {
-      "(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_GOOGLE_display_timing)": [
-        {
-          "vuid": "VUID-VkPresentTimesInfoGOOGLE-swapchainCount-01247",
-          "text": " <code>swapchainCount</code> <strong class=\"purple\">must</strong> be the same value as <code>VkPresentInfoKHR</code>::<code>swapchainCount</code>, where <code>VkPresentInfoKHR</code> is in the <code>pNext</code> chain of this <code>VkPresentTimesInfoGOOGLE</code> structure."
-        },
-        {
-          "vuid": "VUID-VkPresentTimesInfoGOOGLE-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE</code>"
-        },
-        {
-          "vuid": "VUID-VkPresentTimesInfoGOOGLE-pTimes-parameter",
-          "text": " If <code>pTimes</code> is not <code>NULL</code>, <code>pTimes</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>swapchainCount</code> <code>VkPresentTimeGOOGLE</code> structures"
-        },
-        {
-          "vuid": "VUID-VkPresentTimesInfoGOOGLE-swapchainCount-arraylength",
-          "text": " <code>swapchainCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ]
-    },
-    "vkSetHdrMetadataEXT": {
-      "(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_EXT_hdr_metadata)": [
-        {
-          "vuid": "VUID-vkSetHdrMetadataEXT-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkSetHdrMetadataEXT-pSwapchains-parameter",
-          "text": " <code>pSwapchains</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>swapchainCount</code> valid <code>VkSwapchainKHR</code> handles"
-        },
-        {
-          "vuid": "VUID-vkSetHdrMetadataEXT-pMetadata-parameter",
-          "text": " <code>pMetadata</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>swapchainCount</code> valid <code>VkHdrMetadataEXT</code> structures"
-        },
-        {
-          "vuid": "VUID-vkSetHdrMetadataEXT-swapchainCount-arraylength",
-          "text": " <code>swapchainCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkSetHdrMetadataEXT-commonparent",
-          "text": " Both of <code>device</code>, and the elements of <code>pSwapchains</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkInstance</code>"
-        }
-      ]
-    },
-    "vkEnumerateInstanceLayerProperties": {
-      "core": [
-        {
-          "vuid": "VUID-vkEnumerateInstanceLayerProperties-pPropertyCount-parameter",
-          "text": " <code>pPropertyCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
-        },
-        {
-          "vuid": "VUID-vkEnumerateInstanceLayerProperties-pProperties-parameter",
-          "text": " If the value referenced by <code>pPropertyCount</code> is not <code>0</code>, and <code>pProperties</code> is not <code>NULL</code>, <code>pProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pPropertyCount</code> <code>VkLayerProperties</code> structures"
-        }
-      ]
-    },
-    "vkEnumerateDeviceLayerProperties": {
-      "core": [
-        {
-          "vuid": "VUID-vkEnumerateDeviceLayerProperties-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkEnumerateDeviceLayerProperties-pPropertyCount-parameter",
-          "text": " <code>pPropertyCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
-        },
-        {
-          "vuid": "VUID-vkEnumerateDeviceLayerProperties-pProperties-parameter",
-          "text": " If the value referenced by <code>pPropertyCount</code> is not <code>0</code>, and <code>pProperties</code> is not <code>NULL</code>, <code>pProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pPropertyCount</code> <code>VkLayerProperties</code> structures"
-        }
-      ]
-    },
-    "vkEnumerateInstanceExtensionProperties": {
-      "core": [
-        {
-          "vuid": "VUID-vkEnumerateInstanceExtensionProperties-pLayerName-parameter",
-          "text": " If <code>pLayerName</code> is not <code>NULL</code>, <code>pLayerName</code> <strong class=\"purple\">must</strong> be a null-terminated UTF-8 string"
-        },
-        {
-          "vuid": "VUID-vkEnumerateInstanceExtensionProperties-pPropertyCount-parameter",
-          "text": " <code>pPropertyCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
-        },
-        {
-          "vuid": "VUID-vkEnumerateInstanceExtensionProperties-pProperties-parameter",
-          "text": " If the value referenced by <code>pPropertyCount</code> is not <code>0</code>, and <code>pProperties</code> is not <code>NULL</code>, <code>pProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pPropertyCount</code> <code>VkExtensionProperties</code> structures"
-        }
-      ]
-    },
-    "vkEnumerateDeviceExtensionProperties": {
-      "core": [
-        {
-          "vuid": "VUID-vkEnumerateDeviceExtensionProperties-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkEnumerateDeviceExtensionProperties-pLayerName-parameter",
-          "text": " If <code>pLayerName</code> is not <code>NULL</code>, <code>pLayerName</code> <strong class=\"purple\">must</strong> be a null-terminated UTF-8 string"
-        },
-        {
-          "vuid": "VUID-vkEnumerateDeviceExtensionProperties-pPropertyCount-parameter",
-          "text": " <code>pPropertyCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
-        },
-        {
-          "vuid": "VUID-vkEnumerateDeviceExtensionProperties-pProperties-parameter",
-          "text": " If the value referenced by <code>pPropertyCount</code> is not <code>0</code>, and <code>pProperties</code> is not <code>NULL</code>, <code>pProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pPropertyCount</code> <code>VkExtensionProperties</code> structures"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceFeatures": {
-      "core": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceFeatures-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceFeatures-pFeatures-parameter",
-          "text": " <code>pFeatures</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkPhysicalDeviceFeatures</code> structure"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceFeatures2": {
-      "(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceFeatures2-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceFeatures2-pFeatures-parameter",
-          "text": " <code>pFeatures</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkPhysicalDeviceFeatures2</code> structure"
-        }
-      ]
-    },
-    "VkPhysicalDeviceFeatures2": {
-      "(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
-        {
-          "vuid": "VUID-VkPhysicalDeviceFeatures2-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2</code>"
-        }
-      ]
-    },
-    "VkPhysicalDeviceVariablePointerFeatures": {
-      "(VK_VERSION_1_1,VK_KHR_variable_pointers)": [
-        {
-          "vuid": "VUID-VkPhysicalDeviceVariablePointerFeatures-variablePointers-01431",
-          "text": " If <code>variablePointers</code> is enabled then <code>variablePointersStorageBuffer</code> <strong class=\"purple\">must</strong> also be enabled."
-        },
-        {
-          "vuid": "VUID-VkPhysicalDeviceVariablePointerFeatures-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES</code>"
-        }
-      ]
-    },
-    "VkPhysicalDeviceMultiviewFeatures": {
-      "(VK_VERSION_1_1,VK_KHR_multiview)": [
-        {
-          "vuid": "VUID-VkPhysicalDeviceMultiviewFeatures-multiviewGeometryShader-00580",
-          "text": " If <code>multiviewGeometryShader</code> is enabled then <code>multiview</code> <strong class=\"purple\">must</strong> also be enabled."
-        },
-        {
-          "vuid": "VUID-VkPhysicalDeviceMultiviewFeatures-multiviewTessellationShader-00581",
-          "text": " If <code>multiviewTessellationShader</code> is enabled then <code>multiview</code> <strong class=\"purple\">must</strong> also be enabled."
-        },
-        {
-          "vuid": "VUID-VkPhysicalDeviceMultiviewFeatures-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES</code>"
-        }
-      ]
-    },
-    "VkPhysicalDevice16BitStorageFeatures": {
-      "(VK_VERSION_1_1,VK_KHR_16bit_storage)": [
-        {
-          "vuid": "VUID-VkPhysicalDevice16BitStorageFeatures-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES</code>"
-        }
-      ]
-    },
-    "VkPhysicalDeviceSamplerYcbcrConversionFeatures": {
-      "(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
-        {
-          "vuid": "VUID-VkPhysicalDeviceSamplerYcbcrConversionFeatures-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES</code>"
-        }
-      ]
-    },
-    "VkPhysicalDeviceProtectedMemoryFeatures": {
-      "(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-VkPhysicalDeviceProtectedMemoryFeatures-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES</code>"
-        }
-      ]
-    },
-    "VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT": {
-      "(VK_EXT_blend_operation_advanced)": [
-        {
-          "vuid": "VUID-VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT</code>"
-        }
-      ]
-    },
-    "VkPhysicalDeviceShaderDrawParameterFeatures": {
-      "(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-VkPhysicalDeviceShaderDrawParameterFeatures-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES</code>"
-        }
-      ]
-    },
-    "VkPhysicalDeviceDescriptorIndexingFeaturesEXT": {
-      "(VK_EXT_descriptor_indexing)": [
-        {
-          "vuid": "VUID-VkPhysicalDeviceDescriptorIndexingFeaturesEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT</code>"
-        }
-      ]
-    },
-    "VkPhysicalDevicePushDescriptorPropertiesKHR": {
-      "(VK_KHR_push_descriptor)": [
-        {
-          "vuid": "VUID-VkPhysicalDevicePushDescriptorPropertiesKHR-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR</code>"
-        }
-      ]
-    },
-    "VkPhysicalDeviceMultiviewProperties": {
-      "(VK_VERSION_1_1,VK_KHR_multiview)": [
-        {
-          "vuid": "VUID-VkPhysicalDeviceMultiviewProperties-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES</code>"
-        }
-      ]
-    },
-    "VkPhysicalDeviceDiscardRectanglePropertiesEXT": {
-      "(VK_EXT_discard_rectangles)": [
-        {
-          "vuid": "VUID-VkPhysicalDeviceDiscardRectanglePropertiesEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT</code>"
-        }
-      ]
-    },
-    "VkPhysicalDeviceSampleLocationsPropertiesEXT": {
-      "(VK_EXT_sample_locations)": [
-        {
-          "vuid": "VUID-VkPhysicalDeviceSampleLocationsPropertiesEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT</code>"
-        }
-      ]
-    },
-    "VkPhysicalDeviceExternalMemoryHostPropertiesEXT": {
-      "(VK_EXT_external_memory_host)": [
-        {
-          "vuid": "VUID-VkPhysicalDeviceExternalMemoryHostPropertiesEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT</code>"
-        }
-      ]
-    },
-    "VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX": {
-      "(VK_NVX_multiview_per_view_attributes)": [
-        {
-          "vuid": "VUID-VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX</code>"
-        }
-      ]
-    },
-    "VkPhysicalDevicePointClippingProperties": {
-      "(VK_VERSION_1_1,VK_KHR_maintenance2)": [
-        {
-          "vuid": "VUID-VkPhysicalDevicePointClippingProperties-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES</code>"
-        }
-      ]
-    },
-    "VkPhysicalDeviceSubgroupProperties": {
-      "(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-VkPhysicalDeviceSubgroupProperties-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES</code>"
-        }
-      ]
-    },
-    "VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT": {
-      "(VK_EXT_blend_operation_advanced)": [
-        {
-          "vuid": "VUID-VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT</code>"
-        }
-      ]
-    },
-    "VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT": {
-      "(VK_EXT_vertex_attribute_divisor)": [
-        {
-          "vuid": "VUID-VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT</code>"
-        }
-      ]
-    },
-    "VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT": {
-      "(VK_EXT_sampler_filter_minmax)": [
-        {
-          "vuid": "VUID-VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT</code>"
-        }
-      ]
-    },
-    "VkPhysicalDeviceProtectedMemoryProperties": {
-      "(VK_VERSION_1_1)": [
-        {
-          "vuid": "VUID-VkPhysicalDeviceProtectedMemoryProperties-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES</code>"
-        }
-      ]
-    },
-    "VkPhysicalDeviceMaintenance3Properties": {
-      "(VK_VERSION_1_1,VK_KHR_maintenance3)": [
-        {
-          "vuid": "VUID-VkPhysicalDeviceMaintenance3Properties-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES</code>"
-        }
-      ]
-    },
-    "VkPhysicalDeviceDescriptorIndexingPropertiesEXT": {
-      "(VK_EXT_descriptor_indexing)": [
-        {
-          "vuid": "VUID-VkPhysicalDeviceDescriptorIndexingPropertiesEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT</code>"
-        }
-      ]
-    },
-    "VkPhysicalDeviceConservativeRasterizationPropertiesEXT": {
-      "(VK_EXT_conservative_rasterization)": [
-        {
-          "vuid": "VUID-VkPhysicalDeviceConservativeRasterizationPropertiesEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT</code>"
-        }
-      ]
-    },
-    "VkPhysicalDeviceShaderCorePropertiesAMD": {
-      "(VK_AMD_shader_core_properties)": [
-        {
-          "vuid": "VUID-VkPhysicalDeviceShaderCorePropertiesAMD-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD</code>"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceMultisamplePropertiesEXT": {
-      "(VK_EXT_sample_locations)": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceMultisamplePropertiesEXT-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceMultisamplePropertiesEXT-samples-parameter",
-          "text": " <code>samples</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSampleCountFlagBits\">VkSampleCountFlagBits</a> value"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceMultisamplePropertiesEXT-pMultisampleProperties-parameter",
-          "text": " <code>pMultisampleProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkMultisamplePropertiesEXT</code> structure"
-        }
-      ]
-    },
-    "VkMultisamplePropertiesEXT": {
-      "(VK_EXT_sample_locations)": [
-        {
-          "vuid": "VUID-VkMultisamplePropertiesEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkMultisamplePropertiesEXT-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceFormatProperties": {
-      "core": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceFormatProperties-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceFormatProperties-format-parameter",
-          "text": " <code>format</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFormat\">VkFormat</a> value"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceFormatProperties-pFormatProperties-parameter",
-          "text": " <code>pFormatProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkFormatProperties</code> structure"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceFormatProperties2": {
-      "(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceFormatProperties2-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceFormatProperties2-format-parameter",
-          "text": " <code>format</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFormat\">VkFormat</a> value"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceFormatProperties2-pFormatProperties-parameter",
-          "text": " <code>pFormatProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkFormatProperties2</code> structure"
-        }
-      ]
-    },
-    "VkFormatProperties2": {
-      "(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
-        {
-          "vuid": "VUID-VkFormatProperties2-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2</code>"
-        },
-        {
-          "vuid": "VUID-VkFormatProperties2-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceImageFormatProperties": {
-      "core": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties-format-parameter",
-          "text": " <code>format</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFormat\">VkFormat</a> value"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties-type-parameter",
-          "text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageType\">VkImageType</a> value"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties-tiling-parameter",
-          "text": " <code>tiling</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageTiling\">VkImageTiling</a> value"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties-usage-parameter",
-          "text": " <code>usage</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageUsageFlagBits\">VkImageUsageFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties-usage-requiredbitmask",
-          "text": " <code>usage</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageCreateFlagBits\">VkImageCreateFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties-pImageFormatProperties-parameter",
-          "text": " <code>pImageFormatProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkImageFormatProperties</code> structure"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceExternalImageFormatPropertiesNV": {
-      "(VK_NV_external_memory_capabilities)": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-format-parameter",
-          "text": " <code>format</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFormat\">VkFormat</a> value"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-type-parameter",
-          "text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageType\">VkImageType</a> value"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-tiling-parameter",
-          "text": " <code>tiling</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageTiling\">VkImageTiling</a> value"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-usage-parameter",
-          "text": " <code>usage</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageUsageFlagBits\">VkImageUsageFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-usage-requiredbitmask",
-          "text": " <code>usage</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageCreateFlagBits\">VkImageCreateFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-externalHandleType-parameter",
-          "text": " <code>externalHandleType</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkExternalMemoryHandleTypeFlagBitsNV\">VkExternalMemoryHandleTypeFlagBitsNV</a> values"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-pExternalImageFormatProperties-parameter",
-          "text": " <code>pExternalImageFormatProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkExternalImageFormatPropertiesNV</code> structure"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceImageFormatProperties2": {
-      "(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)+(VK_ANDROID_external_memory_android_hardware_buffer)": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties2-pNext-01868",
-          "text": " If the <code>pNext</code> chain of <code>pImageFormatProperties</code> contains an instance of <a href=\"#VkAndroidHardwareBufferUsageANDROID\">VkAndroidHardwareBufferUsageANDROID</a>, the <code>pNext</code> chain of <code>pImageFormatInfo</code> <strong class=\"purple\">must</strong> contain an instance of <a href=\"#VkPhysicalDeviceExternalImageFormatInfo\">VkPhysicalDeviceExternalImageFormatInfo</a> with <code>handleType</code> set to <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID</code>."
-        }
-      ],
-      "(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties2-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties2-pImageFormatInfo-parameter",
-          "text": " <code>pImageFormatInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPhysicalDeviceImageFormatInfo2</code> structure"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties2-pImageFormatProperties-parameter",
-          "text": " <code>pImageFormatProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkImageFormatProperties2</code> structure"
-        }
-      ]
-    },
-    "VkPhysicalDeviceImageFormatInfo2": {
-      "(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
-        {
-          "vuid": "VUID-VkPhysicalDeviceImageFormatInfo2-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2</code>"
-        },
-        {
-          "vuid": "VUID-VkPhysicalDeviceImageFormatInfo2-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkPhysicalDeviceExternalImageFormatInfo\">VkPhysicalDeviceExternalImageFormatInfo</a>"
-        },
-        {
-          "vuid": "VUID-VkPhysicalDeviceImageFormatInfo2-format-parameter",
-          "text": " <code>format</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFormat\">VkFormat</a> value"
-        },
-        {
-          "vuid": "VUID-VkPhysicalDeviceImageFormatInfo2-type-parameter",
-          "text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageType\">VkImageType</a> value"
-        },
-        {
-          "vuid": "VUID-VkPhysicalDeviceImageFormatInfo2-tiling-parameter",
-          "text": " <code>tiling</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageTiling\">VkImageTiling</a> value"
-        },
-        {
-          "vuid": "VUID-VkPhysicalDeviceImageFormatInfo2-usage-parameter",
-          "text": " <code>usage</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageUsageFlagBits\">VkImageUsageFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkPhysicalDeviceImageFormatInfo2-usage-requiredbitmask",
-          "text": " <code>usage</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkPhysicalDeviceImageFormatInfo2-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageCreateFlagBits\">VkImageCreateFlagBits</a> values"
-        }
-      ]
-    },
-    "VkImageFormatProperties2": {
-      "(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
-        {
-          "vuid": "VUID-VkImageFormatProperties2-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2</code>"
-        },
-        {
-          "vuid": "VUID-VkImageFormatProperties2-pNext-pNext",
-          "text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkAndroidHardwareBufferUsageANDROID\">VkAndroidHardwareBufferUsageANDROID</a>, <a href=\"#VkExternalImageFormatProperties\">VkExternalImageFormatProperties</a>, <a href=\"#VkSamplerYcbcrConversionImageFormatProperties\">VkSamplerYcbcrConversionImageFormatProperties</a>, or <a href=\"#VkTextureLODGatherFormatPropertiesAMD\">VkTextureLODGatherFormatPropertiesAMD</a>"
-        },
-        {
-          "vuid": "VUID-VkImageFormatProperties2-sType-unique",
-          "text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
-        }
-      ]
-    },
-    "VkPhysicalDeviceExternalImageFormatInfo": {
-      "(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)+(VK_VERSION_1_1,VK_KHR_external_memory_capabilities)": [
-        {
-          "vuid": "VUID-VkPhysicalDeviceExternalImageFormatInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkPhysicalDeviceExternalImageFormatInfo-handleType-parameter",
-          "text": " If <code>handleType</code> is not <code>0</code>, <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalMemoryHandleTypeFlagBits\">VkExternalMemoryHandleTypeFlagBits</a> value"
-        }
-      ]
-    },
-    "VkExternalImageFormatProperties": {
-      "(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)+(VK_VERSION_1_1,VK_KHR_external_memory_capabilities)": [
-        {
-          "vuid": "VUID-VkExternalImageFormatProperties-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES</code>"
-        }
-      ]
-    },
-    "VkSamplerYcbcrConversionImageFormatProperties": {
-      "(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)+(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
-        {
-          "vuid": "VUID-VkSamplerYcbcrConversionImageFormatProperties-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES</code>"
-        }
-      ]
-    },
-    "VkAndroidHardwareBufferUsageANDROID": {
-      "(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)+(VK_ANDROID_external_memory_android_hardware_buffer)": [
-        {
-          "vuid": "VUID-VkAndroidHardwareBufferUsageANDROID-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID</code>"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceExternalBufferProperties": {
-      "(VK_VERSION_1_1,VK_KHR_external_memory_capabilities)": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceExternalBufferProperties-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceExternalBufferProperties-pExternalBufferInfo-parameter",
-          "text": " <code>pExternalBufferInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPhysicalDeviceExternalBufferInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceExternalBufferProperties-pExternalBufferProperties-parameter",
-          "text": " <code>pExternalBufferProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkExternalBufferProperties</code> structure"
-        }
-      ]
-    },
-    "VkPhysicalDeviceExternalBufferInfo": {
-      "(VK_VERSION_1_1,VK_KHR_external_memory_capabilities)": [
-        {
-          "vuid": "VUID-VkPhysicalDeviceExternalBufferInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkPhysicalDeviceExternalBufferInfo-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkPhysicalDeviceExternalBufferInfo-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkBufferCreateFlagBits\">VkBufferCreateFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkPhysicalDeviceExternalBufferInfo-usage-parameter",
-          "text": " <code>usage</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkBufferUsageFlagBits\">VkBufferUsageFlagBits</a> values"
-        },
-        {
-          "vuid": "VUID-VkPhysicalDeviceExternalBufferInfo-usage-requiredbitmask",
-          "text": " <code>usage</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkPhysicalDeviceExternalBufferInfo-handleType-parameter",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalMemoryHandleTypeFlagBits\">VkExternalMemoryHandleTypeFlagBits</a> value"
-        }
-      ]
-    },
-    "VkExternalBufferProperties": {
-      "(VK_VERSION_1_1,VK_KHR_external_memory_capabilities)": [
-        {
-          "vuid": "VUID-VkExternalBufferProperties-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES</code>"
-        },
-        {
-          "vuid": "VUID-VkExternalBufferProperties-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceExternalSemaphoreProperties": {
-      "(VK_VERSION_1_1,VK_KHR_external_semaphore_capabilities)": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceExternalSemaphoreProperties-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceExternalSemaphoreProperties-pExternalSemaphoreInfo-parameter",
-          "text": " <code>pExternalSemaphoreInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPhysicalDeviceExternalSemaphoreInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceExternalSemaphoreProperties-pExternalSemaphoreProperties-parameter",
-          "text": " <code>pExternalSemaphoreProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkExternalSemaphoreProperties</code> structure"
-        }
-      ]
-    },
-    "VkPhysicalDeviceExternalSemaphoreInfo": {
-      "(VK_VERSION_1_1,VK_KHR_external_semaphore_capabilities)": [
-        {
-          "vuid": "VUID-VkPhysicalDeviceExternalSemaphoreInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkPhysicalDeviceExternalSemaphoreInfo-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkPhysicalDeviceExternalSemaphoreInfo-handleType-parameter",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalSemaphoreHandleTypeFlagBits\">VkExternalSemaphoreHandleTypeFlagBits</a> value"
-        }
-      ]
-    },
-    "VkExternalSemaphoreProperties": {
-      "(VK_VERSION_1_1,VK_KHR_external_semaphore_capabilities)": [
-        {
-          "vuid": "VUID-VkExternalSemaphoreProperties-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES</code>"
-        },
-        {
-          "vuid": "VUID-VkExternalSemaphoreProperties-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        }
-      ]
-    },
-    "vkGetPhysicalDeviceExternalFenceProperties": {
-      "(VK_VERSION_1_1,VK_KHR_external_fence_capabilities)": [
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceExternalFenceProperties-physicalDevice-parameter",
-          "text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceExternalFenceProperties-pExternalFenceInfo-parameter",
-          "text": " <code>pExternalFenceInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPhysicalDeviceExternalFenceInfo</code> structure"
-        },
-        {
-          "vuid": "VUID-vkGetPhysicalDeviceExternalFenceProperties-pExternalFenceProperties-parameter",
-          "text": " <code>pExternalFenceProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkExternalFenceProperties</code> structure"
-        }
-      ]
-    },
-    "VkPhysicalDeviceExternalFenceInfo": {
-      "(VK_VERSION_1_1,VK_KHR_external_fence_capabilities)": [
-        {
-          "vuid": "VUID-VkPhysicalDeviceExternalFenceInfo-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO</code>"
-        },
-        {
-          "vuid": "VUID-VkPhysicalDeviceExternalFenceInfo-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkPhysicalDeviceExternalFenceInfo-handleType-parameter",
-          "text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalFenceHandleTypeFlagBits\">VkExternalFenceHandleTypeFlagBits</a> value"
-        }
-      ]
-    },
-    "VkExternalFenceProperties": {
-      "(VK_VERSION_1_1,VK_KHR_external_fence_capabilities)": [
-        {
-          "vuid": "VUID-VkExternalFenceProperties-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES</code>"
-        },
-        {
-          "vuid": "VUID-VkExternalFenceProperties-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        }
-      ]
-    },
-    "vkSetDebugUtilsObjectNameEXT": {
-      "(VK_EXT_debug_utils)": [
-        {
-          "vuid": "VUID-vkSetDebugUtilsObjectNameEXT-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkSetDebugUtilsObjectNameEXT-pNameInfo-parameter",
-          "text": " <code>pNameInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDebugUtilsObjectNameInfoEXT</code> structure"
-        }
-      ]
-    },
-    "VkDebugUtilsObjectNameInfoEXT": {
-      "(VK_EXT_debug_utils)": [
-        {
-          "vuid": "VUID-VkDebugUtilsObjectNameInfoEXT-objectType-01905",
-          "text": " <code>objectType</code> <strong class=\"purple\">must</strong> not be <code>VK_OBJECT_TYPE_UNKNOWN</code>"
-        },
-        {
-          "vuid": "VUID-VkDebugUtilsObjectNameInfoEXT-objectHandle-01906",
-          "text": " <code>objectHandle</code> <strong class=\"purple\">must</strong> not be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
-        },
-        {
-          "vuid": "VUID-VkDebugUtilsObjectNameInfoEXT-objectHandle-01907",
-          "text": " <code>objectHandle</code> <strong class=\"purple\">must</strong> be a Vulkan object of the type associated with <code>objectType</code> as defined in &amp;amp;lt;&amp;amp;lt;debugging-object-types&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-VkDebugUtilsObjectNameInfoEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkDebugUtilsObjectNameInfoEXT-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkDebugUtilsObjectNameInfoEXT-objectType-parameter",
-          "text": " <code>objectType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkObjectType\">VkObjectType</a> value"
-        },
-        {
-          "vuid": "VUID-VkDebugUtilsObjectNameInfoEXT-pObjectName-parameter",
-          "text": " If <code>pObjectName</code> is not <code>NULL</code>, <code>pObjectName</code> <strong class=\"purple\">must</strong> be a null-terminated UTF-8 string"
-        }
-      ]
-    },
-    "vkSetDebugUtilsObjectTagEXT": {
-      "(VK_EXT_debug_utils)": [
-        {
-          "vuid": "VUID-vkSetDebugUtilsObjectTagEXT-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkSetDebugUtilsObjectTagEXT-pTagInfo-parameter",
-          "text": " <code>pTagInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDebugUtilsObjectTagInfoEXT</code> structure"
-        }
-      ]
-    },
-    "VkDebugUtilsObjectTagInfoEXT": {
-      "(VK_EXT_debug_utils)": [
-        {
-          "vuid": "VUID-VkDebugUtilsObjectTagInfoEXT-objectType-01908",
-          "text": " <code>objectType</code> <strong class=\"purple\">must</strong> not be <code>VK_OBJECT_TYPE_UNKNOWN</code>"
-        },
-        {
-          "vuid": "VUID-VkDebugUtilsObjectTagInfoEXT-objectHandle-01909",
-          "text": " <code>objectHandle</code> <strong class=\"purple\">must</strong> not be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
-        },
-        {
-          "vuid": "VUID-VkDebugUtilsObjectTagInfoEXT-objectHandle-01910",
-          "text": " <code>objectHandle</code> <strong class=\"purple\">must</strong> be a Vulkan object of the type associated with <code>objectType</code> as defined in &amp;amp;lt;&amp;amp;lt;debugging-object-types&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-VkDebugUtilsObjectTagInfoEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkDebugUtilsObjectTagInfoEXT-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkDebugUtilsObjectTagInfoEXT-objectType-parameter",
-          "text": " <code>objectType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkObjectType\">VkObjectType</a> value"
-        },
-        {
-          "vuid": "VUID-VkDebugUtilsObjectTagInfoEXT-pTag-parameter",
-          "text": " <code>pTag</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>tagSize</code> bytes"
-        },
-        {
-          "vuid": "VUID-VkDebugUtilsObjectTagInfoEXT-tagSize-arraylength",
-          "text": " <code>tagSize</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ]
-    },
-    "vkQueueBeginDebugUtilsLabelEXT": {
-      "(VK_EXT_debug_utils)": [
-        {
-          "vuid": "VUID-vkQueueBeginDebugUtilsLabelEXT-queue-parameter",
-          "text": " <code>queue</code> <strong class=\"purple\">must</strong> be a valid <code>VkQueue</code> handle"
-        },
-        {
-          "vuid": "VUID-vkQueueBeginDebugUtilsLabelEXT-pLabelInfo-parameter",
-          "text": " <code>pLabelInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDebugUtilsLabelEXT</code> structure"
-        }
-      ]
-    },
-    "VkDebugUtilsLabelEXT": {
-      "(VK_EXT_debug_utils)": [
-        {
-          "vuid": "VUID-VkDebugUtilsLabelEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkDebugUtilsLabelEXT-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkDebugUtilsLabelEXT-pLabelName-parameter",
-          "text": " <code>pLabelName</code> <strong class=\"purple\">must</strong> be a null-terminated UTF-8 string"
-        }
-      ]
-    },
-    "vkQueueEndDebugUtilsLabelEXT": {
-      "(VK_EXT_debug_utils)": [
-        {
-          "vuid": "VUID-vkQueueEndDebugUtilsLabelEXT-None-01911",
-          "text": " There <strong class=\"purple\">must</strong> be an outstanding <code>vkQueueBeginDebugUtilsLabelEXT</code> command prior to the <code>vkQueueEndDebugUtilsLabelEXT</code> on the queue"
-        },
-        {
-          "vuid": "VUID-vkQueueEndDebugUtilsLabelEXT-queue-parameter",
-          "text": " <code>queue</code> <strong class=\"purple\">must</strong> be a valid <code>VkQueue</code> handle"
-        }
-      ]
-    },
-    "vkQueueInsertDebugUtilsLabelEXT": {
-      "(VK_EXT_debug_utils)": [
-        {
-          "vuid": "VUID-vkQueueInsertDebugUtilsLabelEXT-queue-parameter",
-          "text": " <code>queue</code> <strong class=\"purple\">must</strong> be a valid <code>VkQueue</code> handle"
-        },
-        {
-          "vuid": "VUID-vkQueueInsertDebugUtilsLabelEXT-pLabelInfo-parameter",
-          "text": " <code>pLabelInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDebugUtilsLabelEXT</code> structure"
-        }
-      ]
-    },
-    "vkCmdBeginDebugUtilsLabelEXT": {
-      "(VK_EXT_debug_utils)": [
-        {
-          "vuid": "VUID-vkCmdBeginDebugUtilsLabelEXT-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdBeginDebugUtilsLabelEXT-pLabelInfo-parameter",
-          "text": " <code>pLabelInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDebugUtilsLabelEXT</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCmdBeginDebugUtilsLabelEXT-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdBeginDebugUtilsLabelEXT-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
-        }
-      ]
-    },
-    "vkCmdEndDebugUtilsLabelEXT": {
-      "(VK_EXT_debug_utils)": [
-        {
-          "vuid": "VUID-vkCmdEndDebugUtilsLabelEXT-commandBuffer-01912",
-          "text": " There <strong class=\"purple\">must</strong> be an outstanding <code>vkCmdBeginDebugUtilsLabelEXT</code> command prior to the <code>vkCmdEndDebugUtilsLabelEXT</code> on the queue that <code>commandBuffer</code> is submitted to"
-        },
-        {
-          "vuid": "VUID-vkCmdEndDebugUtilsLabelEXT-commandBuffer-01913",
-          "text": " If <code>commandBuffer</code> is a secondary command buffer, there <strong class=\"purple\">must</strong> be an outstanding <code>vkCmdBeginDebugUtilsLabelEXT</code> command recorded to <code>commandBuffer</code> that has not previously been ended by a call to <code>vkCmdEndDebugUtilsLabelEXT</code>."
-        },
-        {
-          "vuid": "VUID-vkCmdEndDebugUtilsLabelEXT-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdEndDebugUtilsLabelEXT-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdEndDebugUtilsLabelEXT-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
-        }
-      ]
-    },
-    "vkCmdInsertDebugUtilsLabelEXT": {
-      "(VK_EXT_debug_utils)": [
-        {
-          "vuid": "VUID-vkCmdInsertDebugUtilsLabelEXT-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdInsertDebugUtilsLabelEXT-pLabelInfo-parameter",
-          "text": " <code>pLabelInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDebugUtilsLabelEXT</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCmdInsertDebugUtilsLabelEXT-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdInsertDebugUtilsLabelEXT-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
-        }
-      ]
-    },
-    "vkCreateDebugUtilsMessengerEXT": {
-      "(VK_EXT_debug_utils)": [
-        {
-          "vuid": "VUID-vkCreateDebugUtilsMessengerEXT-instance-parameter",
-          "text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateDebugUtilsMessengerEXT-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDebugUtilsMessengerCreateInfoEXT</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateDebugUtilsMessengerEXT-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateDebugUtilsMessengerEXT-pMessenger-parameter",
-          "text": " <code>pMessenger</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkDebugUtilsMessengerEXT</code> handle"
-        }
-      ]
-    },
-    "VkDebugUtilsMessengerCreateInfoEXT": {
-      "(VK_EXT_debug_utils)": [
-        {
-          "vuid": "VUID-VkDebugUtilsMessengerCreateInfoEXT-pfnUserCallback-01914",
-          "text": " <code>pfnUserCallback</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#PFN_vkDebugUtilsMessengerCallbackEXT\">PFN_vkDebugUtilsMessengerCallbackEXT</a>"
-        },
-        {
-          "vuid": "VUID-VkDebugUtilsMessengerCreateInfoEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkDebugUtilsMessengerCreateInfoEXT-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkDebugUtilsMessengerCreateInfoEXT-messageSeverity-parameter",
-          "text": " <code>messageSeverity</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkDebugUtilsMessageSeverityFlagBitsEXT\">VkDebugUtilsMessageSeverityFlagBitsEXT</a> values"
-        },
-        {
-          "vuid": "VUID-VkDebugUtilsMessengerCreateInfoEXT-messageSeverity-requiredbitmask",
-          "text": " <code>messageSeverity</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkDebugUtilsMessengerCreateInfoEXT-messageType-parameter",
-          "text": " <code>messageType</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkDebugUtilsMessageTypeFlagBitsEXT\">VkDebugUtilsMessageTypeFlagBitsEXT</a> values"
-        },
-        {
-          "vuid": "VUID-VkDebugUtilsMessengerCreateInfoEXT-messageType-requiredbitmask",
-          "text": " <code>messageType</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        }
-      ]
-    },
-    "VkDebugUtilsMessengerCallbackDataEXT": {
-      "(VK_EXT_debug_utils)": [
-        {
-          "vuid": "VUID-VkDebugUtilsMessengerCallbackDataEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkDebugUtilsMessengerCallbackDataEXT-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkDebugUtilsMessengerCallbackDataEXT-flags-zerobitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-VkDebugUtilsMessengerCallbackDataEXT-pMessageIdName-parameter",
-          "text": " If <code>pMessageIdName</code> is not <code>NULL</code>, <code>pMessageIdName</code> <strong class=\"purple\">must</strong> be a null-terminated UTF-8 string"
-        },
-        {
-          "vuid": "VUID-VkDebugUtilsMessengerCallbackDataEXT-pMessage-parameter",
-          "text": " <code>pMessage</code> <strong class=\"purple\">must</strong> be a null-terminated UTF-8 string"
-        },
-        {
-          "vuid": "VUID-VkDebugUtilsMessengerCallbackDataEXT-objectCount-arraylength",
-          "text": " <code>objectCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ]
-    },
-    "vkSubmitDebugUtilsMessageEXT": {
-      "(VK_EXT_debug_utils)": [
-        {
-          "vuid": "VUID-vkSubmitDebugUtilsMessageEXT-instance-parameter",
-          "text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
-        },
-        {
-          "vuid": "VUID-vkSubmitDebugUtilsMessageEXT-messageSeverity-parameter",
-          "text": " <code>messageSeverity</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDebugUtilsMessageSeverityFlagBitsEXT\">VkDebugUtilsMessageSeverityFlagBitsEXT</a> value"
-        },
-        {
-          "vuid": "VUID-vkSubmitDebugUtilsMessageEXT-messageTypes-parameter",
-          "text": " <code>messageTypes</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkDebugUtilsMessageTypeFlagBitsEXT\">VkDebugUtilsMessageTypeFlagBitsEXT</a> values"
-        },
-        {
-          "vuid": "VUID-vkSubmitDebugUtilsMessageEXT-messageTypes-requiredbitmask",
-          "text": " <code>messageTypes</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkSubmitDebugUtilsMessageEXT-pCallbackData-parameter",
-          "text": " <code>pCallbackData</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDebugUtilsMessengerCallbackDataEXT</code> structure"
-        }
-      ]
-    },
-    "vkDestroyDebugUtilsMessengerEXT": {
-      "(VK_EXT_debug_utils)": [
-        {
-          "vuid": "VUID-vkDestroyDebugUtilsMessengerEXT-messenger-01915",
-          "text": " If <code>VkAllocationCallbacks</code> were provided when <code>messenger</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
-        },
-        {
-          "vuid": "VUID-vkDestroyDebugUtilsMessengerEXT-messenger-01916",
-          "text": " If no <code>VkAllocationCallbacks</code> were provided when <code>messenger</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-vkDestroyDebugUtilsMessengerEXT-instance-parameter",
-          "text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyDebugUtilsMessengerEXT-messenger-parameter",
-          "text": " <code>messenger</code> <strong class=\"purple\">must</strong> be a valid <code>VkDebugUtilsMessengerEXT</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyDebugUtilsMessengerEXT-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkDestroyDebugUtilsMessengerEXT-messenger-parent",
-          "text": " <code>messenger</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>instance</code>"
-        }
-      ]
-    },
-    "vkDebugMarkerSetObjectNameEXT": {
-      "(VK_EXT_debug_marker)": [
-        {
-          "vuid": "VUID-vkDebugMarkerSetObjectNameEXT-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDebugMarkerSetObjectNameEXT-pNameInfo-parameter",
-          "text": " <code>pNameInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDebugMarkerObjectNameInfoEXT</code> structure"
-        }
-      ]
-    },
-    "VkDebugMarkerObjectNameInfoEXT": {
-      "(VK_EXT_debug_marker)": [
-        {
-          "vuid": "VUID-VkDebugMarkerObjectNameInfoEXT-objectType-01490",
-          "text": " <code>objectType</code> <strong class=\"purple\">must</strong> not be <code>VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkDebugMarkerObjectNameInfoEXT-object-01491",
-          "text": " <code>object</code> <strong class=\"purple\">must</strong> not be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
-        },
-        {
-          "vuid": "VUID-VkDebugMarkerObjectNameInfoEXT-object-01492",
-          "text": " <code>object</code> <strong class=\"purple\">must</strong> be a Vulkan object of the type associated with <code>objectType</code> as defined in &amp;amp;lt;&amp;amp;lt;debug-report-object-types&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-VkDebugMarkerObjectNameInfoEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkDebugMarkerObjectNameInfoEXT-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkDebugMarkerObjectNameInfoEXT-objectType-parameter",
-          "text": " <code>objectType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDebugReportObjectTypeEXT\">VkDebugReportObjectTypeEXT</a> value"
-        },
-        {
-          "vuid": "VUID-VkDebugMarkerObjectNameInfoEXT-pObjectName-parameter",
-          "text": " <code>pObjectName</code> <strong class=\"purple\">must</strong> be a null-terminated UTF-8 string"
-        }
-      ]
-    },
-    "vkDebugMarkerSetObjectTagEXT": {
-      "(VK_EXT_debug_marker)": [
-        {
-          "vuid": "VUID-vkDebugMarkerSetObjectTagEXT-device-parameter",
-          "text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDebugMarkerSetObjectTagEXT-pTagInfo-parameter",
-          "text": " <code>pTagInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDebugMarkerObjectTagInfoEXT</code> structure"
-        }
-      ]
-    },
-    "VkDebugMarkerObjectTagInfoEXT": {
-      "(VK_EXT_debug_marker)": [
-        {
-          "vuid": "VUID-VkDebugMarkerObjectTagInfoEXT-objectType-01493",
-          "text": " <code>objectType</code> <strong class=\"purple\">must</strong> not be <code>VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkDebugMarkerObjectTagInfoEXT-object-01494",
-          "text": " <code>object</code> <strong class=\"purple\">must</strong> not be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
-        },
-        {
-          "vuid": "VUID-VkDebugMarkerObjectTagInfoEXT-object-01495",
-          "text": " <code>object</code> <strong class=\"purple\">must</strong> be a Vulkan object of the type associated with <code>objectType</code> as defined in &amp;amp;lt;&amp;amp;lt;debug-report-object-types&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-VkDebugMarkerObjectTagInfoEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkDebugMarkerObjectTagInfoEXT-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkDebugMarkerObjectTagInfoEXT-objectType-parameter",
-          "text": " <code>objectType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDebugReportObjectTypeEXT\">VkDebugReportObjectTypeEXT</a> value"
-        },
-        {
-          "vuid": "VUID-VkDebugMarkerObjectTagInfoEXT-pTag-parameter",
-          "text": " <code>pTag</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>tagSize</code> bytes"
-        },
-        {
-          "vuid": "VUID-VkDebugMarkerObjectTagInfoEXT-tagSize-arraylength",
-          "text": " <code>tagSize</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
-        }
-      ]
-    },
-    "vkCmdDebugMarkerBeginEXT": {
-      "(VK_EXT_debug_marker)": [
-        {
-          "vuid": "VUID-vkCmdDebugMarkerBeginEXT-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdDebugMarkerBeginEXT-pMarkerInfo-parameter",
-          "text": " <code>pMarkerInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDebugMarkerMarkerInfoEXT</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCmdDebugMarkerBeginEXT-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdDebugMarkerBeginEXT-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
-        }
-      ]
-    },
-    "VkDebugMarkerMarkerInfoEXT": {
-      "(VK_EXT_debug_marker)": [
-        {
-          "vuid": "VUID-VkDebugMarkerMarkerInfoEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkDebugMarkerMarkerInfoEXT-pNext-pNext",
-          "text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-VkDebugMarkerMarkerInfoEXT-pMarkerName-parameter",
-          "text": " <code>pMarkerName</code> <strong class=\"purple\">must</strong> be a null-terminated UTF-8 string"
-        }
-      ]
-    },
-    "vkCmdDebugMarkerEndEXT": {
-      "(VK_EXT_debug_marker)": [
-        {
-          "vuid": "VUID-vkCmdDebugMarkerEndEXT-commandBuffer-01239",
-          "text": " There <strong class=\"purple\">must</strong> be an outstanding <a href=\"#vkCmdDebugMarkerBeginEXT\">vkCmdDebugMarkerBeginEXT</a> command prior to the <code>vkCmdDebugMarkerEndEXT</code> on the queue that <code>commandBuffer</code> is submitted to"
-        },
-        {
-          "vuid": "VUID-vkCmdDebugMarkerEndEXT-commandBuffer-01240",
-          "text": " If <code>commandBuffer</code> is a secondary command buffer, there <strong class=\"purple\">must</strong> be an outstanding <a href=\"#vkCmdDebugMarkerBeginEXT\">vkCmdDebugMarkerBeginEXT</a> command recorded to <code>commandBuffer</code> that has not previously been ended by a call to <a href=\"#vkCmdDebugMarkerEndEXT\">vkCmdDebugMarkerEndEXT</a>."
-        },
-        {
-          "vuid": "VUID-vkCmdDebugMarkerEndEXT-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdDebugMarkerEndEXT-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdDebugMarkerEndEXT-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
-        }
-      ]
-    },
-    "vkCmdDebugMarkerInsertEXT": {
-      "(VK_EXT_debug_marker)": [
-        {
-          "vuid": "VUID-vkCmdDebugMarkerInsertEXT-commandBuffer-parameter",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCmdDebugMarkerInsertEXT-pMarkerInfo-parameter",
-          "text": " <code>pMarkerInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDebugMarkerMarkerInfoEXT</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCmdDebugMarkerInsertEXT-commandBuffer-recording",
-          "text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
-        },
-        {
-          "vuid": "VUID-vkCmdDebugMarkerInsertEXT-commandBuffer-cmdpool",
-          "text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
-        }
-      ]
-    },
-    "vkCreateDebugReportCallbackEXT": {
-      "(VK_EXT_debug_report)": [
-        {
-          "vuid": "VUID-vkCreateDebugReportCallbackEXT-instance-parameter",
-          "text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
-        },
-        {
-          "vuid": "VUID-vkCreateDebugReportCallbackEXT-pCreateInfo-parameter",
-          "text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDebugReportCallbackCreateInfoEXT</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateDebugReportCallbackEXT-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkCreateDebugReportCallbackEXT-pCallback-parameter",
-          "text": " <code>pCallback</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkDebugReportCallbackEXT</code> handle"
-        }
-      ]
-    },
-    "VkDebugReportCallbackCreateInfoEXT": {
-      "(VK_EXT_debug_report)": [
-        {
-          "vuid": "VUID-VkDebugReportCallbackCreateInfoEXT-pfnCallback-01385",
-          "text": " <code>pfnCallback</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#PFN_vkDebugReportCallbackEXT\">PFN_vkDebugReportCallbackEXT</a>"
-        },
-        {
-          "vuid": "VUID-VkDebugReportCallbackCreateInfoEXT-sType-sType",
-          "text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT</code>"
-        },
-        {
-          "vuid": "VUID-VkDebugReportCallbackCreateInfoEXT-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkDebugReportFlagBitsEXT\">VkDebugReportFlagBitsEXT</a> values"
-        }
-      ]
-    },
-    "vkDebugReportMessageEXT": {
-      "(VK_EXT_debug_report)": [
-        {
-          "vuid": "VUID-vkDebugReportMessageEXT-object-01241",
-          "text": " <code>object</code> <strong class=\"purple\">must</strong> be a Vulkan object or <code>VK_NULL_HANDLE</code>"
-        },
-        {
-          "vuid": "VUID-vkDebugReportMessageEXT-objectType-01498",
-          "text": " If <code>objectType</code> is not <code>VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT</code> and <code>object</code> is not <code>VK_NULL_HANDLE</code>, <code>object</code> <strong class=\"purple\">must</strong> be a Vulkan object of the corresponding type associated with <code>objectType</code> as defined in &amp;amp;lt;&amp;amp;lt;debug-report-object-types&amp;amp;gt;&amp;amp;gt;."
-        },
-        {
-          "vuid": "VUID-vkDebugReportMessageEXT-instance-parameter",
-          "text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDebugReportMessageEXT-flags-parameter",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkDebugReportFlagBitsEXT\">VkDebugReportFlagBitsEXT</a> values"
-        },
-        {
-          "vuid": "VUID-vkDebugReportMessageEXT-flags-requiredbitmask",
-          "text": " <code>flags</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
-        },
-        {
-          "vuid": "VUID-vkDebugReportMessageEXT-objectType-parameter",
-          "text": " <code>objectType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDebugReportObjectTypeEXT\">VkDebugReportObjectTypeEXT</a> value"
-        },
-        {
-          "vuid": "VUID-vkDebugReportMessageEXT-pLayerPrefix-parameter",
-          "text": " <code>pLayerPrefix</code> <strong class=\"purple\">must</strong> be a null-terminated UTF-8 string"
-        },
-        {
-          "vuid": "VUID-vkDebugReportMessageEXT-pMessage-parameter",
-          "text": " <code>pMessage</code> <strong class=\"purple\">must</strong> be a null-terminated UTF-8 string"
-        }
-      ]
-    },
-    "vkDestroyDebugReportCallbackEXT": {
-      "(VK_EXT_debug_report)": [
-        {
-          "vuid": "VUID-vkDestroyDebugReportCallbackEXT-instance-01242",
-          "text": " If <code>VkAllocationCallbacks</code> were provided when <code>callback</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
-        },
-        {
-          "vuid": "VUID-vkDestroyDebugReportCallbackEXT-instance-01243",
-          "text": " If no <code>VkAllocationCallbacks</code> were provided when <code>callback</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
-        },
-        {
-          "vuid": "VUID-vkDestroyDebugReportCallbackEXT-instance-parameter",
-          "text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyDebugReportCallbackEXT-callback-parameter",
-          "text": " <code>callback</code> <strong class=\"purple\">must</strong> be a valid <code>VkDebugReportCallbackEXT</code> handle"
-        },
-        {
-          "vuid": "VUID-vkDestroyDebugReportCallbackEXT-pAllocator-parameter",
-          "text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
-        },
-        {
-          "vuid": "VUID-vkDestroyDebugReportCallbackEXT-callback-parent",
-          "text": " <code>callback</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>instance</code>"
-        }
-      ]
-    }
-  }
-}
\ No newline at end of file
diff --git a/scripts/vk_validation_stats.py b/scripts/vk_validation_stats.py
deleted file mode 100755
index 05b9125..0000000
--- a/scripts/vk_validation_stats.py
+++ /dev/null
@@ -1,454 +0,0 @@
-#!/usr/bin/env python3
-# Copyright (c) 2015-2017 The Khronos Group Inc.
-# Copyright (c) 2015-2017 Valve Corporation
-# Copyright (c) 2015-2017 LunarG, Inc.
-# Copyright (c) 2015-2017 Google Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# Author: Tobin Ehlis <tobine@google.com>
-
-import argparse
-import os
-import sys
-import platform
-
-# vk_validation_stats.py overview
-#
-# usage:
-#    python vk_validation_stats.py [verbose]
-#
-#    Arguments:
-#        verbose - enables verbose output, including VUID duplicates
-#
-# This script is intended to generate statistics on the state of validation code
-#  based on information parsed from the source files and the database file
-# Here's what it currently does:
-#  1. Parse vk_validation_error_database.txt to store claimed state of validation checks
-#  2. Parse vk_validation_error_messages.h to verify the actual checks in header vs. the
-#     claimed state of the checks
-#  3. Parse source files to identify which checks are implemented and verify that this
-#     exactly matches the list of checks claimed to be implemented in the database
-#  4. Parse test file(s) and verify that reported tests exist
-#  5. Report out stats on number of checks, implemented checks, and duplicated checks
-#
-# If a mis-match is found during steps 2, 3, or 4, then the script exits w/ a non-zero error code
-#  otherwise, the script will exit(0)
-#
-# TODO:
-#  1. Would also like to report out number of existing checks that don't yet use new, unique enum
-#  2. Could use notes to store custom fields (like TODO) and print those out here
-#  3. Update test code to check if tests use new, unique enums to check for errors instead of strings
-
-db_file = '../layers/vk_validation_error_database.txt'
-generated_layer_source_directories = [
-'build',
-'dbuild',
-'release',
-]
-generated_layer_source_files = [
-'parameter_validation.cpp',
-'object_tracker.cpp',
-]
-layer_source_files = [
-'../layers/core_validation.cpp',
-'../layers/descriptor_sets.cpp',
-'../layers/parameter_validation_utils.cpp',
-'../layers/object_tracker_utils.cpp',
-'../layers/shader_validation.cpp',
-'../layers/buffer_validation.cpp',
-]
-header_file = '../layers/vk_validation_error_messages.h'
-# TODO : Don't hardcode linux path format if we want this to run on windows
-test_file = '../tests/layer_validation_tests.cpp'
-# List of enums that are allowed to be used more than once so don't warn on their duplicates
-duplicate_exceptions = [
-'VALIDATION_ERROR_258004ea', # This covers the broad case that all child objects must be destroyed at DestroyInstance time
-'VALIDATION_ERROR_24a002f4', # This covers the broad case that all child objects must be destroyed at DestroyDevice time
-'VALIDATION_ERROR_0280006e', # Obj tracker check makes sure non-null framebuffer is valid & CV check makes sure it's compatible w/ renderpass framebuffer
-'VALIDATION_ERROR_12200682', # This is an aliasing error that we report twice, for each of the two allocations that are aliasing
-'VALIDATION_ERROR_1060d201', # Covers valid shader module handle for both Compute & Graphics pipelines
-'VALIDATION_ERROR_0c20c601', # This is a case for VkMappedMemoryRange struct that is used by both Flush & Invalidate MappedMemoryRange
-'VALIDATION_ERROR_0a400c01', # This is a blanket case for all invalid image aspect bit errors. The spec link has appropriate details for all separate cases.
-'VALIDATION_ERROR_0a8007fc', # This case covers two separate checks which are done independently
-'VALIDATION_ERROR_0a800800', # This case covers two separate checks which are done independently
-'VALIDATION_ERROR_15c0028a', # This is a descriptor set write update error that we use for a couple copy cases as well
-'VALIDATION_ERROR_1bc002de', # Single error for mis-matched stageFlags of vkCmdPushConstants() that is flagged for no stage flags & mis-matched flags
-'VALIDATION_ERROR_1880000e', # Handles both depth/stencil & compressed image errors for vkCmdClearColorImage()
-'VALIDATION_ERROR_0a600152', # Used for the mipLevel check of both dst & src images on vkCmdCopyImage call
-'VALIDATION_ERROR_0a600154', # Used for the arraySize check of both dst & src images on vkCmdCopyImage call
-'VALIDATION_ERROR_1500099e', # Used for both x & y bounds of viewport
-'VALIDATION_ERROR_1d8004a6', # Used for both x & y value of scissors to make sure they're not negative
-'VALIDATION_ERROR_1462ec01', # Surface of VkSwapchainCreateInfoKHR must be valid when creating both single or shared swapchains
-'VALIDATION_ERROR_1460de01', # oldSwapchain of VkSwapchainCreateInfoKHR must be valid when creating both single or shared swapchains
-'VALIDATION_ERROR_146009f2', # Single error for both imageFormat & imageColorSpace requirements when creating swapchain
-'VALIDATION_ERROR_15c00294', # Used twice for the same error codepath as both a param & to set a variable, so not really a duplicate
-]
-
-class ValidationDatabase:
-    def __init__(self, filename=db_file):
-        self.db_file = filename
-        self.delimiter = '~^~'
-        self.db_dict = {} # complete dict of all db values per error enum
-        # specialized data structs with slices of complete dict
-        self.db_implemented_enums = [] # list of all error enums claiming to be implemented in database file
-        self.db_unimplemented_implicit = [] # list of all implicit checks that aren't marked implemented
-        self.db_enum_to_tests = {} # dict where enum is key to lookup list of tests implementing the enum
-        self.db_invalid_implemented = [] # list of checks with invalid check_implemented flags
-        #self.src_implemented_enums
-    def read(self):
-        """Read a database file into internal data structures, format of each line is <enum><implemented Y|N?><testname><api><errormsg><notes>"""
-        #db_dict = {} # This is a simple db of just enum->errormsg, the same as is created from spec
-        #max_id = 0
-        with open(self.db_file, "r", encoding="utf8") as infile:
-            for line in infile:
-                line = line.strip()
-                if line.startswith('#') or '' == line:
-                    continue
-                db_line = line.split(self.delimiter)
-                if len(db_line) != 8:
-                    print("ERROR: Bad database line doesn't have 8 elements: %s" % (line))
-                error_enum = db_line[0]
-                implemented = db_line[1]
-                testname = db_line[2]
-                api = db_line[3]
-                vuid_string = db_line[4]
-                core_ext = db_line[5]
-                error_str = db_line[6]
-                note = db_line[7]
-                # Read complete database contents into our class var for later use
-                self.db_dict[error_enum] = {}
-                self.db_dict[error_enum]['check_implemented'] = implemented
-                self.db_dict[error_enum]['testname'] = testname
-                self.db_dict[error_enum]['api'] = api
-                self.db_dict[error_enum]['vuid_string'] = vuid_string
-                self.db_dict[error_enum]['core_ext'] = core_ext
-                self.db_dict[error_enum]['error_string'] = error_str
-                self.db_dict[error_enum]['note'] = note
-                # Now build custom data structs
-                if 'Y' == implemented:
-                    self.db_implemented_enums.append(error_enum)
-                elif 'implicit' in note: # only make note of non-implemented implicit checks
-                    self.db_unimplemented_implicit.append(error_enum)
-                if implemented not in ['Y', 'N']:
-                    self.db_invalid_implemented.append(error_enum)
-                if testname.lower() not in ['unknown', 'none', 'nottestable']:
-                    self.db_enum_to_tests[error_enum] = testname.split(',')
-                    #if len(self.db_enum_to_tests[error_enum]) > 1:
-                    #    print "Found check %s that has multiple tests: %s" % (error_enum, self.db_enum_to_tests[error_enum])
-                    #else:
-                    #    print "Check %s has single test: %s" % (error_enum, self.db_enum_to_tests[error_enum])
-                #unique_id = int(db_line[0].split('_')[-1])
-                #if unique_id > max_id:
-                #    max_id = unique_id
-        #print "Found %d total enums in database" % (len(self.db_dict.keys()))
-        #print "Found %d enums claiming to be implemented in source" % (len(self.db_implemented_enums))
-        #print "Found %d enums claiming to have tests implemented" % (len(self.db_enum_to_tests.keys()))
-
-class ValidationHeader:
-    def __init__(self, filename=header_file):
-        self.filename = header_file
-        self.enums = []
-    def read(self):
-        """Read unique error enum header file into internal data structures"""
-        grab_enums = False
-        with open(self.filename, "r") as infile:
-            for line in infile:
-                line = line.strip()
-                if 'enum UNIQUE_VALIDATION_ERROR_CODE {' in line:
-                    grab_enums = True
-                    continue
-                if grab_enums:
-                    if 'VALIDATION_ERROR_MAX_ENUM' in line:
-                        grab_enums = False
-                        break # done
-                    elif 'VALIDATION_ERROR_UNDEFINED' in line:
-                        continue
-                    elif 'VALIDATION_ERROR_' in line:
-                        enum = line.split(' = ')[0]
-                        self.enums.append(enum)
-        #print "Found %d error enums. First is %s and last is %s." % (len(self.enums), self.enums[0], self.enums[-1])
-
-class ValidationSource:
-    def __init__(self, source_file_list, generated_source_file_list, generated_source_directories):
-        self.source_files = source_file_list
-        self.generated_source_files = generated_source_file_list
-        self.generated_source_dirs = generated_source_directories
-
-        if len(self.generated_source_files) > 0:
-            qualified_paths = []
-            for source in self.generated_source_files:
-                for build_dir in self.generated_source_dirs:
-                    filepath = '../%s/layers/%s' % (build_dir, source)
-                    if os.path.isfile(filepath):
-                        qualified_paths.append(filepath)
-                        break
-            if len(self.generated_source_files) != len(qualified_paths):
-                print("Error: Unable to locate one or more of the following source files in the %s directories" % (", ".join(generated_source_directories)))
-                print(self.generated_source_files)
-                print("Skipping documentation validation test")
-                exit(1)
-            else:
-                self.source_files.extend(qualified_paths)
-
-        self.enum_count_dict = {} # dict of enum values to the count of how much they're used, and location of where they're used
-    def parse(self):
-        duplicate_checks = 0
-        for sf in self.source_files:
-            line_num = 0
-            with open(sf) as f:
-                for line in f:
-                    line_num = line_num + 1
-                    if True in [line.strip().startswith(comment) for comment in ['//', '/*']]:
-                        continue
-                    # Find enums
-                    #if 'VALIDATION_ERROR_' in line and True not in [ignore in line for ignore in ['[VALIDATION_ERROR_', 'UNIQUE_VALIDATION_ERROR_CODE']]:
-                    if 'VALIDATION_ERROR_' in line:
-                        # Need to isolate the validation error enum
-                        #print("Line has check:%s" % (line))
-                        line_list = line.split()
-                        enum_list = []
-                        for str in line_list:
-                            if 'VALIDATION_ERROR_' in str and True not in [ignore_str in str for ignore_str in ['[VALIDATION_ERROR_', 'VALIDATION_ERROR_UNDEFINED', 'UNIQUE_VALIDATION_ERROR_CODE']]:
-                                enum_list.append(str.strip(',);{}'))
-                                #break
-                        for enum in enum_list:
-                            if enum != '':
-                                if enum not in self.enum_count_dict:
-                                    self.enum_count_dict[enum] = {}
-                                    self.enum_count_dict[enum]['count'] = 1
-                                    self.enum_count_dict[enum]['file_line'] = []
-                                    self.enum_count_dict[enum]['file_line'].append('%s,%d' % (sf, line_num))
-                                    #print "Found enum %s implemented for first time in file %s" % (enum, sf)
-                                else:
-                                    self.enum_count_dict[enum]['count'] = self.enum_count_dict[enum]['count'] + 1
-                                    self.enum_count_dict[enum]['file_line'].append('%s,%d' % (sf, line_num))
-                                    #print "Found enum %s implemented for %d time in file %s" % (enum, self.enum_count_dict[enum], sf)
-                                    duplicate_checks = duplicate_checks + 1
-                            #else:
-                                #print("Didn't find actual check in line:%s" % (line))
-        #print "Found %d unique implemented checks and %d are duplicated at least once" % (len(self.enum_count_dict.keys()), duplicate_checks)
-
-# Class to parse the validation layer test source and store testnames
-# TODO: Enhance class to detect use of unique error enums in the test
-class TestParser:
-    def __init__(self, test_file_list, test_group_name=['VkLayerTest', 'VkPositiveLayerTest', 'VkWsiEnabledLayerTest']):
-        self.test_files = test_file_list
-        self.test_to_errors = {} # Dict where testname maps to list of error enums found in that test
-        self.test_trigger_txt_list = []
-        for tg in test_group_name:
-            self.test_trigger_txt_list.append('TEST_F(%s' % tg)
-            #print('Test trigger test list: %s' % (self.test_trigger_txt_list))
-
-    # Parse test files into internal data struct
-    def parse(self):
-        # For each test file, parse test names into set
-        grab_next_line = False # handle testname on separate line than wildcard
-        testname = ''
-        for test_file in self.test_files:
-            with open(test_file) as tf:
-                for line in tf:
-                    if True in [line.strip().startswith(comment) for comment in ['//', '/*']]:
-                        continue
-
-                    if True in [ttt in line for ttt in self.test_trigger_txt_list]:
-                        #print('Test wildcard in line: %s' % (line))
-                        testname = line.split(',')[-1]
-                        testname = testname.strip().strip(' {)')
-                        #print('Inserting test: "%s"' % (testname))
-                        if ('' == testname):
-                            grab_next_line = True
-                            continue
-                        self.test_to_errors[testname] = []
-                    if grab_next_line: # test name on its own line
-                        grab_next_line = False
-                        testname = testname.strip().strip(' {)')
-                        self.test_to_errors[testname] = []
-                    if ' VALIDATION_ERROR_' in line:
-                        line_list = line.split()
-                        for sub_str in line_list:
-                            if 'VALIDATION_ERROR_' in sub_str and True not in [ignore_str in sub_str for ignore_str in ['VALIDATION_ERROR_UNDEFINED', 'UNIQUE_VALIDATION_ERROR_CODE', 'VALIDATION_ERROR_MAX_ENUM']]:
-                                #print("Trying to add enums for line: %s" % ())
-                                #print("Adding enum %s to test %s" % (sub_str.strip(',);'), testname))
-                                self.test_to_errors[testname].append(sub_str.strip(',);'))
-
-# Little helper class for coloring cmd line output
-class bcolors:
-
-    def __init__(self):
-        self.GREEN = '\033[0;32m'
-        self.RED = '\033[0;31m'
-        self.YELLOW = '\033[1;33m'
-        self.ENDC = '\033[0m'
-        if 'Linux' != platform.system():
-            self.GREEN = ''
-            self.RED = ''
-            self.YELLOW = ''
-            self.ENDC = ''
-
-    def green(self):
-        return self.GREEN
-
-    def red(self):
-        return self.RED
-
-    def yellow(self):
-        return self.YELLOW
-
-    def endc(self):
-        return self.ENDC
-
-def main(argv):
-    result = 0 # Non-zero result indicates an error case
-    verbose_mode = 'verbose' in sys.argv
-    # parse db
-    val_db = ValidationDatabase()
-    val_db.read()
-    # parse header
-    val_header = ValidationHeader()
-    val_header.read()
-    # Create parser for layer files
-    val_source = ValidationSource(layer_source_files, generated_layer_source_files, generated_layer_source_directories)
-    val_source.parse()
-    # Parse test files
-    test_parser = TestParser([test_file, ])
-    test_parser.parse()
-
-    # Process stats - Just doing this inline in main, could make a fancy class to handle
-    #   all the processing of data and then get results from that
-    txt_color = bcolors()
-    if verbose_mode:
-        print("Validation Statistics")
-    else:
-        print("Validation/Documentation Consistency Test")
-    # First give number of checks in db & header and report any discrepancies
-    db_enums = len(val_db.db_dict.keys())
-    hdr_enums = len(val_header.enums)
-    if verbose_mode:
-        print(" Database file includes %d unique checks" % (db_enums))
-        print(" Header file declares %d unique checks" % (hdr_enums))
-
-    # Report any checks that have an invalid check_implemented flag
-    if len(val_db.db_invalid_implemented) > 0:
-        result = 1
-        print(txt_color.red() + "The following checks have an invalid check_implemented flag (must be 'Y' or 'N'):" + txt_color.endc())
-        for invalid_imp_enum in val_db.db_invalid_implemented:
-            check_implemented = val_db.db_dict[invalid_imp_enum]['check_implemented']
-            print(txt_color.red() + "    %s has check_implemented flag '%s'" % (invalid_imp_enum, check_implemented) + txt_color.endc())
-
-    # Report details about how well the Database and Header are synchronized.
-    tmp_db_dict = val_db.db_dict
-    db_missing = []
-    for enum in val_header.enums:
-        if not tmp_db_dict.pop(enum, False):
-            db_missing.append(enum)
-    if db_enums == hdr_enums and len(db_missing) == 0 and len(tmp_db_dict.keys()) == 0:
-        if verbose_mode:
-            print(txt_color.green() + "  Database and Header match, GREAT!" + txt_color.endc())
-    else:
-        print(txt_color.red() + "  Uh oh, Database doesn't match Header :(" + txt_color.endc())
-        result = 1
-        if len(db_missing) != 0:
-            print(txt_color.red() + "   The following checks are in header but missing from database:" + txt_color.endc())
-            for missing_enum in db_missing:
-                print(txt_color.red() + "    %s" % (missing_enum) + txt_color.endc())
-        if len(tmp_db_dict.keys()) != 0:
-            print(txt_color.red() + "   The following checks are in database but haven't been declared in the header:" + txt_color.endc())
-            for extra_enum in tmp_db_dict:
-                print(txt_color.red() + "    %s" % (extra_enum) + txt_color.endc())
-
-    # Report out claimed implemented checks vs. found actual implemented checks
-    imp_not_found = [] # Checks claimed to implemented in DB file but no source found
-    imp_not_claimed = [] # Checks found implemented but not claimed to be in DB
-    multiple_uses = False # Flag if any enums are used multiple times
-    for db_imp in val_db.db_implemented_enums:
-        if db_imp not in val_source.enum_count_dict:
-            imp_not_found.append(db_imp)
-    for src_enum in val_source.enum_count_dict:
-        if val_source.enum_count_dict[src_enum]['count'] > 1 and src_enum not in duplicate_exceptions:
-            multiple_uses = True
-        if src_enum not in val_db.db_implemented_enums:
-            imp_not_claimed.append(src_enum)
-    if verbose_mode:
-        print(" Database file claims that %d checks (%s) are implemented in source." % (len(val_db.db_implemented_enums), "{0:.0f}%".format(float(len(val_db.db_implemented_enums))/db_enums * 100)))
-
-    if len(val_db.db_unimplemented_implicit) > 0 and verbose_mode:
-        print(" Database file claims %d implicit checks (%s) that are not implemented." % (len(val_db.db_unimplemented_implicit), "{0:.0f}%".format(float(len(val_db.db_unimplemented_implicit))/db_enums * 100)))
-        total_checks = len(val_db.db_implemented_enums) + len(val_db.db_unimplemented_implicit)
-        print(" If all implicit checks are handled by parameter validation this is a total of %d (%s) checks covered." % (total_checks, "{0:.0f}%".format(float(total_checks)/db_enums * 100)))
-    if len(imp_not_found) == 0 and len(imp_not_claimed) == 0:
-        if verbose_mode:
-            print(txt_color.green() + "  All claimed Database implemented checks have been found in source, and no source checks aren't claimed in Database, GREAT!" + txt_color.endc())
-    else:
-        result = 1
-        print(txt_color.red() + "  Uh oh, Database claimed implemented don't match Source :(" + txt_color.endc())
-        if len(imp_not_found) != 0:
-            print(txt_color.red() + "   The following %d checks are claimed to be implemented in Database, but weren't found in source:" % (len(imp_not_found)) + txt_color.endc())
-            for not_imp_enum in imp_not_found:
-                print(txt_color.red() + "    %s" % (not_imp_enum) + txt_color.endc())
-        if len(imp_not_claimed) != 0:
-            print(txt_color.red() + "   The following checks are implemented in source, but not claimed to be in Database:" + txt_color.endc())
-            for imp_enum in imp_not_claimed:
-                print(txt_color.red() + "    %s" % (imp_enum) + txt_color.endc())
-
-    if multiple_uses and verbose_mode:
-        print(txt_color.yellow() + "  Note that some checks are used multiple times. These may be good candidates for new valid usage spec language." + txt_color.endc())
-        print(txt_color.yellow() + "  Here is a list of each check used multiple times with its number of uses:" + txt_color.endc())
-        for enum in val_source.enum_count_dict:
-            if val_source.enum_count_dict[enum]['count'] > 1 and enum not in duplicate_exceptions:
-                print(txt_color.yellow() + "   %s: %d uses in file,line:" % (enum, val_source.enum_count_dict[enum]['count']) + txt_color.endc())
-                for file_line in val_source.enum_count_dict[enum]['file_line']:
-                    print(txt_color.yellow() + "   \t%s" % (file_line) + txt_color.endc())
-
-    # Now check that tests claimed to be implemented are actual test names
-    bad_testnames = []
-    tests_missing_enum = {} # Report tests that don't use validation error enum to check for error case
-    for enum in val_db.db_enum_to_tests:
-        for testname in val_db.db_enum_to_tests[enum]:
-            if testname not in test_parser.test_to_errors:
-                bad_testnames.append(testname)
-            else:
-                enum_found = False
-                for test_enum in test_parser.test_to_errors[testname]:
-                    if test_enum == enum:
-                        #print("Found test that correctly checks for enum: %s" % (enum))
-                        enum_found = True
-                if not enum_found:
-                    #print("Test %s is not using enum %s to check for error" % (testname, enum))
-                    if testname not in tests_missing_enum:
-                        tests_missing_enum[testname] = []
-                    tests_missing_enum[testname].append(enum)
-    if tests_missing_enum and verbose_mode:
-        print(txt_color.yellow() + "  \nThe following tests do not use their reported enums to check for the validation error. You may want to update these to pass the expected enum to SetDesiredFailureMsg:" + txt_color.endc())
-        for testname in tests_missing_enum:
-            print(txt_color.yellow() + "   Testname %s does not explicitly check for these ids:" % (testname) + txt_color.endc())
-            for enum in tests_missing_enum[testname]:
-                print(txt_color.yellow() + "    %s" % (enum) + txt_color.endc())
-
-    # TODO : Go through all enums found in the test file and make sure they're correctly documented in the database file
-    if verbose_mode:
-        print(" Database file claims that %d checks have tests written." % len(val_db.db_enum_to_tests))
-    if len(bad_testnames) == 0:
-        if verbose_mode:
-            print(txt_color.green() + "  All claimed tests have valid names. That's good!" + txt_color.endc())
-    else:
-        print(txt_color.red() + "  The following testnames in Database appear to be invalid:")
-        result = 1
-        for bt in bad_testnames:
-            print(txt_color.red() + "   %s" % (bt) + txt_color.endc())
-
-    return result
-
-if __name__ == "__main__":
-    sys.exit(main(sys.argv[1:]))
-
diff --git a/scripts/vuid_mapping.py b/scripts/vuid_mapping.py
deleted file mode 100644
index 849ddb4..0000000
--- a/scripts/vuid_mapping.py
+++ /dev/null
@@ -1,1239 +0,0 @@
-#!/usr/bin/python -i
-
-import sys
-import xml.etree.ElementTree as etree
-try:
-    import urllib.request as urllib2
-except ImportError:
-    import urllib2
-import json
-
-#############################
-# vuid_mapping.py script
-#
-# VUID Mapping Details
-#  The Vulkan spec creation process automatically generates string-based unique IDs for each Valid Usage statement
-#  For implicit VUs, the format is VUID-<func|struct>-[<param_name>]-<type>
-#   func|struct is the name of the API function or structure that the VU is under
-#   param_name is an optional entry with the name of the function or struct parameter
-#   type is the type of implicit check, see table below for possible values
-#
-#  For explicit VUs, the format is VUID-<func|struct>-[<param_name>]-<uniqueid>
-#   All fields are the same as implicit VUs except the last parameter is a globally unique integer ID instead of a string type
-#
-# The values below are used to map the strings into unique integers that are used for the unique enum values returned by debug callbacks
-# Here's how the bits of the numerical unique ID map to the ID type and values
-# 31:21 - 11 bits that map to unique value for the function/struct
-# 20:1  - 20 bits that map to param-type combo for implicit VU and uniqueid for explicit VU
-# 0     - 1 bit on for implicit VU or off for explicit VU
-#
-# For implicit VUs 20:1 is split into 20:9 for parameter and 8:1 for type
-FUNC_STRUCT_SHIFT = 21
-EXPLICIT_ID_SHIFT = 1
-IMPLICIT_TYPE_SHIFT = 1
-IMPLICIT_PARAM_SHIFT = 9
-explicit_bit0 = 0x0 # All explicit IDs are even
-implicit_bit0 = 0x1 # All implicit IDs are odd
-# Implicit type values, shifted up by ID_SHIFT bits in final ID
-implicit_type_map = {
-'parameter'       : 0,
-'requiredbitmask' : 1,
-'zerobitmask'     : 2,
-'parent'          : 3,
-'commonparent'    : 4,
-'sType'           : 5,
-'pNext'           : 6,
-'unique'          : 7,
-'queuetype'       : 8,
-'recording'       : 9,
-'cmdpool'         : 10,
-'renderpass'      : 11,
-'bufferlevel'     : 12,
-'arraylength'     : 13,
-}
-# Function/struct value mappings, shifted up FUNC_STRUCT_SHIFT bits in final ID
-func_struct_id_map = {
-'VkAcquireNextImageInfo' : 0,
-'VkAllocationCallbacks' : 1,
-'VkAndroidSurfaceCreateInfo' : 2,
-'VkApplicationInfo' : 3,
-'VkAttachmentDescription' : 4,
-'VkAttachmentReference' : 5,
-'VkBindBufferMemoryInfo' : 6,
-'VkBindImageMemoryInfo' : 7,
-'VkBindImageMemorySwapchainInfo' : 8,
-'VkBindSparseInfo' : 9,
-'VkBufferCreateInfo' : 10,
-'VkBufferImageCopy' : 11,
-'VkBufferMemoryBarrier' : 12,
-'VkBufferViewCreateInfo' : 13,
-'VkClearAttachment' : 14,
-'VkClearDepthStencilValue' : 15,
-'VkClearValue' : 16,
-'VkCmdProcessCommandsInfoNVX' : 17,
-'VkCmdReserveSpaceForCommandsInfoNVX' : 18,
-'VkCommandBufferAllocateInfo' : 19,
-'VkCommandBufferBeginInfo' : 20,
-'VkCommandBufferInheritanceInfo' : 21,
-'VkCommandPoolCreateInfo' : 22,
-'VkComponentMapping' : 23,
-'VkComputePipelineCreateInfo' : 24,
-'VkCopyDescriptorSet' : 25,
-'VkD3D12FenceSubmitInfo' : 26,
-'VkDebugMarkerMarkerInfoEXT' : 27,
-'VkDebugMarkerObjectNameInfoEXT' : 28,
-'VkDebugMarkerObjectTagInfoEXT' : 29,
-'VkDebugReportCallbackCreateInfoEXT' : 30,
-'VkDedicatedAllocationBufferCreateInfoNV' : 31,
-'VkDedicatedAllocationImageCreateInfoNV' : 32,
-'VkDedicatedAllocationMemoryAllocateInfoNV' : 33,
-'VkDescriptorBufferInfo' : 34,
-'VkDescriptorImageInfo' : 35,
-'VkDescriptorPoolCreateInfo' : 36,
-'VkDescriptorPoolSize' : 37,
-'VkDescriptorSetAllocateInfo' : 38,
-'VkDescriptorSetLayoutBinding' : 39,
-'VkDescriptorSetLayoutCreateInfo' : 40,
-'VkDescriptorUpdateTemplateCreateInfo' : 41,
-'VkDescriptorUpdateTemplateEntry' : 42,
-'VkDeviceCreateInfo' : 43,
-'VkDeviceEventInfoEXT' : 44,
-'VkDeviceGeneratedCommandsFeaturesNVX' : 45,
-'VkDeviceGeneratedCommandsLimitsNVX' : 46,
-'VkDeviceGroupBindSparseInfo' : 47,
-'VkDeviceGroupCommandBufferBeginInfo' : 48,
-'VkDeviceGroupDeviceCreateInfo' : 49,
-'VkDeviceGroupPresentInfo' : 50,
-'VkDeviceGroupRenderPassBeginInfo' : 51,
-'VkDeviceGroupSubmitInfo' : 52,
-'VkDeviceGroupSwapchainCreateInfo' : 53,
-'VkDeviceQueueCreateInfo' : 54,
-'VkDispatchIndirectCommand' : 55,
-'VkDisplayEventInfoEXT' : 56,
-'VkDisplayModeCreateInfo' : 57,
-'VkDisplayPowerInfoEXT' : 58,
-'VkDisplayPresentInfo' : 59,
-'VkDisplaySurfaceCreateInfo' : 60,
-'VkDrawIndexedIndirectCommand' : 61,
-'VkDrawIndirectCommand' : 62,
-'VkEventCreateInfo' : 63,
-'VkExportMemoryAllocateInfo' : 64,
-'VkExportMemoryAllocateInfoNV' : 65,
-'VkExportMemoryWin32HandleInfo' : 66,
-'VkExportMemoryWin32HandleInfoNV' : 67,
-'VkExportSemaphoreCreateInfo' : 68,
-'VkExportSemaphoreWin32HandleInfo' : 69,
-'VkExternalMemoryBufferCreateInfo' : 70,
-'VkExternalMemoryImageCreateInfo' : 71,
-'VkExternalMemoryImageCreateInfoNV' : 72,
-'VkFenceCreateInfo' : 73,
-'VkFramebufferCreateInfo' : 74,
-'VkGraphicsPipelineCreateInfo' : 75,
-'VkIOSSurfaceCreateInfoMVK' : 76,
-'VkImageBlit' : 77,
-'VkImageCopy' : 78,
-'VkImageCreateInfo' : 79,
-'VkImageMemoryBarrier' : 80,
-'VkImageResolve' : 81,
-'VkImageSubresource' : 82,
-'VkImageSubresourceLayers' : 83,
-'VkImageSubresourceRange' : 84,
-'VkImageSwapchainCreateInfo' : 85,
-'VkImageViewCreateInfo' : 86,
-'VkImportMemoryFdInfo' : 87,
-'VkImportMemoryWin32HandleInfo' : 88,
-'VkImportMemoryWin32HandleInfoNV' : 89,
-'VkImportSemaphoreFdInfo' : 90,
-'VkImportSemaphoreWin32HandleInfo' : 91,
-'VkIndirectCommandsLayoutCreateInfoNVX' : 92,
-'VkIndirectCommandsLayoutTokenNVX' : 93,
-'VkIndirectCommandsTokenNVX' : 94,
-'VkInstanceCreateInfo' : 95,
-'VkMacOSSurfaceCreateInfoMVK' : 96,
-'VkMappedMemoryRange' : 97,
-'VkMemoryAllocateFlagsInfo' : 98,
-'VkMemoryAllocateInfo' : 99,
-'VkMemoryBarrier' : 100,
-'VkMirSurfaceCreateInfo' : 101,
-'VkObjectTableCreateInfoNVX' : 102,
-'VkObjectTableDescriptorSetEntryNVX' : 103,
-'VkObjectTableEntryNVX' : 104,
-'VkObjectTableIndexBufferEntryNVX' : 105,
-'VkObjectTablePipelineEntryNVX' : 106,
-'VkObjectTablePushConstantEntryNVX' : 107,
-'VkObjectTableVertexBufferEntryNVX' : 108,
-'VkPhysicalDeviceDiscardRectanglePropertiesEXT' : 109,
-'VkPhysicalDeviceExternalBufferInfo' : 110,
-'VkPhysicalDeviceExternalImageFormatInfo' : 111,
-'VkPhysicalDeviceExternalSemaphoreInfo' : 112,
-'VkPhysicalDeviceFeatures' : 113,
-'VkPhysicalDeviceFeatures2' : 114,
-'VkPhysicalDeviceImageFormatInfo2' : 115,
-'VkPhysicalDeviceMultiviewFeatures' : 116,
-'VkPhysicalDevicePushDescriptorProperties' : 117,
-'VkPhysicalDeviceSparseImageFormatInfo2' : 118,
-'VkPhysicalDeviceSurfaceInfo2' : 119,
-'VkPipelineCacheCreateInfo' : 120,
-'VkPipelineColorBlendAttachmentState' : 121,
-'VkPipelineColorBlendStateCreateInfo' : 122,
-'VkPipelineDepthStencilStateCreateInfo' : 123,
-'VkPipelineDiscardRectangleStateCreateInfoEXT' : 124,
-'VkPipelineDynamicStateCreateInfo' : 125,
-'VkPipelineInputAssemblyStateCreateInfo' : 126,
-'VkPipelineLayoutCreateInfo' : 127,
-'VkPipelineMultisampleStateCreateInfo' : 128,
-'VkPipelineRasterizationStateCreateInfo' : 129,
-'VkPipelineRasterizationStateRasterizationOrderAMD' : 130,
-'VkPipelineShaderStageCreateInfo' : 131,
-'VkPipelineTessellationStateCreateInfo' : 132,
-'VkPipelineVertexInputStateCreateInfo' : 133,
-'VkPipelineViewportStateCreateInfo' : 134,
-'VkPipelineViewportSwizzleStateCreateInfoNV' : 135,
-'VkPipelineViewportWScalingStateCreateInfoNV' : 136,
-'VkPresentInfo' : 137,
-'VkPresentRegion' : 138,
-'VkPresentRegions' : 139,
-'VkPresentTimesInfoGOOGLE' : 140,
-'VkPushConstantRange' : 141,
-'VkQueryPoolCreateInfo' : 142,
-'VkRectLayer' : 143,
-'VkRenderPassBeginInfo' : 144,
-'VkRenderPassCreateInfo' : 145,
-'VkRenderPassMultiviewCreateInfo' : 146,
-'VkSamplerCreateInfo' : 147,
-'VkSemaphoreCreateInfo' : 148,
-'VkShaderModuleCreateInfo' : 149,
-'VkSparseBufferMemoryBindInfo' : 150,
-'VkSparseImageMemoryBind' : 151,
-'VkSparseImageMemoryBindInfo' : 152,
-'VkSparseImageOpaqueMemoryBindInfo' : 153,
-'VkSparseMemoryBind' : 154,
-'VkSpecializationInfo' : 155,
-'VkSpecializationMapEntry' : 156,
-'VkStencilOpState' : 157,
-'VkSubmitInfo' : 158,
-'VkSubpassDependency' : 159,
-'VkSubpassDescription' : 160,
-'VkSurfaceCapabilities2EXT' : 161,
-'VkSwapchainCounterCreateInfoEXT' : 162,
-'VkSwapchainCreateInfo' : 163,
-'VkValidationFlagsEXT' : 164,
-'VkVertexInputAttributeDescription' : 165,
-'VkVertexInputBindingDescription' : 166,
-'VkViSurfaceCreateInfoNN' : 167,
-'VkViewport' : 168,
-'VkViewportSwizzleNV' : 169,
-'VkWaylandSurfaceCreateInfo' : 170,
-'VkWin32KeyedMutexAcquireReleaseInfo' : 171,
-'VkWin32KeyedMutexAcquireReleaseInfoNV' : 172,
-'VkWin32SurfaceCreateInfo' : 173,
-'VkWriteDescriptorSet' : 174,
-'VkXcbSurfaceCreateInfo' : 175,
-'VkXlibSurfaceCreateInfo' : 176,
-'vkAcquireNextImage2' : 177,
-'vkAcquireNextImage' : 178,
-'vkAcquireXlibDisplayEXT' : 179,
-'vkAllocateCommandBuffers' : 180,
-'vkAllocateDescriptorSets' : 181,
-'vkAllocateMemory' : 182,
-'vkBeginCommandBuffer' : 183,
-'vkBindBufferMemory' : 184,
-'vkBindBufferMemory2' : 185,
-'vkBindImageMemory' : 186,
-'vkBindImageMemory2' : 187,
-'vkCmdBeginQuery' : 188,
-'vkCmdBeginRenderPass' : 189,
-'vkCmdBindDescriptorSets' : 190,
-'vkCmdBindIndexBuffer' : 191,
-'vkCmdBindPipeline' : 192,
-'vkCmdBindVertexBuffers' : 193,
-'vkCmdBlitImage' : 194,
-'vkCmdClearAttachments' : 195,
-'vkCmdClearColorImage' : 196,
-'vkCmdClearDepthStencilImage' : 197,
-'vkCmdCopyBuffer' : 198,
-'vkCmdCopyBufferToImage' : 199,
-'vkCmdCopyImage' : 200,
-'vkCmdCopyImageToBuffer' : 201,
-'vkCmdCopyQueryPoolResults' : 202,
-'vkCmdDebugMarkerBeginEXT' : 203,
-'vkCmdDebugMarkerEndEXT' : 204,
-'vkCmdDebugMarkerInsertEXT' : 205,
-'vkCmdDispatch' : 206,
-'vkCmdDispatchBase' : 207,
-'vkCmdDispatchIndirect' : 208,
-'vkCmdDraw' : 209,
-'vkCmdDrawIndexed' : 210,
-'vkCmdDrawIndexedIndirect' : 211,
-'vkCmdDrawIndexedIndirectCountAMD' : 212,
-'vkCmdDrawIndirect' : 213,
-'vkCmdDrawIndirectCountAMD' : 214,
-'vkCmdEndQuery' : 215,
-'vkCmdEndRenderPass' : 216,
-'vkCmdExecuteCommands' : 217,
-'vkCmdFillBuffer' : 218,
-'vkCmdNextSubpass' : 219,
-'vkCmdPipelineBarrier' : 220,
-'vkCmdProcessCommandsNVX' : 221,
-'vkCmdPushConstants' : 222,
-'vkCmdPushDescriptorSet' : 223,
-'vkCmdPushDescriptorSetWithTemplate' : 224,
-'vkCmdReserveSpaceForCommandsNVX' : 225,
-'vkCmdResetEvent' : 226,
-'vkCmdResetQueryPool' : 227,
-'vkCmdResolveImage' : 228,
-'vkCmdSetBlendConstants' : 229,
-'vkCmdSetDepthBias' : 230,
-'vkCmdSetDepthBounds' : 231,
-'vkCmdSetDeviceMask' : 232,
-'vkCmdSetDiscardRectangleEXT' : 233,
-'vkCmdSetEvent' : 234,
-'vkCmdSetLineWidth' : 235,
-'vkCmdSetScissor' : 236,
-'vkCmdSetStencilCompareMask' : 237,
-'vkCmdSetStencilReference' : 238,
-'vkCmdSetStencilWriteMask' : 239,
-'vkCmdSetViewport' : 240,
-'vkCmdSetViewportWScalingNV' : 241,
-'vkCmdUpdateBuffer' : 242,
-'vkCmdWaitEvents' : 243,
-'vkCmdWriteTimestamp' : 244,
-'vkCreateAndroidSurface' : 245,
-'vkCreateBuffer' : 246,
-'vkCreateBufferView' : 247,
-'vkCreateCommandPool' : 248,
-'vkCreateComputePipelines' : 249,
-'vkCreateDebugReportCallbackEXT' : 250,
-'vkCreateDescriptorPool' : 251,
-'vkCreateDescriptorSetLayout' : 252,
-'vkCreateDescriptorUpdateTemplate' : 253,
-'vkCreateDevice' : 254,
-'vkCreateDisplayMode' : 255,
-'vkCreateDisplayPlaneSurface' : 256,
-'vkCreateEvent' : 257,
-'vkCreateFence' : 258,
-'vkCreateFramebuffer' : 259,
-'vkCreateGraphicsPipelines' : 260,
-'vkCreateIOSSurfaceMVK' : 261,
-'vkCreateImage' : 262,
-'vkCreateImageView' : 263,
-'vkCreateIndirectCommandsLayoutNVX' : 264,
-'vkCreateInstance' : 265,
-'vkCreateMacOSSurfaceMVK' : 266,
-'vkCreateMirSurface' : 267,
-'vkCreateObjectTableNVX' : 268,
-'vkCreatePipelineCache' : 269,
-'vkCreatePipelineLayout' : 270,
-'vkCreateQueryPool' : 271,
-'vkCreateRenderPass' : 272,
-'vkCreateSampler' : 273,
-'vkCreateSemaphore' : 274,
-'vkCreateShaderModule' : 275,
-'vkCreateSharedSwapchains' : 276,
-'vkCreateSwapchain' : 277,
-'vkCreateViSurfaceNN' : 278,
-'vkCreateWaylandSurface' : 279,
-'vkCreateWin32Surface' : 280,
-'vkCreateXcbSurface' : 281,
-'vkCreateXlibSurface' : 282,
-'vkDebugMarkerSetObjectNameEXT' : 283,
-'vkDebugMarkerSetObjectTagEXT' : 284,
-'vkDebugReportMessageEXT' : 285,
-'vkDestroyBuffer' : 286,
-'vkDestroyBufferView' : 287,
-'vkDestroyCommandPool' : 288,
-'vkDestroyDebugReportCallbackEXT' : 289,
-'vkDestroyDescriptorPool' : 290,
-'vkDestroyDescriptorSetLayout' : 291,
-'vkDestroyDescriptorUpdateTemplate' : 292,
-'vkDestroyDevice' : 293,
-'vkDestroyEvent' : 294,
-'vkDestroyFence' : 295,
-'vkDestroyFramebuffer' : 296,
-'vkDestroyImage' : 297,
-'vkDestroyImageView' : 298,
-'vkDestroyIndirectCommandsLayoutNVX' : 299,
-'vkDestroyInstance' : 300,
-'vkDestroyObjectTableNVX' : 301,
-'vkDestroyPipeline' : 302,
-'vkDestroyPipelineCache' : 303,
-'vkDestroyPipelineLayout' : 304,
-'vkDestroyQueryPool' : 305,
-'vkDestroyRenderPass' : 306,
-'vkDestroySampler' : 307,
-'vkDestroySemaphore' : 308,
-'vkDestroyShaderModule' : 309,
-'vkDestroySurface' : 310,
-'vkDestroySwapchain' : 311,
-'vkDeviceWaitIdle' : 312,
-'vkDisplayPowerControlEXT' : 313,
-'vkEndCommandBuffer' : 314,
-'vkEnumerateDeviceExtensionProperties' : 315,
-'vkEnumerateDeviceLayerProperties' : 316,
-'vkEnumerateInstanceExtensionProperties' : 317,
-'vkEnumerateInstanceLayerProperties' : 318,
-'vkEnumeratePhysicalDeviceGroups' : 319,
-'vkEnumeratePhysicalDevices' : 320,
-'vkFlushMappedMemoryRanges' : 321,
-'vkFreeCommandBuffers' : 322,
-'vkFreeDescriptorSets' : 323,
-'vkFreeMemory' : 324,
-'vkGetBufferMemoryRequirements' : 325,
-'vkGetDeviceGroupPeerMemoryFeatures' : 326,
-'vkGetDeviceGroupPresentCapabilities' : 327,
-'vkGetDeviceGroupSurfacePresentModes' : 328,
-'vkGetDeviceMemoryCommitment' : 329,
-'vkGetDeviceProcAddr' : 330,
-'vkGetDeviceQueue' : 331,
-'vkGetDisplayModeProperties' : 332,
-'vkGetDisplayPlaneCapabilities' : 333,
-'vkGetDisplayPlaneSupportedDisplays' : 334,
-'vkGetEventStatus' : 335,
-'vkGetFenceStatus' : 336,
-'vkGetImageMemoryRequirements' : 337,
-'vkGetImageSparseMemoryRequirements' : 338,
-'vkGetImageSubresourceLayout' : 339,
-'vkGetInstanceProcAddr' : 340,
-'vkGetMemoryFd' : 341,
-'vkGetMemoryFdProperties' : 342,
-'vkGetMemoryWin32Handle' : 343,
-'vkGetMemoryWin32HandleNV' : 344,
-'vkGetMemoryWin32HandleProperties' : 345,
-'vkGetPastPresentationTimingGOOGLE' : 346,
-'vkGetPhysicalDeviceDisplayPlaneProperties' : 347,
-'vkGetPhysicalDeviceDisplayProperties' : 348,
-'vkGetPhysicalDeviceExternalBufferProperties' : 349,
-'vkGetPhysicalDeviceExternalImageFormatPropertiesNV' : 350,
-'vkGetPhysicalDeviceExternalSemaphoreProperties' : 351,
-'vkGetPhysicalDeviceFeatures' : 352,
-'vkGetPhysicalDeviceFeatures2' : 353,
-'vkGetPhysicalDeviceFormatProperties' : 354,
-'vkGetPhysicalDeviceFormatProperties2' : 355,
-'vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX' : 356,
-'vkGetPhysicalDeviceImageFormatProperties' : 357,
-'vkGetPhysicalDeviceImageFormatProperties2' : 358,
-'vkGetPhysicalDeviceMemoryProperties' : 359,
-'vkGetPhysicalDeviceMemoryProperties2' : 360,
-'vkGetPhysicalDeviceMirPresentationSupport' : 361,
-'vkGetPhysicalDevicePresentRectangles' : 362,
-'vkGetPhysicalDeviceProperties' : 363,
-'vkGetPhysicalDeviceProperties2' : 364,
-'vkGetPhysicalDeviceQueueFamilyProperties' : 365,
-'vkGetPhysicalDeviceQueueFamilyProperties2' : 366,
-'vkGetPhysicalDeviceSparseImageFormatProperties' : 367,
-'vkGetPhysicalDeviceSparseImageFormatProperties2' : 368,
-'vkGetPhysicalDeviceSurfaceCapabilities2EXT' : 369,
-'vkGetPhysicalDeviceSurfaceCapabilities2' : 370,
-'vkGetPhysicalDeviceSurfaceCapabilities' : 371,
-'vkGetPhysicalDeviceSurfaceFormats2' : 372,
-'vkGetPhysicalDeviceSurfaceFormats' : 373,
-'vkGetPhysicalDeviceSurfacePresentModes' : 374,
-'vkGetPhysicalDeviceSurfaceSupport' : 375,
-'vkGetPhysicalDeviceWaylandPresentationSupport' : 376,
-'vkGetPhysicalDeviceWin32PresentationSupport' : 377,
-'vkGetPhysicalDeviceXcbPresentationSupport' : 378,
-'vkGetPhysicalDeviceXlibPresentationSupport' : 379,
-'vkGetPipelineCacheData' : 380,
-'vkGetQueryPoolResults' : 381,
-'vkGetRandROutputDisplayEXT' : 382,
-'vkGetRefreshCycleDurationGOOGLE' : 383,
-'vkGetRenderAreaGranularity' : 384,
-'vkGetSemaphoreFd' : 385,
-'vkGetSemaphoreWin32Handle' : 386,
-'vkGetSwapchainCounterEXT' : 387,
-'vkGetSwapchainImages' : 388,
-'vkGetSwapchainStatus' : 389,
-'vkImportSemaphoreFd' : 390,
-'vkImportSemaphoreWin32Handle' : 391,
-'vkInvalidateMappedMemoryRanges' : 392,
-'vkMapMemory' : 393,
-'vkMergePipelineCaches' : 394,
-'vkQueueBindSparse' : 395,
-'vkQueuePresent' : 396,
-'vkQueueSubmit' : 397,
-'vkQueueWaitIdle' : 398,
-'vkRegisterDeviceEventEXT' : 399,
-'vkRegisterDisplayEventEXT' : 400,
-'vkRegisterObjectsNVX' : 401,
-'vkReleaseDisplayEXT' : 402,
-'vkResetCommandBuffer' : 403,
-'vkResetCommandPool' : 404,
-'vkResetDescriptorPool' : 405,
-'vkResetEvent' : 406,
-'vkResetFences' : 407,
-'vkSetEvent' : 408,
-'vkSetHdrMetadataEXT' : 409,
-'vkTrimCommandPool' : 410,
-'vkUnmapMemory' : 411,
-'vkUnregisterObjectsNVX' : 412,
-'vkUpdateDescriptorSetWithTemplate' : 413,
-'vkUpdateDescriptorSets' : 414,
-'vkWaitForFences' : 415,
-'VkPhysicalDeviceProperties2' : 416,
-'VkFormatProperties2' : 417,
-'VkImageFormatProperties2' : 418,
-'VkPhysicalDeviceMemoryProperties2' : 419,
-'VkSurfaceCapabilities2' : 420,
-'VkDeviceGroupPresentCapabilities' : 421,
-'VkExternalBufferProperties' : 422,
-'VkMemoryWin32HandleProperties' : 423,
-'VkMemoryFdProperties' : 424,
-'VkExternalSemaphoreProperties' : 425,
-'VkQueueFamilyProperties2' : 426,
-'VkSparseImageFormatProperties2' : 427,
-'VkSurfaceFormat2' : 428,
-'VkTextureLODGatherFormatPropertiesAMD' : 429,
-'VkPhysicalDeviceMultiviewProperties' : 430,
-'VkPhysicalDeviceGroupProperties' : 431,
-'VkExternalImageFormatProperties' : 432,
-'VkPhysicalDeviceIDProperties' : 433,
-'VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX' : 434,
-'VkHdrMetadataEXT' : 435,
-'VkExternalMemoryProperties' : 436,
-'VkFormatProperties' : 437,
-'VkImageFormatProperties' : 438,
-'VkPhysicalDeviceLimits' : 439,
-'VkQueueFamilyProperties' : 440,
-'VkMemoryType' : 441,
-'VkMemoryHeap' : 442,
-'VkSparseImageFormatProperties' : 443,
-'VkSurfaceCapabilities' : 444,
-'VkDisplayProperties' : 445,
-'VkDisplayPlaneCapabilities' : 446,
-'VkSharedPresentSurfaceCapabilities' : 447,
-'VkExternalImageFormatPropertiesNV' : 448,
-'VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT' : 449,
-'VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT' : 450,
-'VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT' : 451,
-'VkPipelineColorBlendAdvancedStateCreateInfoEXT' : 452,
-'VkPipelineCoverageModulationStateCreateInfoNV' : 453,
-'VkPipelineCoverageToColorStateCreateInfoNV' : 454,
-'VkSamplerReductionModeCreateInfoEXT' : 455,
-'VkPhysicalDeviceProperties' : 456,
-'VkSurfaceFormat' : 457,
-'VkExportFenceCreateInfo' : 458,
-'VkPhysicalDeviceExternalFenceInfo' : 459,
-'VkExternalFenceProperties' : 460,
-'vkGetPhysicalDeviceExternalFenceProperties' : 461,
-'VkImportFenceFdInfo' : 462,
-'VkFenceGetFdInfo' : 463,
-'vkImportFenceFd' : 464,
-'vkGetFenceFd' : 465,
-'VkImportFenceWin32HandleInfo' : 466,
-'VkExportFenceWin32HandleInfo' : 467,
-'VkFenceGetWin32HandleInfo' : 468,
-'vkImportFenceWin32Handle' : 469,
-'vkGetFenceWin32Handle' : 470,
-'VkSemaphoreGetFdInfo' : 471,
-'VkSemaphoreGetWin32HandleInfo' : 472,
-'VkMemoryGetFdInfo' : 473,
-'VkMemoryGetWin32HandleInfo' : 474,
-'VkMemoryDedicatedRequirements' : 475,
-'VkMemoryDedicatedAllocateInfo' : 476,
-'VkBufferMemoryRequirementsInfo2' : 477,
-'VkImageMemoryRequirementsInfo2' : 478,
-'VkImageSparseMemoryRequirementsInfo2' : 479,
-'VkMemoryRequirements2' : 480,
-'VkSparseImageMemoryRequirements2' : 481,
-'vkGetImageMemoryRequirements2' : 482,
-'vkGetBufferMemoryRequirements2' : 483,
-'vkGetImageSparseMemoryRequirements2' : 484,
-'VkPhysicalDevice16BitStorageFeatures' : 485,
-'VkPhysicalDeviceVariablePointerFeatures' : 486,
-'VkSampleLocationsInfoEXT' : 487,
-'VkRenderPassSampleLocationsBeginInfoEXT' : 488,
-'VkPipelineSampleLocationsStateCreateInfoEXT' : 489,
-'VkPhysicalDeviceSampleLocationsPropertiesEXT' : 490,
-'VkMultisamplePropertiesEXT' : 491,
-'vkGetPhysicalDeviceMultisamplePropertiesEXT' : 492,
-'VkValidationCacheCreateInfoEXT' : 493,
-'VkShaderModuleValidationCacheCreateInfoEXT' : 494,
-'vkCreateValidationCacheEXT' : 495,
-'vkGetValidationCacheDataEXT' : 496,
-'vkCmdSetSampleLocationsEXT' : 497,
-'vkDestroyValidationCacheEXT' : 498,
-'vkMergeValidationCachesEXT' : 499,
-'VkAttachmentSampleLocationsEXT' : 500,
-'VkSubpassSampleLocationsEXT' : 501,
-'VkPhysicalDevicePointClippingProperties' : 502,
-'VkInputAttachmentAspectReference' : 503,
-'VkRenderPassInputAttachmentAspectCreateInfo' : 504,
-'VkImageViewUsageCreateInfo' : 505,
-'VkPipelineTessellationDomainOriginStateCreateInfo' : 506,
-'VkImageFormatListCreateInfo' : 507,
-'VkSamplerYcbcrConversionCreateInfo' : 508,
-'VkBindImagePlaneMemoryInfo' : 509,
-'VkImagePlaneMemoryRequirementsInfo' : 510,
-'vkCreateSamplerYcbcrConversion' : 511,
-'VkBindBufferMemoryDeviceGroupInfo' : 512,
-'VkBindImageMemoryDeviceGroupInfo' : 513,
-'vkDestroySamplerYcbcrConversion' : 514,
-'VkPhysicalDeviceSamplerYcbcrConversionFeatures' : 515,
-'VkSamplerYcbcrConversionImageFormatProperties' : 516,
-'VkSamplerYcbcrConversionInfo' : 517,
-'VkDeviceQueueGlobalPriorityCreateInfoEXT' : 518,
-'vkGetShaderInfoAMD' : 519,
-'VkShaderStatisticsInfoAMD' : 520,
-'VkImportMemoryHostPointerInfoEXT' : 521,
-'VkMemoryHostPointerPropertiesEXT' : 522,
-'VkPhysicalDeviceExternalMemoryHostPropertiesEXT' : 523,
-'vkGetMemoryHostPointerPropertiesEXT' : 524,
-'VkPhysicalDeviceConservativeRasterizationPropertiesEXT' : 525,
-'VkPipelineRasterizationConservativeStateCreateInfoEXT' : 526,
-'vkCmdWriteBufferMarkerAMD' : 527,
-'VkDescriptorSetLayoutSupport' : 528,
-'VkDeviceQueueInfo2' : 529,
-'VkPhysicalDeviceMaintenance3Properties' : 530,
-'VkPhysicalDeviceProtectedMemoryFeatures' : 531,
-'VkPhysicalDeviceProtectedMemoryProperties' : 532,
-'VkPhysicalDeviceShaderDrawParameterFeatures' : 533,
-'VkPhysicalDeviceSubgroupProperties' : 534,
-'VkProtectedSubmitInfo' : 535,
-'vkEnumerateInstanceVersion' : 536,
-'vkGetDescriptorSetLayoutSupport' : 537,
-'vkGetDeviceQueue2' : 538,
-'VkDebugUtilsObjectNameInfoEXT' : 539,
-'VkDebugUtilsObjectTagInfoEXT' : 540,
-'VkDebugUtilsLabelEXT' : 541,
-'VkDebugUtilsMessengerCallbackDataEXT' : 542,
-'VkDebugUtilsMessengerCreateInfoEXT' : 543,
-'vkCreateDebugUtilsMessengerEXT' : 544,
-'vkSubmitDebugUtilsMessageEXT' : 545,
-'VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT' : 546,
-'VkPipelineVertexInputDivisorStateCreateInfoEXT' : 547,
-'VkExternalFormatANDROID' : 548,
-'VkImportAndroidHardwareBufferInfoANDROID' : 549,
-'VkMemoryGetAndroidHardwareBufferInfoANDROID' : 550,
-'vkCmdEndDebugUtilsLabelEXT' : 551,
-'vkDestroyDebugUtilsMessengerEXT' : 552,
-'vkGetAndroidHardwareBufferPropertiesANDROID' : 553,
-'vkQueueEndDebugUtilsLabelEXT' : 554,
-'VkAndroidHardwareBufferUsageANDROID' : 555,
-'VkAndroidHardwareBufferPropertiesANDROID' : 556,
-'vkGetMemoryAndroidHardwareBufferANDROID' : 557,
-'VkAndroidHardwareBufferFormatPropertiesANDROID' : 558,
-'vkCmdBeginDebugUtilsLabelEXT' : 559,
-'vkCmdInsertDebugUtilsLabelEXT' : 560,
-'vkQueueBeginDebugUtilsLabelEXT' : 561,
-'vkQueueInsertDebugUtilsLabelEXT' : 562,
-'vkSetDebugUtilsObjectNameEXT' : 563,
-'vkSetDebugUtilsObjectTagEXT' : 564,
-'VkDescriptorSetLayoutBindingFlagsCreateInfoEXT' : 565,
-'VkDescriptorSetVariableDescriptorCountAllocateInfoEXT' : 566,
-'VkDescriptorSetVariableDescriptorCountLayoutSupportEXT' : 567,
-'VkPhysicalDeviceDescriptorIndexingFeaturesEXT' : 568,
-'VkPhysicalDeviceDescriptorIndexingPropertiesEXT' : 569,
-'VkPhysicalDeviceShaderCorePropertiesAMD' : 570,
-'VkVertexInputBindingDivisorDescriptionEXT' : 571,
-### ADD New func/struct mappings above this line
-}
-# Mapping of params to unique IDs
-implicit_param_map = {
-'a' : 0,
-'addressModeU' : 1,
-'addressModeV' : 2,
-'addressModeW' : 3,
-'alphaBlendOp' : 4,
-'alphaMode' : 5,
-'aspectMask' : 6,
-'attachmentCount' : 7,
-'b' : 8,
-'back' : 9,
-'bindCount' : 10,
-'bindInfoCount' : 11,
-'bindingCount' : 12,
-'buffer' : 13,
-'bufferView' : 14,
-'callback' : 15,
-'colorBlendOp' : 16,
-'colorWriteMask' : 17,
-'commandBuffer' : 18,
-'commandBufferCount' : 19,
-'commandPool' : 20,
-'compareOp' : 21,
-'components' : 22,
-'compositeAlpha' : 23,
-'connection' : 24,
-'contents' : 25,
-'countBuffer' : 26,
-'counter' : 27,
-'createInfoCount' : 28,
-'cullMode' : 29,
-'dataSize' : 30,
-'dependencyFlags' : 31,
-'depthCompareOp' : 32,
-'depthFailOp' : 33,
-'descriptorCount' : 34,
-'descriptorPool' : 35,
-'descriptorSet' : 36,
-'descriptorSetCount' : 37,
-'descriptorSetLayout' : 38,
-'descriptorType' : 39,
-'descriptorUpdateEntryCount' : 40,
-'descriptorUpdateTemplate' : 41,
-'descriptorWriteCount' : 42,
-'device' : 43,
-'deviceEvent' : 44,
-'disabledValidationCheckCount' : 45,
-'discardRectangleCount' : 46,
-'discardRectangleMode' : 47,
-'display' : 48,
-'displayEvent' : 49,
-'displayMode' : 50,
-'dpy' : 51,
-'dstAccessMask' : 52,
-'dstAlphaBlendFactor' : 53,
-'dstBuffer' : 54,
-'dstCache' : 55,
-'dstColorBlendFactor' : 56,
-'dstImage' : 57,
-'dstImageLayout' : 58,
-'dstSet' : 59,
-'dstStageMask' : 60,
-'dstSubresource' : 61,
-'dynamicStateCount' : 62,
-'event' : 63,
-'eventCount' : 64,
-'externalHandleType' : 65,
-'faceMask' : 66,
-'failOp' : 67,
-'fence' : 68,
-'fenceCount' : 69,
-'filter' : 70,
-'finalLayout' : 71,
-'flags' : 72,
-'format' : 73,
-'framebuffer' : 74,
-'front' : 75,
-'frontFace' : 76,
-'g' : 77,
-'handleType' : 78,
-'handleTypes' : 79,
-'image' : 80,
-'imageColorSpace' : 81,
-'imageFormat' : 82,
-'imageLayout' : 83,
-'imageSharingMode' : 84,
-'imageSubresource' : 85,
-'imageType' : 86,
-'imageUsage' : 87,
-'imageView' : 88,
-'indexType' : 89,
-'indirectCommandsLayout' : 90,
-'indirectCommandsTokenCount' : 91,
-'initialLayout' : 92,
-'inputRate' : 93,
-'instance' : 94,
-'layout' : 95,
-'level' : 96,
-'loadOp' : 97,
-'magFilter' : 98,
-'memory' : 99,
-'memoryRangeCount' : 100,
-'minFilter' : 101,
-'mipmapMode' : 102,
-'mode' : 103,
-'modes' : 104,
-'module' : 105,
-'newLayout' : 106,
-'objectCount' : 107,
-'objectTable' : 108,
-'objectType' : 109,
-'oldLayout' : 110,
-'oldSwapchain' : 111,
-'pAcquireInfo' : 112,
-'pAcquireKeys' : 113,
-'pAcquireSyncs' : 114,
-'pAcquireTimeoutMilliseconds' : 115,
-'pAcquireTimeouts' : 116,
-'pAllocateInfo' : 117,
-'pAllocator' : 118,
-'pApplicationInfo' : 119,
-'pApplicationName' : 120,
-'pAttachments' : 121,
-'pAttributes' : 122,
-'pBeginInfo' : 123,
-'pBindInfo' : 124,
-'pBindInfos' : 125,
-'pBindings' : 126,
-'pBinds' : 127,
-'pBuffer' : 128,
-'pBufferBinds' : 129,
-'pBufferMemoryBarriers' : 130,
-'pBuffers' : 131,
-'pCallback' : 132,
-'pCapabilities' : 133,
-'pCode' : 134,
-'pColor' : 135,
-'pColorAttachments' : 136,
-'pCommandBufferDeviceMasks' : 137,
-'pCommandBuffers' : 138,
-'pCommandPool' : 139,
-'pCommittedMemoryInBytes' : 140,
-'pCorrelationMasks' : 141,
-'pCounterValue' : 142,
-'pCreateInfo' : 143,
-'pCreateInfos' : 144,
-'pData' : 145,
-'pDataSize' : 146,
-'pDependencies' : 147,
-'pDepthStencil' : 148,
-'pDepthStencilAttachment' : 149,
-'pDescriptorCopies' : 150,
-'pDescriptorPool' : 151,
-'pDescriptorSets' : 152,
-'pDescriptorUpdateEntries' : 153,
-'pDescriptorUpdateTemplate' : 154,
-'pDescriptorWrites' : 155,
-'pDevice' : 156,
-'pDeviceEventInfo' : 157,
-'pDeviceGroupPresentCapabilities' : 158,
-'pDeviceIndices' : 159,
-'pDeviceMasks' : 160,
-'pDeviceRenderAreas' : 161,
-'pDisabledValidationChecks' : 162,
-'pDiscardRectangles' : 163,
-'pDisplay' : 164,
-'pDisplayCount' : 165,
-'pDisplayEventInfo' : 166,
-'pDisplayPowerInfo' : 167,
-'pDisplayTimingProperties' : 168,
-'pDisplays' : 169,
-'pDynamicOffsets' : 170,
-'pDynamicState' : 171,
-'pDynamicStates' : 172,
-'pEnabledFeatures' : 173,
-'pEngineName' : 174,
-'pEvent' : 175,
-'pEvents' : 176,
-'pExternalBufferInfo' : 177,
-'pExternalBufferProperties' : 178,
-'pExternalImageFormatProperties' : 179,
-'pExternalSemaphoreInfo' : 180,
-'pExternalSemaphoreProperties' : 181,
-'pFd' : 182,
-'pFeatures' : 183,
-'pFence' : 184,
-'pFences' : 185,
-'pFormatInfo' : 186,
-'pFormatProperties' : 187,
-'pFramebuffer' : 188,
-'pGranularity' : 189,
-'pHandle' : 190,
-'pImage' : 191,
-'pImageBinds' : 192,
-'pImageFormatInfo' : 193,
-'pImageFormatProperties' : 194,
-'pImageIndex' : 195,
-'pImageIndices' : 196,
-'pImageMemoryBarriers' : 197,
-'pImageOpaqueBinds' : 198,
-'pImportSemaphoreFdInfo' : 199,
-'pImportSemaphoreWin32HandleInfo' : 200,
-'pIndirectCommandsLayout' : 201,
-'pIndirectCommandsTokens' : 202,
-'pInitialData' : 203,
-'pInputAssemblyState' : 204,
-'pInputAttachments' : 205,
-'pInstance' : 206,
-'pLayerName' : 207,
-'pLayerPrefix' : 208,
-'pLayout' : 209,
-'pLimits' : 210,
-'pMarkerInfo' : 211,
-'pMarkerName' : 212,
-'pMemory' : 213,
-'pMemoryBarriers' : 214,
-'pMemoryFdProperties' : 215,
-'pMemoryProperties' : 216,
-'pMemoryRanges' : 217,
-'pMemoryRequirements' : 218,
-'pMemoryWin32HandleProperties' : 219,
-'pMessage' : 220,
-'pMetadata' : 221,
-'pMode' : 222,
-'pModes' : 223,
-'pName' : 224,
-'pNameInfo' : 225,
-'pNext' : 226,
-'pObjectEntryCounts' : 227,
-'pObjectEntryTypes' : 228,
-'pObjectEntryUsageFlags' : 229,
-'pObjectIndices' : 230,
-'pObjectName' : 231,
-'pObjectTable' : 232,
-'pOffsets' : 233,
-'pPeerMemoryFeatures' : 234,
-'pPhysicalDeviceCount' : 235,
-'pPhysicalDeviceGroupCount' : 236,
-'pPhysicalDeviceGroupProperties' : 237,
-'pPhysicalDevices' : 238,
-'pPipelineCache' : 239,
-'pPipelineLayout' : 240,
-'pPipelines' : 241,
-'pPoolSizes' : 242,
-'pPresentInfo' : 243,
-'pPresentModeCount' : 244,
-'pPresentModes' : 245,
-'pPresentationTimingCount' : 246,
-'pPresentationTimings' : 247,
-'pPreserveAttachments' : 248,
-'pProcessCommandsInfo' : 249,
-'pProperties' : 250,
-'pPropertyCount' : 251,
-'pPushConstantRanges' : 252,
-'pQueryPool' : 253,
-'pQueue' : 254,
-'pQueueCreateInfos' : 255,
-'pQueueFamilyProperties' : 256,
-'pQueueFamilyPropertyCount' : 257,
-'pQueuePriorities' : 258,
-'pRanges' : 259,
-'pRasterizationState' : 260,
-'pRectCount' : 261,
-'pRectangles' : 262,
-'pRects' : 263,
-'pRegions' : 264,
-'pReleaseKeys' : 265,
-'pReleaseSyncs' : 266,
-'pRenderPass' : 267,
-'pRenderPassBegin' : 268,
-'pReserveSpaceInfo' : 269,
-'pResolveAttachments' : 270,
-'pResults' : 271,
-'pSFRRects' : 272,
-'pSampleMask' : 273,
-'pSampler' : 274,
-'pScissors' : 275,
-'pSemaphore' : 276,
-'pSetLayout' : 277,
-'pSetLayouts' : 278,
-'pShaderModule' : 279,
-'pSignalSemaphoreDeviceIndices' : 280,
-'pSignalSemaphoreValues' : 281,
-'pSignalSemaphores' : 282,
-'pSparseMemoryRequirementCount' : 283,
-'pSparseMemoryRequirements' : 284,
-'pSpecializationInfo' : 285,
-'pSrcCaches' : 286,
-'pStages' : 287,
-'pSubmits' : 288,
-'pSubpasses' : 289,
-'pSubresource' : 290,
-'pSupported' : 291,
-'pSurface' : 292,
-'pSurfaceCapabilities' : 293,
-'pSurfaceFormatCount' : 294,
-'pSurfaceFormats' : 295,
-'pSurfaceInfo' : 296,
-'pSwapchain' : 297,
-'pSwapchainImageCount' : 298,
-'pSwapchainImages' : 299,
-'pSwapchains' : 300,
-'pTag' : 301,
-'pTagInfo' : 302,
-'pTimes' : 303,
-'pTokens' : 304,
-'pValues' : 305,
-'pVertexAttributeDescriptions' : 306,
-'pVertexBindingDescriptions' : 307,
-'pVertexInputState' : 308,
-'pView' : 309,
-'pViewMasks' : 310,
-'pViewOffsets' : 311,
-'pWaitDstStageMask' : 312,
-'pWaitSemaphoreDeviceIndices' : 313,
-'pWaitSemaphoreValues' : 314,
-'pWaitSemaphores' : 315,
-'passOp' : 316,
-'physicalDevice' : 317,
-'pipeline' : 318,
-'pipelineBindPoint' : 319,
-'pipelineCache' : 320,
-'pipelineLayout' : 321,
-'pipelineStage' : 322,
-'polygonMode' : 323,
-'poolSizeCount' : 324,
-'powerState' : 325,
-'ppData' : 326,
-'ppEnabledExtensionNames' : 327,
-'ppEnabledLayerNames' : 328,
-'ppObjectTableEntries' : 329,
-'preTransform' : 330,
-'presentMode' : 331,
-'queryPool' : 332,
-'queryType' : 333,
-'queue' : 334,
-'queueCount' : 335,
-'queueCreateInfoCount' : 336,
-'r' : 337,
-'rangeCount' : 338,
-'rasterizationOrder' : 339,
-'rasterizationSamples' : 340,
-'rectCount' : 341,
-'regionCount' : 342,
-'renderPass' : 343,
-'sType' : 344,
-'sampler' : 345,
-'samples' : 346,
-'scissorCount' : 347,
-'semaphore' : 348,
-'sequencesCountBuffer' : 349,
-'sequencesIndexBuffer' : 350,
-'shaderModule' : 351,
-'sharingMode' : 352,
-'size' : 353,
-'srcAccessMask' : 354,
-'srcAlphaBlendFactor' : 355,
-'srcBuffer' : 356,
-'srcCacheCount' : 357,
-'srcColorBlendFactor' : 358,
-'srcImage' : 359,
-'srcImageLayout' : 360,
-'srcSet' : 361,
-'srcStageMask' : 362,
-'srcSubresource' : 363,
-'stage' : 364,
-'stageCount' : 365,
-'stageFlags' : 366,
-'stageMask' : 367,
-'stencilLoadOp' : 368,
-'stencilStoreOp' : 369,
-'storeOp' : 370,
-'subpassCount' : 371,
-'subresource' : 372,
-'subresourceRange' : 373,
-'surface' : 374,
-'surfaceCounters' : 375,
-'swapchain' : 376,
-'swapchainCount' : 377,
-'tagSize' : 378,
-'targetCommandBuffer' : 379,
-'templateType' : 380,
-'tiling' : 381,
-'tokenCount' : 382,
-'tokenType' : 383,
-'topology' : 384,
-'transform' : 385,
-'type' : 386,
-'usage' : 387,
-'viewType' : 388,
-'viewportCount' : 389,
-'w' : 390,
-'window' : 391,
-'x' : 392,
-'y' : 393,
-'z' : 394,
-'externalMemoryFeatures' : 395,
-'compatibleHandleTypes' : 396,
-'exportFromImportedHandleTypes' : 397,
-'linearTilingFeatures' : 398,
-'optimalTilingFeatures' : 399,
-'bufferFeatures' : 400,
-'sampleCounts' : 401,
-'framebufferColorSampleCounts' : 402,
-'framebufferDepthSampleCounts' : 403,
-'framebufferStencilSampleCounts' : 404,
-'framebufferNoAttachmentsSampleCounts' : 405,
-'sampledImageColorSampleCounts' : 406,
-'sampledImageIntegerSampleCounts' : 407,
-'sampledImageDepthSampleCounts' : 408,
-'sampledImageStencilSampleCounts' : 409,
-'storageImageSampleCounts' : 410,
-'queueFlags' : 411,
-'propertyFlags' : 412,
-'supportedTransforms' : 413,
-'currentTransform' : 414,
-'supportedCompositeAlpha' : 415,
-'supportedUsageFlags' : 416,
-'supportedAlpha' : 417,
-'sharedPresentSupportedUsageFlags' : 418,
-'externalSemaphoreFeatures' : 419,
-'supportedSurfaceCounters' : 420,
-'blendOverlap' : 421,
-'coverageModulationMode' : 422,
-'coverageModulationTableCount' : 423,
-'reductionMode' : 424,
-'enabledLayerCount' : 425,
-'enabledExtensionCount' : 426,
-'waitSemaphoreCount' : 427,
-'signalSemaphoreCount' : 428,
-'bufferBindCount' : 429,
-'imageOpaqueBindCount' : 430,
-'imageBindCount' : 431,
-'codeSize' : 432,
-'initialDataSize' : 433,
-'vertexBindingDescriptionCount' : 434,
-'vertexAttributeDescriptionCount' : 435,
-'setLayoutCount' : 436,
-'pushConstantRangeCount' : 437,
-'inputAttachmentCount' : 438,
-'colorAttachmentCount' : 439,
-'preserveAttachmentCount' : 440,
-'dependencyCount' : 441,
-'dynamicOffsetCount' : 442,
-'rectangleCount' : 443,
-'correlationMaskCount' : 444,
-'acquireCount' : 445,
-'releaseCount' : 446,
-'deviceIndexCount' : 447,
-'SFRRectCount' : 448,
-'deviceRenderAreaCount' : 449,
-'physicalDeviceCount' : 450,
-'waitSemaphoreValuesCount' : 451,
-'signalSemaphoreValuesCount' : 452,
-'deviceType' : 453,
-'colorSpace' : 454,
-'pfnAllocation' : 455,
-'pfnReallocation' : 556,
-'pfnFree' : 457,
-'blendConstants' : 458,
-'displayName' : 459,
-'pfnCallback' : 460,
-'externalFenceFeatures' : 461,
-'pInfo' : 462,
-'pGetFdInfo' : 463,
-'pGetWin32HandleInfo' : 464,
-'pExternalFenceInfo' : 465,
-'pExternalFenceProperties' : 466,
-'pImportFenceProperties' : 467,
-'pImportFenceFdInfo' : 468,
-'pImportFenceWin32HandleInfo' : 469,
-'basePipelineHandle' : 470,
-'pImmutableSamplers' : 471,
-'pTexelBufferView' : 472,
-'sampleLocationsPerPixel' : 473,
-'sampleLocationsCount' : 474,
-'pSampleLocations' : 475,
-'attachmentInitialSampleLocationsCount' : 476,
-'pAttachmentInitialSampleLocations' : 477,
-'postSubpassSampleLocationsCount' : 478,
-'pSubpassSampleLocations' : 479,
-'sampleLocationSampleCounts' : 480,
-'pValidationCache' : 481,
-'validationCache' : 482,
-'sampleLocationsInfo' : 483,
-'pSampleLocationsInfo' : 484,
-'pMultisampleProperties' : 485,
-'pointClippingBehavior' : 486,
-'aspectReferenceCount' : 487,
-'pAspectReferences' : 488,
-'domainOrigin' : 489,
-'ycbcrModel' : 490,
-'ycbcrRange' : 491,
-'xChromaOffset' : 492,
-'yChromaOffset' : 493,
-'chromaFilter' : 494,
-'planeAspect' : 495,
-'pYcbcrConversion' : 496,
-'ycbcrConversion' : 497,
-'pViewFormats' : 498,
-'conversion' : 499,
-'pPostSubpassSampleLocations' : 500,
-'globalPriority' : 501,
-'shaderStage' : 502,
-'infoType' : 503,
-'pInfoSize' : 504,
-'shaderStageMask' : 505,
-'pMemoryHostPointerProperties' : 506,
-'pHostPointer' : 507,
-'conservativeRasterizationMode' : 508,
-'pViewports' : 509,
-'pViewportWScalings' : 510,
-'pSplitInstanceBindRegions' : 511,
-'pApiVersion' : 512,
-'pSupport' : 513,
-'pQueueInfo' : 514,
-'splitInstanceBindRegionCount' : 515,
-'pLabelName' : 516,
-'messageSeverity' : 517,
-'messageType' : 518,
-'pfnUserCallback' : 519,
-'pMessenger' : 520,
-'messageTypes' : 521,
-'vertexBindingDivisorCount' : 522,
-'pVertexBindingDivisors' : 523,
-'formatFeatures' : 524,
-'suggestedYcbcrModel' : 525,
-'suggestedYcbcrRange' : 526,
-'suggestedXChromaOffset' : 527,
-'suggestedYChromaOffset' : 528,
-'pMessageIdName' : 529,
-'pLabelInfo' : 530,
-'messenger' : 531,
-'pCallbackData' : 532,
-'pBindingFlags' : 533,
-'pDescriptorCounts' : 534,
-### ADD New implicit param mappings above this line
-}
-
-uniqueid_set = set() # store uniqueid to make sure we don't have duplicates
-
-# Convert a string VUID into numerical value
-#  See "VUID Mapping Details" comment above for more info
-def convertVUID(vuid_string):
-    """Convert a string-based VUID into a numerical value"""
-    #func_struct_update = False
-    #imp_param_update = False
-    if vuid_string in ['', None]:
-        return -1
-    vuid_parts = vuid_string.split('-')
-    # Alias core/KHR/KHX ids because not all VUIDs in the spec get updated at the same time
-    if vuid_parts[1].endswith('KHR') or vuid_parts[1].endswith('KHX'):
-        vuid_parts[1] = vuid_parts[1][:-3]
-    if vuid_parts[1] not in func_struct_id_map:
-        print ("ERROR: Missing func/struct map value for '%s'!" % (vuid_parts[1]))
-        print (" TODO: Need to add mapping for this to end of func_struct_id_map")
-        print ("   replace '### ADD New func/struct mappings above this line' line with \"'%s' : %d,\"" % (vuid_parts[1], len(func_struct_id_map)))
-        func_struct_id_map[vuid_parts[1]] = len(func_struct_id_map)
-        #func_struct_update = True
-        sys.exit(1)
-    uniqueid = func_struct_id_map[vuid_parts[1]] << FUNC_STRUCT_SHIFT
-    if vuid_parts[-1].isdigit(): # explit VUID has int on the end
-        explicit_id = int(vuid_parts[-1])
-        # For explicit case, id is explicit_base + func/struct mapping + unique id
-        uniqueid = uniqueid + (explicit_id << EXPLICIT_ID_SHIFT) + explicit_bit0
-    else: # implicit case
-        if vuid_parts[-1] not in implicit_type_map:
-            print("ERROR: Missing mapping for implicit type '%s'!\nTODO: Please add new mapping." % (vuid_parts[-1]))
-            sys.exit(1)
-        else:
-            param_id = 0 # Default when no param is available
-            if vuid_parts[-2] != vuid_parts[1]: # we have a parameter
-                if vuid_parts[-2] in implicit_param_map:
-                    param_id = implicit_param_map[vuid_parts[-2]]
-                else:
-                    print ("ERROR: Missing param '%s' from implicit_param_map\n TODO: Please add new mapping." % (vuid_parts[-2]))
-                    print ("   replace '### ADD New implicit param mappings above this line' line with \"'%s' : %d,\"" % (vuid_parts[-2], len(implicit_param_map)))
-                    implicit_param_map[vuid_parts[-2]] = len(implicit_param_map)
-                    #imp_param_update = True
-                    sys.exit(1)
-                uniqueid = uniqueid + (param_id << IMPLICIT_PARAM_SHIFT) + (implicit_type_map[vuid_parts[-1]] << IMPLICIT_TYPE_SHIFT) + implicit_bit0
-            else: # No parameter so that field is 0
-                uniqueid = uniqueid + (implicit_type_map[vuid_parts[-1]] << IMPLICIT_TYPE_SHIFT) + implicit_bit0
-#    if uniqueid in uniqueid_set:
-#        print ("ERROR: Uniqueid %d for string id %s is a duplicate!" % (uniqueid, vuid_string))
-#        print (" TODO: Figure out what caused the dupe and fix it")
-        #sys.exit()
-    # print ("Storing uniqueid %d for unique string %s" % (uniqueid, vuid_string))
-    uniqueid_set.add(uniqueid)
-#    if func_struct_update:
-#        print ("func_struct_id_map updated, here's new structure")
-#        print ("func_struct_id_map = {")
-#        fs_id = 0
-#        for fs in sorted(func_struct_id_map):
-#            print ("'%s' : %d," % (fs, fs_id))
-#            fs_id = fs_id + 1
-#        print ("### ADD New func/struct mappings above this line")
-#        print ("}")
-#    if imp_param_update:
-#        print ("implicit_param_map updated, here's new structure")
-#        print ("implicit_param_map = {")
-#        ip_id = 0
-#        for ip in sorted(implicit_param_map):
-#            print ("'%s' : %d," % (ip, ip_id))
-#            ip_id = ip_id + 1
-#        print ("### ADD New implicit param mappings above this line")
-#        print ("}")
-
-    return uniqueid