diff options
| author | Mark Lobodzinski <mark@lunarg.com> | 2018-04-12 09:19:17 -0600 |
|---|---|---|
| committer | Mark Lobodzinski <mark@lunarg.com> | 2018-05-11 20:11:02 -0600 |
| commit | 4ef18fc1d4fdfe93970b4d9a558226e254d65a69 (patch) | |
| tree | 5f19e4ce51b8113dfe88c4fa811eedd1aae39990 /scripts | |
| parent | 749319c818674839d56039ba3cdc830b08a0e713 (diff) | |
| download | usermoji-4ef18fc1d4fdfe93970b4d9a558226e254d65a69.tar.xz | |
repo: Delete unused code generators
Change-Id: I1ef619a117c6ec9c2befe0458eb8502894ecff6c
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/dispatch_table_helper_generator.py | 238 | ||||
| -rw-r--r-- | scripts/helper_file_generator.py | 1243 | ||||
| -rw-r--r-- | scripts/loader_extension_generator.py | 1494 | ||||
| -rw-r--r-- | scripts/object_tracker_generator.py | 995 | ||||
| -rw-r--r-- | scripts/parameter_validation_generator.py | 1242 | ||||
| -rw-r--r-- | scripts/spec.py | 335 | ||||
| -rw-r--r-- | scripts/threading_generator.py | 458 | ||||
| -rw-r--r-- | scripts/unique_objects_generator.py | 922 | ||||
| -rw-r--r-- | scripts/validusage.json | 18392 | ||||
| -rwxr-xr-x | scripts/vk_validation_stats.py | 454 | ||||
| -rw-r--r-- | scripts/vuid_mapping.py | 1239 |
11 files changed, 0 insertions, 27012 deletions
diff --git a/scripts/dispatch_table_helper_generator.py b/scripts/dispatch_table_helper_generator.py deleted file mode 100644 index fba25e55..00000000 --- a/scripts/dispatch_table_helper_generator.py +++ /dev/null @@ -1,238 +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 - self.alignFuncParam = alignFuncParam -# -# 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 - self.dev_ext_stub_list = [] # List of stub functions for device extension functions - self.device_extension_list = [] # List of device extension functions - self.extension_type = '' - # - # 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') - - for stub in self.dev_ext_stub_list: - write(stub, file=self.outFile) - write("\n\n", file=self.outFile) - 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) - self.extension_type = interface.get('type') - - # - # 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, cmdinfo) - - # - # Determine if this API should be ignored or added to the instance or device dispatch table - def AddCommandToDispatchList(self, name, handle_type, protect, cmdinfo): - 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)) - if "VK_VERSION" not in self.featureName and self.extension_type == 'device': - self.device_extension_list.append(name) - # Build up stub function - return_type = '' - decl = self.makeCDecls(cmdinfo.elem)[1] - if 'typedef VkResult' in decl: - return_type = 'return VK_SUCCESS;' - decl = decl.split('*PFN_vk')[1] - decl = decl.replace(')(', '(') - if return_type == '': - decl = 'static VKAPI_ATTR void VKAPI_CALL Stub' + decl - else: - decl = 'static VKAPI_ATTR VkResult VKAPI_CALL Stub' + decl - func_body = ' { ' + return_type + ' };' - decl = decl.replace (';', func_body) - if self.featureExtraProtect is not None: - self.dev_ext_stub_list.append('#ifdef %s' % self.featureExtraProtect) - self.dev_ext_stub_list.append(decl) - if self.featureExtraProtect is not None: - self.dev_ext_stub_list.append('#endif // %s' % 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[0] in self.device_extension_list: - stub_check = ' if (table->%s == nullptr) { table->%s = (PFN_%s)Stub%s; }\n' % (base_name, base_name, item[0], base_name) - table += stub_check - 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 c1b5176f..00000000 --- a/scripts/helper_file_generator.py +++ /dev/null @@ -1,1243 +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 - name = self.featureName - nameElem = interface[0][1] - name_define = nameElem.get('name') - if 'EXTENSION_NAME' not in name_define: - print("Error in vk.xml file -- extension name is not available") - requires = interface.get('requires') - if requires is not None: - required_extensions = requires.split(',') - else: - required_extensions = list() - info = { 'define': name_define, 'ifdef':self.featureExtraProtect, 'reqs':required_extensions } - if interface.get('type') == 'instance': - self.instance_extension_info[name] = info - else: - self.device_extension_info[name] = info - - # - # 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_fence_capabilities', - 'vk_khr_external_memory_capabilities', - 'vk_khr_external_semaphore_capabilities', - 'vk_khr_get_physical_device_properties_2', - ] - - V_1_0_device_extensions_promoted_to_core = [ - 'vk_khr_16bit_storage', - 'vk_khr_bind_memory_2', - 'vk_khr_dedicated_allocation', - 'vk_khr_descriptor_update_template', - 'vk_khr_device_group', - 'vk_khr_external_fence', - 'vk_khr_external_memory', - 'vk_khr_external_semaphore', - 'vk_khr_get_memory_requirements_2', - 'vk_khr_maintenance1', - 'vk_khr_maintenance2', - 'vk_khr_maintenance3', - 'vk_khr_multiview', - 'vk_khr_relaxed_block_layout', - 'vk_khr_sampler_ycbcr_conversion', - 'vk_khr_shader_draw_parameters', - 'vk_khr_storage_buffer_storage_class', - 'vk_khr_variable_pointers', - ] - - output = [ - '', - '#ifndef VK_EXTENSION_HELPER_H_', - '#define VK_EXTENSION_HELPER_H_', - '#include <string>', - '#include <unordered_map>', - '#include <utility>', - '', - '#include <vulkan/vulkan.h>', - ''] - - def guarded(ifdef, value): - if ifdef is not None: - return '\n'.join([ '#ifdef %s' % ifdef, value, '#endif' ]) - else: - return value - - for type in ['Instance', 'Device']: - struct_type = '%sExtensions' % type - if type == 'Instance': - extension_dict = self.instance_extension_info - promoted_ext_list = V_1_0_instance_extensions_promoted_to_core - struct_decl = 'struct %s {' % struct_type - instance_struct_type = struct_type - else: - extension_dict = self.device_extension_info - promoted_ext_list = V_1_0_device_extensions_promoted_to_core - struct_decl = 'struct %s : public %s {' % (struct_type, instance_struct_type) - - extension_items = sorted(extension_dict.items()) - - field_name = { ext_name: re.sub('_extension_name', '', info['define'].lower()) for ext_name, info in extension_items } - if type == 'Instance': - instance_field_name = field_name - instance_extension_dict = extension_dict - else: - # Get complete field name and extension data for both Instance and Device extensions - field_name.update(instance_field_name) - extension_dict = extension_dict.copy() # Don't modify the self.<dict> we're pointing to - extension_dict.update(instance_extension_dict) - - # Output the data member list - struct = [struct_decl] - struct.extend([ ' bool %s{false};' % field_name[ext_name] for ext_name, info in extension_items]) - - # Construct the extension information map -- mapping name to data member (field), and required extensions - # The map is contained within a static function member for portability reasons. - info_type = '%sInfo' % type - info_map_type = '%sMap' % info_type - req_type = '%sReq' % type - req_vec_type = '%sVec' % req_type - struct.extend([ - '', - ' struct %s {' % req_type, - ' const bool %s::* enabled;' % struct_type, - ' const char *name;', - ' };', - ' typedef std::vector<%s> %s;' % (req_type, req_vec_type), - ' struct %s {' % info_type, - ' %s(bool %s::* state_, const %s requires_): state(state_), requires(requires_) {}' % ( info_type, struct_type, req_vec_type), - ' bool %s::* state;' % struct_type, - ' %s requires;' % req_vec_type, - ' };', - '', - ' typedef std::unordered_map<std::string,%s> %s;' % (info_type, info_map_type), - ' static const %s &get_info(const char *name) {' %info_type, - ' static const %s info_map = {' % info_map_type ]) - - field_format = '&' + struct_type + '::%s' - req_format = '{' + field_format+ ', %s}' - req_indent = '\n ' - req_join = ',' + req_indent - info_format = (' std::make_pair(%s, ' + info_type + '(' + field_format + ', {%s})),') - def format_info(ext_name, info): - reqs = req_join.join([req_format % (field_name[req], extension_dict[req]['define']) for req in info['reqs']]) - return info_format % (info['define'], field_name[ext_name], '{%s}' % (req_indent + reqs) if reqs else '') - - struct.extend([guarded(info['ifdef'], format_info(ext_name, info)) for ext_name, info in extension_items]) - struct.extend([ - ' };', - '', - ' static const %s empty_info {nullptr, %s()};' % (info_type, req_vec_type), - ' %s::const_iterator info = info_map.find(name);' % info_map_type, - ' if ( info != info_map.cend()) {', - ' return info->second;', - ' }', - ' return empty_info;', - ' }', - '']) - - if type == 'Instance': - struct.extend([ - ' uint32_t NormalizeApiVersion(uint32_t specified_version) {', - ' uint32_t api_version = (specified_version < VK_API_VERSION_1_1) ? VK_API_VERSION_1_0 : VK_API_VERSION_1_1;', - ' return api_version;', - ' }', - '', - ' uint32_t InitFromInstanceCreateInfo(uint32_t requested_api_version, const VkInstanceCreateInfo *pCreateInfo) {']) - else: - struct.extend([ - ' %s() = default;' % struct_type, - ' %s(const %s& instance_ext) : %s(instance_ext) {}' % (struct_type, instance_struct_type, instance_struct_type), - '', - ' uint32_t InitFromDeviceCreateInfo(const %s *instance_extensions, uint32_t requested_api_version,' % instance_struct_type, - ' const VkDeviceCreateInfo *pCreateInfo) {', - ' // Initialize: this to defaults, base class fields to input.', - ' assert(instance_extensions);', - ' *this = %s(*instance_extensions);' % struct_type]) - - struct.extend([ - '', - ' static const std::vector<const char *> V_1_0_promoted_%s_extensions = {' % type.lower() ]) - struct.extend([' %s_EXTENSION_NAME,' % ext_name.upper() for ext_name in promoted_ext_list]) - struct.extend([ - ' };', - '', - ' // Initialize struct data, robust to invalid pCreateInfo', - ' if (pCreateInfo->ppEnabledExtensionNames) {', - ' for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) {', - ' if (!pCreateInfo->ppEnabledExtensionNames[i]) continue;', - ' auto info = get_info(pCreateInfo->ppEnabledExtensionNames[i]);', - ' if(info.state) this->*(info.state) = true;', - ' }', - ' }', - ' uint32_t api_version = NormalizeApiVersion(requested_api_version);', - ' if (api_version >= VK_API_VERSION_1_1) {', - ' for (auto promoted_ext : V_1_0_promoted_%s_extensions) {' % type.lower(), - ' auto info = get_info(promoted_ext);', - ' assert(info.state);', - ' if (info.state) this->*(info.state) = true;', - ' }', - ' }', - ' return api_version;', - ' }', - '};']) - - # Output reference lists of instance/device extension names - struct.extend(['', 'static const char * const k%sExtensionNames = ' % type]) - struct.extend([guarded(info['ifdef'], ' %s' % info['define']) for ext_name, info in extension_items]) - struct.extend([';', '']) - output.extend(struct) - - output.extend(['', '#endif // VK_EXTENSION_HELPER_H_']) - return '\n'.join(output) - # - # 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 d9f5564c..00000000 --- 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 9e0a3750..00000000 --- a/scripts/object_tracker_generator.py +++ /dev/null @@ -1,995 +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', - 'vkGetDisplayModePropertiesKHR', - 'vkGetPhysicalDeviceDisplayPropertiesKHR', - ] - # 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 44c65765..00000000 --- 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 3460cd73..00000000 --- a/scripts/spec.py +++ /dev/null @@ -1,335 +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': ''} - vuid_db_data = self.error_db_dict[error_enum] - # check if vuid is implemented but changed extension scope - if vuid_db_data['check_implemented'] == 'Y' and \ - vuid_db_data['ext'] != vuid_json_data['ext']: - # should not occur often, currently a hard error to force corrective action - print('ERROR: {}/{} is currently implemented and changed extension scope from "{}" to "{}"'.format( - vuid, error_enum, vuid_db_data['ext'], vuid_json_data['ext'])) - exit(1) - # update database entry with data from json file - 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 5cfb4d7b..00000000 --- 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 abe8df4b..00000000 --- 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 5fa09c95..00000000 --- a/scripts/validusage.json +++ /dev/null @@ -1,18392 +0,0 @@ -{ - "version info": { - "schema version": 2, - "api version": "1.1.74", - "comment": "from git branch: master commit: c51545d33f4fd791dc4109d0d338e79b572f6286", - "date": "2018-04-23 18:29:18Z" - }, - "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=\"#VkPhysicalDeviceDescriptorIndexingPropertiesEXT\">VkPhysicalDeviceDescriptorIndexingPropertiesEXT</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-buffer-01931", - "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-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-image-01932", - "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-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>." - }, - { - "vuid": "VUID-VkRenderPassCreateInfo-pNext-01926", - "text": " If the <code>pNext</code> chain includes an instance of <a href=\"#VkRenderPassInputAttachmentAspectCreateInfo\">VkRenderPassInputAttachmentAspectCreateInfo</a>, the <code>subpass</code> member of each element of its <code>pAspectReferences</code> member <strong class=\"purple\">must</strong> be less than <code>subpassCount</code>" - }, - { - "vuid": "VUID-VkRenderPassCreateInfo-pNext-01927", - "text": " If the <code>pNext</code> chain includes an instance of <a href=\"#VkRenderPassInputAttachmentAspectCreateInfo\">VkRenderPassInputAttachmentAspectCreateInfo</a>, the <code>inputAttachmentIndex</code> member of each element of its <code>pAspectReferences</code> member <strong class=\"purple\">must</strong> be less than the value of <code>inputAttachmentCount</code> in the member of <code>pSubpasses</code> identified by its <code>subpass</code> member" - } - ], - "(VK_VERSION_1_1,VK_KHR_multiview)": [ - { - "vuid": "VUID-VkRenderPassCreateInfo-pNext-01928", - "text": " If the <code>pNext</code> chain includes an instance of <a href=\"#VkRenderPassMultiviewCreateInfo\">VkRenderPassMultiviewCreateInfo</a>, and its <code>subpassCount</code> member is not zero, that member <strong class=\"purple\">must</strong> be equal to the value of <code>subpassCount</code>" - }, - { - "vuid": "VUID-VkRenderPassCreateInfo-pNext-01929", - "text": " If the <code>pNext</code> chain includes an instance of <a href=\"#VkRenderPassMultiviewCreateInfo\">VkRenderPassMultiviewCreateInfo</a>, if its <code>dependencyCount</code> member is not zero, it <strong class=\"purple\">must</strong> be equal to <code>dependencyCount</code>" - }, - { - "vuid": "VUID-VkRenderPassCreateInfo-pNext-01930", - "text": " If the <code>pNext</code> chain includes an instance of <a href=\"#VkRenderPassMultiviewCreateInfo\">VkRenderPassMultiviewCreateInfo</a>, for each non-zero element of <code>pViewOffsets</code>, the <code>srcSubpass</code> and <code>dstSubpass</code> members of <code>pDependencies</code> at the same index <strong class=\"purple\">must</strong> not be equal" - } - ] - }, - "VkRenderPassMultiviewCreateInfo": { - "(VK_VERSION_1_1,VK_KHR_multiview)": [ - { - "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-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-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-layerCount-01934", - "text": " The <code>layerCount</code> member of each element of <code>pRects</code> <strong class=\"purple\">must</strong> not be <code>0</code>" - }, - { - "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": " <code>srcBuffer</code> <strong class=\"purple\">must</strong> be large enough to contain all buffer locations that are accessed according to &amp;lt;&amp;lt;copies-buffers-images-addressing,Buffer and Image Addressing&amp;gt;&amp;gt;, for each element of <code>pRegions</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": " <code>dstBuffer</code> <strong class=\"purple\">must</strong> be large enough to contain all buffer locations that are accessed according to &amp;lt;&amp;lt;copies-buffers-images-addressing,Buffer and Image Addressing&amp;gt;&amp;gt;, for each element of <code>pRegions</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-01933", - "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 non-retired swapchain associated with native window referred to by <code>surface</code>" - }, - { - "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 05b91256..00000000 --- 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 849ddb47..00000000 --- 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 |
