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;lt;&amp;lt;([^&]*,\\s*|)(.*?)&amp;gt;&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;lt;&amp;lt;extended-functionality-extensions-dependencies, required extensions&amp;gt;&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;lt;&amp;lt;extended-functionality-extensions-dependencies, required extensions&amp;gt;&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’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;lt;&amp;lt;commandbuffers-lifecycle, pending state&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, pending state&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, pending state&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, pending state&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording or pending state&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, initial state&amp;gt;&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;lt;&amp;lt;features-features-inheritedQueries,inherited queries&amp;gt;&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;lt;&amp;lt;features-features-inheritedQueries,inherited queries&amp;gt;&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;lt;&amp;lt;features-features-pipelineStatisticsQuery,pipeline statistics queries&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;queries-operation-active,active&amp;gt;&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;lt;&amp;lt;synchronization-pipeline-stages-supported, table of supported pipeline stages&amp;gt;&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;lt;&amp;lt;synchronization-semaphores-signaling, semaphore signal operations&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, pending or executable state&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, pending state&amp;gt;&amp;gt;."
- },
- {
- "vuid": "VUID-vkQueueSubmit-pCommandBuffers-00072",
- "text": " Any &amp;lt;&amp;lt;commandbuffers-secondary, secondary command buffers recorded&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, pending or executable state&amp;gt;&amp;gt;."
- },
- {
- "vuid": "VUID-vkQueueSubmit-pCommandBuffers-00073",
- "text": " If any &amp;lt;&amp;lt;commandbuffers-secondary, secondary command buffers recorded&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, pending state&amp;gt;&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;lt;&amp;lt;features-features-geometryShader,geometry shaders&amp;gt;&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;lt;&amp;lt;features-features-tessellationShader,tessellation shaders&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, pending or executable state&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, pending state&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, pending state&amp;gt;&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;lt;&amp;lt;renderpass-compatibility,compatible&amp;gt;&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;lt;&amp;lt;features-features-inheritedQueries,inherited queries&amp;gt;&amp;gt; feature is not enabled, <code>commandBuffer</code> <strong class=\"purple\">must</strong> not have any queries &amp;lt;&amp;lt;queries-operation-active,active&amp;gt;&amp;gt;"
- },
- {
- "vuid": "VUID-vkCmdExecuteCommands-commandBuffer-00102",
- "text": " If <code>commandBuffer</code> has a <code>VK_QUERY_TYPE_OCCLUSION</code> query &amp;lt;&amp;lt;queries-operation-active,active&amp;gt;&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;lt;&amp;lt;queries-operation-active,active&amp;gt;&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;lt;&amp;lt;queries-operation-active,active&amp;gt;&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;lt;&amp;lt;queries-operation-active,active&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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>’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;lt;&amp;lt;synchronization-fences-importing,Importing Fence Payloads&amp;gt;&amp;gt; unless that imported payload’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;lt;&amp;lt;synchronization-fences-signaling,fence signal operation&amp;gt;&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>’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;lt;&amp;lt;synchronization-fences-signaling,fence signal operation&amp;gt;&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;lt;&amp;lt;synchronization-fences-importing,Importing Fence Payloads&amp;gt;&amp;gt; unless that imported payload’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;lt;&amp;lt;devsandqueues-submission, queue submission&amp;gt;&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;lt;&amp;lt;synchronization-fence-handletypes-win32, Handle Types Supported by VkImportFenceWin32HandleInfoKHR&amp;gt;&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;lt;&amp;lt;synchronization-fence-handletypes-fd, Handle Types Supported by VkImportFenceFdInfoKHR&amp;gt;&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;lt;&amp;lt;external-fence-handle-types-compatibility,external fence handle types compatibility&amp;gt;&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>’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;lt;&amp;lt;synchronization-semaphores-importing,Importing Semaphore Payloads&amp;gt;&amp;gt; unless that imported payload’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;lt;&amp;lt;synchronization-semaphores-importing,Importing Semaphore Payloads&amp;gt;&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;lt;&amp;lt;synchronization-semaphores-signaling,semaphore signal operation&amp;gt;&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>’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;lt;&amp;lt;synchronization-semaphores-importing,Importing Semaphore Payloads&amp;gt;&amp;gt; unless that imported payload’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;lt;&amp;lt;synchronization-semaphores-importing,Importing Semaphore Payloads&amp;gt;&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;lt;&amp;lt;synchronization-semaphores-signaling,semaphore signal operation&amp;gt;&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;lt;&amp;lt;synchronization-semaphore-handletypes-win32,Handle Types Supported by VkImportSemaphoreWin32HandleInfoKHR&amp;gt;&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;lt;&amp;lt;synchronization-semaphore-handletypes-fd,Handle Types Supported by VkImportSemaphoreFdInfoKHR&amp;gt;&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;lt;&amp;lt;external-semaphore-handle-types-compatibility,external semaphore handle types compatibility&amp;gt;&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;lt;&amp;lt;features-features-geometryShader,geometry shaders&amp;gt;&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;lt;&amp;lt;features-features-tessellationShader,tessellation shaders&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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>’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;lt;&amp;lt;features-features-geometryShader,geometry shaders&amp;gt;&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;lt;&amp;lt;features-features-tessellationShader,tessellation shaders&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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>’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;lt;&amp;lt;features-features-geometryShader,geometry shaders&amp;gt;&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;lt;&amp;lt;features-features-geometryShader,geometry shaders&amp;gt;&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;lt;&amp;lt;features-features-tessellationShader,tessellation shaders&amp;gt;&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;lt;&amp;lt;features-features-tessellationShader,tessellation shaders&amp;gt;&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;lt;&amp;lt;synchronization-pipeline-stages-supported, table of supported pipeline stages&amp;gt;&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;lt;&amp;lt;synchronization-access-types-supported, table of supported access types&amp;gt;&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;lt;&amp;lt;synchronization-access-types-supported, table of supported access types&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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>’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;lt;&amp;lt;features-features-geometryShader,geometry shaders&amp;gt;&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;lt;&amp;lt;features-features-geometryShader,geometry shaders&amp;gt;&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;lt;&amp;lt;features-features-tessellationShader,tessellation shaders&amp;gt;&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;lt;&amp;lt;features-features-tessellationShader,tessellation shaders&amp;gt;&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;lt;&amp;lt;synchronization-pipeline-stages-supported, table of supported pipeline stages&amp;gt;&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;lt;&amp;lt;synchronization-access-types-supported, table of supported access types&amp;gt;&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;lt;&amp;lt;synchronization-access-types-supported, table of supported access types&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;devsandqueues-queueprops&amp;gt;&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;lt;&amp;lt;synchronization-queue-transfers&amp;gt;&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;lt;&amp;lt;synchronization-queue-transfers&amp;gt;&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;lt;&amp;lt;synchronization-queue-transfers&amp;gt;&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> + <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> + <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;lt;&amp;lt;devsandqueues-queueprops&amp;gt;&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;lt;&amp;lt;synchronization-queue-transfers&amp;gt;&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;lt;&amp;lt;synchronization-queue-transfers&amp;gt;&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;lt;&amp;lt;synchronization-queue-transfers&amp;gt;&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;lt;&amp;lt;synchronization-pipeline-stages-types, pipeline&amp;gt;&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;lt;&amp;lt;synchronization-pipeline-stages-types, pipeline&amp;gt;&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;lt;&amp;lt;features-features-geometryShader,geometry shaders&amp;gt;&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;lt;&amp;lt;features-features-geometryShader,geometry shaders&amp;gt;&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;lt;&amp;lt;features-features-tessellationShader,tessellation shaders&amp;gt;&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;lt;&amp;lt;features-features-tessellationShader,tessellation shaders&amp;gt;&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;lt;&amp;lt;synchronization-framebuffer-regions,framebuffer-space stages&amp;gt;&amp;gt;, the &amp;lt;&amp;lt;synchronization-pipeline-stages-order, logically latest&amp;gt;&amp;gt; pipeline stage in <code>srcStageMask</code> <strong class=\"purple\">must</strong> be &amp;lt;&amp;lt;synchronization-pipeline-stages-order, logically earlier&amp;gt;&amp;gt; than or equal to the &amp;lt;&amp;lt;synchronization-pipeline-stages-order, logically earliest&amp;gt;&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;lt;&amp;lt;synchronization-access-types-supported, table of supported access types&amp;gt;&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;lt;&amp;lt;synchronization-access-types-supported, table of supported access types&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;renderpass-compatibility,compatible&amp;gt;&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’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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;spirvenv-module-validation, Capabilities&amp;gt;&amp;gt; section of the &amp;lt;&amp;lt;spirvenv-capabilities,SPIR-V Environment&amp;gt;&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;lt;&amp;lt;spirvenv-capabilities-table,SPIR-V Environment&amp;gt;&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;lt;&amp;lt;spirv-spec,Khronos SPIR-V Specification&amp;gt;&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;lt;&amp;lt;spirvenv-module-validation, Validation Rules within a Module&amp;gt;&amp;gt; section of the &amp;lt;&amp;lt;spirvenv-capabilities,SPIR-V Environment&amp;gt;&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;lt;&amp;lt;spirvenv-module-validation, Validation Rules within a Module&amp;gt;&amp;gt; section of the &amp;lt;&amp;lt;spirvenv-capabilities,SPIR-V Environment&amp;gt;&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’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;lt;&amp;lt;interfaces,Shader Interfaces&amp;gt;&amp;gt; chapter"
- },
- {
- "vuid": "VUID-VkComputePipelineCreateInfo-layout-00703",
- "text": " <code>layout</code> <strong class=\"purple\">must</strong> be &amp;lt;&amp;lt;descriptorsets-pipelinelayout-consistency,consistent&amp;gt;&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;lt;&amp;lt;features-features-geometryShader,geometry shaders&amp;gt;&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;lt;&amp;lt;features-features-tessellationShader,tessellation shaders&amp;gt;&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’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;lt;&amp;lt;shaders-geometry-execution, compatible&amp;gt;&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;lt;&amp;lt;shaders-geometry-execution, compatible&amp;gt;&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;lt;&amp;lt;interfaces,Shader Interfaces&amp;gt;&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;lt;&amp;lt;descriptorsets-pipelinelayout-consistency,consistent&amp;gt;&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;lt;&amp;lt;renderpass-noattachments, zero-attachment subpass&amp;gt;&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;lt;&amp;lt;features-features-variableMultisampleRate,variable multisample rate&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;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;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;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;lt;&amp;lt;external-memory-handle-types-compatibility&amp;gt;&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;lt;&amp;lt;external-memory-handle-types-compatibility,external memory handle types compatibility&amp;gt;&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;lt;&amp;lt;features-features-sparseBinding,sparse bindings&amp;gt;&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;lt;&amp;lt;features-features-sparseResidencyBuffer,sparse buffer residency&amp;gt;&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;lt;&amp;lt;features-features-sparseResidencyAliased,sparse aliased residency&amp;gt;&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;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’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} + 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;lt;&amp;lt;features-features-shaderStorageImageMultisample,multisampled storage images&amp;gt;&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;lt;&amp;lt;features-features-sparseBinding,sparse bindings&amp;gt;&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;lt;&amp;lt;features-features-sparseResidencyAliased,sparse aliased residency&amp;gt;&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;lt;&amp;lt;features-features-sparseResidencyImage2D,sparse residency for 2D images&amp;gt;&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;lt;&amp;lt;features-features-sparseResidencyImage3D,sparse residency for 3D images&amp;gt;&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;lt;&amp;lt;features-features-sparseResidency2Samples,sparse residency for images with 2 samples&amp;gt;&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;lt;&amp;lt;features-features-sparseResidency4Samples,sparse residency for images with 4 samples&amp;gt;&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;lt;&amp;lt;features-features-sparseResidency8Samples,sparse residency for images with 8 samples&amp;gt;&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;lt;&amp;lt;features-features-sparseResidency16Samples,sparse residency for images with 16 samples&amp;gt;&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;lt;&amp;lt;appendix-compressedtex-bc,block-compressed image format&amp;gt;&amp;gt;, an &amp;lt;&amp;lt;appendix-compressedtex-etc2, ETC compressed image format&amp;gt;&amp;gt;, or an &amp;lt;&amp;lt;appendix-compressedtex-astc, ASTC compressed image format&amp;gt;&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;lt;&amp;lt;features-formats-requiring-sampler-ycbcr-conversion&amp;gt;&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;lt;&amp;lt;swapchain-wsi-image-create-info, implied image creation parameters&amp;gt;&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;lt;&amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar format&amp;gt;&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;lt;&amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar format&amp;gt;&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;lt;&amp;lt;features-features-imageCubeArray,image cubemap arrays&amp;gt;&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> + <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;lt;&amp;lt;features-formats-compatibility-classes,Format Compatibility Classes&amp;gt;&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;lt;&amp;lt;resources-image-views-compatibility,compatibility table&amp;gt;&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> + <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> + <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> + <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;lt;&amp;lt;features-formats-compatibility-classes,Format Compatibility Classes&amp;gt;&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;lt;&amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar&amp;gt;&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;lt;&amp;lt;features-formats-compatibility-classes,Format Compatibility Classes&amp;gt;&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;lt;&amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar&amp;gt;&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;lt;&amp;lt;features-formats-compatibility-classes,Format Compatibility Classes&amp;gt;&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;lt;&amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar&amp;gt;&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;lt;&amp;lt;features-formats-compatible-planes&amp;gt;&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;lt;&amp;lt;memory-external-android-hardware-buffer-external-formats,external format&amp;gt;&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>’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>’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>’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 “<code>_2PLANE</code>” 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 “<code>_3PLANE</code>” 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;lt;&amp;lt;features-features-samplerAnisotropy,anisotropic sampling&amp;gt;&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;lt;&amp;lt;samplers-YCbCr-conversion,sampler Y’C<sub>B</sub>C<sub>R</sub> conversion&amp;gt;&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’C<sub>B</sub>C<sub>R</sub> conversion’s <code>chromaFilter</code>"
- },
- {
- "vuid": "VUID-VkSamplerCreateInfo-addressModeU-01646",
- "text": " If &amp;lt;&amp;lt;samplers-YCbCr-conversion,sampler Y’C<sub>B</sub>C<sub>R</sub> conversion&amp;gt;&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;lt;&amp;lt;samplers-YCbCr-conversion,sampler Y’C<sub>B</sub>C<sub>R</sub> conversion&amp;gt;&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;lt;&amp;lt;features-features-sampler-YCbCr-conversion, sampler Y’C<sub>B</sub>C<sub>R</sub> conversion feature&amp;gt;&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;lt;&amp;lt;textures-conversion-to-rgba,conversion to RGBA&amp;gt;&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’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;lt;&amp;lt;commandbuffers-lifecycle, pending state&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle,pending state&amp;gt;&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>’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;lt;&amp;lt;descriptorsets-updates-consecutive&amp;gt;&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;lt;&amp;lt;samplers-YCbCr-conversion,sampler Y’C<sub>B</sub>C<sub>R</sub> conversion&amp;gt;&amp;gt;:"
- },
- {
- "vuid": "VUID-VkDescriptorImageInfo-sampler-01564",
- "text": " If <code>sampler</code> is used and does not enable &amp;lt;&amp;lt;samplers-YCbCr-conversion, sampler Y’C<sub>B</sub>C<sub>R</sub> conversion&amp;gt;&amp;gt; and the <a href=\"#VkFormat\">VkFormat</a> of the image is a &amp;lt;&amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar format&amp;gt;&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;lt;&amp;lt;descriptorsets-updates-consecutive&amp;gt;&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;lt;&amp;lt;descriptorsets-updates-consecutive&amp;gt;&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;lt;&amp;lt;descriptorsets-updates-consecutive&amp;gt;&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>’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>’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>’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>’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;lt;&amp;lt;descriptorsets-updates-consecutive&amp;gt;&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>’s parent <code>VkCommandPool</code>’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’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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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>’s parent <code>VkCommandPool</code>’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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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>’s parent <code>VkCommandPool</code>’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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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’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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;features-features-pipelineStatisticsQuery,pipeline statistics queries&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;queries-operation-active,active&amp;gt;&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;lt;&amp;lt;features-features-occlusionQueryPrecise,precise occlusion queries&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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’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;lt;&amp;lt;queries-operation-active,active&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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’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;lt;&amp;lt;queries-operation-memorylayout,here&amp;gt;&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;lt;&amp;lt;queries-operation-memorylayout,here&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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’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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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’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> + <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> + <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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;features-formats-requiring-sampler-ycbcr-conversion&amp;gt;&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> + <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> + <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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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> + <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> + <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>’s command pool’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>’s command pool’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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;copies-images-format-compatibility, below&amp;gt;&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;lt;&amp;lt;features-formats-requiring-sampler-ycbcr-conversion,<em>multi-planar format</em>&amp;gt;&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;lt;&amp;lt;copies-images-format-compatibility, below&amp;gt;&amp;gt;"
- },
- {
- "vuid": "VUID-vkCmdCopyImage-None-01549",
- "text": " In a copy to or from a plane of a &amp;lt;&amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar image&amp;gt;&amp;gt;, the <a href=\"#VkFormat\">VkFormat</a> of the image and plane <strong class=\"purple\">must</strong> be compatible according to &amp;lt;&amp;lt;features-formats-compatible-planes,the description of compatible planes&amp;gt;&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;lt;&amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar format&amp;gt;&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’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’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> + <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’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> + <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’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> + <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’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’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> + <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’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> + <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’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> + <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’s <code>srcImage</code> nor the calling command’s <code>dstImage</code> has a &amp;lt;&amp;lt;features-formats-requiring-sampler-ycbcr-conversion, multi-planar image format&amp;gt;&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’s <code>srcImage</code> has a <a href=\"#VkFormat\">VkFormat</a> with &amp;lt;&amp;lt;features-formats-requiring-sampler-ycbcr-conversion,two planes&amp;gt;&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’s <code>srcImage</code> has a <a href=\"#VkFormat\">VkFormat</a> with &amp;lt;&amp;lt;features-formats-requiring-sampler-ycbcr-conversion,three planes&amp;gt;&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’s <code>dstImage</code> has a <a href=\"#VkFormat\">VkFormat</a> with &amp;lt;&amp;lt;features-formats-requiring-sampler-ycbcr-conversion,two planes&amp;gt;&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’s <code>dstImage</code> has a <a href=\"#VkFormat\">VkFormat</a> with &amp;lt;&amp;lt;features-formats-requiring-sampler-ycbcr-conversion,three planes&amp;gt;&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’s <code>srcImage</code> has a &amp;lt;&amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar image format&amp;gt;&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’s <code>dstImage</code> has a &amp;lt;&amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar image format&amp;gt;&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’s <code>srcImage</code> is a compressed image, or a <em>single-plane</em>, “<code>_422</code>” 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’s <code>srcImage</code> is a compressed image, or a <em>single-plane</em>, “<code>_422</code>” 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> + <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’s <code>srcImage</code> is a compressed image, or a <em>single-plane</em>, “<code>_422</code>” 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> + <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’s <code>srcImage</code> is a compressed image, or a <em>single-plane</em>, “<code>_422</code>” 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> + <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’s <code>dstImage</code> is a compressed format image, or a <em>single-plane</em>, “<code>_422</code>” 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’s <code>dstImage</code> is a compressed format image, or a <em>single-plane</em>, “<code>_422</code>” 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> + <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’s <code>dstImage</code> is a compressed format image, or a <em>single-plane</em>, “<code>_422</code>” 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> + <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’s <code>dstImage</code> is a compressed format image, or a <em>single-plane</em>, “<code>_422</code>” 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> + <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’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’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’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’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’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’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’s <code>dstImage</code>"
- },
- {
- "vuid": "VUID-VkImageCopy-srcOffset-00144",
- "text": " <code>srcOffset.x</code> and <span class=\"eq\">(<code>extent.width</code> + <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> + <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’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> + <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’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’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’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’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> + <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> + <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’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> + <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> + <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>’s command pool’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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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> + <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>’s command pool’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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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’s <code>VkImage</code> parameter’s format is not a depth/stencil format, then <code>bufferOffset</code> <strong class=\"purple\">must</strong> be a multiple of the format’s element size"
- },
- {
- "vuid": "VUID-VkBufferImageCopy-bufferRowLength-00203",
- "text": " If the calling command’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’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’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’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’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> + <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’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> + <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’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> + <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’s <code>VkImage</code> parameter’s format is not a depth/stencil format or a &amp;lt;&amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar format&amp;gt;&amp;gt;, then <code>bufferOffset</code> <strong class=\"purple\">must</strong> be a multiple of the format’s element size"
- },
- {
- "vuid": "VUID-VkBufferImageCopy-bufferOffset-01559",
- "text": " If the calling command’s <code>VkImage</code> parameter’s format is a &amp;lt;&amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar format&amp;gt;&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;lt;&amp;lt;features-formats-compatible-planes&amp;gt;&amp;gt;"
- },
- {
- "vuid": "VUID-VkBufferImageCopy-None-01735",
- "text": " If the calling command’s <code>VkImage</code> parameter is a compressed image, or a <em>single-plane</em>, “<code>_422</code>” 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’s <code>VkImage</code> parameter is a compressed image, or a <em>single-plane</em>, “<code>_422</code>” 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’s <code>VkImage</code> parameter is a compressed image, or a <em>single-plane</em>, “<code>_422</code>” 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’s <code>VkImage</code> parameter is a compressed image, or a <em>single-plane</em>, “<code>_422</code>” 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’s <code>VkImage</code> parameter is a compressed image, or a <em>single-plane</em>, “<code>_422</code>” 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> + <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’s <code>VkImage</code> parameter is a compressed image, or a <em>single-plane</em>, “<code>_422</code>” 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> + <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’s <code>VkImage</code> parameter is a compressed image, or a <em>single-plane</em>, “<code>_422</code>” 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> + <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’s <code>VkImage</code> parameter’s format is a &amp;lt;&amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar format&amp;gt;&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> + <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 + <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’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 + <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’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’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’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> + <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> + <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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;features-formats-requiring-sampler-ycbcr-conversion&amp;gt;&amp;gt;"
- },
- {
- "vuid": "VUID-vkCmdBlitImage-dstImage-01562",
- "text": " <code>dstImage</code> <strong class=\"purple\">must</strong> not use a format listed in &amp;lt;&amp;lt;features-formats-requiring-sampler-ycbcr-conversion&amp;gt;&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’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’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’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’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’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’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’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> + <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> + <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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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’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> + <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> + <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’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> + <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’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> + <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> + <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’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> + <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’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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;features-features-geometryShader,geometry shaders&amp;gt;&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;lt;&amp;lt;features-features-tessellationShader,tessellation shaders&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;renderpass-compatibility,compatible&amp;gt;&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;lt;&amp;lt;descriptorsets-compatibility&amp;gt;&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;lt;&amp;lt;descriptorsets-compatibility&amp;gt;&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’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;lt;&amp;lt;fxvertex-input&amp;gt;&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;lt;&amp;lt;features-features-robustBufferAccess,robust buffer access&amp;gt;&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;lt;&amp;lt;features-features-robustBufferAccess,robust buffer access&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;renderpass-compatibility,compatible&amp;gt;&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;lt;&amp;lt;descriptorsets-compatibility&amp;gt;&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;lt;&amp;lt;descriptorsets-compatibility&amp;gt;&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’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;lt;&amp;lt;fxvertex-input&amp;gt;&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> + <code>indexCount</code>) + <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;lt;&amp;lt;features-features-robustBufferAccess,robust buffer access&amp;gt;&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;lt;&amp;lt;features-features-robustBufferAccess,robust buffer access&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;features-features-drawIndirectFirstInstance,drawIndirectFirstInstance&amp;gt;&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;lt;&amp;lt;renderpass-compatibility,compatible&amp;gt;&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;lt;&amp;lt;descriptorsets-compatibility&amp;gt;&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;lt;&amp;lt;descriptorsets-compatibility&amp;gt;&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’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> + <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) + <code>offset</code> + <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;lt;&amp;lt;features-features-robustBufferAccess,robust buffer access&amp;gt;&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;lt;&amp;lt;features-features-robustBufferAccess,robust buffer access&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;fxvertex-input&amp;gt;&amp;gt;"
- },
- {
- "vuid": "VUID-VkDrawIndirectCommand-firstInstance-00501",
- "text": " If the &amp;lt;&amp;lt;features-features-drawIndirectFirstInstance,drawIndirectFirstInstance&amp;gt;&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) + <code>offset</code> + <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;lt;&amp;lt;features-features-drawIndirectFirstInstance,drawIndirectFirstInstance&amp;gt;&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;lt;&amp;lt;renderpass-compatibility,compatible&amp;gt;&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;lt;&amp;lt;descriptorsets-compatibility&amp;gt;&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;lt;&amp;lt;descriptorsets-compatibility&amp;gt;&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’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> + <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) + <code>offset</code> + <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;lt;&amp;lt;features-features-robustBufferAccess,robust buffer access&amp;gt;&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;lt;&amp;lt;features-features-robustBufferAccess,robust buffer access&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;features-features-drawIndirectFirstInstance,drawIndirectFirstInstance&amp;gt;&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;lt;&amp;lt;renderpass-compatibility,compatible&amp;gt;&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;lt;&amp;lt;descriptorsets-compatibility&amp;gt;&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;lt;&amp;lt;descriptorsets-compatibility&amp;gt;&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’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> + <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) + <code>offset</code> + <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;lt;&amp;lt;features-features-robustBufferAccess,robust buffer access&amp;gt;&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;lt;&amp;lt;features-features-robustBufferAccess,robust buffer access&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;fxvertex-input&amp;gt;&amp;gt;"
- },
- {
- "vuid": "VUID-VkDrawIndexedIndirectCommand-indexSize-00553",
- "text": " <span class=\"eq\">(<code>indexSize</code> * (<code>firstIndex</code> + <code>indexCount</code>) + <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;lt;&amp;lt;features-features-drawIndirectFirstInstance,drawIndirectFirstInstance&amp;gt;&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) + <code>offset</code> + <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;lt;&amp;lt;renderpass-compatibility,compatible&amp;gt;&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;lt;&amp;lt;descriptorsets-compatibility&amp;gt;&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;lt;&amp;lt;descriptorsets-compatibility&amp;gt;&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’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> + <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) + <code>offset</code> + <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;lt;&amp;lt;features-features-robustBufferAccess,robust buffer access&amp;gt;&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;lt;&amp;lt;features-features-robustBufferAccess,robust buffer access&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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> + <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> + <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> + <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;lt;&amp;lt;features-features-depthClamp,depth clamping&amp;gt;&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;lt;&amp;lt;features-features-fillModeNonSolid,non-solid fill modes&amp;gt;&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;lt;&amp;lt;features-features-fillModeNonSolid,non-solid fill modes&amp;gt;&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;lt;&amp;lt;features-features-sampleRateShading,sample rate shading&amp;gt;&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;lt;&amp;lt;features-features-alphaToOne,alpha to one&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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> + <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> + <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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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> + <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> + <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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;features-features-depthBounds,depth bounds testing&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;features-features-independentBlend,independent blending&amp;gt;&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;lt;&amp;lt;features-features-logicOp,logic operations&amp;gt;&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;lt;&amp;lt;features-features-dualSrcBlend,dual source blending&amp;gt;&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;lt;&amp;lt;features-features-dualSrcBlend,dual source blending&amp;gt;&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;lt;&amp;lt;features-features-dualSrcBlend,dual source blending&amp;gt;&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;lt;&amp;lt;features-features-dualSrcBlend,dual source blending&amp;gt;&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;lt;&amp;lt;framebuffer-blend-advanced,advanced blend operation&amp;gt;&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;lt;&amp;lt;framebuffer-blend-advanced,advanced blend operation&amp;gt;&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;lt;&amp;lt;framebuffer-blend-advanced,advanced blend operation&amp;gt;&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;lt;&amp;lt;framebuffer-blend-advanced,advanced blend operation&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;features-limits-advancedBlendNonPremultipliedSrcColor,non-premultiplied source color&amp;gt;&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;lt;&amp;lt;features-limits-advancedBlendNonPremultipliedDstColor,non-premultiplied destination color&amp;gt;&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;lt;&amp;lt;features-limits-advancedBlendCorrelatedOverlap,correlated overlap&amp;gt;&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;lt;&amp;lt;descriptorsets-compatibility&amp;gt;&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;lt;&amp;lt;descriptorsets-compatibility&amp;gt;&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;lt;&amp;lt;features-features-robustBufferAccess,robust buffer access&amp;gt;&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;lt;&amp;lt;features-features-robustBufferAccess,robust buffer access&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;descriptorsets-compatibility&amp;gt;&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;lt;&amp;lt;descriptorsets-compatibility&amp;gt;&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;lt;&amp;lt;features-features-robustBufferAccess,robust buffer access&amp;gt;&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;lt;&amp;lt;features-features-robustBufferAccess,robust buffer access&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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>’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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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>’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’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’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’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;lt;&amp;lt;resources-association&amp;gt;&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;lt;&amp;lt;features-features-sparseResidencyAliased,sparse aliased residency&amp;gt;&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’s <code>image</code>, as described in section &amp;lt;&amp;lt;resources-association&amp;gt;&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;lt;&amp;lt;resources-image-views&amp;gt;&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> + <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> + <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> + <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;lt;&amp;lt;synchronization-semaphores-signaling, semaphore signal operations&amp;gt;&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;lt;&amp;lt;wsi-display-surfaces,display surface&amp;gt;&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;lt;&amp;lt;synchronization-semaphores-signaling, semaphore signal operations&amp;gt;&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;lt;&amp;lt;debugging-object-types&amp;gt;&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;lt;&amp;lt;debugging-object-types&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;debug-report-object-types&amp;gt;&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;lt;&amp;lt;debug-report-object-types&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;commandbuffers-lifecycle, recording state&amp;gt;&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;lt;&amp;lt;debug-report-object-types&amp;gt;&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