blob: 1bd6b30464e60da62f85c9d6fb70aa51a1e94b3d [file] [log] [blame]
{
"version info": {
"schema version": 2,
"api version": "1.1.79",
"comment": "from git branch: master commit: ff9357a4bad5fa49b99b9d3f69d254e2a3f0f575",
"date": "2018-07-02 20:23:28Z"
},
"validation": {
"vkGetInstanceProcAddr": {
"core": [
{
"vuid": "VUID-vkGetInstanceProcAddr-instance-parameter",
"text": " If <code>instance</code> is not <code>NULL</code>, <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
},
{
"vuid": "VUID-vkGetInstanceProcAddr-pName-parameter",
"text": " <code>pName</code> <strong class=\"purple\">must</strong> be a null-terminated UTF-8 string"
}
]
},
"vkGetDeviceProcAddr": {
"core": [
{
"vuid": "VUID-vkGetDeviceProcAddr-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkGetDeviceProcAddr-pName-parameter",
"text": " <code>pName</code> <strong class=\"purple\">must</strong> be a null-terminated UTF-8 string"
}
]
},
"vkEnumerateInstanceVersion": {
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkEnumerateInstanceVersion-pApiVersion-parameter",
"text": " <code>pApiVersion</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
}
]
},
"vkCreateInstance": {
"core": [
{
"vuid": "VUID-vkCreateInstance-ppEnabledExtensionNames-01388",
"text": " All &amp;amp;lt;&amp;amp;lt;extended-functionality-extensions-dependencies, required extensions&amp;amp;gt;&amp;amp;gt; for each extension in the <a href=\"#VkInstanceCreateInfo\">VkInstanceCreateInfo</a>::<code>ppEnabledExtensionNames</code> list <strong class=\"purple\">must</strong> also be present in that list."
},
{
"vuid": "VUID-vkCreateInstance-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkInstanceCreateInfo</code> structure"
},
{
"vuid": "VUID-vkCreateInstance-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateInstance-pInstance-parameter",
"text": " <code>pInstance</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkInstance</code> handle"
}
]
},
"VkInstanceCreateInfo": {
"core": [
{
"vuid": "VUID-VkInstanceCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkInstanceCreateInfo-pNext-pNext",
"text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkDebugReportCallbackCreateInfoEXT\">VkDebugReportCallbackCreateInfoEXT</a>, <a href=\"#VkDebugUtilsMessengerCreateInfoEXT\">VkDebugUtilsMessengerCreateInfoEXT</a>, or <a href=\"#VkValidationFlagsEXT\">VkValidationFlagsEXT</a>"
},
{
"vuid": "VUID-VkInstanceCreateInfo-sType-unique",
"text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkInstanceCreateInfo-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkInstanceCreateInfo-pApplicationInfo-parameter",
"text": " If <code>pApplicationInfo</code> is not <code>NULL</code>, <code>pApplicationInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkApplicationInfo</code> structure"
},
{
"vuid": "VUID-VkInstanceCreateInfo-ppEnabledLayerNames-parameter",
"text": " If <code>enabledLayerCount</code> is not <code>0</code>, <code>ppEnabledLayerNames</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>enabledLayerCount</code> null-terminated UTF-8 strings"
},
{
"vuid": "VUID-VkInstanceCreateInfo-ppEnabledExtensionNames-parameter",
"text": " If <code>enabledExtensionCount</code> is not <code>0</code>, <code>ppEnabledExtensionNames</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>enabledExtensionCount</code> null-terminated UTF-8 strings"
}
]
},
"VkValidationFlagsEXT": {
"(VK_EXT_validation_flags)": [
{
"vuid": "VUID-VkValidationFlagsEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT</code>"
},
{
"vuid": "VUID-VkValidationFlagsEXT-pDisabledValidationChecks-parameter",
"text": " <code>pDisabledValidationChecks</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>disabledValidationCheckCount</code> <a href=\"#VkValidationCheckEXT\">VkValidationCheckEXT</a> values"
},
{
"vuid": "VUID-VkValidationFlagsEXT-disabledValidationCheckCount-arraylength",
"text": " <code>disabledValidationCheckCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"VkApplicationInfo": {
"core": [
{
"vuid": "VUID-VkApplicationInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_APPLICATION_INFO</code>"
},
{
"vuid": "VUID-VkApplicationInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkApplicationInfo-pApplicationName-parameter",
"text": " If <code>pApplicationName</code> is not <code>NULL</code>, <code>pApplicationName</code> <strong class=\"purple\">must</strong> be a null-terminated UTF-8 string"
},
{
"vuid": "VUID-VkApplicationInfo-pEngineName-parameter",
"text": " If <code>pEngineName</code> is not <code>NULL</code>, <code>pEngineName</code> <strong class=\"purple\">must</strong> be a null-terminated UTF-8 string"
}
]
},
"vkDestroyInstance": {
"core": [
{
"vuid": "VUID-vkDestroyInstance-instance-00629",
"text": " All child objects created using <code>instance</code> <strong class=\"purple\">must</strong> have been destroyed prior to destroying <code>instance</code>"
},
{
"vuid": "VUID-vkDestroyInstance-instance-00630",
"text": " If <code>VkAllocationCallbacks</code> were provided when <code>instance</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
},
{
"vuid": "VUID-vkDestroyInstance-instance-00631",
"text": " If no <code>VkAllocationCallbacks</code> were provided when <code>instance</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-vkDestroyInstance-instance-parameter",
"text": " If <code>instance</code> is not <code>NULL</code>, <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
},
{
"vuid": "VUID-vkDestroyInstance-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
}
]
},
"vkEnumeratePhysicalDevices": {
"core": [
{
"vuid": "VUID-vkEnumeratePhysicalDevices-instance-parameter",
"text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
},
{
"vuid": "VUID-vkEnumeratePhysicalDevices-pPhysicalDeviceCount-parameter",
"text": " <code>pPhysicalDeviceCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
},
{
"vuid": "VUID-vkEnumeratePhysicalDevices-pPhysicalDevices-parameter",
"text": " If the value referenced by <code>pPhysicalDeviceCount</code> is not <code>0</code>, and <code>pPhysicalDevices</code> is not <code>NULL</code>, <code>pPhysicalDevices</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pPhysicalDeviceCount</code> <code>VkPhysicalDevice</code> handles"
}
]
},
"vkGetPhysicalDeviceProperties": {
"core": [
{
"vuid": "VUID-vkGetPhysicalDeviceProperties-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceProperties-pProperties-parameter",
"text": " <code>pProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkPhysicalDeviceProperties</code> structure"
}
]
},
"vkGetPhysicalDeviceProperties2": {
"(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
{
"vuid": "VUID-vkGetPhysicalDeviceProperties2-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceProperties2-pProperties-parameter",
"text": " <code>pProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkPhysicalDeviceProperties2</code> structure"
}
]
},
"VkPhysicalDeviceProperties2": {
"(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
{
"vuid": "VUID-VkPhysicalDeviceProperties2-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2</code>"
},
{
"vuid": "VUID-VkPhysicalDeviceProperties2-pNext-pNext",
"text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT\">VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT</a>, <a href=\"#VkPhysicalDeviceConservativeRasterizationPropertiesEXT\">VkPhysicalDeviceConservativeRasterizationPropertiesEXT</a>, <a href=\"#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;amp;lt;&amp;amp;lt;extended-functionality-extensions-dependencies, required extensions&amp;amp;gt;&amp;amp;gt; for each extension in the <a href=\"#VkDeviceCreateInfo\">VkDeviceCreateInfo</a>::<code>ppEnabledExtensionNames</code> list <strong class=\"purple\">must</strong> also be present in that list."
},
{
"vuid": "VUID-vkCreateDevice-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkCreateDevice-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDeviceCreateInfo</code> structure"
},
{
"vuid": "VUID-vkCreateDevice-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateDevice-pDevice-parameter",
"text": " <code>pDevice</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkDevice</code> handle"
}
]
},
"VkDeviceCreateInfo": {
"core": [
{
"vuid": "VUID-VkDeviceCreateInfo-queueFamilyIndex-00372",
"text": ""
},
{
"vuid": "VUID-VkDeviceCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkDeviceCreateInfo-pNext-pNext",
"text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkDeviceGroupDeviceCreateInfo\">VkDeviceGroupDeviceCreateInfo</a>, <a href=\"#VkPhysicalDevice16BitStorageFeatures\">VkPhysicalDevice16BitStorageFeatures</a>, <a href=\"#VkPhysicalDeviceDescriptorIndexingFeaturesEXT\">VkPhysicalDeviceDescriptorIndexingFeaturesEXT</a>, <a href=\"#VkPhysicalDeviceFeatures2\">VkPhysicalDeviceFeatures2</a>, <a href=\"#VkPhysicalDeviceMultiviewFeatures\">VkPhysicalDeviceMultiviewFeatures</a>, <a href=\"#VkPhysicalDeviceProtectedMemoryFeatures\">VkPhysicalDeviceProtectedMemoryFeatures</a>, <a href=\"#VkPhysicalDeviceSamplerYcbcrConversionFeatures\">VkPhysicalDeviceSamplerYcbcrConversionFeatures</a>, or <a href=\"#VkPhysicalDeviceVariablePointerFeatures\">VkPhysicalDeviceVariablePointerFeatures</a>"
},
{
"vuid": "VUID-VkDeviceCreateInfo-sType-unique",
"text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkDeviceCreateInfo-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkDeviceCreateInfo-pQueueCreateInfos-parameter",
"text": " <code>pQueueCreateInfos</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>queueCreateInfoCount</code> valid <code>VkDeviceQueueCreateInfo</code> structures"
},
{
"vuid": "VUID-VkDeviceCreateInfo-ppEnabledLayerNames-parameter",
"text": " If <code>enabledLayerCount</code> is not <code>0</code>, <code>ppEnabledLayerNames</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>enabledLayerCount</code> null-terminated UTF-8 strings"
},
{
"vuid": "VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-parameter",
"text": " If <code>enabledExtensionCount</code> is not <code>0</code>, <code>ppEnabledExtensionNames</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>enabledExtensionCount</code> null-terminated UTF-8 strings"
},
{
"vuid": "VUID-VkDeviceCreateInfo-pEnabledFeatures-parameter",
"text": " If <code>pEnabledFeatures</code> is not <code>NULL</code>, <code>pEnabledFeatures</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPhysicalDeviceFeatures</code> structure"
},
{
"vuid": "VUID-VkDeviceCreateInfo-queueCreateInfoCount-arraylength",
"text": " <code>queueCreateInfoCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
{
"vuid": "VUID-VkDeviceCreateInfo-pNext-00373",
"text": " If the <code>pNext</code> chain includes a <a href=\"#VkPhysicalDeviceFeatures2\">VkPhysicalDeviceFeatures2</a> structure, then <code>pEnabledFeatures</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
],
"(VK_AMD_negative_viewport_height)+(VK_VERSION_1_1)": [
{
"vuid": "VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-01840",
"text": " <code>ppEnabledExtensionNames</code> <strong class=\"purple\">must</strong> not contain <code>VK_AMD_negative_viewport_height</code>"
}
],
"(VK_AMD_negative_viewport_height)+!(VK_VERSION_1_1)+(VK_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-queueFamilyIndex-01937",
"text": " <code>pCreateInfo</code>::<code>queueFamilyIndex</code> <strong class=\"purple\">must</strong> be the index of a queue family available in the logical device <code>device</code>."
},
{
"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-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkCommandPoolCreateInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkCommandPoolCreateInfo-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkCommandPoolCreateFlagBits\">VkCommandPoolCreateFlagBits</a> values"
}
]
},
"vkTrimCommandPool": {
"(VK_VERSION_1_1,VK_KHR_maintenance1)": [
{
"vuid": "VUID-vkTrimCommandPool-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkTrimCommandPool-commandPool-parameter",
"text": " <code>commandPool</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandPool</code> handle"
},
{
"vuid": "VUID-vkTrimCommandPool-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-vkTrimCommandPool-commandPool-parent",
"text": " <code>commandPool</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkResetCommandPool": {
"core": [
{
"vuid": "VUID-vkResetCommandPool-commandPool-00040",
"text": " All <code>VkCommandBuffer</code> objects allocated from <code>commandPool</code> <strong class=\"purple\">must</strong> not be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, pending state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkResetCommandPool-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkResetCommandPool-commandPool-parameter",
"text": " <code>commandPool</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandPool</code> handle"
},
{
"vuid": "VUID-vkResetCommandPool-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkCommandPoolResetFlagBits\">VkCommandPoolResetFlagBits</a> values"
},
{
"vuid": "VUID-vkResetCommandPool-commandPool-parent",
"text": " <code>commandPool</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkDestroyCommandPool": {
"core": [
{
"vuid": "VUID-vkDestroyCommandPool-commandPool-00041",
"text": " All <code>VkCommandBuffer</code> objects allocated from <code>commandPool</code> <strong class=\"purple\">must</strong> not be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, pending state&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-vkDestroyCommandPool-commandPool-00042",
"text": " If <code>VkAllocationCallbacks</code> were provided when <code>commandPool</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
},
{
"vuid": "VUID-vkDestroyCommandPool-commandPool-00043",
"text": " If no <code>VkAllocationCallbacks</code> were provided when <code>commandPool</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-vkDestroyCommandPool-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkDestroyCommandPool-commandPool-parameter",
"text": " If <code>commandPool</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>commandPool</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandPool</code> handle"
},
{
"vuid": "VUID-vkDestroyCommandPool-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkDestroyCommandPool-commandPool-parent",
"text": " If <code>commandPool</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkAllocateCommandBuffers": {
"core": [
{
"vuid": "VUID-vkAllocateCommandBuffers-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkAllocateCommandBuffers-pAllocateInfo-parameter",
"text": " <code>pAllocateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkCommandBufferAllocateInfo</code> structure"
},
{
"vuid": "VUID-vkAllocateCommandBuffers-pCommandBuffers-parameter",
"text": " <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pAllocateInfo</code>::commandBufferCount <code>VkCommandBuffer</code> handles"
}
]
},
"VkCommandBufferAllocateInfo": {
"core": [
{
"vuid": "VUID-VkCommandBufferAllocateInfo-commandBufferCount-00044",
"text": " <code>commandBufferCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-VkCommandBufferAllocateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO</code>"
},
{
"vuid": "VUID-VkCommandBufferAllocateInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkCommandBufferAllocateInfo-commandPool-parameter",
"text": " <code>commandPool</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandPool</code> handle"
},
{
"vuid": "VUID-VkCommandBufferAllocateInfo-level-parameter",
"text": " <code>level</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBufferLevel\">VkCommandBufferLevel</a> value"
}
]
},
"vkResetCommandBuffer": {
"core": [
{
"vuid": "VUID-vkResetCommandBuffer-commandBuffer-00045",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> not be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, pending state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkResetCommandBuffer-commandBuffer-00046",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> have been allocated from a pool that was created with the <code>VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT</code>"
},
{
"vuid": "VUID-vkResetCommandBuffer-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkResetCommandBuffer-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkCommandBufferResetFlagBits\">VkCommandBufferResetFlagBits</a> values"
}
]
},
"vkFreeCommandBuffers": {
"core": [
{
"vuid": "VUID-vkFreeCommandBuffers-pCommandBuffers-00047",
"text": " All elements of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> not be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, pending state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkFreeCommandBuffers-pCommandBuffers-00048",
"text": " <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>commandBufferCount</code> <code>VkCommandBuffer</code> handles, each element of which <strong class=\"purple\">must</strong> either be a valid handle or <code>NULL</code>"
},
{
"vuid": "VUID-vkFreeCommandBuffers-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkFreeCommandBuffers-commandPool-parameter",
"text": " <code>commandPool</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandPool</code> handle"
},
{
"vuid": "VUID-vkFreeCommandBuffers-commandBufferCount-arraylength",
"text": " <code>commandBufferCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkFreeCommandBuffers-commandPool-parent",
"text": " <code>commandPool</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
},
{
"vuid": "VUID-vkFreeCommandBuffers-pCommandBuffers-parent",
"text": " Each element of <code>pCommandBuffers</code> that is a valid handle <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>commandPool</code>"
}
]
},
"vkBeginCommandBuffer": {
"core": [
{
"vuid": "VUID-vkBeginCommandBuffer-commandBuffer-00049",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> not be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording or pending state&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-vkBeginCommandBuffer-commandBuffer-00050",
"text": " If <code>commandBuffer</code> was allocated from a <a href=\"#VkCommandPool\">VkCommandPool</a> which did not have the <code>VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT</code> flag set, <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, initial state&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-vkBeginCommandBuffer-commandBuffer-00051",
"text": " If <code>commandBuffer</code> is a secondary command buffer, the <code>pInheritanceInfo</code> member of <code>pBeginInfo</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBufferInheritanceInfo</code> structure"
},
{
"vuid": "VUID-vkBeginCommandBuffer-commandBuffer-00052",
"text": " If <code>commandBuffer</code> is a secondary command buffer and either the <code>occlusionQueryEnable</code> member of the <code>pInheritanceInfo</code> member of <code>pBeginInfo</code> is <code>VK_FALSE</code>, or the precise occlusion queries feature is not enabled, the <code>queryFlags</code> member of the <code>pInheritanceInfo</code> member <code>pBeginInfo</code> <strong class=\"purple\">must</strong> not contain <code>VK_QUERY_CONTROL_PRECISE_BIT</code>"
},
{
"vuid": "VUID-vkBeginCommandBuffer-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkBeginCommandBuffer-pBeginInfo-parameter",
"text": " <code>pBeginInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkCommandBufferBeginInfo</code> structure"
}
]
},
"VkCommandBufferBeginInfo": {
"core": [
{
"vuid": "VUID-VkCommandBufferBeginInfo-flags-00053",
"text": " If <code>flags</code> contains <code>VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT</code>, the <code>renderPass</code> member of <code>pInheritanceInfo</code> <strong class=\"purple\">must</strong> be a valid <code>VkRenderPass</code>"
},
{
"vuid": "VUID-VkCommandBufferBeginInfo-flags-00054",
"text": " If <code>flags</code> contains <code>VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT</code>, the <code>subpass</code> member of <code>pInheritanceInfo</code> <strong class=\"purple\">must</strong> be a valid subpass index within the <code>renderPass</code> member of <code>pInheritanceInfo</code>"
},
{
"vuid": "VUID-VkCommandBufferBeginInfo-flags-00055",
"text": " If <code>flags</code> contains <code>VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT</code>, the <code>framebuffer</code> member of <code>pInheritanceInfo</code> <strong class=\"purple\">must</strong> be either <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, or a valid <code>VkFramebuffer</code> that is compatible with the <code>renderPass</code> member of <code>pInheritanceInfo</code>"
},
{
"vuid": "VUID-VkCommandBufferBeginInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO</code>"
},
{
"vuid": "VUID-VkCommandBufferBeginInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkDeviceGroupCommandBufferBeginInfo\">VkDeviceGroupCommandBufferBeginInfo</a>"
},
{
"vuid": "VUID-VkCommandBufferBeginInfo-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkCommandBufferUsageFlagBits\">VkCommandBufferUsageFlagBits</a> values"
}
]
},
"VkCommandBufferInheritanceInfo": {
"core": [
{
"vuid": "VUID-VkCommandBufferInheritanceInfo-occlusionQueryEnable-00056",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-inheritedQueries,inherited queries&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>occlusionQueryEnable</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
},
{
"vuid": "VUID-VkCommandBufferInheritanceInfo-queryFlags-00057",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-inheritedQueries,inherited queries&amp;amp;gt;&amp;amp;gt; feature is enabled, <code>queryFlags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkQueryControlFlagBits\">VkQueryControlFlagBits</a> values"
},
{
"vuid": "VUID-VkCommandBufferInheritanceInfo-pipelineStatistics-00058",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-pipelineStatisticsQuery,pipeline statistics queries&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>pipelineStatistics</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkCommandBufferInheritanceInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO</code>"
},
{
"vuid": "VUID-VkCommandBufferInheritanceInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkCommandBufferInheritanceInfo-commonparent",
"text": " Both of <code>framebuffer</code>, and <code>renderPass</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
]
},
"vkEndCommandBuffer": {
"core": [
{
"vuid": "VUID-vkEndCommandBuffer-commandBuffer-00059",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-vkEndCommandBuffer-commandBuffer-00060",
"text": " If <code>commandBuffer</code> is a primary command buffer, there <strong class=\"purple\">must</strong> not be an active render pass instance"
},
{
"vuid": "VUID-vkEndCommandBuffer-commandBuffer-00061",
"text": " All queries made &amp;amp;lt;&amp;amp;lt;queries-operation-active,active&amp;amp;gt;&amp;amp;gt; during the recording of <code>commandBuffer</code> <strong class=\"purple\">must</strong> have been made inactive"
},
{
"vuid": "VUID-vkEndCommandBuffer-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
}
],
"(VK_EXT_debug_utils)": [
{
"vuid": "VUID-vkEndCommandBuffer-commandBuffer-01815",
"text": " If <code>commandBuffer</code> is a secondary command buffer, there <strong class=\"purple\">must</strong> not be an outstanding <a href=\"#vkCmdBeginDebugUtilsLabelEXT\">vkCmdBeginDebugUtilsLabelEXT</a> command recorded to <code>commandBuffer</code> that has not previously been ended by a call to <a href=\"#vkCmdEndDebugUtilsLabelEXT\">vkCmdEndDebugUtilsLabelEXT</a>."
}
],
"(VK_EXT_debug_marker)": [
{
"vuid": "VUID-vkEndCommandBuffer-commandBuffer-00062",
"text": " If <code>commandBuffer</code> is a secondary command buffer, there <strong class=\"purple\">must</strong> not be an outstanding <a href=\"#vkCmdDebugMarkerBeginEXT\">vkCmdDebugMarkerBeginEXT</a> command recorded to <code>commandBuffer</code> that has not previously been ended by a call to <a href=\"#vkCmdDebugMarkerEndEXT\">vkCmdDebugMarkerEndEXT</a>."
}
]
},
"vkQueueSubmit": {
"core": [
{
"vuid": "VUID-vkQueueSubmit-fence-00063",
"text": " If <code>fence</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>fence</code> <strong class=\"purple\">must</strong> be unsignaled"
},
{
"vuid": "VUID-vkQueueSubmit-fence-00064",
"text": " If <code>fence</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>fence</code> <strong class=\"purple\">must</strong> not be associated with any other queue command that has not yet completed execution on that queue"
},
{
"vuid": "VUID-vkQueueSubmit-pCommandBuffers-00065",
"text": " Any calls to <a href=\"#vkCmdSetEvent\">vkCmdSetEvent</a>, <a href=\"#vkCmdResetEvent\">vkCmdResetEvent</a> or <a href=\"#vkCmdWaitEvents\">vkCmdWaitEvents</a> that have been recorded into any of the command buffer elements of the <code>pCommandBuffers</code> member of any element of <code>pSubmits</code>, <strong class=\"purple\">must</strong> not reference any <a href=\"#VkEvent\">VkEvent</a> that is referenced by any of those commands in a command buffer that has been submitted to another queue and is still in the <em>pending state</em>."
},
{
"vuid": "VUID-vkQueueSubmit-pWaitDstStageMask-00066",
"text": " Any stage flag included in any element of the <code>pWaitDstStageMask</code> member of any element of <code>pSubmits</code> <strong class=\"purple\">must</strong> be a pipeline stage supported by one of the capabilities of <code>queue</code>, as specified in the &amp;amp;lt;&amp;amp;lt;synchronization-pipeline-stages-supported, table of supported pipeline stages&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-vkQueueSubmit-pSignalSemaphores-00067",
"text": " Each element of the <code>pSignalSemaphores</code> member of any element of <code>pSubmits</code> <strong class=\"purple\">must</strong> be unsignaled when the semaphore signal operation it defines is executed on the device"
},
{
"vuid": "VUID-vkQueueSubmit-pWaitSemaphores-00068",
"text": " When a semaphore unsignal operation defined by any element of the <code>pWaitSemaphores</code> member of any element of <code>pSubmits</code> executes on <code>queue</code>, no other queue <strong class=\"purple\">must</strong> be waiting on the same semaphore."
},
{
"vuid": "VUID-vkQueueSubmit-pWaitSemaphores-00069",
"text": " All elements of the <code>pWaitSemaphores</code> member of all elements of <code>pSubmits</code> <strong class=\"purple\">must</strong> be semaphores that are signaled, or have &amp;amp;lt;&amp;amp;lt;synchronization-semaphores-signaling, semaphore signal operations&amp;amp;gt;&amp;amp;gt; previously submitted for execution."
},
{
"vuid": "VUID-vkQueueSubmit-pCommandBuffers-00070",
"text": " Each element of the <code>pCommandBuffers</code> member of each element of <code>pSubmits</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, pending or executable state&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-vkQueueSubmit-pCommandBuffers-00071",
"text": " If any element of the <code>pCommandBuffers</code> member of any element of <code>pSubmits</code> was not recorded with the <code>VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT</code>, it <strong class=\"purple\">must</strong> not be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, pending state&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-vkQueueSubmit-pCommandBuffers-00072",
"text": " Any &amp;amp;lt;&amp;amp;lt;commandbuffers-secondary, secondary command buffers recorded&amp;amp;gt;&amp;amp;gt; into any element of the <code>pCommandBuffers</code> member of any element of <code>pSubmits</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, pending or executable state&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-vkQueueSubmit-pCommandBuffers-00073",
"text": " If any &amp;amp;lt;&amp;amp;lt;commandbuffers-secondary, secondary command buffers recorded&amp;amp;gt;&amp;amp;gt; into any element of the <code>pCommandBuffers</code> member of any element of <code>pSubmits</code> was not recorded with the <code>VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT</code>, it <strong class=\"purple\">must</strong> not be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, pending state&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-vkQueueSubmit-pCommandBuffers-00074",
"text": " Each element of the <code>pCommandBuffers</code> member of each element of <code>pSubmits</code> <strong class=\"purple\">must</strong> have been allocated from a <code>VkCommandPool</code> that was created for the same queue family <code>queue</code> belongs to."
},
{
"vuid": "VUID-vkQueueSubmit-queue-parameter",
"text": " <code>queue</code> <strong class=\"purple\">must</strong> be a valid <code>VkQueue</code> handle"
},
{
"vuid": "VUID-vkQueueSubmit-pSubmits-parameter",
"text": " If <code>submitCount</code> is not <code>0</code>, <code>pSubmits</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>submitCount</code> valid <code>VkSubmitInfo</code> structures"
},
{
"vuid": "VUID-vkQueueSubmit-fence-parameter",
"text": " If <code>fence</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>fence</code> <strong class=\"purple\">must</strong> be a valid <code>VkFence</code> handle"
},
{
"vuid": "VUID-vkQueueSubmit-commonparent",
"text": " Both of <code>fence</code>, and <code>queue</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
]
},
"VkSubmitInfo": {
"core": [
{
"vuid": "VUID-VkSubmitInfo-pCommandBuffers-00075",
"text": " Each element of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> not have been allocated with <code>VK_COMMAND_BUFFER_LEVEL_SECONDARY</code>"
},
{
"vuid": "VUID-VkSubmitInfo-pWaitDstStageMask-00076",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-geometryShader,geometry shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, each element of <code>pWaitDstStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT</code>"
},
{
"vuid": "VUID-VkSubmitInfo-pWaitDstStageMask-00077",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-tessellationShader,tessellation shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, each element of <code>pWaitDstStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT</code> or <code>VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT</code>"
},
{
"vuid": "VUID-VkSubmitInfo-pWaitDstStageMask-00078",
"text": " Each element of <code>pWaitDstStageMask</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_STAGE_HOST_BIT</code>."
},
{
"vuid": "VUID-VkSubmitInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SUBMIT_INFO</code>"
},
{
"vuid": "VUID-VkSubmitInfo-pNext-pNext",
"text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkD3D12FenceSubmitInfoKHR\">VkD3D12FenceSubmitInfoKHR</a>, <a href=\"#VkDeviceGroupSubmitInfo\">VkDeviceGroupSubmitInfo</a>, <a href=\"#VkProtectedSubmitInfo\">VkProtectedSubmitInfo</a>, <a href=\"#VkWin32KeyedMutexAcquireReleaseInfoKHR\">VkWin32KeyedMutexAcquireReleaseInfoKHR</a>, or <a href=\"#VkWin32KeyedMutexAcquireReleaseInfoNV\">VkWin32KeyedMutexAcquireReleaseInfoNV</a>"
},
{
"vuid": "VUID-VkSubmitInfo-sType-unique",
"text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkSubmitInfo-pWaitSemaphores-parameter",
"text": " If <code>waitSemaphoreCount</code> is not <code>0</code>, <code>pWaitSemaphores</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>waitSemaphoreCount</code> valid <code>VkSemaphore</code> handles"
},
{
"vuid": "VUID-VkSubmitInfo-pWaitDstStageMask-parameter",
"text": " If <code>waitSemaphoreCount</code> is not <code>0</code>, <code>pWaitDstStageMask</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>waitSemaphoreCount</code> valid combinations of <a href=\"#VkPipelineStageFlagBits\">VkPipelineStageFlagBits</a> values"
},
{
"vuid": "VUID-VkSubmitInfo-pWaitDstStageMask-requiredbitmask",
"text": " Each element of <code>pWaitDstStageMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-VkSubmitInfo-pCommandBuffers-parameter",
"text": " If <code>commandBufferCount</code> is not <code>0</code>, <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>commandBufferCount</code> valid <code>VkCommandBuffer</code> handles"
},
{
"vuid": "VUID-VkSubmitInfo-pSignalSemaphores-parameter",
"text": " If <code>signalSemaphoreCount</code> is not <code>0</code>, <code>pSignalSemaphores</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>signalSemaphoreCount</code> valid <code>VkSemaphore</code> handles"
},
{
"vuid": "VUID-VkSubmitInfo-commonparent",
"text": " Each of the elements of <code>pCommandBuffers</code>, the elements of <code>pSignalSemaphores</code>, and the elements of <code>pWaitSemaphores</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
]
},
"VkD3D12FenceSubmitInfoKHR": {
"(VK_KHR_external_semaphore_win32)": [
{
"vuid": "VUID-VkD3D12FenceSubmitInfoKHR-waitSemaphoreValuesCount-00079",
"text": " <code>waitSemaphoreValuesCount</code> <strong class=\"purple\">must</strong> be the same value as <code>VkSubmitInfo</code>::<code>waitSemaphoreCount</code>, where <code>VkSubmitInfo</code> is in the <code>pNext</code> chain of this <code>VkD3D12FenceSubmitInfoKHR</code> structure."
},
{
"vuid": "VUID-VkD3D12FenceSubmitInfoKHR-signalSemaphoreValuesCount-00080",
"text": " <code>signalSemaphoreValuesCount</code> <strong class=\"purple\">must</strong> be the same value as <code>VkSubmitInfo</code>::<code>signalSemaphoreCount</code>, where <code>VkSubmitInfo</code> is in the <code>pNext</code> chain of this <code>VkD3D12FenceSubmitInfoKHR</code> structure."
},
{
"vuid": "VUID-VkD3D12FenceSubmitInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR</code>"
},
{
"vuid": "VUID-VkD3D12FenceSubmitInfoKHR-pWaitSemaphoreValues-parameter",
"text": " If <code>waitSemaphoreValuesCount</code> is not <code>0</code>, and <code>pWaitSemaphoreValues</code> is not <code>NULL</code>, <code>pWaitSemaphoreValues</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>waitSemaphoreValuesCount</code> <code>uint64_t</code> values"
},
{
"vuid": "VUID-VkD3D12FenceSubmitInfoKHR-pSignalSemaphoreValues-parameter",
"text": " If <code>signalSemaphoreValuesCount</code> is not <code>0</code>, and <code>pSignalSemaphoreValues</code> is not <code>NULL</code>, <code>pSignalSemaphoreValues</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>signalSemaphoreValuesCount</code> <code>uint64_t</code> values"
}
]
},
"VkWin32KeyedMutexAcquireReleaseInfoKHR": {
"(VK_KHR_win32_keyed_mutex)": [
{
"vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-pAcquireSyncs-00081",
"text": " Each member of <code>pAcquireSyncs</code> and <code>pReleaseSyncs</code> <strong class=\"purple\">must</strong> be a device memory object imported by setting <a href=\"#VkImportMemoryWin32HandleInfoKHR\">VkImportMemoryWin32HandleInfoKHR</a>::<code>handleType</code> to <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT</code> or <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT</code>."
},
{
"vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR</code>"
},
{
"vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-pAcquireSyncs-parameter",
"text": " If <code>acquireCount</code> is not <code>0</code>, <code>pAcquireSyncs</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>acquireCount</code> valid <code>VkDeviceMemory</code> handles"
},
{
"vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-pAcquireKeys-parameter",
"text": " If <code>acquireCount</code> is not <code>0</code>, <code>pAcquireKeys</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>acquireCount</code> <code>uint64_t</code> values"
},
{
"vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-pAcquireTimeouts-parameter",
"text": " If <code>acquireCount</code> is not <code>0</code>, <code>pAcquireTimeouts</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>acquireCount</code> <code>uint32_t</code> values"
},
{
"vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-pReleaseSyncs-parameter",
"text": " If <code>releaseCount</code> is not <code>0</code>, <code>pReleaseSyncs</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>releaseCount</code> valid <code>VkDeviceMemory</code> handles"
},
{
"vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-pReleaseKeys-parameter",
"text": " If <code>releaseCount</code> is not <code>0</code>, <code>pReleaseKeys</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>releaseCount</code> <code>uint64_t</code> values"
},
{
"vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-commonparent",
"text": " Both of the elements of <code>pAcquireSyncs</code>, and the elements of <code>pReleaseSyncs</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
]
},
"VkWin32KeyedMutexAcquireReleaseInfoNV": {
"(VK_NV_win32_keyed_mutex)": [
{
"vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV</code>"
},
{
"vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoNV-pAcquireSyncs-parameter",
"text": " If <code>acquireCount</code> is not <code>0</code>, <code>pAcquireSyncs</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>acquireCount</code> valid <code>VkDeviceMemory</code> handles"
},
{
"vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoNV-pAcquireKeys-parameter",
"text": " If <code>acquireCount</code> is not <code>0</code>, <code>pAcquireKeys</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>acquireCount</code> <code>uint64_t</code> values"
},
{
"vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoNV-pAcquireTimeoutMilliseconds-parameter",
"text": " If <code>acquireCount</code> is not <code>0</code>, <code>pAcquireTimeoutMilliseconds</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>acquireCount</code> <code>uint32_t</code> values"
},
{
"vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoNV-pReleaseSyncs-parameter",
"text": " If <code>releaseCount</code> is not <code>0</code>, <code>pReleaseSyncs</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>releaseCount</code> valid <code>VkDeviceMemory</code> handles"
},
{
"vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoNV-pReleaseKeys-parameter",
"text": " If <code>releaseCount</code> is not <code>0</code>, <code>pReleaseKeys</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>releaseCount</code> <code>uint64_t</code> values"
},
{
"vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoNV-commonparent",
"text": " Both of the elements of <code>pAcquireSyncs</code>, and the elements of <code>pReleaseSyncs</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
]
},
"VkProtectedSubmitInfo": {
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-VkProtectedSubmitInfo-protectedSubmit-01816",
"text": " If the protected memory feature is not enabled, <code>protectedSubmit</code> <strong class=\"purple\">must</strong> not be <code>VK_TRUE</code>."
},
{
"vuid": "VUID-VkProtectedSubmitInfo-protectedSubmit-01817",
"text": " If <code>protectedSubmit</code> is <code>VK_TRUE</code>, then each element of the <code>pCommandBuffers</code> array <strong class=\"purple\">must</strong> be a protected command buffer."
},
{
"vuid": "VUID-VkProtectedSubmitInfo-protectedSubmit-01818",
"text": " If <code>protectedSubmit</code> is <code>VK_FALSE</code>, then each element of the <code>pCommandBuffers</code> array <strong class=\"purple\">must</strong> be an unprotected command buffer."
},
{
"vuid": "VUID-VkProtectedSubmitInfo-pNext-01819",
"text": " If the <code>VkSubmitInfo</code>::<code>pNext</code> chain does not include a <code>VkProtectedSubmitInfo</code> structure, then each element of the command buffer of the <code>pCommandBuffers</code> array <strong class=\"purple\">must</strong> be an unprotected command buffer."
},
{
"vuid": "VUID-VkProtectedSubmitInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO</code>"
}
]
},
"VkDeviceGroupSubmitInfo": {
"(VK_VERSION_1_1,VK_KHR_device_group)": [
{
"vuid": "VUID-VkDeviceGroupSubmitInfo-waitSemaphoreCount-00082",
"text": " <code>waitSemaphoreCount</code> <strong class=\"purple\">must</strong> equal <a href=\"#VkSubmitInfo\">VkSubmitInfo</a>::<code>waitSemaphoreCount</code>"
},
{
"vuid": "VUID-VkDeviceGroupSubmitInfo-commandBufferCount-00083",
"text": " <code>commandBufferCount</code> <strong class=\"purple\">must</strong> equal <a href=\"#VkSubmitInfo\">VkSubmitInfo</a>::<code>commandBufferCount</code>"
},
{
"vuid": "VUID-VkDeviceGroupSubmitInfo-signalSemaphoreCount-00084",
"text": " <code>signalSemaphoreCount</code> <strong class=\"purple\">must</strong> equal <a href=\"#VkSubmitInfo\">VkSubmitInfo</a>::<code>signalSemaphoreCount</code>"
},
{
"vuid": "VUID-VkDeviceGroupSubmitInfo-pWaitSemaphoreDeviceIndices-00085",
"text": " All elements of <code>pWaitSemaphoreDeviceIndices</code> and <code>pSignalSemaphoreDeviceIndices</code> <strong class=\"purple\">must</strong> be valid device indices"
},
{
"vuid": "VUID-VkDeviceGroupSubmitInfo-pCommandBufferDeviceMasks-00086",
"text": " All elements of <code>pCommandBufferDeviceMasks</code> <strong class=\"purple\">must</strong> be valid device masks"
},
{
"vuid": "VUID-VkDeviceGroupSubmitInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO</code>"
},
{
"vuid": "VUID-VkDeviceGroupSubmitInfo-pWaitSemaphoreDeviceIndices-parameter",
"text": " If <code>waitSemaphoreCount</code> is not <code>0</code>, <code>pWaitSemaphoreDeviceIndices</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>waitSemaphoreCount</code> <code>uint32_t</code> values"
},
{
"vuid": "VUID-VkDeviceGroupSubmitInfo-pCommandBufferDeviceMasks-parameter",
"text": " If <code>commandBufferCount</code> is not <code>0</code>, <code>pCommandBufferDeviceMasks</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>commandBufferCount</code> <code>uint32_t</code> values"
},
{
"vuid": "VUID-VkDeviceGroupSubmitInfo-pSignalSemaphoreDeviceIndices-parameter",
"text": " If <code>signalSemaphoreCount</code> is not <code>0</code>, <code>pSignalSemaphoreDeviceIndices</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>signalSemaphoreCount</code> <code>uint32_t</code> values"
}
]
},
"vkCmdExecuteCommands": {
"core": [
{
"vuid": "VUID-vkCmdExecuteCommands-commandBuffer-00087",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> have been allocated with a <code>level</code> of <code>VK_COMMAND_BUFFER_LEVEL_PRIMARY</code>"
},
{
"vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00088",
"text": " Each element of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> have been allocated with a <code>level</code> of <code>VK_COMMAND_BUFFER_LEVEL_SECONDARY</code>"
},
{
"vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00089",
"text": " Each element of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, pending or executable state&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00090",
"text": " If any element of <code>pCommandBuffers</code> was not recorded with the <code>VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT</code> flag, and it was recorded into any other primary command buffer, that primary command buffer <strong class=\"purple\">must</strong> not be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, pending state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00091",
"text": " If any element of <code>pCommandBuffers</code> was not recorded with the <code>VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT</code> flag, it <strong class=\"purple\">must</strong> not be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, pending state&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00092",
"text": " If any element of <code>pCommandBuffers</code> was not recorded with the <code>VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT</code> flag, it <strong class=\"purple\">must</strong> not have already been recorded to <code>commandBuffer</code>."
},
{
"vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00093",
"text": " If any element of <code>pCommandBuffers</code> was not recorded with the <code>VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT</code> flag, it <strong class=\"purple\">must</strong> not appear more than once in <code>pCommandBuffers</code>."
},
{
"vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00094",
"text": " Each element of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> have been allocated from a <code>VkCommandPool</code> that was created for the same queue family as the <code>VkCommandPool</code> from which <code>commandBuffer</code> was allocated"
},
{
"vuid": "VUID-vkCmdExecuteCommands-contents-00095",
"text": " If <code>vkCmdExecuteCommands</code> is being called within a render pass instance, that render pass instance <strong class=\"purple\">must</strong> have been begun with the <code>contents</code> parameter of <code>vkCmdBeginRenderPass</code> set to <code>VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS</code>"
},
{
"vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00096",
"text": " If <code>vkCmdExecuteCommands</code> is being called within a render pass instance, each element of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> have been recorded with the <code>VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT</code>"
},
{
"vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00097",
"text": " If <code>vkCmdExecuteCommands</code> is being called within a render pass instance, each element of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> have been recorded with <code>VkCommandBufferInheritanceInfo</code>::<code>subpass</code> set to the index of the subpass which the given command buffer will be executed in"
},
{
"vuid": "VUID-vkCmdExecuteCommands-pInheritanceInfo-00098",
"text": " If <code>vkCmdExecuteCommands</code> is being called within a render pass instance, the render passes specified in the <code>pBeginInfo</code>::<code>pInheritanceInfo</code>::<code>renderPass</code> members of the <a href=\"#vkBeginCommandBuffer\">vkBeginCommandBuffer</a> commands used to begin recording each element of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> be &amp;amp;lt;&amp;amp;lt;renderpass-compatibility,compatible&amp;amp;gt;&amp;amp;gt; with the current render pass."
},
{
"vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00099",
"text": " If <code>vkCmdExecuteCommands</code> is being called within a render pass instance, and any element of <code>pCommandBuffers</code> was recorded with <code>VkCommandBufferInheritanceInfo</code>::<code>framebuffer</code> not equal to <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, that <code>VkFramebuffer</code> <strong class=\"purple\">must</strong> match the <code>VkFramebuffer</code> used in the current render pass instance"
},
{
"vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00100",
"text": " If <code>vkCmdExecuteCommands</code> is not being called within a render pass instance, each element of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> not have been recorded with the <code>VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT</code>"
},
{
"vuid": "VUID-vkCmdExecuteCommands-commandBuffer-00101",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-inheritedQueries,inherited queries&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>commandBuffer</code> <strong class=\"purple\">must</strong> not have any queries &amp;amp;lt;&amp;amp;lt;queries-operation-active,active&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdExecuteCommands-commandBuffer-00102",
"text": " If <code>commandBuffer</code> has a <code>VK_QUERY_TYPE_OCCLUSION</code> query &amp;amp;lt;&amp;amp;lt;queries-operation-active,active&amp;amp;gt;&amp;amp;gt;, then each element of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> have been recorded with <code>VkCommandBufferInheritanceInfo</code>::<code>occlusionQueryEnable</code> set to <code>VK_TRUE</code>"
},
{
"vuid": "VUID-vkCmdExecuteCommands-commandBuffer-00103",
"text": " If <code>commandBuffer</code> has a <code>VK_QUERY_TYPE_OCCLUSION</code> query &amp;amp;lt;&amp;amp;lt;queries-operation-active,active&amp;amp;gt;&amp;amp;gt;, then each element of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> have been recorded with <code>VkCommandBufferInheritanceInfo</code>::<code>queryFlags</code> having all bits set that are set for the query"
},
{
"vuid": "VUID-vkCmdExecuteCommands-commandBuffer-00104",
"text": " If <code>commandBuffer</code> has a <code>VK_QUERY_TYPE_PIPELINE_STATISTICS</code> query &amp;amp;lt;&amp;amp;lt;queries-operation-active,active&amp;amp;gt;&amp;amp;gt;, then each element of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> have been recorded with <code>VkCommandBufferInheritanceInfo</code>::<code>pipelineStatistics</code> having all bits set that are set in the <code>VkQueryPool</code> the query uses"
},
{
"vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00105",
"text": " Each element of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> not begin any query types that are &amp;amp;lt;&amp;amp;lt;queries-operation-active,active&amp;amp;gt;&amp;amp;gt; in <code>commandBuffer</code>"
},
{
"vuid": "VUID-vkCmdExecuteCommands-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-parameter",
"text": " <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>commandBufferCount</code> valid <code>VkCommandBuffer</code> handles"
},
{
"vuid": "VUID-vkCmdExecuteCommands-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdExecuteCommands-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support transfer, graphics, or compute operations"
},
{
"vuid": "VUID-vkCmdExecuteCommands-bufferlevel",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a primary <code>VkCommandBuffer</code>"
},
{
"vuid": "VUID-vkCmdExecuteCommands-commandBufferCount-arraylength",
"text": " <code>commandBufferCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkCmdExecuteCommands-commonparent",
"text": " Both of <code>commandBuffer</code>, and the elements of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdExecuteCommands-commandBuffer-01820",
"text": " If <code>commandBuffer</code> is a protected command buffer, then each element of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> be a protected command buffer."
},
{
"vuid": "VUID-vkCmdExecuteCommands-commandBuffer-01821",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, then each element of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> be an unprotected command buffer."
}
]
},
"VkDeviceGroupCommandBufferBeginInfo": {
"(VK_VERSION_1_1,VK_KHR_device_group)": [
{
"vuid": "VUID-VkDeviceGroupCommandBufferBeginInfo-deviceMask-00106",
"text": " <code>deviceMask</code> <strong class=\"purple\">must</strong> be a valid device mask value"
},
{
"vuid": "VUID-VkDeviceGroupCommandBufferBeginInfo-deviceMask-00107",
"text": " <code>deviceMask</code> <strong class=\"purple\">must</strong> not be zero"
},
{
"vuid": "VUID-VkDeviceGroupCommandBufferBeginInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO</code>"
}
]
},
"vkCmdSetDeviceMask": {
"(VK_VERSION_1_1,VK_KHR_device_group)": [
{
"vuid": "VUID-vkCmdSetDeviceMask-deviceMask-00108",
"text": " <code>deviceMask</code> <strong class=\"purple\">must</strong> be a valid device mask value"
},
{
"vuid": "VUID-vkCmdSetDeviceMask-deviceMask-00109",
"text": " <code>deviceMask</code> <strong class=\"purple\">must</strong> not be zero"
},
{
"vuid": "VUID-vkCmdSetDeviceMask-deviceMask-00110",
"text": " <code>deviceMask</code> <strong class=\"purple\">must</strong> not include any set bits that were not in the <a href=\"#VkDeviceGroupCommandBufferBeginInfo\">VkDeviceGroupCommandBufferBeginInfo</a>::<code>deviceMask</code> value when the command buffer began recording."
},
{
"vuid": "VUID-vkCmdSetDeviceMask-deviceMask-00111",
"text": " If <code>vkCmdSetDeviceMask</code> is called inside a render pass instance, <code>deviceMask</code> <strong class=\"purple\">must</strong> not include any set bits that were not in the <a href=\"#VkDeviceGroupRenderPassBeginInfo\">VkDeviceGroupRenderPassBeginInfo</a>::<code>deviceMask</code> value when the render pass instance began recording."
},
{
"vuid": "VUID-vkCmdSetDeviceMask-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdSetDeviceMask-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdSetDeviceMask-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, compute, or transfer operations"
}
]
},
"vkCreateFence": {
"core": [
{
"vuid": "VUID-vkCreateFence-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkCreateFence-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkFenceCreateInfo</code> structure"
},
{
"vuid": "VUID-vkCreateFence-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateFence-pFence-parameter",
"text": " <code>pFence</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkFence</code> handle"
}
]
},
"VkFenceCreateInfo": {
"core": [
{
"vuid": "VUID-VkFenceCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_FENCE_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkFenceCreateInfo-pNext-pNext",
"text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkExportFenceCreateInfo\">VkExportFenceCreateInfo</a> or <a href=\"#VkExportFenceWin32HandleInfoKHR\">VkExportFenceWin32HandleInfoKHR</a>"
},
{
"vuid": "VUID-VkFenceCreateInfo-sType-unique",
"text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkFenceCreateInfo-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkFenceCreateFlagBits\">VkFenceCreateFlagBits</a> values"
}
]
},
"VkExportFenceCreateInfo": {
"(VK_VERSION_1_1,VK_KHR_external_fence)": [
{
"vuid": "VUID-VkExportFenceCreateInfo-handleTypes-01446",
"text": " The bits in <code>handleTypes</code> must be supported and compatible, as reported by <a href=\"#VkExternalFenceProperties\">VkExternalFenceProperties</a>."
},
{
"vuid": "VUID-VkExportFenceCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkExportFenceCreateInfo-handleTypes-parameter",
"text": " <code>handleTypes</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkExternalFenceHandleTypeFlagBits\">VkExternalFenceHandleTypeFlagBits</a> values"
}
]
},
"VkExportFenceWin32HandleInfoKHR": {
"(VK_KHR_external_fence_win32)": [
{
"vuid": "VUID-VkExportFenceWin32HandleInfoKHR-handleTypes-01447",
"text": " If <a href=\"#VkExportFenceCreateInfo\">VkExportFenceCreateInfo</a>::<code>handleTypes</code> does not include <code>VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT</code>, <code>VkExportFenceWin32HandleInfoKHR</code> <strong class=\"purple\">must</strong> not be in the <code>pNext</code> chain of <a href=\"#VkFenceCreateInfo\">VkFenceCreateInfo</a>."
},
{
"vuid": "VUID-VkExportFenceWin32HandleInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR</code>"
},
{
"vuid": "VUID-VkExportFenceWin32HandleInfoKHR-pAttributes-parameter",
"text": " If <code>pAttributes</code> is not <code>NULL</code>, <code>pAttributes</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>SECURITY_ATTRIBUTES</code> value"
}
]
},
"vkGetFenceWin32HandleKHR": {
"(VK_KHR_external_fence_win32)": [
{
"vuid": "VUID-vkGetFenceWin32HandleKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkGetFenceWin32HandleKHR-pGetWin32HandleInfo-parameter",
"text": " <code>pGetWin32HandleInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkFenceGetWin32HandleInfoKHR</code> structure"
},
{
"vuid": "VUID-vkGetFenceWin32HandleKHR-pHandle-parameter",
"text": " <code>pHandle</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>HANDLE</code> value"
}
]
},
"VkFenceGetWin32HandleInfoKHR": {
"(VK_KHR_external_fence_win32)": [
{
"vuid": "VUID-VkFenceGetWin32HandleInfoKHR-handleType-01448",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> have been included in <a href=\"#VkExportFenceCreateInfo\">VkExportFenceCreateInfo</a>::<code>handleTypes</code> when the <code>fence</code>&#8217;s current payload was created."
},
{
"vuid": "VUID-VkFenceGetWin32HandleInfoKHR-handleType-01449",
"text": " If <code>handleType</code> is defined as an NT handle, <a href=\"#vkGetFenceWin32HandleKHR\">vkGetFenceWin32HandleKHR</a> <strong class=\"purple\">must</strong> be called no more than once for each valid unique combination of <code>fence</code> and <code>handleType</code>."
},
{
"vuid": "VUID-VkFenceGetWin32HandleInfoKHR-fence-01450",
"text": " <code>fence</code> <strong class=\"purple\">must</strong> not currently have its payload replaced by an imported payload as described below in &amp;amp;lt;&amp;amp;lt;synchronization-fences-importing,Importing Fence Payloads&amp;amp;gt;&amp;amp;gt; unless that imported payload&#8217;s handle type was included in <a href=\"#VkExternalFenceProperties\">VkExternalFenceProperties</a>::<code>exportFromImportedHandleTypes</code> for <code>handleType</code>."
},
{
"vuid": "VUID-VkFenceGetWin32HandleInfoKHR-handleType-01451",
"text": " If <code>handleType</code> refers to a handle type with copy payload transference semantics, <code>fence</code> <strong class=\"purple\">must</strong> be signaled, or have an associated &amp;amp;lt;&amp;amp;lt;synchronization-fences-signaling,fence signal operation&amp;amp;gt;&amp;amp;gt; pending execution."
},
{
"vuid": "VUID-VkFenceGetWin32HandleInfoKHR-handleType-01452",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> be defined as an NT handle or a global share handle."
},
{
"vuid": "VUID-VkFenceGetWin32HandleInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR</code>"
},
{
"vuid": "VUID-VkFenceGetWin32HandleInfoKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkFenceGetWin32HandleInfoKHR-fence-parameter",
"text": " <code>fence</code> <strong class=\"purple\">must</strong> be a valid <code>VkFence</code> handle"
},
{
"vuid": "VUID-VkFenceGetWin32HandleInfoKHR-handleType-parameter",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalFenceHandleTypeFlagBits\">VkExternalFenceHandleTypeFlagBits</a> value"
}
]
},
"vkGetFenceFdKHR": {
"(VK_KHR_external_fence_fd)": [
{
"vuid": "VUID-vkGetFenceFdKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkGetFenceFdKHR-pGetFdInfo-parameter",
"text": " <code>pGetFdInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkFenceGetFdInfoKHR</code> structure"
},
{
"vuid": "VUID-vkGetFenceFdKHR-pFd-parameter",
"text": " <code>pFd</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>int</code> value"
}
]
},
"VkFenceGetFdInfoKHR": {
"(VK_KHR_external_fence_fd)": [
{
"vuid": "VUID-VkFenceGetFdInfoKHR-handleType-01453",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> have been included in <a href=\"#VkExportFenceCreateInfo\">VkExportFenceCreateInfo</a>::<code>handleTypes</code> when <code>fence</code>&#8217;s current payload was created."
},
{
"vuid": "VUID-VkFenceGetFdInfoKHR-handleType-01454",
"text": " If <code>handleType</code> refers to a handle type with copy payload transference semantics, <code>fence</code> <strong class=\"purple\">must</strong> be signaled, or have an associated &amp;amp;lt;&amp;amp;lt;synchronization-fences-signaling,fence signal operation&amp;amp;gt;&amp;amp;gt; pending execution."
},
{
"vuid": "VUID-VkFenceGetFdInfoKHR-fence-01455",
"text": " <code>fence</code> <strong class=\"purple\">must</strong> not currently have its payload replaced by an imported payload as described below in &amp;amp;lt;&amp;amp;lt;synchronization-fences-importing,Importing Fence Payloads&amp;amp;gt;&amp;amp;gt; unless that imported payload&#8217;s handle type was included in <a href=\"#VkExternalFenceProperties\">VkExternalFenceProperties</a>::<code>exportFromImportedHandleTypes</code> for <code>handleType</code>."
},
{
"vuid": "VUID-VkFenceGetFdInfoKHR-handleType-01456",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> be defined as a POSIX file descriptor handle."
},
{
"vuid": "VUID-VkFenceGetFdInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR</code>"
},
{
"vuid": "VUID-VkFenceGetFdInfoKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkFenceGetFdInfoKHR-fence-parameter",
"text": " <code>fence</code> <strong class=\"purple\">must</strong> be a valid <code>VkFence</code> handle"
},
{
"vuid": "VUID-VkFenceGetFdInfoKHR-handleType-parameter",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalFenceHandleTypeFlagBits\">VkExternalFenceHandleTypeFlagBits</a> value"
}
]
},
"vkDestroyFence": {
"core": [
{
"vuid": "VUID-vkDestroyFence-fence-01120",
"text": " All &amp;amp;lt;&amp;amp;lt;devsandqueues-submission, queue submission&amp;amp;gt;&amp;amp;gt; commands that refer to <code>fence</code> <strong class=\"purple\">must</strong> have completed execution"
},
{
"vuid": "VUID-vkDestroyFence-fence-01121",
"text": " If <code>VkAllocationCallbacks</code> were provided when <code>fence</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
},
{
"vuid": "VUID-vkDestroyFence-fence-01122",
"text": " If no <code>VkAllocationCallbacks</code> were provided when <code>fence</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-vkDestroyFence-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkDestroyFence-fence-parameter",
"text": " If <code>fence</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>fence</code> <strong class=\"purple\">must</strong> be a valid <code>VkFence</code> handle"
},
{
"vuid": "VUID-vkDestroyFence-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkDestroyFence-fence-parent",
"text": " If <code>fence</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkGetFenceStatus": {
"core": [
{
"vuid": "VUID-vkGetFenceStatus-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkGetFenceStatus-fence-parameter",
"text": " <code>fence</code> <strong class=\"purple\">must</strong> be a valid <code>VkFence</code> handle"
},
{
"vuid": "VUID-vkGetFenceStatus-fence-parent",
"text": " <code>fence</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkResetFences": {
"core": [
{
"vuid": "VUID-vkResetFences-pFences-01123",
"text": " Each element of <code>pFences</code> <strong class=\"purple\">must</strong> not be currently associated with any queue command that has not yet completed execution on that queue"
},
{
"vuid": "VUID-vkResetFences-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkResetFences-pFences-parameter",
"text": " <code>pFences</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>fenceCount</code> valid <code>VkFence</code> handles"
},
{
"vuid": "VUID-vkResetFences-fenceCount-arraylength",
"text": " <code>fenceCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkResetFences-pFences-parent",
"text": " Each element of <code>pFences</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkWaitForFences": {
"core": [
{
"vuid": "VUID-vkWaitForFences-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkWaitForFences-pFences-parameter",
"text": " <code>pFences</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>fenceCount</code> valid <code>VkFence</code> handles"
},
{
"vuid": "VUID-vkWaitForFences-fenceCount-arraylength",
"text": " <code>fenceCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkWaitForFences-pFences-parent",
"text": " Each element of <code>pFences</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkRegisterDeviceEventEXT": {
"(VK_EXT_display_control)": [
{
"vuid": "VUID-vkRegisterDeviceEventEXT-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkRegisterDeviceEventEXT-pDeviceEventInfo-parameter",
"text": " <code>pDeviceEventInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDeviceEventInfoEXT</code> structure"
},
{
"vuid": "VUID-vkRegisterDeviceEventEXT-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkRegisterDeviceEventEXT-pFence-parameter",
"text": " <code>pFence</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkFence</code> handle"
}
]
},
"VkDeviceEventInfoEXT": {
"(VK_EXT_display_control)": [
{
"vuid": "VUID-VkDeviceEventInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT</code>"
},
{
"vuid": "VUID-VkDeviceEventInfoEXT-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkDeviceEventInfoEXT-deviceEvent-parameter",
"text": " <code>deviceEvent</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDeviceEventTypeEXT\">VkDeviceEventTypeEXT</a> value"
}
]
},
"vkRegisterDisplayEventEXT": {
"(VK_EXT_display_control)": [
{
"vuid": "VUID-vkRegisterDisplayEventEXT-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkRegisterDisplayEventEXT-display-parameter",
"text": " <code>display</code> <strong class=\"purple\">must</strong> be a valid <code>VkDisplayKHR</code> handle"
},
{
"vuid": "VUID-vkRegisterDisplayEventEXT-pDisplayEventInfo-parameter",
"text": " <code>pDisplayEventInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDisplayEventInfoEXT</code> structure"
},
{
"vuid": "VUID-vkRegisterDisplayEventEXT-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkRegisterDisplayEventEXT-pFence-parameter",
"text": " <code>pFence</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkFence</code> handle"
}
]
},
"VkDisplayEventInfoEXT": {
"(VK_EXT_display_control)": [
{
"vuid": "VUID-VkDisplayEventInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT</code>"
},
{
"vuid": "VUID-VkDisplayEventInfoEXT-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkDisplayEventInfoEXT-displayEvent-parameter",
"text": " <code>displayEvent</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDisplayEventTypeEXT\">VkDisplayEventTypeEXT</a> value"
}
]
},
"vkImportFenceWin32HandleKHR": {
"(VK_KHR_external_fence_win32)": [
{
"vuid": "VUID-vkImportFenceWin32HandleKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkImportFenceWin32HandleKHR-pImportFenceWin32HandleInfo-parameter",
"text": " <code>pImportFenceWin32HandleInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkImportFenceWin32HandleInfoKHR</code> structure"
}
]
},
"VkImportFenceWin32HandleInfoKHR": {
"(VK_KHR_external_fence_win32)": [
{
"vuid": "VUID-VkImportFenceWin32HandleInfoKHR-handleType-01457",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a value included in the &amp;amp;lt;&amp;amp;lt;synchronization-fence-handletypes-win32, Handle Types Supported by VkImportFenceWin32HandleInfoKHR&amp;amp;gt;&amp;amp;gt; table."
},
{
"vuid": "VUID-VkImportFenceWin32HandleInfoKHR-handleType-01459",
"text": " If <code>handleType</code> is not <code>VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT</code>, <code>name</code> <strong class=\"purple\">must</strong> be <code>NULL</code>."
},
{
"vuid": "VUID-VkImportFenceWin32HandleInfoKHR-handleType-01460",
"text": " If <code>handleType</code> is not <code>0</code> and <code>handle</code> is <code>NULL</code>, <code>name</code> <strong class=\"purple\">must</strong> name a valid synchronization primitive of the type specified by <code>handleType</code>."
},
{
"vuid": "VUID-VkImportFenceWin32HandleInfoKHR-handleType-01461",
"text": " If <code>handleType</code> is not <code>0</code> and <code>name</code> is <code>NULL</code>, <code>handle</code> <strong class=\"purple\">must</strong> be a valid handle of the type specified by <code>handleType</code>."
},
{
"vuid": "VUID-VkImportFenceWin32HandleInfoKHR-handle-01462",
"text": " If <code>handle</code> is not <code>NULL</code>, <code>name</code> must be <code>NULL</code>."
},
{
"vuid": "VUID-VkImportFenceWin32HandleInfoKHR-handle-01539",
"text": " If <code>handle</code> is not <code>NULL</code>, it <strong class=\"purple\">must</strong> obey any requirements listed for <code>handleType</code> in <a href=\"#external-fence-handle-types-compatibility\">external fence handle types compatibility</a>."
},
{
"vuid": "VUID-VkImportFenceWin32HandleInfoKHR-name-01540",
"text": " If <code>name</code> is not <code>NULL</code>, it <strong class=\"purple\">must</strong> obey any requirements listed for <code>handleType</code> in <a href=\"#external-fence-handle-types-compatibility\">external fence handle types compatibility</a>."
},
{
"vuid": "VUID-VkImportFenceWin32HandleInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR</code>"
},
{
"vuid": "VUID-VkImportFenceWin32HandleInfoKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkImportFenceWin32HandleInfoKHR-fence-parameter",
"text": " <code>fence</code> <strong class=\"purple\">must</strong> be a valid <code>VkFence</code> handle"
},
{
"vuid": "VUID-VkImportFenceWin32HandleInfoKHR-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkFenceImportFlagBits\">VkFenceImportFlagBits</a> values"
},
{
"vuid": "VUID-VkImportFenceWin32HandleInfoKHR-handleType-parameter",
"text": " If <code>handleType</code> is not <code>0</code>, <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalFenceHandleTypeFlagBits\">VkExternalFenceHandleTypeFlagBits</a> value"
}
]
},
"vkImportFenceFdKHR": {
"(VK_KHR_external_fence_fd)": [
{
"vuid": "VUID-vkImportFenceFdKHR-fence-01463",
"text": " <code>fence</code> <strong class=\"purple\">must</strong> not be associated with any queue command that has not yet completed execution on that queue"
},
{
"vuid": "VUID-vkImportFenceFdKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkImportFenceFdKHR-pImportFenceFdInfo-parameter",
"text": " <code>pImportFenceFdInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkImportFenceFdInfoKHR</code> structure"
}
]
},
"VkImportFenceFdInfoKHR": {
"(VK_KHR_external_fence_fd)": [
{
"vuid": "VUID-VkImportFenceFdInfoKHR-handleType-01464",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a value included in the &amp;amp;lt;&amp;amp;lt;synchronization-fence-handletypes-fd, Handle Types Supported by VkImportFenceFdInfoKHR&amp;amp;gt;&amp;amp;gt; table."
},
{
"vuid": "VUID-VkImportFenceFdInfoKHR-fd-01541",
"text": " <code>fd</code> <strong class=\"purple\">must</strong> obey any requirements listed for <code>handleType</code> in &amp;amp;lt;&amp;amp;lt;external-fence-handle-types-compatibility,external fence handle types compatibility&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-VkImportFenceFdInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR</code>"
},
{
"vuid": "VUID-VkImportFenceFdInfoKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkImportFenceFdInfoKHR-fence-parameter",
"text": " <code>fence</code> <strong class=\"purple\">must</strong> be a valid <code>VkFence</code> handle"
},
{
"vuid": "VUID-VkImportFenceFdInfoKHR-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkFenceImportFlagBits\">VkFenceImportFlagBits</a> values"
},
{
"vuid": "VUID-VkImportFenceFdInfoKHR-handleType-parameter",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalFenceHandleTypeFlagBits\">VkExternalFenceHandleTypeFlagBits</a> value"
}
]
},
"vkCreateSemaphore": {
"core": [
{
"vuid": "VUID-vkCreateSemaphore-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkCreateSemaphore-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkSemaphoreCreateInfo</code> structure"
},
{
"vuid": "VUID-vkCreateSemaphore-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateSemaphore-pSemaphore-parameter",
"text": " <code>pSemaphore</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSemaphore</code> handle"
}
]
},
"VkSemaphoreCreateInfo": {
"core": [
{
"vuid": "VUID-VkSemaphoreCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkSemaphoreCreateInfo-pNext-pNext",
"text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkExportSemaphoreCreateInfo\">VkExportSemaphoreCreateInfo</a> or <a href=\"#VkExportSemaphoreWin32HandleInfoKHR\">VkExportSemaphoreWin32HandleInfoKHR</a>"
},
{
"vuid": "VUID-VkSemaphoreCreateInfo-sType-unique",
"text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkSemaphoreCreateInfo-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
}
]
},
"VkExportSemaphoreCreateInfo": {
"(VK_VERSION_1_1,VK_KHR_external_semaphore)": [
{
"vuid": "VUID-VkExportSemaphoreCreateInfo-handleTypes-01124",
"text": " The bits in <code>handleTypes</code> <strong class=\"purple\">must</strong> be supported and compatible, as reported by <a href=\"#VkExternalSemaphoreProperties\">VkExternalSemaphoreProperties</a>."
},
{
"vuid": "VUID-VkExportSemaphoreCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkExportSemaphoreCreateInfo-handleTypes-parameter",
"text": " <code>handleTypes</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkExternalSemaphoreHandleTypeFlagBits\">VkExternalSemaphoreHandleTypeFlagBits</a> values"
}
]
},
"VkExportSemaphoreWin32HandleInfoKHR": {
"(VK_KHR_external_semaphore_win32)": [
{
"vuid": "VUID-VkExportSemaphoreWin32HandleInfoKHR-handleTypes-01125",
"text": " If <a href=\"#VkExportSemaphoreCreateInfo\">VkExportSemaphoreCreateInfo</a>::<code>handleTypes</code> does not include <code>VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT</code> or <code>VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT</code>, <code>VkExportSemaphoreWin32HandleInfoKHR</code> <strong class=\"purple\">must</strong> not be in the <code>pNext</code> chain of <a href=\"#VkSemaphoreCreateInfo\">VkSemaphoreCreateInfo</a>."
},
{
"vuid": "VUID-VkExportSemaphoreWin32HandleInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR</code>"
},
{
"vuid": "VUID-VkExportSemaphoreWin32HandleInfoKHR-pAttributes-parameter",
"text": " If <code>pAttributes</code> is not <code>NULL</code>, <code>pAttributes</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>SECURITY_ATTRIBUTES</code> value"
}
]
},
"vkGetSemaphoreWin32HandleKHR": {
"(VK_KHR_external_semaphore_win32)": [
{
"vuid": "VUID-vkGetSemaphoreWin32HandleKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkGetSemaphoreWin32HandleKHR-pGetWin32HandleInfo-parameter",
"text": " <code>pGetWin32HandleInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkSemaphoreGetWin32HandleInfoKHR</code> structure"
},
{
"vuid": "VUID-vkGetSemaphoreWin32HandleKHR-pHandle-parameter",
"text": " <code>pHandle</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>HANDLE</code> value"
}
]
},
"VkSemaphoreGetWin32HandleInfoKHR": {
"(VK_KHR_external_semaphore_win32)": [
{
"vuid": "VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-01126",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> have been included in <a href=\"#VkExportSemaphoreCreateInfo\">VkExportSemaphoreCreateInfo</a>::<code>handleTypes</code> when the <code>semaphore</code>&#8217;s current payload was created."
},
{
"vuid": "VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-01127",
"text": " If <code>handleType</code> is defined as an NT handle, <a href=\"#vkGetSemaphoreWin32HandleKHR\">vkGetSemaphoreWin32HandleKHR</a> <strong class=\"purple\">must</strong> be called no more than once for each valid unique combination of <code>semaphore</code> and <code>handleType</code>."
},
{
"vuid": "VUID-VkSemaphoreGetWin32HandleInfoKHR-semaphore-01128",
"text": " <code>semaphore</code> <strong class=\"purple\">must</strong> not currently have its payload replaced by an imported payload as described below in &amp;amp;lt;&amp;amp;lt;synchronization-semaphores-importing,Importing Semaphore Payloads&amp;amp;gt;&amp;amp;gt; unless that imported payload&#8217;s handle type was included in <a href=\"#VkExternalSemaphoreProperties\">VkExternalSemaphoreProperties</a>::<code>exportFromImportedHandleTypes</code> for <code>handleType</code>."
},
{
"vuid": "VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-01129",
"text": " If <code>handleType</code> refers to a handle type with copy payload transference semantics, as defined below in &amp;amp;lt;&amp;amp;lt;synchronization-semaphores-importing,Importing Semaphore Payloads&amp;amp;gt;&amp;amp;gt;, there <strong class=\"purple\">must</strong> be no queue waiting on <code>semaphore</code>."
},
{
"vuid": "VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-01130",
"text": " If <code>handleType</code> refers to a handle type with copy payload transference semantics, <code>semaphore</code> <strong class=\"purple\">must</strong> be signaled, or have an associated &amp;amp;lt;&amp;amp;lt;synchronization-semaphores-signaling,semaphore signal operation&amp;amp;gt;&amp;amp;gt; pending execution."
},
{
"vuid": "VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-01131",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> be defined as an NT handle or a global share handle."
},
{
"vuid": "VUID-VkSemaphoreGetWin32HandleInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR</code>"
},
{
"vuid": "VUID-VkSemaphoreGetWin32HandleInfoKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkSemaphoreGetWin32HandleInfoKHR-semaphore-parameter",
"text": " <code>semaphore</code> <strong class=\"purple\">must</strong> be a valid <code>VkSemaphore</code> handle"
},
{
"vuid": "VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-parameter",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalSemaphoreHandleTypeFlagBits\">VkExternalSemaphoreHandleTypeFlagBits</a> value"
}
]
},
"vkGetSemaphoreFdKHR": {
"(VK_KHR_external_semaphore_fd)": [
{
"vuid": "VUID-vkGetSemaphoreFdKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkGetSemaphoreFdKHR-pGetFdInfo-parameter",
"text": " <code>pGetFdInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkSemaphoreGetFdInfoKHR</code> structure"
},
{
"vuid": "VUID-vkGetSemaphoreFdKHR-pFd-parameter",
"text": " <code>pFd</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>int</code> value"
}
]
},
"VkSemaphoreGetFdInfoKHR": {
"(VK_KHR_external_semaphore_fd)": [
{
"vuid": "VUID-VkSemaphoreGetFdInfoKHR-handleType-01132",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> have been included in <a href=\"#VkExportSemaphoreCreateInfo\">VkExportSemaphoreCreateInfo</a>::<code>handleTypes</code> when <code>semaphore</code>&#8217;s current payload was created."
},
{
"vuid": "VUID-VkSemaphoreGetFdInfoKHR-semaphore-01133",
"text": " <code>semaphore</code> <strong class=\"purple\">must</strong> not currently have its payload replaced by an imported payload as described below in &amp;amp;lt;&amp;amp;lt;synchronization-semaphores-importing,Importing Semaphore Payloads&amp;amp;gt;&amp;amp;gt; unless that imported payload&#8217;s handle type was included in <a href=\"#VkExternalSemaphoreProperties\">VkExternalSemaphoreProperties</a>::<code>exportFromImportedHandleTypes</code> for <code>handleType</code>."
},
{
"vuid": "VUID-VkSemaphoreGetFdInfoKHR-handleType-01134",
"text": " If <code>handleType</code> refers to a handle type with copy payload transference semantics, as defined below in &amp;amp;lt;&amp;amp;lt;synchronization-semaphores-importing,Importing Semaphore Payloads&amp;amp;gt;&amp;amp;gt;, there <strong class=\"purple\">must</strong> be no queue waiting on <code>semaphore</code>."
},
{
"vuid": "VUID-VkSemaphoreGetFdInfoKHR-handleType-01135",
"text": " If <code>handleType</code> refers to a handle type with copy payload transference semantics, <code>semaphore</code> <strong class=\"purple\">must</strong> be signaled, or have an associated &amp;amp;lt;&amp;amp;lt;synchronization-semaphores-signaling,semaphore signal operation&amp;amp;gt;&amp;amp;gt; pending execution."
},
{
"vuid": "VUID-VkSemaphoreGetFdInfoKHR-handleType-01136",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> be defined as a POSIX file descriptor handle."
},
{
"vuid": "VUID-VkSemaphoreGetFdInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR</code>"
},
{
"vuid": "VUID-VkSemaphoreGetFdInfoKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkSemaphoreGetFdInfoKHR-semaphore-parameter",
"text": " <code>semaphore</code> <strong class=\"purple\">must</strong> be a valid <code>VkSemaphore</code> handle"
},
{
"vuid": "VUID-VkSemaphoreGetFdInfoKHR-handleType-parameter",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalSemaphoreHandleTypeFlagBits\">VkExternalSemaphoreHandleTypeFlagBits</a> value"
}
]
},
"vkDestroySemaphore": {
"core": [
{
"vuid": "VUID-vkDestroySemaphore-semaphore-01137",
"text": " All submitted batches that refer to <code>semaphore</code> <strong class=\"purple\">must</strong> have completed execution"
},
{
"vuid": "VUID-vkDestroySemaphore-semaphore-01138",
"text": " If <code>VkAllocationCallbacks</code> were provided when <code>semaphore</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
},
{
"vuid": "VUID-vkDestroySemaphore-semaphore-01139",
"text": " If no <code>VkAllocationCallbacks</code> were provided when <code>semaphore</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-vkDestroySemaphore-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkDestroySemaphore-semaphore-parameter",
"text": " If <code>semaphore</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>semaphore</code> <strong class=\"purple\">must</strong> be a valid <code>VkSemaphore</code> handle"
},
{
"vuid": "VUID-vkDestroySemaphore-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkDestroySemaphore-semaphore-parent",
"text": " If <code>semaphore</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkImportSemaphoreWin32HandleKHR": {
"(VK_KHR_external_semaphore_win32)": [
{
"vuid": "VUID-vkImportSemaphoreWin32HandleKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkImportSemaphoreWin32HandleKHR-pImportSemaphoreWin32HandleInfo-parameter",
"text": " <code>pImportSemaphoreWin32HandleInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkImportSemaphoreWin32HandleInfoKHR</code> structure"
}
]
},
"VkImportSemaphoreWin32HandleInfoKHR": {
"(VK_KHR_external_semaphore_win32)": [
{
"vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-01140",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a value included in the &amp;amp;lt;&amp;amp;lt;synchronization-semaphore-handletypes-win32,Handle Types Supported by VkImportSemaphoreWin32HandleInfoKHR&amp;amp;gt;&amp;amp;gt; table."
},
{
"vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-01466",
"text": " If <code>handleType</code> is not <code>VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT</code> or <code>VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT</code>, <code>name</code> <strong class=\"purple\">must</strong> be <code>NULL</code>."
},
{
"vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-01467",
"text": " If <code>handleType</code> is not <code>0</code> and <code>handle</code> is <code>NULL</code>, <code>name</code> <strong class=\"purple\">must</strong> name a valid synchronization primitive of the type specified by <code>handleType</code>."
},
{
"vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-01468",
"text": " If <code>handleType</code> is not <code>0</code> and <code>name</code> is <code>NULL</code>, <code>handle</code> <strong class=\"purple\">must</strong> be a valid handle of the type specified by <code>handleType</code>."
},
{
"vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-handle-01469",
"text": " If <code>handle</code> is not <code>NULL</code>, <code>name</code> must be <code>NULL</code>."
},
{
"vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-handle-01542",
"text": " If <code>handle</code> is not <code>NULL</code>, it <strong class=\"purple\">must</strong> obey any requirements listed for <code>handleType</code> in <a href=\"#external-semaphore-handle-types-compatibility\">external semaphore handle types compatibility</a>."
},
{
"vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-name-01543",
"text": " If <code>name</code> is not <code>NULL</code>, it <strong class=\"purple\">must</strong> obey any requirements listed for <code>handleType</code> in <a href=\"#external-semaphore-handle-types-compatibility\">external semaphore handle types compatibility</a>."
},
{
"vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR</code>"
},
{
"vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-semaphore-parameter",
"text": " <code>semaphore</code> <strong class=\"purple\">must</strong> be a valid <code>VkSemaphore</code> handle"
},
{
"vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkSemaphoreImportFlagBits\">VkSemaphoreImportFlagBits</a> values"
},
{
"vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-parameter",
"text": " If <code>handleType</code> is not <code>0</code>, <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalSemaphoreHandleTypeFlagBits\">VkExternalSemaphoreHandleTypeFlagBits</a> value"
}
]
},
"vkImportSemaphoreFdKHR": {
"(VK_KHR_external_semaphore_fd)": [
{
"vuid": "VUID-vkImportSemaphoreFdKHR-semaphore-01142",
"text": " <code>semaphore</code> <strong class=\"purple\">must</strong> not be associated with any queue command that has not yet completed execution on that queue"
},
{
"vuid": "VUID-vkImportSemaphoreFdKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkImportSemaphoreFdKHR-pImportSemaphoreFdInfo-parameter",
"text": " <code>pImportSemaphoreFdInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkImportSemaphoreFdInfoKHR</code> structure"
}
]
},
"VkImportSemaphoreFdInfoKHR": {
"(VK_KHR_external_semaphore_fd)": [
{
"vuid": "VUID-VkImportSemaphoreFdInfoKHR-handleType-01143",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a value included in the &amp;amp;lt;&amp;amp;lt;synchronization-semaphore-handletypes-fd,Handle Types Supported by VkImportSemaphoreFdInfoKHR&amp;amp;gt;&amp;amp;gt; table."
},
{
"vuid": "VUID-VkImportSemaphoreFdInfoKHR-fd-01544",
"text": " <code>fd</code> <strong class=\"purple\">must</strong> obey any requirements listed for <code>handleType</code> in &amp;amp;lt;&amp;amp;lt;external-semaphore-handle-types-compatibility,external semaphore handle types compatibility&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-VkImportSemaphoreFdInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR</code>"
},
{
"vuid": "VUID-VkImportSemaphoreFdInfoKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkImportSemaphoreFdInfoKHR-semaphore-parameter",
"text": " <code>semaphore</code> <strong class=\"purple\">must</strong> be a valid <code>VkSemaphore</code> handle"
},
{
"vuid": "VUID-VkImportSemaphoreFdInfoKHR-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkSemaphoreImportFlagBits\">VkSemaphoreImportFlagBits</a> values"
},
{
"vuid": "VUID-VkImportSemaphoreFdInfoKHR-handleType-parameter",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalSemaphoreHandleTypeFlagBits\">VkExternalSemaphoreHandleTypeFlagBits</a> value"
}
]
},
"vkCreateEvent": {
"core": [
{
"vuid": "VUID-vkCreateEvent-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkCreateEvent-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkEventCreateInfo</code> structure"
},
{
"vuid": "VUID-vkCreateEvent-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateEvent-pEvent-parameter",
"text": " <code>pEvent</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkEvent</code> handle"
}
]
},
"VkEventCreateInfo": {
"core": [
{
"vuid": "VUID-VkEventCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_EVENT_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkEventCreateInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkEventCreateInfo-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
}
]
},
"vkDestroyEvent": {
"core": [
{
"vuid": "VUID-vkDestroyEvent-event-01145",
"text": " All submitted commands that refer to <code>event</code> <strong class=\"purple\">must</strong> have completed execution"
},
{
"vuid": "VUID-vkDestroyEvent-event-01146",
"text": " If <code>VkAllocationCallbacks</code> were provided when <code>event</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
},
{
"vuid": "VUID-vkDestroyEvent-event-01147",
"text": " If no <code>VkAllocationCallbacks</code> were provided when <code>event</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-vkDestroyEvent-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkDestroyEvent-event-parameter",
"text": " If <code>event</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>event</code> <strong class=\"purple\">must</strong> be a valid <code>VkEvent</code> handle"
},
{
"vuid": "VUID-vkDestroyEvent-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkDestroyEvent-event-parent",
"text": " If <code>event</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkGetEventStatus": {
"core": [
{
"vuid": "VUID-vkGetEventStatus-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkGetEventStatus-event-parameter",
"text": " <code>event</code> <strong class=\"purple\">must</strong> be a valid <code>VkEvent</code> handle"
},
{
"vuid": "VUID-vkGetEventStatus-event-parent",
"text": " <code>event</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkSetEvent": {
"core": [
{
"vuid": "VUID-vkSetEvent-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkSetEvent-event-parameter",
"text": " <code>event</code> <strong class=\"purple\">must</strong> be a valid <code>VkEvent</code> handle"
},
{
"vuid": "VUID-vkSetEvent-event-parent",
"text": " <code>event</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkResetEvent": {
"core": [
{
"vuid": "VUID-vkResetEvent-event-01148",
"text": " <code>event</code> <strong class=\"purple\">must</strong> not be waited on by a <code>vkCmdWaitEvents</code> command that is currently executing"
},
{
"vuid": "VUID-vkResetEvent-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkResetEvent-event-parameter",
"text": " <code>event</code> <strong class=\"purple\">must</strong> be a valid <code>VkEvent</code> handle"
},
{
"vuid": "VUID-vkResetEvent-event-parent",
"text": " <code>event</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkCmdSetEvent": {
"core": [
{
"vuid": "VUID-vkCmdSetEvent-stageMask-01149",
"text": " <code>stageMask</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_STAGE_HOST_BIT</code>"
},
{
"vuid": "VUID-vkCmdSetEvent-stageMask-01150",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-geometryShader,geometry shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>stageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT</code>"
},
{
"vuid": "VUID-vkCmdSetEvent-stageMask-01151",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-tessellationShader,tessellation shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>stageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT</code> or <code>VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT</code>"
},
{
"vuid": "VUID-vkCmdSetEvent-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdSetEvent-event-parameter",
"text": " <code>event</code> <strong class=\"purple\">must</strong> be a valid <code>VkEvent</code> handle"
},
{
"vuid": "VUID-vkCmdSetEvent-stageMask-parameter",
"text": " <code>stageMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkPipelineStageFlagBits\">VkPipelineStageFlagBits</a> values"
},
{
"vuid": "VUID-vkCmdSetEvent-stageMask-requiredbitmask",
"text": " <code>stageMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-vkCmdSetEvent-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdSetEvent-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
},
{
"vuid": "VUID-vkCmdSetEvent-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
},
{
"vuid": "VUID-vkCmdSetEvent-commonparent",
"text": " Both of <code>commandBuffer</code>, and <code>event</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_device_group)": [
{
"vuid": "VUID-vkCmdSetEvent-commandBuffer-01152",
"text": " <code>commandBuffer</code>&#8217;s current device mask <strong class=\"purple\">must</strong> include exactly one physical device."
}
]
},
"vkCmdResetEvent": {
"core": [
{
"vuid": "VUID-vkCmdResetEvent-stageMask-01153",
"text": " <code>stageMask</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_STAGE_HOST_BIT</code>"
},
{
"vuid": "VUID-vkCmdResetEvent-stageMask-01154",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-geometryShader,geometry shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>stageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT</code>"
},
{
"vuid": "VUID-vkCmdResetEvent-stageMask-01155",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-tessellationShader,tessellation shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>stageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT</code> or <code>VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT</code>"
},
{
"vuid": "VUID-vkCmdResetEvent-event-01156",
"text": " When this command executes, <code>event</code> <strong class=\"purple\">must</strong> not be waited on by a <code>vkCmdWaitEvents</code> command that is currently executing"
},
{
"vuid": "VUID-vkCmdResetEvent-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdResetEvent-event-parameter",
"text": " <code>event</code> <strong class=\"purple\">must</strong> be a valid <code>VkEvent</code> handle"
},
{
"vuid": "VUID-vkCmdResetEvent-stageMask-parameter",
"text": " <code>stageMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkPipelineStageFlagBits\">VkPipelineStageFlagBits</a> values"
},
{
"vuid": "VUID-vkCmdResetEvent-stageMask-requiredbitmask",
"text": " <code>stageMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-vkCmdResetEvent-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdResetEvent-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
},
{
"vuid": "VUID-vkCmdResetEvent-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
},
{
"vuid": "VUID-vkCmdResetEvent-commonparent",
"text": " Both of <code>commandBuffer</code>, and <code>event</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_device_group)": [
{
"vuid": "VUID-vkCmdResetEvent-commandBuffer-01157",
"text": " <code>commandBuffer</code>&#8217;s current device mask <strong class=\"purple\">must</strong> include exactly one physical device."
}
]
},
"vkCmdWaitEvents": {
"core": [
{
"vuid": "VUID-vkCmdWaitEvents-srcStageMask-01158",
"text": " <code>srcStageMask</code> <strong class=\"purple\">must</strong> be the bitwise OR of the <code>stageMask</code> parameter used in previous calls to <code>vkCmdSetEvent</code> with any of the members of <code>pEvents</code> and <code>VK_PIPELINE_STAGE_HOST_BIT</code> if any of the members of <code>pEvents</code> was set using <code>vkSetEvent</code>"
},
{
"vuid": "VUID-vkCmdWaitEvents-srcStageMask-01159",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-geometryShader,geometry shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>srcStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT</code>"
},
{
"vuid": "VUID-vkCmdWaitEvents-dstStageMask-01160",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-geometryShader,geometry shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>dstStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT</code>"
},
{
"vuid": "VUID-vkCmdWaitEvents-srcStageMask-01161",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-tessellationShader,tessellation shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>srcStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT</code> or <code>VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT</code>"
},
{
"vuid": "VUID-vkCmdWaitEvents-dstStageMask-01162",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-tessellationShader,tessellation shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>dstStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT</code> or <code>VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT</code>"
},
{
"vuid": "VUID-vkCmdWaitEvents-pEvents-01163",
"text": " If <code>pEvents</code> includes one or more events that will be signaled by <code>vkSetEvent</code> after <code>commandBuffer</code> has been submitted to a queue, then <code>vkCmdWaitEvents</code> <strong class=\"purple\">must</strong> not be called inside a render pass instance"
},
{
"vuid": "VUID-vkCmdWaitEvents-srcStageMask-01164",
"text": " Any pipeline stage included in <code>srcStageMask</code> or <code>dstStageMask</code> <strong class=\"purple\">must</strong> be supported by the capabilities of the queue family specified by the <code>queueFamilyIndex</code> member of the <a href=\"#VkCommandPoolCreateInfo\">VkCommandPoolCreateInfo</a> structure that was used to create the <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from, as specified in the &amp;amp;lt;&amp;amp;lt;synchronization-pipeline-stages-supported, table of supported pipeline stages&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-vkCmdWaitEvents-pMemoryBarriers-01165",
"text": " Each element of <code>pMemoryBarriers</code>, <code>pBufferMemoryBarriers</code> or <code>pImageMemoryBarriers</code> <strong class=\"purple\">must</strong> not have any access flag included in its <code>srcAccessMask</code> member if that bit is not supported by any of the pipeline stages in <code>srcStageMask</code>, as specified in the &amp;amp;lt;&amp;amp;lt;synchronization-access-types-supported, table of supported access types&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-vkCmdWaitEvents-pMemoryBarriers-01166",
"text": " Each element of <code>pMemoryBarriers</code>, <code>pBufferMemoryBarriers</code> or <code>pImageMemoryBarriers</code> <strong class=\"purple\">must</strong> not have any access flag included in its <code>dstAccessMask</code> member if that bit is not supported by any of the pipeline stages in <code>dstStageMask</code>, as specified in the &amp;amp;lt;&amp;amp;lt;synchronization-access-types-supported, table of supported access types&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-vkCmdWaitEvents-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdWaitEvents-pEvents-parameter",
"text": " <code>pEvents</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>eventCount</code> valid <code>VkEvent</code> handles"
},
{
"vuid": "VUID-vkCmdWaitEvents-srcStageMask-parameter",
"text": " <code>srcStageMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkPipelineStageFlagBits\">VkPipelineStageFlagBits</a> values"
},
{
"vuid": "VUID-vkCmdWaitEvents-srcStageMask-requiredbitmask",
"text": " <code>srcStageMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-vkCmdWaitEvents-dstStageMask-parameter",
"text": " <code>dstStageMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkPipelineStageFlagBits\">VkPipelineStageFlagBits</a> values"
},
{
"vuid": "VUID-vkCmdWaitEvents-dstStageMask-requiredbitmask",
"text": " <code>dstStageMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-vkCmdWaitEvents-pMemoryBarriers-parameter",
"text": " If <code>memoryBarrierCount</code> is not <code>0</code>, <code>pMemoryBarriers</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>memoryBarrierCount</code> valid <code>VkMemoryBarrier</code> structures"
},
{
"vuid": "VUID-vkCmdWaitEvents-pBufferMemoryBarriers-parameter",
"text": " If <code>bufferMemoryBarrierCount</code> is not <code>0</code>, <code>pBufferMemoryBarriers</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>bufferMemoryBarrierCount</code> valid <code>VkBufferMemoryBarrier</code> structures"
},
{
"vuid": "VUID-vkCmdWaitEvents-pImageMemoryBarriers-parameter",
"text": " If <code>imageMemoryBarrierCount</code> is not <code>0</code>, <code>pImageMemoryBarriers</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>imageMemoryBarrierCount</code> valid <code>VkImageMemoryBarrier</code> structures"
},
{
"vuid": "VUID-vkCmdWaitEvents-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdWaitEvents-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
},
{
"vuid": "VUID-vkCmdWaitEvents-eventCount-arraylength",
"text": " <code>eventCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkCmdWaitEvents-commonparent",
"text": " Both of <code>commandBuffer</code>, and the elements of <code>pEvents</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_device_group)": [
{
"vuid": "VUID-vkCmdWaitEvents-commandBuffer-01167",
"text": " <code>commandBuffer</code>&#8217;s current device mask <strong class=\"purple\">must</strong> include exactly one physical device."
}
]
},
"vkCmdPipelineBarrier": {
"core": [
{
"vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-01168",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-geometryShader,geometry shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>srcStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT</code>"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-dstStageMask-01169",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-geometryShader,geometry shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>dstStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT</code>"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-01170",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-tessellationShader,tessellation shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>srcStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT</code> or <code>VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT</code>"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-dstStageMask-01171",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-tessellationShader,tessellation shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>dstStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT</code> or <code>VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT</code>"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-pDependencies-01172",
"text": " If <code>vkCmdPipelineBarrier</code> is called within a render pass instance, the render pass <strong class=\"purple\">must</strong> have been created with a <code>VkSubpassDependency</code> instance in <code>pDependencies</code> that expresses a dependency from the current subpass to itself."
},
{
"vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-01173",
"text": " If <code>vkCmdPipelineBarrier</code> is called within a render pass instance, <code>srcStageMask</code> <strong class=\"purple\">must</strong> contain a subset of the bit values in the <code>srcStageMask</code> member of that instance of <code>VkSubpassDependency</code>"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-dstStageMask-01174",
"text": " If <code>vkCmdPipelineBarrier</code> is called within a render pass instance, <code>dstStageMask</code> <strong class=\"purple\">must</strong> contain a subset of the bit values in the <code>dstStageMask</code> member of that instance of <code>VkSubpassDependency</code>"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-srcAccessMask-01175",
"text": " If <code>vkCmdPipelineBarrier</code> is called within a render pass instance, the <code>srcAccessMask</code> of any element of <code>pMemoryBarriers</code> or <code>pImageMemoryBarriers</code> <strong class=\"purple\">must</strong> contain a subset of the bit values the <code>srcAccessMask</code> member of that instance of <code>VkSubpassDependency</code>"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-dstAccessMask-01176",
"text": " If <code>vkCmdPipelineBarrier</code> is called within a render pass instance, the <code>dstAccessMask</code> of any element of <code>pMemoryBarriers</code> or <code>pImageMemoryBarriers</code> <strong class=\"purple\">must</strong> contain a subset of the bit values the <code>dstAccessMask</code> member of that instance of <code>VkSubpassDependency</code>"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-dependencyFlags-01177",
"text": " If <code>vkCmdPipelineBarrier</code> is called within a render pass instance, <code>dependencyFlags</code> <strong class=\"purple\">must</strong> be equal to the <code>dependencyFlags</code> member of that instance of <code>VkSubpassDependency</code>"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-bufferMemoryBarrierCount-01178",
"text": " If <code>vkCmdPipelineBarrier</code> is called within a render pass instance, <code>bufferMemoryBarrierCount</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-image-01179",
"text": " If <code>vkCmdPipelineBarrier</code> is called within a render pass instance, the <code>image</code> member of any element of <code>pImageMemoryBarriers</code> <strong class=\"purple\">must</strong> be equal to one of the elements of <code>pAttachments</code> that the current <code>framebuffer</code> was created with, that is also referred to by one of the elements of the <code>pColorAttachments</code>, <code>pResolveAttachments</code> or <code>pDepthStencilAttachment</code> members of the <code>VkSubpassDescription</code> instance that the current subpass was created with"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-oldLayout-01180",
"text": " If <code>vkCmdPipelineBarrier</code> is called within a render pass instance, the <code>oldLayout</code> and <code>newLayout</code> members of any element of <code>pImageMemoryBarriers</code> <strong class=\"purple\">must</strong> be equal to the <code>layout</code> member of an element of the <code>pColorAttachments</code>, <code>pResolveAttachments</code> or <code>pDepthStencilAttachment</code> members of the <code>VkSubpassDescription</code> instance that the current subpass was created with, that refers to the same <code>image</code>"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-oldLayout-01181",
"text": " If <code>vkCmdPipelineBarrier</code> is called within a render pass instance, the <code>oldLayout</code> and <code>newLayout</code> members of an element of <code>pImageMemoryBarriers</code> <strong class=\"purple\">must</strong> be equal"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-srcQueueFamilyIndex-01182",
"text": " If <code>vkCmdPipelineBarrier</code> is called within a render pass instance, the <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> members of any element of <code>pImageMemoryBarriers</code> <strong class=\"purple\">must</strong> be <code>VK_QUEUE_FAMILY_IGNORED</code>"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-01183",
"text": " Any pipeline stage included in <code>srcStageMask</code> or <code>dstStageMask</code> <strong class=\"purple\">must</strong> be supported by the capabilities of the queue family specified by the <code>queueFamilyIndex</code> member of the <a href=\"#VkCommandPoolCreateInfo\">VkCommandPoolCreateInfo</a> structure that was used to create the <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from, as specified in the &amp;amp;lt;&amp;amp;lt;synchronization-pipeline-stages-supported, table of supported pipeline stages&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-vkCmdPipelineBarrier-pMemoryBarriers-01184",
"text": " Each element of <code>pMemoryBarriers</code>, <code>pBufferMemoryBarriers</code> and <code>pImageMemoryBarriers</code> <strong class=\"purple\">must</strong> not have any access flag included in its <code>srcAccessMask</code> member if that bit is not supported by any of the pipeline stages in <code>srcStageMask</code>, as specified in the &amp;amp;lt;&amp;amp;lt;synchronization-access-types-supported, table of supported access types&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-vkCmdPipelineBarrier-pMemoryBarriers-01185",
"text": " Each element of <code>pMemoryBarriers</code>, <code>pBufferMemoryBarriers</code> and <code>pImageMemoryBarriers</code> <strong class=\"purple\">must</strong> not have any access flag included in its <code>dstAccessMask</code> member if that bit is not supported by any of the pipeline stages in <code>dstStageMask</code>, as specified in the &amp;amp;lt;&amp;amp;lt;synchronization-access-types-supported, table of supported access types&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-vkCmdPipelineBarrier-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-parameter",
"text": " <code>srcStageMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkPipelineStageFlagBits\">VkPipelineStageFlagBits</a> values"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-requiredbitmask",
"text": " <code>srcStageMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-dstStageMask-parameter",
"text": " <code>dstStageMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkPipelineStageFlagBits\">VkPipelineStageFlagBits</a> values"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-dstStageMask-requiredbitmask",
"text": " <code>dstStageMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-dependencyFlags-parameter",
"text": " <code>dependencyFlags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkDependencyFlagBits\">VkDependencyFlagBits</a> values"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-pMemoryBarriers-parameter",
"text": " If <code>memoryBarrierCount</code> is not <code>0</code>, <code>pMemoryBarriers</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>memoryBarrierCount</code> valid <code>VkMemoryBarrier</code> structures"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-pBufferMemoryBarriers-parameter",
"text": " If <code>bufferMemoryBarrierCount</code> is not <code>0</code>, <code>pBufferMemoryBarriers</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>bufferMemoryBarrierCount</code> valid <code>VkBufferMemoryBarrier</code> structures"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-pImageMemoryBarriers-parameter",
"text": " If <code>imageMemoryBarrierCount</code> is not <code>0</code>, <code>pImageMemoryBarriers</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>imageMemoryBarrierCount</code> valid <code>VkImageMemoryBarrier</code> structures"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support transfer, graphics, or compute operations"
}
],
"(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-vkCmdPipelineBarrier-dependencyFlags-01186",
"text": " If <code>vkCmdPipelineBarrier</code> is called outside of a render pass instance, <code>dependencyFlags</code> <strong class=\"purple\">must</strong> not include <code>VK_DEPENDENCY_VIEW_LOCAL_BIT</code>"
}
]
},
"VkMemoryBarrier": {
"core": [
{
"vuid": "VUID-VkMemoryBarrier-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_MEMORY_BARRIER</code>"
},
{
"vuid": "VUID-VkMemoryBarrier-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkMemoryBarrier-srcAccessMask-parameter",
"text": " <code>srcAccessMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkAccessFlagBits\">VkAccessFlagBits</a> values"
},
{
"vuid": "VUID-VkMemoryBarrier-dstAccessMask-parameter",
"text": " <code>dstAccessMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkAccessFlagBits\">VkAccessFlagBits</a> values"
}
]
},
"VkBufferMemoryBarrier": {
"core": [
{
"vuid": "VUID-VkBufferMemoryBarrier-offset-01187",
"text": " <code>offset</code> <strong class=\"purple\">must</strong> be less than the size of <code>buffer</code>"
},
{
"vuid": "VUID-VkBufferMemoryBarrier-size-01188",
"text": " If <code>size</code> is not equal to <code>VK_WHOLE_SIZE</code>, <code>size</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-VkBufferMemoryBarrier-size-01189",
"text": " If <code>size</code> is not equal to <code>VK_WHOLE_SIZE</code>, <code>size</code> <strong class=\"purple\">must</strong> be less than or equal to than the size of <code>buffer</code> minus <code>offset</code>"
},
{
"vuid": "VUID-VkBufferMemoryBarrier-buffer-01196",
"text": " If <code>buffer</code> was created with a sharing mode of <code>VK_SHARING_MODE_EXCLUSIVE</code>, and <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> are not <code>VK_QUEUE_FAMILY_IGNORED</code>, at least one of them <strong class=\"purple\">must</strong> be the same as the family of the queue that will execute this barrier"
},
{
"vuid": "VUID-VkBufferMemoryBarrier-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;amp;lt;&amp;amp;lt;devsandqueues-queueprops&amp;amp;gt;&amp;amp;gt;)"
}
],
"(VK_VERSION_1_1,VK_KHR_external_memory)": [
{
"vuid": "VUID-VkBufferMemoryBarrier-buffer-01191",
"text": " If <code>buffer</code> was created with a sharing mode of <code>VK_SHARING_MODE_CONCURRENT</code>, at least one of <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> <strong class=\"purple\">must</strong> be <code>VK_QUEUE_FAMILY_IGNORED</code>"
},
{
"vuid": "VUID-VkBufferMemoryBarrier-buffer-01763",
"text": " If <code>buffer</code> was created with a sharing mode of <code>VK_SHARING_MODE_CONCURRENT</code>, and one of <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> is <code>VK_QUEUE_FAMILY_IGNORED</code>, the other <strong class=\"purple\">must</strong> be <code>VK_QUEUE_FAMILY_IGNORED</code> or a special queue family reserved for external memory ownership transfers, as described in &amp;amp;lt;&amp;amp;lt;synchronization-queue-transfers&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-VkBufferMemoryBarrier-buffer-01193",
"text": " If <code>buffer</code> was created with a sharing mode of <code>VK_SHARING_MODE_EXCLUSIVE</code> and <code>srcQueueFamilyIndex</code> is <code>VK_QUEUE_FAMILY_IGNORED</code>, <code>dstQueueFamilyIndex</code> <strong class=\"purple\">must</strong> also be <code>VK_QUEUE_FAMILY_IGNORED</code>"
},
{
"vuid": "VUID-VkBufferMemoryBarrier-buffer-01764",
"text": " If <code>buffer</code> was created with a sharing mode of <code>VK_SHARING_MODE_EXCLUSIVE</code> and <code>srcQueueFamilyIndex</code> is not <code>VK_QUEUE_FAMILY_IGNORED</code>, it <strong class=\"purple\">must</strong> be a valid queue family or a special queue family reserved for external memory transfers, as described in &amp;amp;lt;&amp;amp;lt;synchronization-queue-transfers&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-VkBufferMemoryBarrier-buffer-01765",
"text": " If <code>buffer</code> was created with a sharing mode of <code>VK_SHARING_MODE_EXCLUSIVE</code> and <code>dstQueueFamilyIndex</code> is not <code>VK_QUEUE_FAMILY_IGNORED</code>, it <strong class=\"purple\">must</strong> be a valid queue family or a special queue family reserved for external memory transfers, as described in &amp;amp;lt;&amp;amp;lt;synchronization-queue-transfers&amp;amp;gt;&amp;amp;gt;."
}
]
},
"VkImageMemoryBarrier": {
"core": [
{
"vuid": "VUID-VkImageMemoryBarrier-oldLayout-01197",
"text": " <code>oldLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_UNDEFINED</code> or the current layout of the image subresources affected by the barrier"
},
{
"vuid": "VUID-VkImageMemoryBarrier-newLayout-01198",
"text": " <code>newLayout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_UNDEFINED</code> or <code>VK_IMAGE_LAYOUT_PREINITIALIZED</code>"
},
{
"vuid": "VUID-VkImageMemoryBarrier-image-01205",
"text": " If <code>image</code> was created with a sharing mode of <code>VK_SHARING_MODE_EXCLUSIVE</code>, and <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> are not <code>VK_QUEUE_FAMILY_IGNORED</code>, at least one of them <strong class=\"purple\">must</strong> be the same as the family of the queue that will execute this barrier"
},
{
"vuid": "VUID-VkImageMemoryBarrier-subresourceRange-01486",
"text": " <code>subresourceRange.baseMipLevel</code> <strong class=\"purple\">must</strong> be less than the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
},
{
"vuid": "VUID-VkImageMemoryBarrier-subresourceRange-01724",
"text": " If <code>subresourceRange.levelCount</code> is not <code>VK_REMAINING_MIP_LEVELS</code>, <span class=\"eq\"><code>subresourceRange.baseMipLevel</code> &#43; <code>subresourceRange.levelCount</code></span> <strong class=\"purple\">must</strong> be less than or equal to the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
},
{
"vuid": "VUID-VkImageMemoryBarrier-subresourceRange-01488",
"text": " <code>subresourceRange.baseArrayLayer</code> <strong class=\"purple\">must</strong> be less than the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
},
{
"vuid": "VUID-VkImageMemoryBarrier-subresourceRange-01725",
"text": " If <code>subresourceRange.layerCount</code> is not <code>VK_REMAINING_ARRAY_LAYERS</code>, <span class=\"eq\"><code>subresourceRange.baseArrayLayer</code> &#43; <code>subresourceRange.layerCount</code></span> <strong class=\"purple\">must</strong> be less than or equal to the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
},
{
"vuid": "VUID-VkImageMemoryBarrier-image-01207",
"text": " If <code>image</code> has a depth/stencil format with both depth and stencil components, then the <code>aspectMask</code> member of <code>subresourceRange</code> <strong class=\"purple\">must</strong> include both <code>VK_IMAGE_ASPECT_DEPTH_BIT</code> and <code>VK_IMAGE_ASPECT_STENCIL_BIT</code>"
},
{
"vuid": "VUID-VkImageMemoryBarrier-oldLayout-01208",
"text": " If either <code>oldLayout</code> or <code>newLayout</code> is <code>VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL</code> then <code>image</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT</code> set"
},
{
"vuid": "VUID-VkImageMemoryBarrier-oldLayout-01209",
"text": " If either <code>oldLayout</code> or <code>newLayout</code> is <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL</code> then <code>image</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code> set"
},
{
"vuid": "VUID-VkImageMemoryBarrier-oldLayout-01210",
"text": " If either <code>oldLayout</code> or <code>newLayout</code> is <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL</code> then <code>image</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code> set"
},
{
"vuid": "VUID-VkImageMemoryBarrier-oldLayout-01211",
"text": " If either <code>oldLayout</code> or <code>newLayout</code> is <code>VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL</code> then <code>image</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_SAMPLED_BIT</code> or <code>VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT</code> set"
},
{
"vuid": "VUID-VkImageMemoryBarrier-oldLayout-01212",
"text": " If either <code>oldLayout</code> or <code>newLayout</code> is <code>VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL</code> then <code>image</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_TRANSFER_SRC_BIT</code> set"
},
{
"vuid": "VUID-VkImageMemoryBarrier-oldLayout-01213",
"text": " If either <code>oldLayout</code> or <code>newLayout</code> is <code>VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL</code> then <code>image</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_TRANSFER_DST_BIT</code> set"
},
{
"vuid": "VUID-VkImageMemoryBarrier-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;amp;lt;&amp;amp;lt;devsandqueues-queueprops&amp;amp;gt;&amp;amp;gt;)."
}
],
"(VK_VERSION_1_1,VK_KHR_external_memory)": [
{
"vuid": "VUID-VkImageMemoryBarrier-image-01381",
"text": " If <code>image</code> was created with a sharing mode of <code>VK_SHARING_MODE_CONCURRENT</code>, at least one of <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> <strong class=\"purple\">must</strong> be <code>VK_QUEUE_FAMILY_IGNORED</code>"
},
{
"vuid": "VUID-VkImageMemoryBarrier-image-01766",
"text": " If <code>image</code> was created with a sharing mode of <code>VK_SHARING_MODE_CONCURRENT</code>, and one of <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> is <code>VK_QUEUE_FAMILY_IGNORED</code>, the other <strong class=\"purple\">must</strong> be <code>VK_QUEUE_FAMILY_IGNORED</code> or a special queue family reserved for external memory transfers, as described in &amp;amp;lt;&amp;amp;lt;synchronization-queue-transfers&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-VkImageMemoryBarrier-image-01201",
"text": " If <code>image</code> was created with a sharing mode of <code>VK_SHARING_MODE_EXCLUSIVE</code> and <code>srcQueueFamilyIndex</code> is <code>VK_QUEUE_FAMILY_IGNORED</code>, <code>dstQueueFamilyIndex</code> <strong class=\"purple\">must</strong> also be <code>VK_QUEUE_FAMILY_IGNORED</code>."
},
{
"vuid": "VUID-VkImageMemoryBarrier-image-01767",
"text": " If <code>image</code> was created with a sharing mode of <code>VK_SHARING_MODE_EXCLUSIVE</code> and <code>srcQueueFamilyIndex</code> is not <code>VK_QUEUE_FAMILY_IGNORED</code>, it <strong class=\"purple\">must</strong> be a valid queue family or a special queue family reserved for external memory transfers, as described in &amp;amp;lt;&amp;amp;lt;synchronization-queue-transfers&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-VkImageMemoryBarrier-image-01768",
"text": " If <code>image</code> was created with a sharing mode of <code>VK_SHARING_MODE_EXCLUSIVE</code> and <code>dstQueueFamilyIndex</code> is not <code>VK_QUEUE_FAMILY_IGNORED</code>, it <strong class=\"purple\">must</strong> be a valid queue family or a special queue family reserved for external memory transfers, as described in &amp;amp;lt;&amp;amp;lt;synchronization-queue-transfers&amp;amp;gt;&amp;amp;gt;."
}
],
"(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-VkImageMemoryBarrier-image-01671",
"text": " If <code>image</code> has a single-plane color format or is not <em>disjoint</em>, then the <code>aspectMask</code> member of <code>subresourceRange</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_ASPECT_COLOR_BIT</code>"
},
{
"vuid": "VUID-VkImageMemoryBarrier-image-01672",
"text": " If <code>image</code> has a multi-planar format and the image is <em>disjoint</em>, then the <code>aspectMask</code> member of <code>subresourceRange</code> <strong class=\"purple\">must</strong> include either at least one of <code>VK_IMAGE_ASPECT_PLANE_0_BIT</code>, <code>VK_IMAGE_ASPECT_PLANE_1_BIT</code>, and <code>VK_IMAGE_ASPECT_PLANE_2_BIT</code>; or <strong class=\"purple\">must</strong> include <code>VK_IMAGE_ASPECT_COLOR_BIT</code>"
},
{
"vuid": "VUID-VkImageMemoryBarrier-image-01673",
"text": " If <code>image</code> has a multi-planar format with only two planes, then the <code>aspectMask</code> member of <code>subresourceRange</code> <strong class=\"purple\">must</strong> not include <code>VK_IMAGE_ASPECT_PLANE_2_BIT</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_maintenance2)": [
{
"vuid": "VUID-VkImageMemoryBarrier-oldLayout-01658",
"text": " If either <code>oldLayout</code> or <code>newLayout</code> is <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL</code> then <code>image</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code> set"
},
{
"vuid": "VUID-VkImageMemoryBarrier-oldLayout-01659",
"text": " If either <code>oldLayout</code> or <code>newLayout</code> is <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL</code> then <code>image</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code> set"
}
]
},
"vkQueueWaitIdle": {
"core": [
{
"vuid": "VUID-vkQueueWaitIdle-queue-parameter",
"text": " <code>queue</code> <strong class=\"purple\">must</strong> be a valid <code>VkQueue</code> handle"
}
]
},
"vkDeviceWaitIdle": {
"core": [
{
"vuid": "VUID-vkDeviceWaitIdle-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
}
]
},
"vkCreateRenderPass": {
"core": [
{
"vuid": "VUID-vkCreateRenderPass-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkCreateRenderPass-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkRenderPassCreateInfo</code> structure"
},
{
"vuid": "VUID-vkCreateRenderPass-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateRenderPass-pRenderPass-parameter",
"text": " <code>pRenderPass</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkRenderPass</code> handle"
}
]
},
"VkRenderPassCreateInfo": {
"core": [
{
"vuid": "VUID-VkRenderPassCreateInfo-None-00832",
"text": " If any two subpasses operate on attachments with overlapping ranges of the same <code>VkDeviceMemory</code> object, and at least one subpass writes to that area of <code>VkDeviceMemory</code>, a subpass dependency <strong class=\"purple\">must</strong> be included (either directly or via some intermediate subpasses) between them"
},
{
"vuid": "VUID-VkRenderPassCreateInfo-attachment-00833",
"text": " If the <code>attachment</code> member of any element of <code>pInputAttachments</code>, <code>pColorAttachments</code>, <code>pResolveAttachments</code> or <code>pDepthStencilAttachment</code>, or the attachment indexed by any element of <code>pPreserveAttachments</code> in any element of <code>pSubpasses</code> is bound to a range of a <code>VkDeviceMemory</code> object that overlaps with any other attachment in any subpass (including the same subpass), the <code>VkAttachmentDescription</code> structures describing them <strong class=\"purple\">must</strong> include <code>VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT</code> in <code>flags</code>"
},
{
"vuid": "VUID-VkRenderPassCreateInfo-attachment-00834",
"text": " If the <code>attachment</code> member of any element of <code>pInputAttachments</code>, <code>pColorAttachments</code>, <code>pResolveAttachments</code> or <code>pDepthStencilAttachment</code>, or any element of <code>pPreserveAttachments</code> in any element of <code>pSubpasses</code> is not <code>VK_ATTACHMENT_UNUSED</code>, it <strong class=\"purple\">must</strong> be less than <code>attachmentCount</code>"
},
{
"vuid": "VUID-VkRenderPassCreateInfo-pPreserveAttachments-00835",
"text": " The value of each element of the <code>pPreserveAttachments</code> member in each element of <code>pSubpasses</code> <strong class=\"purple\">must</strong> not be <code>VK_ATTACHMENT_UNUSED</code>"
},
{
"vuid": "VUID-VkRenderPassCreateInfo-pAttachments-00836",
"text": " For any member of <code>pAttachments</code> with a <code>loadOp</code> equal to <code>VK_ATTACHMENT_LOAD_OP_CLEAR</code>, the first use of that attachment <strong class=\"purple\">must</strong> not specify a <code>layout</code> equal to <code>VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL</code>."
},
{
"vuid": "VUID-VkRenderPassCreateInfo-pDependencies-00837",
"text": " For any element of <code>pDependencies</code>, if the <code>srcSubpass</code> is not <code>VK_SUBPASS_EXTERNAL</code>, all stage flags included in the <code>srcStageMask</code> member of that dependency <strong class=\"purple\">must</strong> be a pipeline stage supported by the &amp;amp;lt;&amp;amp;lt;synchronization-pipeline-stages-types, pipeline&amp;amp;gt;&amp;amp;gt; identified by the <code>pipelineBindPoint</code> member of the source subpass."
},
{
"vuid": "VUID-VkRenderPassCreateInfo-pDependencies-00838",
"text": " For any element of <code>pDependencies</code>, if the <code>dstSubpass</code> is not <code>VK_SUBPASS_EXTERNAL</code>, all stage flags included in the <code>dstStageMask</code> member of that dependency <strong class=\"purple\">must</strong> be a pipeline stage supported by the &amp;amp;lt;&amp;amp;lt;synchronization-pipeline-stages-types, pipeline&amp;amp;gt;&amp;amp;gt; identified by the <code>pipelineBindPoint</code> member of the source subpass."
},
{
"vuid": "VUID-VkRenderPassCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkRenderPassCreateInfo-pNext-pNext",
"text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkRenderPassInputAttachmentAspectCreateInfo\">VkRenderPassInputAttachmentAspectCreateInfo</a> or <a href=\"#VkRenderPassMultiviewCreateInfo\">VkRenderPassMultiviewCreateInfo</a>"
},
{
"vuid": "VUID-VkRenderPassCreateInfo-sType-unique",
"text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkRenderPassCreateInfo-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkRenderPassCreateInfo-pAttachments-parameter",
"text": " If <code>attachmentCount</code> is not <code>0</code>, <code>pAttachments</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>attachmentCount</code> valid <code>VkAttachmentDescription</code> structures"
},
{
"vuid": "VUID-VkRenderPassCreateInfo-pSubpasses-parameter",
"text": " <code>pSubpasses</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>subpassCount</code> valid <code>VkSubpassDescription</code> structures"
},
{
"vuid": "VUID-VkRenderPassCreateInfo-pDependencies-parameter",
"text": " If <code>dependencyCount</code> is not <code>0</code>, <code>pDependencies</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>dependencyCount</code> valid <code>VkSubpassDependency</code> structures"
},
{
"vuid": "VUID-VkRenderPassCreateInfo-subpassCount-arraylength",
"text": " <code>subpassCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_maintenance2)": [
{
"vuid": "VUID-VkRenderPassCreateInfo-pAttachments-01566",
"text": " For any member of <code>pAttachments</code> with a <code>loadOp</code> equal to <code>VK_ATTACHMENT_LOAD_OP_CLEAR</code>, the first use of that attachment <strong class=\"purple\">must</strong> not specify a <code>layout</code> equal to <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL</code>."
},
{
"vuid": "VUID-VkRenderPassCreateInfo-pAttachments-01567",
"text": " For any member of <code>pAttachments</code> with a <code>stencilLoadOp</code> equal to <code>VK_ATTACHMENT_LOAD_OP_CLEAR</code>, the first use of that attachment <strong class=\"purple\">must</strong> not specify a <code>layout</code> equal to <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL</code>."
},
{
"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"
},
{
"vuid": "VUID-VkRenderPassCreateInfo-pNext-01963",
"text": " If the <code>pNext</code> chain includes an instance of <a href=\"#VkRenderPassInputAttachmentAspectCreateInfo\">VkRenderPassInputAttachmentAspectCreateInfo</a>, the <code>aspectMask</code> member of any element of <code>pAspectReferences</code> <strong class=\"purple\">must</strong> only include aspects that are present in images of the <code>format</code> of the input attachment specified by the <code>subpass</code> and <code>inputAttachment</code> of the same element of <code>pAspectReferences</code>"
}
],
"(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-aspectMask-01964",
"text": " <code>aspectMask</code> <strong class=\"purple\">must</strong> not include <code>VK_IMAGE_ASPECT_METADATA_BIT</code>"
},
{
"vuid": "VUID-VkInputAttachmentAspectReference-aspectMask-parameter",
"text": " <code>aspectMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageAspectFlagBits\">VkImageAspectFlagBits</a> values"
},
{
"vuid": "VUID-VkInputAttachmentAspectReference-aspectMask-requiredbitmask",
"text": " <code>aspectMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
}
]
},
"VkSubpassDescription": {
"core": [
{
"vuid": "VUID-VkSubpassDescription-pipelineBindPoint-00844",
"text": " <code>pipelineBindPoint</code> <strong class=\"purple\">must</strong> be <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>"
},
{
"vuid": "VUID-VkSubpassDescription-colorAttachmentCount-00845",
"text": " <code>colorAttachmentCount</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxColorAttachments</code>"
},
{
"vuid": "VUID-VkSubpassDescription-loadOp-00846",
"text": " If the first use of an attachment in this render pass is as an input attachment, and the attachment is not also used as a color or depth/stencil attachment in the same subpass, then <code>loadOp</code> <strong class=\"purple\">must</strong> not be <code>VK_ATTACHMENT_LOAD_OP_CLEAR</code>"
},
{
"vuid": "VUID-VkSubpassDescription-pResolveAttachments-00847",
"text": " If <code>pResolveAttachments</code> is not <code>NULL</code>, for each resolve attachment that does not have the value <code>VK_ATTACHMENT_UNUSED</code>, the corresponding color attachment <strong class=\"purple\">must</strong> not have the value <code>VK_ATTACHMENT_UNUSED</code>"
},
{
"vuid": "VUID-VkSubpassDescription-pResolveAttachments-00848",
"text": " If <code>pResolveAttachments</code> is not <code>NULL</code>, the sample count of each element of <code>pColorAttachments</code> <strong class=\"purple\">must</strong> be anything other than <code>VK_SAMPLE_COUNT_1_BIT</code>"
},
{
"vuid": "VUID-VkSubpassDescription-pResolveAttachments-00849",
"text": " Each element of <code>pResolveAttachments</code> <strong class=\"purple\">must</strong> have a sample count of <code>VK_SAMPLE_COUNT_1_BIT</code>"
},
{
"vuid": "VUID-VkSubpassDescription-pResolveAttachments-00850",
"text": " Each element of <code>pResolveAttachments</code> <strong class=\"purple\">must</strong> have the same <a href=\"#VkFormat\">VkFormat</a> as its corresponding color attachment"
},
{
"vuid": "VUID-VkSubpassDescription-pColorAttachments-01417",
"text": " All attachments in <code>pColorAttachments</code> that are not <code>VK_ATTACHMENT_UNUSED</code> <strong class=\"purple\">must</strong> have the same sample count"
},
{
"vuid": "VUID-VkSubpassDescription-None-00852",
"text": " If any input attachments are <code>VK_ATTACHMENT_UNUSED</code>, then any pipelines bound during the subpass <strong class=\"purple\">must</strong> not access those input attachments from the fragment shader"
},
{
"vuid": "VUID-VkSubpassDescription-attachment-00853",
"text": " The <code>attachment</code> member of each element of <code>pPreserveAttachments</code> <strong class=\"purple\">must</strong> not be <code>VK_ATTACHMENT_UNUSED</code>"
},
{
"vuid": "VUID-VkSubpassDescription-pPreserveAttachments-00854",
"text": " Each element of <code>pPreserveAttachments</code> <strong class=\"purple\">must</strong> not also be an element of any other member of the subpass description"
},
{
"vuid": "VUID-VkSubpassDescription-layout-00855",
"text": " If any attachment is used as both an input attachment and a color or depth/stencil attachment, then each use <strong class=\"purple\">must</strong> use the same <code>layout</code>"
},
{
"vuid": "VUID-VkSubpassDescription-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkSubpassDescriptionFlagBits\">VkSubpassDescriptionFlagBits</a> values"
},
{
"vuid": "VUID-VkSubpassDescription-pipelineBindPoint-parameter",
"text": " <code>pipelineBindPoint</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipelineBindPoint\">VkPipelineBindPoint</a> value"
},
{
"vuid": "VUID-VkSubpassDescription-pInputAttachments-parameter",
"text": " If <code>inputAttachmentCount</code> is not <code>0</code>, <code>pInputAttachments</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>inputAttachmentCount</code> valid <code>VkAttachmentReference</code> structures"
},
{
"vuid": "VUID-VkSubpassDescription-pColorAttachments-parameter",
"text": " If <code>colorAttachmentCount</code> is not <code>0</code>, <code>pColorAttachments</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>colorAttachmentCount</code> valid <code>VkAttachmentReference</code> structures"
},
{
"vuid": "VUID-VkSubpassDescription-pResolveAttachments-parameter",
"text": " If <code>colorAttachmentCount</code> is not <code>0</code>, and <code>pResolveAttachments</code> is not <code>NULL</code>, <code>pResolveAttachments</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>colorAttachmentCount</code> valid <code>VkAttachmentReference</code> structures"
},
{
"vuid": "VUID-VkSubpassDescription-pDepthStencilAttachment-parameter",
"text": " If <code>pDepthStencilAttachment</code> is not <code>NULL</code>, <code>pDepthStencilAttachment</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAttachmentReference</code> structure"
},
{
"vuid": "VUID-VkSubpassDescription-pPreserveAttachments-parameter",
"text": " If <code>preserveAttachmentCount</code> is not <code>0</code>, <code>pPreserveAttachments</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>preserveAttachmentCount</code> <code>uint32_t</code> values"
}
],
"(VK_AMD_mixed_attachment_samples)": [
{
"vuid": "VUID-VkSubpassDescription-pColorAttachments-01506",
"text": " All attachments in <code>pColorAttachments</code> that are not <code>VK_ATTACHMENT_UNUSED</code> <strong class=\"purple\">must</strong> have a sample count that is smaller than or equal to the sample count of <code>pDepthStencilAttachment</code> if it is not <code>VK_ATTACHMENT_UNUSED</code>"
}
],
"!(VK_AMD_mixed_attachment_samples)+!(VK_NV_framebuffer_mixed_samples)": [
{
"vuid": "VUID-VkSubpassDescription-pDepthStencilAttachment-01418",
"text": " If <code>pDepthStencilAttachment</code> is not <code>VK_ATTACHMENT_UNUSED</code> and any attachments in <code>pColorAttachments</code> are not <code>VK_ATTACHMENT_UNUSED</code>, they <strong class=\"purple\">must</strong> have the same sample count"
}
],
"(VK_NVX_multiview_per_view_attributes)": [
{
"vuid": "VUID-VkSubpassDescription-flags-00856",
"text": " If <code>flags</code> includes <code>VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX</code>, it <strong class=\"purple\">must</strong> also include <code>VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX</code>."
}
]
},
"VkAttachmentReference": {
"core": [
{
"vuid": "VUID-VkAttachmentReference-layout-00857",
"text": " <code>layout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_UNDEFINED</code> or <code>VK_IMAGE_LAYOUT_PREINITIALIZED</code>"
},
{
"vuid": "VUID-VkAttachmentReference-layout-parameter",
"text": " <code>layout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
}
]
},
"VkSubpassDependency": {
"core": [
{
"vuid": "VUID-VkSubpassDependency-srcSubpass-00858",
"text": " If <code>srcSubpass</code> is not <code>VK_SUBPASS_EXTERNAL</code>, <code>srcStageMask</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_STAGE_HOST_BIT</code>"
},
{
"vuid": "VUID-VkSubpassDependency-dstSubpass-00859",
"text": " If <code>dstSubpass</code> is not <code>VK_SUBPASS_EXTERNAL</code>, <code>dstStageMask</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_STAGE_HOST_BIT</code>"
},
{
"vuid": "VUID-VkSubpassDependency-srcStageMask-00860",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-geometryShader,geometry shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>srcStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT</code>"
},
{
"vuid": "VUID-VkSubpassDependency-dstStageMask-00861",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-geometryShader,geometry shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>dstStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT</code>"
},
{
"vuid": "VUID-VkSubpassDependency-srcStageMask-00862",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-tessellationShader,tessellation shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>srcStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT</code> or <code>VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT</code>"
},
{
"vuid": "VUID-VkSubpassDependency-dstStageMask-00863",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-tessellationShader,tessellation shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>dstStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT</code> or <code>VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT</code>"
},
{
"vuid": "VUID-VkSubpassDependency-srcSubpass-00864",
"text": " <code>srcSubpass</code> <strong class=\"purple\">must</strong> be less than or equal to <code>dstSubpass</code>, unless one of them is <code>VK_SUBPASS_EXTERNAL</code>, to avoid cyclic dependencies and ensure a valid execution order"
},
{
"vuid": "VUID-VkSubpassDependency-srcSubpass-00865",
"text": " <code>srcSubpass</code> and <code>dstSubpass</code> <strong class=\"purple\">must</strong> not both be equal to <code>VK_SUBPASS_EXTERNAL</code>"
},
{
"vuid": "VUID-VkSubpassDependency-srcSubpass-00866",
"text": " If <code>srcSubpass</code> is equal to <code>dstSubpass</code>, <code>srcStageMask</code> and <code>dstStageMask</code> <strong class=\"purple\">must</strong> only contain one of <code>VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT</code>, <code>VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT</code>, <code>VK_PIPELINE_STAGE_VERTEX_INPUT_BIT</code>, <code>VK_PIPELINE_STAGE_VERTEX_SHADER_BIT</code>, <code>VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT</code>, <code>VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT</code>, <code>VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT</code>, <code>VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT</code>, <code>VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT</code>, <code>VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT</code>, <code>VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT</code>, <code>VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT</code>, or <code>VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT</code>"
},
{
"vuid": "VUID-VkSubpassDependency-srcSubpass-00867",
"text": " If <code>srcSubpass</code> is equal to <code>dstSubpass</code> and not all of the stages in <code>srcStageMask</code> and <code>dstStageMask</code> are &amp;amp;lt;&amp;amp;lt;synchronization-framebuffer-regions,framebuffer-space stages&amp;amp;gt;&amp;amp;gt;, the &amp;amp;lt;&amp;amp;lt;synchronization-pipeline-stages-order, logically latest&amp;amp;gt;&amp;amp;gt; pipeline stage in <code>srcStageMask</code> <strong class=\"purple\">must</strong> be &amp;amp;lt;&amp;amp;lt;synchronization-pipeline-stages-order, logically earlier&amp;amp;gt;&amp;amp;gt; than or equal to the &amp;amp;lt;&amp;amp;lt;synchronization-pipeline-stages-order, logically earliest&amp;amp;gt;&amp;amp;gt; pipeline stage in <code>dstStageMask</code>"
},
{
"vuid": "VUID-VkSubpassDependency-srcAccessMask-00868",
"text": " Any access flag included in <code>srcAccessMask</code> <strong class=\"purple\">must</strong> be supported by one of the pipeline stages in <code>srcStageMask</code>, as specified in the &amp;amp;lt;&amp;amp;lt;synchronization-access-types-supported, table of supported access types&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-VkSubpassDependency-dstAccessMask-00869",
"text": " Any access flag included in <code>dstAccessMask</code> <strong class=\"purple\">must</strong> be supported by one of the pipeline stages in <code>dstStageMask</code>, as specified in the &amp;amp;lt;&amp;amp;lt;synchronization-access-types-supported, table of supported access types&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-VkSubpassDependency-srcStageMask-parameter",
"text": " <code>srcStageMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkPipelineStageFlagBits\">VkPipelineStageFlagBits</a> values"
},
{
"vuid": "VUID-VkSubpassDependency-srcStageMask-requiredbitmask",
"text": " <code>srcStageMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-VkSubpassDependency-dstStageMask-parameter",
"text": " <code>dstStageMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkPipelineStageFlagBits\">VkPipelineStageFlagBits</a> values"
},
{
"vuid": "VUID-VkSubpassDependency-dstStageMask-requiredbitmask",
"text": " <code>dstStageMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-VkSubpassDependency-srcAccessMask-parameter",
"text": " <code>srcAccessMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkAccessFlagBits\">VkAccessFlagBits</a> values"
},
{
"vuid": "VUID-VkSubpassDependency-dstAccessMask-parameter",
"text": " <code>dstAccessMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkAccessFlagBits\">VkAccessFlagBits</a> values"
},
{
"vuid": "VUID-VkSubpassDependency-dependencyFlags-parameter",
"text": " <code>dependencyFlags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkDependencyFlagBits\">VkDependencyFlagBits</a> values"
}
],
"(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-VkSubpassDependency-dependencyFlags-00870",
"text": " If <code>dependencyFlags</code> includes <code>VK_DEPENDENCY_VIEW_LOCAL_BIT</code>, then both <code>srcSubpass</code> and <code>dstSubpass</code> <strong class=\"purple\">must</strong> not equal <code>VK_SUBPASS_EXTERNAL</code>"
},
{
"vuid": "VUID-VkSubpassDependency-dependencyFlags-00871",
"text": " If <code>dependencyFlags</code> includes <code>VK_DEPENDENCY_VIEW_LOCAL_BIT</code>, then the render pass <strong class=\"purple\">must</strong> have multiview enabled"
},
{
"vuid": "VUID-VkSubpassDependency-srcSubpass-00872",
"text": " If <code>srcSubpass</code> equals <code>dstSubpass</code> and that subpass has more than one bit set in the view mask, then <code>dependencyFlags</code> <strong class=\"purple\">must</strong> include <code>VK_DEPENDENCY_VIEW_LOCAL_BIT</code>"
}
]
},
"vkDestroyRenderPass": {
"core": [
{
"vuid": "VUID-vkDestroyRenderPass-renderPass-00873",
"text": " All submitted commands that refer to <code>renderPass</code> <strong class=\"purple\">must</strong> have completed execution"
},
{
"vuid": "VUID-vkDestroyRenderPass-renderPass-00874",
"text": " If <code>VkAllocationCallbacks</code> were provided when <code>renderPass</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
},
{
"vuid": "VUID-vkDestroyRenderPass-renderPass-00875",
"text": " If no <code>VkAllocationCallbacks</code> were provided when <code>renderPass</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-vkDestroyRenderPass-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkDestroyRenderPass-renderPass-parameter",
"text": " If <code>renderPass</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>renderPass</code> <strong class=\"purple\">must</strong> be a valid <code>VkRenderPass</code> handle"
},
{
"vuid": "VUID-vkDestroyRenderPass-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkDestroyRenderPass-renderPass-parent",
"text": " If <code>renderPass</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkCreateFramebuffer": {
"core": [
{
"vuid": "VUID-vkCreateFramebuffer-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkCreateFramebuffer-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkFramebufferCreateInfo</code> structure"
},
{
"vuid": "VUID-vkCreateFramebuffer-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateFramebuffer-pFramebuffer-parameter",
"text": " <code>pFramebuffer</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkFramebuffer</code> handle"
}
]
},
"VkFramebufferCreateInfo": {
"core": [
{
"vuid": "VUID-VkFramebufferCreateInfo-attachmentCount-00876",
"text": " <code>attachmentCount</code> <strong class=\"purple\">must</strong> be equal to the attachment count specified in <code>renderPass</code>"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-pAttachments-00877",
"text": " Each element of <code>pAttachments</code> that is used as a color attachment or resolve attachment by <code>renderPass</code> <strong class=\"purple\">must</strong> have been created with a <code>usage</code> value including <code>VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT</code>"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-pAttachments-00878",
"text": " Each element of <code>pAttachments</code> that is used as a depth/stencil attachment by <code>renderPass</code> <strong class=\"purple\">must</strong> have been created with a <code>usage</code> value including <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code>"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-pAttachments-00879",
"text": " Each element of <code>pAttachments</code> that is used as an input attachment by <code>renderPass</code> <strong class=\"purple\">must</strong> have been created with a <code>usage</code> value including <code>VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT</code>"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-pAttachments-00880",
"text": " Each element of <code>pAttachments</code> <strong class=\"purple\">must</strong> have been created with an <a href=\"#VkFormat\">VkFormat</a> value that matches the <a href=\"#VkFormat\">VkFormat</a> specified by the corresponding <code>VkAttachmentDescription</code> in <code>renderPass</code>"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-pAttachments-00881",
"text": " Each element of <code>pAttachments</code> <strong class=\"purple\">must</strong> have been created with a <code>samples</code> value that matches the <code>samples</code> value specified by the corresponding <code>VkAttachmentDescription</code> in <code>renderPass</code>"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-pAttachments-00882",
"text": " Each element of <code>pAttachments</code> <strong class=\"purple\">must</strong> have dimensions at least as large as the corresponding framebuffer dimension"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-pAttachments-00883",
"text": " Each element of <code>pAttachments</code> <strong class=\"purple\">must</strong> only specify a single mip level"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-pAttachments-00884",
"text": " Each element of <code>pAttachments</code> <strong class=\"purple\">must</strong> have been created with the identity swizzle"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-width-00885",
"text": " <code>width</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>."
},
{
"vuid": "VUID-VkFramebufferCreateInfo-width-00886",
"text": " <code>width</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxFramebufferWidth</code>"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-height-00887",
"text": " <code>height</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>."
},
{
"vuid": "VUID-VkFramebufferCreateInfo-height-00888",
"text": " <code>height</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxFramebufferHeight</code>"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-layers-00889",
"text": " <code>layers</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>."
},
{
"vuid": "VUID-VkFramebufferCreateInfo-layers-00890",
"text": " <code>layers</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxFramebufferLayers</code>"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-renderPass-parameter",
"text": " <code>renderPass</code> <strong class=\"purple\">must</strong> be a valid <code>VkRenderPass</code> handle"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-pAttachments-parameter",
"text": " If <code>attachmentCount</code> is not <code>0</code>, <code>pAttachments</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>attachmentCount</code> valid <code>VkImageView</code> handles"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-commonparent",
"text": " Both of <code>renderPass</code>, and the elements of <code>pAttachments</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_maintenance1)": [
{
"vuid": "VUID-VkFramebufferCreateInfo-pAttachments-00891",
"text": " Each element of <code>pAttachments</code> that is a 2D or 2D array image view taken from a 3D image <strong class=\"purple\">must</strong> not be a depth/stencil format"
}
]
},
"vkDestroyFramebuffer": {
"core": [
{
"vuid": "VUID-vkDestroyFramebuffer-framebuffer-00892",
"text": " All submitted commands that refer to <code>framebuffer</code> <strong class=\"purple\">must</strong> have completed execution"
},
{
"vuid": "VUID-vkDestroyFramebuffer-framebuffer-00893",
"text": " If <code>VkAllocationCallbacks</code> were provided when <code>framebuffer</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
},
{
"vuid": "VUID-vkDestroyFramebuffer-framebuffer-00894",
"text": " If no <code>VkAllocationCallbacks</code> were provided when <code>framebuffer</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-vkDestroyFramebuffer-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkDestroyFramebuffer-framebuffer-parameter",
"text": " If <code>framebuffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>framebuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkFramebuffer</code> handle"
},
{
"vuid": "VUID-vkDestroyFramebuffer-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkDestroyFramebuffer-framebuffer-parent",
"text": " If <code>framebuffer</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkCmdBeginRenderPass": {
"core": [
{
"vuid": "VUID-vkCmdBeginRenderPass-initialLayout-00895",
"text": " If any of the <code>initialLayout</code> or <code>finalLayout</code> member of the <code>VkAttachmentDescription</code> structures or the <code>layout</code> member of the <code>VkAttachmentReference</code> structures specified when creating the render pass specified in the <code>renderPass</code> member of <code>pRenderPassBegin</code> is <code>VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL</code> then the corresponding attachment image subresource of the framebuffer specified in the <code>framebuffer</code> member of <code>pRenderPassBegin</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT</code> set"
},
{
"vuid": "VUID-vkCmdBeginRenderPass-initialLayout-00897",
"text": " If any of the <code>initialLayout</code> or <code>finalLayout</code> member of the <code>VkAttachmentDescription</code> structures or the <code>layout</code> member of the <code>VkAttachmentReference</code> structures specified when creating the render pass specified in the <code>renderPass</code> member of <code>pRenderPassBegin</code> is <code>VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL</code> then the corresponding attachment image subresource of the framebuffer specified in the <code>framebuffer</code> member of <code>pRenderPassBegin</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_SAMPLED_BIT</code> or <code>VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT</code> set"
},
{
"vuid": "VUID-vkCmdBeginRenderPass-initialLayout-00898",
"text": " If any of the <code>initialLayout</code> or <code>finalLayout</code> member of the <code>VkAttachmentDescription</code> structures or the <code>layout</code> member of the <code>VkAttachmentReference</code> structures specified when creating the render pass specified in the <code>renderPass</code> member of <code>pRenderPassBegin</code> is <code>VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL</code> then the corresponding attachment image subresource of the framebuffer specified in the <code>framebuffer</code> member of <code>pRenderPassBegin</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_TRANSFER_SRC_BIT</code> set"
},
{
"vuid": "VUID-vkCmdBeginRenderPass-initialLayout-00899",
"text": " If any of the <code>initialLayout</code> or <code>finalLayout</code> member of the <code>VkAttachmentDescription</code> structures or the <code>layout</code> member of the <code>VkAttachmentReference</code> structures specified when creating the render pass specified in the <code>renderPass</code> member of <code>pRenderPassBegin</code> is <code>VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL</code> then the corresponding attachment image subresource of the framebuffer specified in the <code>framebuffer</code> member of <code>pRenderPassBegin</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_TRANSFER_DST_BIT</code> set"
},
{
"vuid": "VUID-vkCmdBeginRenderPass-initialLayout-00900",
"text": " If any of the <code>initialLayout</code> members of the <code>VkAttachmentDescription</code> structures specified when creating the render pass specified in the <code>renderPass</code> member of <code>pRenderPassBegin</code> is not <code>VK_IMAGE_LAYOUT_UNDEFINED</code>, then each such <code>initialLayout</code> <strong class=\"purple\">must</strong> be equal to the current layout of the corresponding attachment image subresource of the framebuffer specified in the <code>framebuffer</code> member of <code>pRenderPassBegin</code>"
},
{
"vuid": "VUID-vkCmdBeginRenderPass-srcStageMask-00901",
"text": " The <code>srcStageMask</code> and <code>dstStageMask</code> members of any element of the <code>pDependencies</code> member of <a href=\"#VkRenderPassCreateInfo\">VkRenderPassCreateInfo</a> used to create <code>renderPass</code> <strong class=\"purple\">must</strong> be supported by the capabilities of the queue family identified by the <code>queueFamilyIndex</code> member of the <a href=\"#VkCommandPoolCreateInfo\">VkCommandPoolCreateInfo</a> used to create the command pool which <code>commandBuffer</code> was allocated from."
},
{
"vuid": "VUID-vkCmdBeginRenderPass-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdBeginRenderPass-pRenderPassBegin-parameter",
"text": " <code>pRenderPassBegin</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkRenderPassBeginInfo</code> structure"
},
{
"vuid": "VUID-vkCmdBeginRenderPass-contents-parameter",
"text": " <code>contents</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSubpassContents\">VkSubpassContents</a> value"
},
{
"vuid": "VUID-vkCmdBeginRenderPass-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdBeginRenderPass-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdBeginRenderPass-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
},
{
"vuid": "VUID-vkCmdBeginRenderPass-bufferlevel",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a primary <code>VkCommandBuffer</code>"
}
],
"!(VK_VERSION_1_1,VK_KHR_maintenance2)": [
{
"vuid": "VUID-vkCmdBeginRenderPass-initialLayout-00896",
"text": " If any of the <code>initialLayout</code> or <code>finalLayout</code> member of the <code>VkAttachmentDescription</code> structures or the <code>layout</code> member of the <code>VkAttachmentReference</code> structures specified when creating the render pass specified in the <code>renderPass</code> member of <code>pRenderPassBegin</code> is <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL</code>, or <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL</code> then the corresponding attachment image subresource of the framebuffer specified in the <code>framebuffer</code> member of <code>pRenderPassBegin</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code> set"
}
],
"(VK_VERSION_1_1,VK_KHR_maintenance2)": [
{
"vuid": "VUID-vkCmdBeginRenderPass-initialLayout-01758",
"text": " If any of the <code>initialLayout</code> or <code>finalLayout</code> member of the <code>VkAttachmentDescription</code> structures or the <code>layout</code> member of the <code>VkAttachmentReference</code> structures specified when creating the render pass specified in the <code>renderPass</code> member of <code>pRenderPassBegin</code> is <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL</code>, or <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL</code> then the corresponding attachment image subresource of the framebuffer specified in the <code>framebuffer</code> member of <code>pRenderPassBegin</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code> set"
}
]
},
"VkRenderPassBeginInfo": {
"core": [
{
"vuid": "VUID-VkRenderPassBeginInfo-clearValueCount-00902",
"text": " <code>clearValueCount</code> <strong class=\"purple\">must</strong> be greater than the largest attachment index in <code>renderPass</code> that specifies a <code>loadOp</code> (or <code>stencilLoadOp</code>, if the attachment has a depth/stencil format) of <code>VK_ATTACHMENT_LOAD_OP_CLEAR</code>"
},
{
"vuid": "VUID-VkRenderPassBeginInfo-clearValueCount-00903",
"text": " If <code>clearValueCount</code> is not <code>0</code>, <code>pClearValues</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>clearValueCount</code> valid <code>VkClearValue</code> unions"
},
{
"vuid": "VUID-VkRenderPassBeginInfo-renderPass-00904",
"text": " <code>renderPass</code> <strong class=\"purple\">must</strong> be &amp;amp;lt;&amp;amp;lt;renderpass-compatibility,compatible&amp;amp;gt;&amp;amp;gt; with the <code>renderPass</code> member of the <code>VkFramebufferCreateInfo</code> structure specified when creating <code>framebuffer</code>."
},
{
"vuid": "VUID-VkRenderPassBeginInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO</code>"
},
{
"vuid": "VUID-VkRenderPassBeginInfo-pNext-pNext",
"text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkDeviceGroupRenderPassBeginInfo\">VkDeviceGroupRenderPassBeginInfo</a> or <a href=\"#VkRenderPassSampleLocationsBeginInfoEXT\">VkRenderPassSampleLocationsBeginInfoEXT</a>"
},
{
"vuid": "VUID-VkRenderPassBeginInfo-sType-unique",
"text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkRenderPassBeginInfo-renderPass-parameter",
"text": " <code>renderPass</code> <strong class=\"purple\">must</strong> be a valid <code>VkRenderPass</code> handle"
},
{
"vuid": "VUID-VkRenderPassBeginInfo-framebuffer-parameter",
"text": " <code>framebuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkFramebuffer</code> handle"
},
{
"vuid": "VUID-VkRenderPassBeginInfo-commonparent",
"text": " Both of <code>framebuffer</code>, and <code>renderPass</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
]
},
"VkRenderPassSampleLocationsBeginInfoEXT": {
"(VK_EXT_sample_locations)": [
{
"vuid": "VUID-VkRenderPassSampleLocationsBeginInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT</code>"
},
{
"vuid": "VUID-VkRenderPassSampleLocationsBeginInfoEXT-pAttachmentInitialSampleLocations-parameter",
"text": " If <code>attachmentInitialSampleLocationsCount</code> is not <code>0</code>, <code>pAttachmentInitialSampleLocations</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>attachmentInitialSampleLocationsCount</code> valid <code>VkAttachmentSampleLocationsEXT</code> structures"
},
{
"vuid": "VUID-VkRenderPassSampleLocationsBeginInfoEXT-pPostSubpassSampleLocations-parameter",
"text": " If <code>postSubpassSampleLocationsCount</code> is not <code>0</code>, <code>pPostSubpassSampleLocations</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>postSubpassSampleLocationsCount</code> valid <code>VkSubpassSampleLocationsEXT</code> structures"
}
]
},
"VkAttachmentSampleLocationsEXT": {
"(VK_EXT_sample_locations)": [
{
"vuid": "VUID-VkAttachmentSampleLocationsEXT-attachmentIndex-01531",
"text": " <code>attachmentIndex</code> <strong class=\"purple\">must</strong> be less than the <code>attachmentCount</code> specified in <a href=\"#VkRenderPassCreateInfo\">VkRenderPassCreateInfo</a> the render pass specified by <a href=\"#VkRenderPassBeginInfo\">VkRenderPassBeginInfo</a>::<code>renderPass</code> was created with"
},
{
"vuid": "VUID-VkAttachmentSampleLocationsEXT-sampleLocationsInfo-parameter",
"text": " <code>sampleLocationsInfo</code> <strong class=\"purple\">must</strong> be a valid <code>VkSampleLocationsInfoEXT</code> structure"
}
]
},
"VkSubpassSampleLocationsEXT": {
"(VK_EXT_sample_locations)": [
{
"vuid": "VUID-VkSubpassSampleLocationsEXT-subpassIndex-01532",
"text": " <code>subpassIndex</code> <strong class=\"purple\">must</strong> be less than the <code>subpassCount</code> specified in <a href=\"#VkRenderPassCreateInfo\">VkRenderPassCreateInfo</a> the render pass specified by <a href=\"#VkRenderPassBeginInfo\">VkRenderPassBeginInfo</a>::<code>renderPass</code> was created with"
},
{
"vuid": "VUID-VkSubpassSampleLocationsEXT-sampleLocationsInfo-parameter",
"text": " <code>sampleLocationsInfo</code> <strong class=\"purple\">must</strong> be a valid <code>VkSampleLocationsInfoEXT</code> structure"
}
]
},
"VkDeviceGroupRenderPassBeginInfo": {
"(VK_VERSION_1_1,VK_KHR_device_group)": [
{
"vuid": "VUID-VkDeviceGroupRenderPassBeginInfo-deviceMask-00905",
"text": " <code>deviceMask</code> <strong class=\"purple\">must</strong> be a valid device mask value"
},
{
"vuid": "VUID-VkDeviceGroupRenderPassBeginInfo-deviceMask-00906",
"text": " <code>deviceMask</code> <strong class=\"purple\">must</strong> not be zero"
},
{
"vuid": "VUID-VkDeviceGroupRenderPassBeginInfo-deviceMask-00907",
"text": " <code>deviceMask</code> <strong class=\"purple\">must</strong> be a subset of the command buffer&#8217;s initial device mask"
},
{
"vuid": "VUID-VkDeviceGroupRenderPassBeginInfo-deviceRenderAreaCount-00908",
"text": " <code>deviceRenderAreaCount</code> <strong class=\"purple\">must</strong> either be zero or equal to the number of physical devices in the logical device."
},
{
"vuid": "VUID-VkDeviceGroupRenderPassBeginInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO</code>"
},
{
"vuid": "VUID-VkDeviceGroupRenderPassBeginInfo-pDeviceRenderAreas-parameter",
"text": " If <code>deviceRenderAreaCount</code> is not <code>0</code>, <code>pDeviceRenderAreas</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>deviceRenderAreaCount</code> <code>VkRect2D</code> structures"
}
]
},
"vkGetRenderAreaGranularity": {
"core": [
{
"vuid": "VUID-vkGetRenderAreaGranularity-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkGetRenderAreaGranularity-renderPass-parameter",
"text": " <code>renderPass</code> <strong class=\"purple\">must</strong> be a valid <code>VkRenderPass</code> handle"
},
{
"vuid": "VUID-vkGetRenderAreaGranularity-pGranularity-parameter",
"text": " <code>pGranularity</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkExtent2D</code> structure"
},
{
"vuid": "VUID-vkGetRenderAreaGranularity-renderPass-parent",
"text": " <code>renderPass</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkCmdNextSubpass": {
"core": [
{
"vuid": "VUID-vkCmdNextSubpass-None-00909",
"text": " The current subpass index <strong class=\"purple\">must</strong> be less than the number of subpasses in the render pass minus one"
},
{
"vuid": "VUID-vkCmdNextSubpass-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdNextSubpass-contents-parameter",
"text": " <code>contents</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSubpassContents\">VkSubpassContents</a> value"
},
{
"vuid": "VUID-vkCmdNextSubpass-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdNextSubpass-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdNextSubpass-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
},
{
"vuid": "VUID-vkCmdNextSubpass-bufferlevel",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a primary <code>VkCommandBuffer</code>"
}
]
},
"vkCmdEndRenderPass": {
"core": [
{
"vuid": "VUID-vkCmdEndRenderPass-None-00910",
"text": " The current subpass index <strong class=\"purple\">must</strong> be equal to the number of subpasses in the render pass minus one"
},
{
"vuid": "VUID-vkCmdEndRenderPass-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdEndRenderPass-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdEndRenderPass-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdEndRenderPass-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
},
{
"vuid": "VUID-vkCmdEndRenderPass-bufferlevel",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a primary <code>VkCommandBuffer</code>"
}
]
},
"vkCreateShaderModule": {
"core": [
{
"vuid": "VUID-vkCreateShaderModule-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkCreateShaderModule-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkShaderModuleCreateInfo</code> structure"
},
{
"vuid": "VUID-vkCreateShaderModule-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateShaderModule-pShaderModule-parameter",
"text": " <code>pShaderModule</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkShaderModule</code> handle"
}
]
},
"VkShaderModuleCreateInfo": {
"core": [
{
"vuid": "VUID-VkShaderModuleCreateInfo-codeSize-01085",
"text": " <code>codeSize</code> <strong class=\"purple\">must</strong> be greater than 0"
},
{
"vuid": "VUID-VkShaderModuleCreateInfo-pCode-01089",
"text": " <code>pCode</code> <strong class=\"purple\">must</strong> declare the <code>Shader</code> capability for SPIR-V code"
},
{
"vuid": "VUID-VkShaderModuleCreateInfo-pCode-01090",
"text": " <code>pCode</code> <strong class=\"purple\">must</strong> not declare any capability that is not supported by the API, as described by the &amp;amp;lt;&amp;amp;lt;spirvenv-module-validation, Capabilities&amp;amp;gt;&amp;amp;gt; section of the &amp;amp;lt;&amp;amp;lt;spirvenv-capabilities,SPIR-V Environment&amp;amp;gt;&amp;amp;gt; appendix"
},
{
"vuid": "VUID-VkShaderModuleCreateInfo-pCode-01091",
"text": " If <code>pCode</code> declares any of the capabilities listed as <strong class=\"purple\">optional</strong> in the &amp;amp;lt;&amp;amp;lt;spirvenv-capabilities-table,SPIR-V Environment&amp;amp;gt;&amp;amp;gt; appendix, the corresponding feature(s) <strong class=\"purple\">must</strong> be enabled."
},
{
"vuid": "VUID-VkShaderModuleCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkShaderModuleCreateInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkShaderModuleValidationCacheCreateInfoEXT\">VkShaderModuleValidationCacheCreateInfoEXT</a>"
},
{
"vuid": "VUID-VkShaderModuleCreateInfo-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkShaderModuleCreateInfo-pCode-parameter",
"text": " <code>pCode</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of \\(codeSize \\over 4\\) <code>uint32_t</code> values"
}
],
"!(VK_NV_glsl_shader)": [
{
"vuid": "VUID-VkShaderModuleCreateInfo-codeSize-01086",
"text": " <code>codeSize</code> <strong class=\"purple\">must</strong> be a multiple of 4"
},
{
"vuid": "VUID-VkShaderModuleCreateInfo-pCode-01087",
"text": " <code>pCode</code> <strong class=\"purple\">must</strong> point to valid SPIR-V code, formatted and packed as described by the &amp;amp;lt;&amp;amp;lt;spirv-spec,Khronos SPIR-V Specification&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-VkShaderModuleCreateInfo-pCode-01088",
"text": " <code>pCode</code> <strong class=\"purple\">must</strong> adhere to the validation rules described by the &amp;amp;lt;&amp;amp;lt;spirvenv-module-validation, Validation Rules within a Module&amp;amp;gt;&amp;amp;gt; section of the &amp;amp;lt;&amp;amp;lt;spirvenv-capabilities,SPIR-V Environment&amp;amp;gt;&amp;amp;gt; appendix"
}
],
"(VK_NV_glsl_shader)": [
{
"vuid": "VUID-VkShaderModuleCreateInfo-pCode-01376",
"text": " If <code>pCode</code> points to SPIR-V code, <code>codeSize</code> <strong class=\"purple\">must</strong> be a multiple of 4"
},
{
"vuid": "VUID-VkShaderModuleCreateInfo-pCode-01377",
"text": " <code>pCode</code> <strong class=\"purple\">must</strong> point to either valid SPIR-V code, formatted and packed as described by the <a href=\"#spirv-spec\">Khronos SPIR-V Specification</a> or valid GLSL code which <strong class=\"purple\">must</strong> be written to the GL_KHR_vulkan_glsl extension specification"
},
{
"vuid": "VUID-VkShaderModuleCreateInfo-pCode-01378",
"text": " If <code>pCode</code> points to SPIR-V code, that code <strong class=\"purple\">must</strong> adhere to the validation rules described by the &amp;amp;lt;&amp;amp;lt;spirvenv-module-validation, Validation Rules within a Module&amp;amp;gt;&amp;amp;gt; section of the &amp;amp;lt;&amp;amp;lt;spirvenv-capabilities,SPIR-V Environment&amp;amp;gt;&amp;amp;gt; appendix"
},
{
"vuid": "VUID-VkShaderModuleCreateInfo-pCode-01379",
"text": " If <code>pCode</code> points to GLSL code, it <strong class=\"purple\">must</strong> be valid GLSL code written to the GL_KHR_vulkan_glsl GLSL extension specification"
}
]
},
"VkShaderModuleValidationCacheCreateInfoEXT": {
"(VK_EXT_validation_cache)": [
{
"vuid": "VUID-VkShaderModuleValidationCacheCreateInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT</code>"
},
{
"vuid": "VUID-VkShaderModuleValidationCacheCreateInfoEXT-validationCache-parameter",
"text": " <code>validationCache</code> <strong class=\"purple\">must</strong> be a valid <code>VkValidationCacheEXT</code> handle"
}
]
},
"vkDestroyShaderModule": {
"core": [
{
"vuid": "VUID-vkDestroyShaderModule-shaderModule-01092",
"text": " If <code>VkAllocationCallbacks</code> were provided when <code>shaderModule</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
},
{
"vuid": "VUID-vkDestroyShaderModule-shaderModule-01093",
"text": " If no <code>VkAllocationCallbacks</code> were provided when <code>shaderModule</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-vkDestroyShaderModule-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkDestroyShaderModule-shaderModule-parameter",
"text": " If <code>shaderModule</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>shaderModule</code> <strong class=\"purple\">must</strong> be a valid <code>VkShaderModule</code> handle"
},
{
"vuid": "VUID-vkDestroyShaderModule-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkDestroyShaderModule-shaderModule-parent",
"text": " If <code>shaderModule</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkCreateValidationCacheEXT": {
"(VK_EXT_validation_cache)": [
{
"vuid": "VUID-vkCreateValidationCacheEXT-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkCreateValidationCacheEXT-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkValidationCacheCreateInfoEXT</code> structure"
},
{
"vuid": "VUID-vkCreateValidationCacheEXT-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateValidationCacheEXT-pValidationCache-parameter",
"text": " <code>pValidationCache</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkValidationCacheEXT</code> handle"
}
]
},
"VkValidationCacheCreateInfoEXT": {
"(VK_EXT_validation_cache)": [
{
"vuid": "VUID-VkValidationCacheCreateInfoEXT-initialDataSize-01534",
"text": " If <code>initialDataSize</code> is not <code>0</code>, it <strong class=\"purple\">must</strong> be equal to the size of <code>pInitialData</code>, as returned by <code>vkGetValidationCacheDataEXT</code> when <code>pInitialData</code> was originally retrieved"
},
{
"vuid": "VUID-VkValidationCacheCreateInfoEXT-initialDataSize-01535",
"text": " If <code>initialDataSize</code> is not <code>0</code>, <code>pInitialData</code> <strong class=\"purple\">must</strong> have been retrieved from a previous call to <code>vkGetValidationCacheDataEXT</code>"
},
{
"vuid": "VUID-VkValidationCacheCreateInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT</code>"
},
{
"vuid": "VUID-VkValidationCacheCreateInfoEXT-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkValidationCacheCreateInfoEXT-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkValidationCacheCreateInfoEXT-pInitialData-parameter",
"text": " If <code>initialDataSize</code> is not <code>0</code>, <code>pInitialData</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>initialDataSize</code> bytes"
}
]
},
"vkMergeValidationCachesEXT": {
"(VK_EXT_validation_cache)": [
{
"vuid": "VUID-vkMergeValidationCachesEXT-dstCache-01536",
"text": " <code>dstCache</code> <strong class=\"purple\">must</strong> not appear in the list of source caches"
},
{
"vuid": "VUID-vkMergeValidationCachesEXT-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkMergeValidationCachesEXT-dstCache-parameter",
"text": " <code>dstCache</code> <strong class=\"purple\">must</strong> be a valid <code>VkValidationCacheEXT</code> handle"
},
{
"vuid": "VUID-vkMergeValidationCachesEXT-pSrcCaches-parameter",
"text": " <code>pSrcCaches</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>srcCacheCount</code> valid <code>VkValidationCacheEXT</code> handles"
},
{
"vuid": "VUID-vkMergeValidationCachesEXT-srcCacheCount-arraylength",
"text": " <code>srcCacheCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkMergeValidationCachesEXT-dstCache-parent",
"text": " <code>dstCache</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
},
{
"vuid": "VUID-vkMergeValidationCachesEXT-pSrcCaches-parent",
"text": " Each element of <code>pSrcCaches</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkGetValidationCacheDataEXT": {
"(VK_EXT_validation_cache)": [
{
"vuid": "VUID-vkGetValidationCacheDataEXT-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkGetValidationCacheDataEXT-validationCache-parameter",
"text": " <code>validationCache</code> <strong class=\"purple\">must</strong> be a valid <code>VkValidationCacheEXT</code> handle"
},
{
"vuid": "VUID-vkGetValidationCacheDataEXT-pDataSize-parameter",
"text": " <code>pDataSize</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>size_t</code> value"
},
{
"vuid": "VUID-vkGetValidationCacheDataEXT-pData-parameter",
"text": " If the value referenced by <code>pDataSize</code> is not <code>0</code>, and <code>pData</code> is not <code>NULL</code>, <code>pData</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pDataSize</code> bytes"
},
{
"vuid": "VUID-vkGetValidationCacheDataEXT-validationCache-parent",
"text": " <code>validationCache</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkDestroyValidationCacheEXT": {
"(VK_EXT_validation_cache)": [
{
"vuid": "VUID-vkDestroyValidationCacheEXT-validationCache-01537",
"text": " If <code>VkAllocationCallbacks</code> were provided when <code>validationCache</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
},
{
"vuid": "VUID-vkDestroyValidationCacheEXT-validationCache-01538",
"text": " If no <code>VkAllocationCallbacks</code> were provided when <code>validationCache</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-vkDestroyValidationCacheEXT-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkDestroyValidationCacheEXT-validationCache-parameter",
"text": " If <code>validationCache</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>validationCache</code> <strong class=\"purple\">must</strong> be a valid <code>VkValidationCacheEXT</code> handle"
},
{
"vuid": "VUID-vkDestroyValidationCacheEXT-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkDestroyValidationCacheEXT-validationCache-parent",
"text": " If <code>validationCache</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkCreateComputePipelines": {
"core": [
{
"vuid": "VUID-vkCreateComputePipelines-flags-00695",
"text": " If the <code>flags</code> member of any element of <code>pCreateInfos</code> contains the <code>VK_PIPELINE_CREATE_DERIVATIVE_BIT</code> flag, and the <code>basePipelineIndex</code> member of that same element is not <code>-1</code>, <code>basePipelineIndex</code> <strong class=\"purple\">must</strong> be less than the index into <code>pCreateInfos</code> that corresponds to that element"
},
{
"vuid": "VUID-vkCreateComputePipelines-flags-00696",
"text": " If the <code>flags</code> member of any element of <code>pCreateInfos</code> contains the <code>VK_PIPELINE_CREATE_DERIVATIVE_BIT</code> flag, the base pipeline <strong class=\"purple\">must</strong> have been created with the <code>VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT</code> flag set"
},
{
"vuid": "VUID-vkCreateComputePipelines-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkCreateComputePipelines-pipelineCache-parameter",
"text": " If <code>pipelineCache</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>pipelineCache</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipelineCache</code> handle"
},
{
"vuid": "VUID-vkCreateComputePipelines-pCreateInfos-parameter",
"text": " <code>pCreateInfos</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>createInfoCount</code> valid <code>VkComputePipelineCreateInfo</code> structures"
},
{
"vuid": "VUID-vkCreateComputePipelines-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateComputePipelines-pPipelines-parameter",
"text": " <code>pPipelines</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>createInfoCount</code> <code>VkPipeline</code> handles"
},
{
"vuid": "VUID-vkCreateComputePipelines-createInfoCount-arraylength",
"text": " <code>createInfoCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkCreateComputePipelines-pipelineCache-parent",
"text": " If <code>pipelineCache</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"VkComputePipelineCreateInfo": {
"core": [
{
"vuid": "VUID-VkComputePipelineCreateInfo-flags-00697",
"text": " If <code>flags</code> contains the <code>VK_PIPELINE_CREATE_DERIVATIVE_BIT</code> flag, and <code>basePipelineIndex</code> is -1, <code>basePipelineHandle</code> <strong class=\"purple\">must</strong> be a valid handle to a compute <code>VkPipeline</code>"
},
{
"vuid": "VUID-VkComputePipelineCreateInfo-flags-00698",
"text": " If <code>flags</code> contains the <code>VK_PIPELINE_CREATE_DERIVATIVE_BIT</code> flag, and <code>basePipelineHandle</code> is <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>basePipelineIndex</code> <strong class=\"purple\">must</strong> be a valid index into the calling command&#8217;s <code>pCreateInfos</code> parameter"
},
{
"vuid": "VUID-VkComputePipelineCreateInfo-flags-00699",
"text": " If <code>flags</code> contains the <code>VK_PIPELINE_CREATE_DERIVATIVE_BIT</code> flag, and <code>basePipelineIndex</code> is not -1, <code>basePipelineHandle</code> <strong class=\"purple\">must</strong> be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-VkComputePipelineCreateInfo-flags-00700",
"text": " If <code>flags</code> contains the <code>VK_PIPELINE_CREATE_DERIVATIVE_BIT</code> flag, and <code>basePipelineHandle</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>basePipelineIndex</code> <strong class=\"purple\">must</strong> be -1"
},
{
"vuid": "VUID-VkComputePipelineCreateInfo-stage-00701",
"text": " The <code>stage</code> member of <code>stage</code> <strong class=\"purple\">must</strong> be <code>VK_SHADER_STAGE_COMPUTE_BIT</code>"
},
{
"vuid": "VUID-VkComputePipelineCreateInfo-stage-00702",
"text": " The shader code for the entry point identified by <code>stage</code> and the rest of the state identified by this structure <strong class=\"purple\">must</strong> adhere to the pipeline linking rules described in the &amp;amp;lt;&amp;amp;lt;interfaces,Shader Interfaces&amp;amp;gt;&amp;amp;gt; chapter"
},
{
"vuid": "VUID-VkComputePipelineCreateInfo-layout-00703",
"text": " <code>layout</code> <strong class=\"purple\">must</strong> be &amp;amp;lt;&amp;amp;lt;descriptorsets-pipelinelayout-consistency,consistent&amp;amp;gt;&amp;amp;gt; with the layout of the compute shader specified in <code>stage</code>"
},
{
"vuid": "VUID-VkComputePipelineCreateInfo-layout-01687",
"text": " The number of resources in <code>layout</code> accessible to the compute shader stage <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxPerStageResources</code>"
},
{
"vuid": "VUID-VkComputePipelineCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkComputePipelineCreateInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkComputePipelineCreateInfo-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkPipelineCreateFlagBits\">VkPipelineCreateFlagBits</a> values"
},
{
"vuid": "VUID-VkComputePipelineCreateInfo-stage-parameter",
"text": " <code>stage</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipelineShaderStageCreateInfo</code> structure"
},
{
"vuid": "VUID-VkComputePipelineCreateInfo-layout-parameter",
"text": " <code>layout</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipelineLayout</code> handle"
},
{
"vuid": "VUID-VkComputePipelineCreateInfo-commonparent",
"text": " Both of <code>basePipelineHandle</code>, and <code>layout</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
]
},
"VkPipelineShaderStageCreateInfo": {
"core": [
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-00704",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-geometryShader,geometry shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>stage</code> <strong class=\"purple\">must</strong> not be <code>VK_SHADER_STAGE_GEOMETRY_BIT</code>"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-00705",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-tessellationShader,tessellation shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>stage</code> <strong class=\"purple\">must</strong> not be <code>VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT</code> or <code>VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT</code>"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-00706",
"text": " <code>stage</code> <strong class=\"purple\">must</strong> not be <code>VK_SHADER_STAGE_ALL_GRAPHICS</code>, or <code>VK_SHADER_STAGE_ALL</code>"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-pName-00707",
"text": " <code>pName</code> <strong class=\"purple\">must</strong> be the name of an <code>OpEntryPoint</code> in <code>module</code> with an execution model that matches <code>stage</code>"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-maxClipDistances-00708",
"text": " If the identified entry point includes any variable in its interface that is declared with the <code>ClipDistance</code> <code>BuiltIn</code> decoration, that variable <strong class=\"purple\">must</strong> not have an array size greater than <code>VkPhysicalDeviceLimits</code>::<code>maxClipDistances</code>"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-maxCullDistances-00709",
"text": " If the identified entry point includes any variable in its interface that is declared with the <code>CullDistance</code> <code>BuiltIn</code> decoration, that variable <strong class=\"purple\">must</strong> not have an array size greater than <code>VkPhysicalDeviceLimits</code>::<code>maxCullDistances</code>"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-maxCombinedClipAndCullDistances-00710",
"text": " If the identified entry point includes any variables in its interface that are declared with the <code>ClipDistance</code> or <code>CullDistance</code> <code>BuiltIn</code> decoration, those variables <strong class=\"purple\">must</strong> not have array sizes which sum to more than <code>VkPhysicalDeviceLimits</code>::<code>maxCombinedClipAndCullDistances</code>"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-maxSampleMaskWords-00711",
"text": " If the identified entry point includes any variable in its interface that is declared with the <code>SampleMask</code> <code>BuiltIn</code> decoration, that variable <strong class=\"purple\">must</strong> not have an array size greater than <code>VkPhysicalDeviceLimits</code>::<code>maxSampleMaskWords</code>"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-00712",
"text": " If <code>stage</code> is <code>VK_SHADER_STAGE_VERTEX_BIT</code>, the identified entry point <strong class=\"purple\">must</strong> not include any input variable in its interface that is decorated with <code>CullDistance</code>"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-00713",
"text": " If <code>stage</code> is <code>VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT</code> or <code>VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT</code>, and the identified entry point has an <code>OpExecutionMode</code> instruction that specifies a patch size with <code>OutputVertices</code>, the patch size <strong class=\"purple\">must</strong> be greater than <code>0</code> and less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxTessellationPatchSize</code>"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-00714",
"text": " If <code>stage</code> is <code>VK_SHADER_STAGE_GEOMETRY_BIT</code>, the identified entry point <strong class=\"purple\">must</strong> have an <code>OpExecutionMode</code> instruction that specifies a maximum output vertex count that is greater than <code>0</code> and less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxGeometryOutputVertices</code>"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-00715",
"text": " If <code>stage</code> is <code>VK_SHADER_STAGE_GEOMETRY_BIT</code>, the identified entry point <strong class=\"purple\">must</strong> have an <code>OpExecutionMode</code> instruction that specifies an invocation count that is greater than <code>0</code> and less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxGeometryShaderInvocations</code>"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-00716",
"text": " If <code>stage</code> is <code>VK_SHADER_STAGE_GEOMETRY_BIT</code>, and the identified entry point writes to <code>Layer</code> for any primitive, it <strong class=\"purple\">must</strong> write the same value to <code>Layer</code> for all vertices of a given primitive"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-00717",
"text": " If <code>stage</code> is <code>VK_SHADER_STAGE_GEOMETRY_BIT</code>, and the identified entry point writes to <code>ViewportIndex</code> for any primitive, it <strong class=\"purple\">must</strong> write the same value to <code>ViewportIndex</code> for all vertices of a given primitive"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-00718",
"text": " If <code>stage</code> is <code>VK_SHADER_STAGE_FRAGMENT_BIT</code>, the identified entry point <strong class=\"purple\">must</strong> not include any output variables in its interface decorated with <code>CullDistance</code>"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-00719",
"text": " If <code>stage</code> is <code>VK_SHADER_STAGE_FRAGMENT_BIT</code>, and the identified entry point writes to <code>FragDepth</code> in any execution path, it <strong class=\"purple\">must</strong> write to <code>FragDepth</code> in all execution paths"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-parameter",
"text": " <code>stage</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkShaderStageFlagBits\">VkShaderStageFlagBits</a> value"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-module-parameter",
"text": " <code>module</code> <strong class=\"purple\">must</strong> be a valid <code>VkShaderModule</code> handle"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-pName-parameter",
"text": " <code>pName</code> <strong class=\"purple\">must</strong> be a null-terminated UTF-8 string"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-pSpecializationInfo-parameter",
"text": " If <code>pSpecializationInfo</code> is not <code>NULL</code>, <code>pSpecializationInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkSpecializationInfo</code> structure"
}
],
"(VK_EXT_shader_stencil_export)": [
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-01511",
"text": " If <code>stage</code> is <code>VK_SHADER_STAGE_FRAGMENT_BIT</code>, and the identified entry point writes to <code>FragStencilRefEXT</code> in any execution path, it <strong class=\"purple\">must</strong> write to <code>FragStencilRefEXT</code> in all execution paths"
}
]
},
"vkCreateGraphicsPipelines": {
"core": [
{
"vuid": "VUID-vkCreateGraphicsPipelines-flags-00720",
"text": " If the <code>flags</code> member of any element of <code>pCreateInfos</code> contains the <code>VK_PIPELINE_CREATE_DERIVATIVE_BIT</code> flag, and the <code>basePipelineIndex</code> member of that same element is not <code>-1</code>, <code>basePipelineIndex</code> <strong class=\"purple\">must</strong> be less than the index into <code>pCreateInfos</code> that corresponds to that element"
},
{
"vuid": "VUID-vkCreateGraphicsPipelines-flags-00721",
"text": " If the <code>flags</code> member of any element of <code>pCreateInfos</code> contains the <code>VK_PIPELINE_CREATE_DERIVATIVE_BIT</code> flag, the base pipeline <strong class=\"purple\">must</strong> have been created with the <code>VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT</code> flag set"
},
{
"vuid": "VUID-vkCreateGraphicsPipelines-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkCreateGraphicsPipelines-pipelineCache-parameter",
"text": " If <code>pipelineCache</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>pipelineCache</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipelineCache</code> handle"
},
{
"vuid": "VUID-vkCreateGraphicsPipelines-pCreateInfos-parameter",
"text": " <code>pCreateInfos</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>createInfoCount</code> valid <code>VkGraphicsPipelineCreateInfo</code> structures"
},
{
"vuid": "VUID-vkCreateGraphicsPipelines-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateGraphicsPipelines-pPipelines-parameter",
"text": " <code>pPipelines</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>createInfoCount</code> <code>VkPipeline</code> handles"
},
{
"vuid": "VUID-vkCreateGraphicsPipelines-createInfoCount-arraylength",
"text": " <code>createInfoCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkCreateGraphicsPipelines-pipelineCache-parent",
"text": " If <code>pipelineCache</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"VkGraphicsPipelineCreateInfo": {
"core": [
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-00722",
"text": " If <code>flags</code> contains the <code>VK_PIPELINE_CREATE_DERIVATIVE_BIT</code> flag, and <code>basePipelineIndex</code> is -1, <code>basePipelineHandle</code> <strong class=\"purple\">must</strong> be a valid handle to a graphics <code>VkPipeline</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-00723",
"text": " If <code>flags</code> contains the <code>VK_PIPELINE_CREATE_DERIVATIVE_BIT</code> flag, and <code>basePipelineHandle</code> is <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>basePipelineIndex</code> <strong class=\"purple\">must</strong> be a valid index into the calling command&#8217;s <code>pCreateInfos</code> parameter"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-00724",
"text": " If <code>flags</code> contains the <code>VK_PIPELINE_CREATE_DERIVATIVE_BIT</code> flag, and <code>basePipelineIndex</code> is not -1, <code>basePipelineHandle</code> <strong class=\"purple\">must</strong> be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-00725",
"text": " If <code>flags</code> contains the <code>VK_PIPELINE_CREATE_DERIVATIVE_BIT</code> flag, and <code>basePipelineHandle</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>basePipelineIndex</code> <strong class=\"purple\">must</strong> be -1"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-stage-00726",
"text": " The <code>stage</code> member of each element of <code>pStages</code> <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-stage-00727",
"text": " The <code>stage</code> member of one element of <code>pStages</code> <strong class=\"purple\">must</strong> be <code>VK_SHADER_STAGE_VERTEX_BIT</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-stage-00728",
"text": " The <code>stage</code> member of each element of <code>pStages</code> <strong class=\"purple\">must</strong> not be <code>VK_SHADER_STAGE_COMPUTE_BIT</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00729",
"text": " If <code>pStages</code> includes a tessellation control shader stage, it <strong class=\"purple\">must</strong> include a tessellation evaluation shader stage"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00730",
"text": " If <code>pStages</code> includes a tessellation evaluation shader stage, it <strong class=\"purple\">must</strong> include a tessellation control shader stage"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00731",
"text": " If <code>pStages</code> includes a tessellation control shader stage and a tessellation evaluation shader stage, <code>pTessellationState</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPipelineTessellationStateCreateInfo</code> structure"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00732",
"text": " If <code>pStages</code> includes tessellation shader stages, the shader code of at least one stage <strong class=\"purple\">must</strong> contain an <code>OpExecutionMode</code> instruction that specifies the type of subdivision in the pipeline"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00733",
"text": " If <code>pStages</code> includes tessellation shader stages, and the shader code of both stages contain an <code>OpExecutionMode</code> instruction that specifies the type of subdivision in the pipeline, they <strong class=\"purple\">must</strong> both specify the same subdivision mode"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00734",
"text": " If <code>pStages</code> includes tessellation shader stages, the shader code of at least one stage <strong class=\"purple\">must</strong> contain an <code>OpExecutionMode</code> instruction that specifies the output patch size in the pipeline"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00735",
"text": " If <code>pStages</code> includes tessellation shader stages, and the shader code of both contain an <code>OpExecutionMode</code> instruction that specifies the out patch size in the pipeline, they <strong class=\"purple\">must</strong> both specify the same patch size"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00736",
"text": " If <code>pStages</code> includes tessellation shader stages, the <code>topology</code> member of <code>pInputAssembly</code> <strong class=\"purple\">must</strong> be <code>VK_PRIMITIVE_TOPOLOGY_PATCH_LIST</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-topology-00737",
"text": " If the <code>topology</code> member of <code>pInputAssembly</code> is <code>VK_PRIMITIVE_TOPOLOGY_PATCH_LIST</code>, <code>pStages</code> <strong class=\"purple\">must</strong> include tessellation shader stages"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00738",
"text": " If <code>pStages</code> includes a geometry shader stage, and does not include any tessellation shader stages, its shader code <strong class=\"purple\">must</strong> contain an <code>OpExecutionMode</code> instruction that specifies an input primitive type that is &amp;amp;lt;&amp;amp;lt;shaders-geometry-execution, compatible&amp;amp;gt;&amp;amp;gt; with the primitive topology specified in <code>pInputAssembly</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00739",
"text": " If <code>pStages</code> includes a geometry shader stage, and also includes tessellation shader stages, its shader code <strong class=\"purple\">must</strong> contain an <code>OpExecutionMode</code> instruction that specifies an input primitive type that is &amp;amp;lt;&amp;amp;lt;shaders-geometry-execution, compatible&amp;amp;gt;&amp;amp;gt; with the primitive topology that is output by the tessellation stages"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00740",
"text": " If <code>pStages</code> includes a fragment shader stage and a geometry shader stage, and the fragment shader code reads from an input variable that is decorated with <code>PrimitiveID</code>, then the geometry shader code <strong class=\"purple\">must</strong> write to a matching output variable, decorated with <code>PrimitiveID</code>, in all execution paths"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00741",
"text": " If <code>pStages</code> includes a fragment shader stage, its shader code <strong class=\"purple\">must</strong> not read from any input attachment that is defined as <code>VK_ATTACHMENT_UNUSED</code> in <code>subpass</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00742",
"text": " The shader code for the entry points identified by <code>pStages</code>, and the rest of the state identified by this structure <strong class=\"purple\">must</strong> adhere to the pipeline linking rules described in the &amp;amp;lt;&amp;amp;lt;interfaces,Shader Interfaces&amp;amp;gt;&amp;amp;gt; chapter"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-subpass-00745",
"text": " If rasterization is not disabled and the subpass uses color attachments, then for each color attachment in the subpass the <code>blendEnable</code> member of the corresponding element of the <code>pAttachment</code> member of <code>pColorBlendState</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code> if the <code>format</code> of the attachment does not support color blend operations, as specified by the <code>VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT</code> flag in <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-attachmentCount-00746",
"text": " If rasterization is not disabled and the subpass uses color attachments, the <code>attachmentCount</code> member of <code>pColorBlendState</code> <strong class=\"purple\">must</strong> be equal to the <code>colorAttachmentCount</code> used to create <code>subpass</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00747",
"text": " If no element of the <code>pDynamicStates</code> member of <code>pDynamicState</code> is <code>VK_DYNAMIC_STATE_VIEWPORT</code>, the <code>pViewports</code> member of <code>pViewportState</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pViewportState</code>::<code>viewportCount</code> <code>VkViewport</code> structures"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00748",
"text": " If no element of the <code>pDynamicStates</code> member of <code>pDynamicState</code> is <code>VK_DYNAMIC_STATE_SCISSOR</code>, the <code>pScissors</code> member of <code>pViewportState</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pViewportState</code>::<code>scissorCount</code> <code>VkRect2D</code> structures"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00749",
"text": " If the wide lines feature is not enabled, and no element of the <code>pDynamicStates</code> member of <code>pDynamicState</code> is <code>VK_DYNAMIC_STATE_LINE_WIDTH</code>, the <code>lineWidth</code> member of <code>pRasterizationState</code> <strong class=\"purple\">must</strong> be <code>1.0</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00750",
"text": " If the <code>rasterizerDiscardEnable</code> member of <code>pRasterizationState</code> is <code>VK_FALSE</code>, <code>pViewportState</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPipelineViewportStateCreateInfo</code> structure"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00751",
"text": " If the <code>rasterizerDiscardEnable</code> member of <code>pRasterizationState</code> is <code>VK_FALSE</code>, <code>pMultisampleState</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPipelineMultisampleStateCreateInfo</code> structure"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00752",
"text": " If the <code>rasterizerDiscardEnable</code> member of <code>pRasterizationState</code> is <code>VK_FALSE</code>, and <code>subpass</code> uses a depth/stencil attachment, <code>pDepthStencilState</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPipelineDepthStencilStateCreateInfo</code> structure"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00753",
"text": " If the <code>rasterizerDiscardEnable</code> member of <code>pRasterizationState</code> is <code>VK_FALSE</code>, and <code>subpass</code> uses color attachments, <code>pColorBlendState</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPipelineColorBlendStateCreateInfo</code> structure"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00754",
"text": " If the depth bias clamping feature is not enabled, no element of the <code>pDynamicStates</code> member of <code>pDynamicState</code> is <code>VK_DYNAMIC_STATE_DEPTH_BIAS</code>, and the <code>depthBiasEnable</code> member of <code>pRasterizationState</code> is <code>VK_TRUE</code>, the <code>depthBiasClamp</code> member of <code>pRasterizationState</code> <strong class=\"purple\">must</strong> be <code>0.0</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-layout-00756",
"text": " <code>layout</code> <strong class=\"purple\">must</strong> be &amp;amp;lt;&amp;amp;lt;descriptorsets-pipelinelayout-consistency,consistent&amp;amp;gt;&amp;amp;gt; with all shaders specified in <code>pStages</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-subpass-00758",
"text": " If <code>subpass</code> does not use any color and/or depth/stencil attachments, then the <code>rasterizationSamples</code> member of <code>pMultisampleState</code> <strong class=\"purple\">must</strong> follow the rules for a &amp;amp;lt;&amp;amp;lt;renderpass-noattachments, zero-attachment subpass&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-subpass-00759",
"text": " <code>subpass</code> <strong class=\"purple\">must</strong> be a valid subpass within <code>renderPass</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-layout-01688",
"text": " The number of resources in <code>layout</code> accessible to each shader stage that is used by the pipeline <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxPerStageResources</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkPipelineDiscardRectangleStateCreateInfoEXT\">VkPipelineDiscardRectangleStateCreateInfoEXT</a>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkPipelineCreateFlagBits\">VkPipelineCreateFlagBits</a> values"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-parameter",
"text": " <code>pStages</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>stageCount</code> valid <code>VkPipelineShaderStageCreateInfo</code> structures"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pVertexInputState-parameter",
"text": " <code>pVertexInputState</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPipelineVertexInputStateCreateInfo</code> structure"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pInputAssemblyState-parameter",
"text": " <code>pInputAssemblyState</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPipelineInputAssemblyStateCreateInfo</code> structure"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pRasterizationState-parameter",
"text": " <code>pRasterizationState</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPipelineRasterizationStateCreateInfo</code> structure"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicState-parameter",
"text": " If <code>pDynamicState</code> is not <code>NULL</code>, <code>pDynamicState</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPipelineDynamicStateCreateInfo</code> structure"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-layout-parameter",
"text": " <code>layout</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipelineLayout</code> handle"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-parameter",
"text": " <code>renderPass</code> <strong class=\"purple\">must</strong> be a valid <code>VkRenderPass</code> handle"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-stageCount-arraylength",
"text": " <code>stageCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-commonparent",
"text": " Each of <code>basePipelineHandle</code>, <code>layout</code>, and <code>renderPass</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
],
"!(VK_VERSION_1_1,VK_KHR_maintenance2)": [
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-subpass-00743",
"text": " If rasterization is not disabled and <code>subpass</code> uses a depth/stencil attachment in <code>renderPass</code> that has a layout of <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL</code> in the <code>VkAttachmentReference</code> defined by <code>subpass</code>, the <code>depthWriteEnable</code> member of <code>pDepthStencilState</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-subpass-00744",
"text": " If rasterization is not disabled and <code>subpass</code> uses a depth/stencil attachment in <code>renderPass</code> that has a layout of <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL</code> in the <code>VkAttachmentReference</code> defined by <code>subpass</code>, the <code>failOp</code>, <code>passOp</code> and <code>depthFailOp</code> members of each of the <code>front</code> and <code>back</code> members of <code>pDepthStencilState</code> <strong class=\"purple\">must</strong> be <code>VK_STENCIL_OP_KEEP</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_maintenance2)": [
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-subpass-01756",
"text": " If rasterization is not disabled and <code>subpass</code> uses a depth/stencil attachment in <code>renderPass</code> that has a layout of <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL</code> in the <code>VkAttachmentReference</code> defined by <code>subpass</code>, the <code>depthWriteEnable</code> member of <code>pDepthStencilState</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-subpass-01757",
"text": " If rasterization is not disabled and <code>subpass</code> uses a depth/stencil attachment in <code>renderPass</code> that has a layout of <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL</code> in the <code>VkAttachmentReference</code> defined by <code>subpass</code>, the <code>failOp</code>, <code>passOp</code> and <code>depthFailOp</code> members of each of the <code>front</code> and <code>back</code> members of <code>pDepthStencilState</code> <strong class=\"purple\">must</strong> be <code>VK_STENCIL_OP_KEEP</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-01565",
"text": " If <code>pStages</code> includes a fragment shader stage and an input attachment was referenced by the <a href=\"#VkRenderPassInputAttachmentAspectCreateInfo\">VkRenderPassInputAttachmentAspectCreateInfo</a> at <code>renderPass</code> create time, its shader code <strong class=\"purple\">must</strong> not read from any aspect that was not specified in the <code>aspectMask</code> of the corresponding <a href=\"#VkInputAttachmentAspectReference\">VkInputAttachmentAspectReference</a> structure."
}
],
"!(VK_EXT_depth_range_unrestricted)": [
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00755",
"text": " If no element of the <code>pDynamicStates</code> member of <code>pDynamicState</code> is <code>VK_DYNAMIC_STATE_DEPTH_BOUNDS</code>, and the <code>depthBoundsTestEnable</code> member of <code>pDepthStencilState</code> is <code>VK_TRUE</code>, the <code>minDepthBounds</code> and <code>maxDepthBounds</code> members of <code>pDepthStencilState</code> <strong class=\"purple\">must</strong> be between <code>0.0</code> and <code>1.0</code>, inclusive"
}
],
"(VK_EXT_depth_range_unrestricted)": [
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00755",
"text": " If the <code><a href=\"#VK_EXT_depth_range_unrestricted\">VK_EXT_depth_range_unrestricted</a></code> extension is not enabled and no element of the <code>pDynamicStates</code> member of <code>pDynamicState</code> is <code>VK_DYNAMIC_STATE_DEPTH_BOUNDS</code>, and the <code>depthBoundsTestEnable</code> member of <code>pDepthStencilState</code> is <code>VK_TRUE</code>, the <code>minDepthBounds</code> and <code>maxDepthBounds</code> members of <code>pDepthStencilState</code> <strong class=\"purple\">must</strong> be between <code>0.0</code> and <code>1.0</code>, inclusive"
}
],
"(VK_EXT_sample_locations)": [
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-01521",
"text": " If no element of the <code>pDynamicStates</code> member of <code>pDynamicState</code> is <code>VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT</code>, and the <code>sampleLocationsEnable</code> member of a <a href=\"#VkPipelineSampleLocationsStateCreateInfoEXT\">VkPipelineSampleLocationsStateCreateInfoEXT</a> structure chained to the <code>pNext</code> chain of <code>pMultisampleState</code> is <code>VK_TRUE</code>, <code>sampleLocationsInfo.sampleLocationGridSize.width</code> <strong class=\"purple\">must</strong> evenly divide <a href=\"#VkMultisamplePropertiesEXT\">VkMultisamplePropertiesEXT</a>::<code>sampleLocationGridSize.width</code> as returned by <a href=\"#vkGetPhysicalDeviceMultisamplePropertiesEXT\">vkGetPhysicalDeviceMultisamplePropertiesEXT</a> with a <code>samples</code> parameter equaling <code>rasterizationSamples</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-01522",
"text": " If no element of the <code>pDynamicStates</code> member of <code>pDynamicState</code> is <code>VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT</code>, and the <code>sampleLocationsEnable</code> member of a <a href=\"#VkPipelineSampleLocationsStateCreateInfoEXT\">VkPipelineSampleLocationsStateCreateInfoEXT</a> structure chained to the <code>pNext</code> chain of <code>pMultisampleState</code> is <code>VK_TRUE</code>, <code>sampleLocationsInfo.sampleLocationGridSize.height</code> <strong class=\"purple\">must</strong> evenly divide <a href=\"#VkMultisamplePropertiesEXT\">VkMultisamplePropertiesEXT</a>::<code>sampleLocationGridSize.height</code> as returned by <a href=\"#vkGetPhysicalDeviceMultisamplePropertiesEXT\">vkGetPhysicalDeviceMultisamplePropertiesEXT</a> with a <code>samples</code> parameter equaling <code>rasterizationSamples</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-01523",
"text": " If no element of the <code>pDynamicStates</code> member of <code>pDynamicState</code> is <code>VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT</code>, and the <code>sampleLocationsEnable</code> member of a <a href=\"#VkPipelineSampleLocationsStateCreateInfoEXT\">VkPipelineSampleLocationsStateCreateInfoEXT</a> structure chained to the <code>pNext</code> chain of <code>pMultisampleState</code> is <code>VK_TRUE</code>, <code>sampleLocationsInfo.sampleLocationsPerPixel</code> <strong class=\"purple\">must</strong> equal <code>rasterizationSamples</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-sampleLocationsEnable-01524",
"text": " If the <code>sampleLocationsEnable</code> member of a <a href=\"#VkPipelineSampleLocationsStateCreateInfoEXT\">VkPipelineSampleLocationsStateCreateInfoEXT</a> structure chained to the <code>pNext</code> chain of <code>pMultisampleState</code> is <code>VK_TRUE</code>, the fragment shader code <strong class=\"purple\">must</strong> not statically use the extended instruction <code>InterpolateAtSample</code>"
}
],
"!(VK_AMD_mixed_attachment_samples)+!(VK_NV_framebuffer_mixed_samples)": [
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-subpass-00757",
"text": " If <code>subpass</code> uses color and/or depth/stencil attachments, then the <code>rasterizationSamples</code> member of <code>pMultisampleState</code> <strong class=\"purple\">must</strong> be the same as the sample count for those subpass attachments"
}
],
"(VK_AMD_mixed_attachment_samples)": [
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-subpass-01505",
"text": " If <code>subpass</code> uses color and/or depth/stencil attachments, then the <code>rasterizationSamples</code> member of <code>pMultisampleState</code> <strong class=\"purple\">must</strong> equal the maximum of the sample counts of those subpass attachments"
}
],
"(VK_NV_framebuffer_mixed_samples)": [
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-subpass-01411",
"text": " If <code>subpass</code> has a depth/stencil attachment and depth test, stencil test, or depth bounds test are enabled, then the <code>rasterizationSamples</code> member of <code>pMultisampleState</code> <strong class=\"purple\">must</strong> be the same as the sample count of the depth/stencil attachment"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-subpass-01412",
"text": " If <code>subpass</code> has any color attachments, then the <code>rasterizationSamples</code> member of <code>pMultisampleState</code> <strong class=\"purple\">must</strong> be greater than or equal to the sample count for those subpass attachments"
}
],
"(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-00760",
"text": " If the <code>renderPass</code> has multiview enabled and <code>subpass</code> has more than one bit set in the view mask and <code>multiviewTessellationShader</code> is not enabled, then <code>pStages</code> <strong class=\"purple\">must</strong> not include tessellation shaders."
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-00761",
"text": " If the <code>renderPass</code> has multiview enabled and <code>subpass</code> has more than one bit set in the view mask and <code>multiviewGeometryShader</code> is not enabled, then <code>pStages</code> <strong class=\"purple\">must</strong> not include a geometry shader."
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-00762",
"text": " If the <code>renderPass</code> has multiview enabled and <code>subpass</code> has more than one bit set in the view mask, shaders in the pipeline <strong class=\"purple\">must</strong> not write to the <code>Layer</code> built-in output"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-00763",
"text": " If the <code>renderPass</code> has multiview enabled, then all shaders <strong class=\"purple\">must</strong> not include variables decorated with the <code>Layer</code> built-in decoration in their interfaces."
}
],
"(VK_VERSION_1_1,VK_KHR_device_group)": [
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-00764",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not contain the <code>VK_PIPELINE_CREATE_DISPATCH_BASE</code> flag."
}
],
"(VK_NV_clip_space_w_scaling)": [
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-01715",
"text": " If no element of the <code>pDynamicStates</code> member of <code>pDynamicState</code> is <code>VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV</code>, and the <code>viewportWScalingEnable</code> member of a <a href=\"#VkPipelineViewportWScalingStateCreateInfoNV\">VkPipelineViewportWScalingStateCreateInfoNV</a> structure, chained to the <code>pNext</code> chain of <code>pViewportState</code>, is <code>VK_TRUE</code>, the <code>pViewportWScalings</code> member of the <a href=\"#VkPipelineViewportWScalingStateCreateInfoNV\">VkPipelineViewportWScalingStateCreateInfoNV</a> <strong class=\"purple\">must</strong> be a pointer to an array of <a href=\"#VkPipelineViewportWScalingStateCreateInfoNV\">VkPipelineViewportWScalingStateCreateInfoNV</a>::<code>viewportCount</code> valid <a href=\"#VkViewportWScalingNV\">VkViewportWScalingNV</a> structures"
}
]
},
"VkPipelineDynamicStateCreateInfo": {
"core": [
{
"vuid": "VUID-VkPipelineDynamicStateCreateInfo-pDynamicStates-01442",
"text": " Each element of <code>pDynamicStates</code> <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkPipelineDynamicStateCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkPipelineDynamicStateCreateInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkPipelineDynamicStateCreateInfo-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkPipelineDynamicStateCreateInfo-pDynamicStates-parameter",
"text": " <code>pDynamicStates</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>dynamicStateCount</code> valid <a href=\"#VkDynamicState\">VkDynamicState</a> values"
},
{
"vuid": "VUID-VkPipelineDynamicStateCreateInfo-dynamicStateCount-arraylength",
"text": " <code>dynamicStateCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"vkDestroyPipeline": {
"core": [
{
"vuid": "VUID-vkDestroyPipeline-pipeline-00765",
"text": " All submitted commands that refer to <code>pipeline</code> <strong class=\"purple\">must</strong> have completed execution"
},
{
"vuid": "VUID-vkDestroyPipeline-pipeline-00766",
"text": " If <code>VkAllocationCallbacks</code> were provided when <code>pipeline</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
},
{
"vuid": "VUID-vkDestroyPipeline-pipeline-00767",
"text": " If no <code>VkAllocationCallbacks</code> were provided when <code>pipeline</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-vkDestroyPipeline-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkDestroyPipeline-pipeline-parameter",
"text": " If <code>pipeline</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>pipeline</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipeline</code> handle"
},
{
"vuid": "VUID-vkDestroyPipeline-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkDestroyPipeline-pipeline-parent",
"text": " If <code>pipeline</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkCreatePipelineCache": {
"core": [
{
"vuid": "VUID-vkCreatePipelineCache-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkCreatePipelineCache-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPipelineCacheCreateInfo</code> structure"
},
{
"vuid": "VUID-vkCreatePipelineCache-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreatePipelineCache-pPipelineCache-parameter",
"text": " <code>pPipelineCache</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkPipelineCache</code> handle"
}
]
},
"VkPipelineCacheCreateInfo": {
"core": [
{
"vuid": "VUID-VkPipelineCacheCreateInfo-initialDataSize-00768",
"text": " If <code>initialDataSize</code> is not <code>0</code>, it <strong class=\"purple\">must</strong> be equal to the size of <code>pInitialData</code>, as returned by <code>vkGetPipelineCacheData</code> when <code>pInitialData</code> was originally retrieved"
},
{
"vuid": "VUID-VkPipelineCacheCreateInfo-initialDataSize-00769",
"text": " If <code>initialDataSize</code> is not <code>0</code>, <code>pInitialData</code> <strong class=\"purple\">must</strong> have been retrieved from a previous call to <code>vkGetPipelineCacheData</code>"
},
{
"vuid": "VUID-VkPipelineCacheCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkPipelineCacheCreateInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkPipelineCacheCreateInfo-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkPipelineCacheCreateInfo-pInitialData-parameter",
"text": " If <code>initialDataSize</code> is not <code>0</code>, <code>pInitialData</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>initialDataSize</code> bytes"
}
]
},
"vkMergePipelineCaches": {
"core": [
{
"vuid": "VUID-vkMergePipelineCaches-dstCache-00770",
"text": " <code>dstCache</code> <strong class=\"purple\">must</strong> not appear in the list of source caches"
},
{
"vuid": "VUID-vkMergePipelineCaches-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkMergePipelineCaches-dstCache-parameter",
"text": " <code>dstCache</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipelineCache</code> handle"
},
{
"vuid": "VUID-vkMergePipelineCaches-pSrcCaches-parameter",
"text": " <code>pSrcCaches</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>srcCacheCount</code> valid <code>VkPipelineCache</code> handles"
},
{
"vuid": "VUID-vkMergePipelineCaches-srcCacheCount-arraylength",
"text": " <code>srcCacheCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkMergePipelineCaches-dstCache-parent",
"text": " <code>dstCache</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
},
{
"vuid": "VUID-vkMergePipelineCaches-pSrcCaches-parent",
"text": " Each element of <code>pSrcCaches</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkGetPipelineCacheData": {
"core": [
{
"vuid": "VUID-vkGetPipelineCacheData-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkGetPipelineCacheData-pipelineCache-parameter",
"text": " <code>pipelineCache</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipelineCache</code> handle"
},
{
"vuid": "VUID-vkGetPipelineCacheData-pDataSize-parameter",
"text": " <code>pDataSize</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>size_t</code> value"
},
{
"vuid": "VUID-vkGetPipelineCacheData-pData-parameter",
"text": " If the value referenced by <code>pDataSize</code> is not <code>0</code>, and <code>pData</code> is not <code>NULL</code>, <code>pData</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pDataSize</code> bytes"
},
{
"vuid": "VUID-vkGetPipelineCacheData-pipelineCache-parent",
"text": " <code>pipelineCache</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkDestroyPipelineCache": {
"core": [
{
"vuid": "VUID-vkDestroyPipelineCache-pipelineCache-00771",
"text": " If <code>VkAllocationCallbacks</code> were provided when <code>pipelineCache</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
},
{
"vuid": "VUID-vkDestroyPipelineCache-pipelineCache-00772",
"text": " If no <code>VkAllocationCallbacks</code> were provided when <code>pipelineCache</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-vkDestroyPipelineCache-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkDestroyPipelineCache-pipelineCache-parameter",
"text": " If <code>pipelineCache</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>pipelineCache</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipelineCache</code> handle"
},
{
"vuid": "VUID-vkDestroyPipelineCache-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkDestroyPipelineCache-pipelineCache-parent",
"text": " If <code>pipelineCache</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"VkSpecializationInfo": {
"core": [
{
"vuid": "VUID-VkSpecializationInfo-offset-00773",
"text": " The <code>offset</code> member of each element of <code>pMapEntries</code> <strong class=\"purple\">must</strong> be less than <code>dataSize</code>"
},
{
"vuid": "VUID-VkSpecializationInfo-pMapEntries-00774",
"text": " The <code>size</code> member of each element of <code>pMapEntries</code> <strong class=\"purple\">must</strong> be less than or equal to <code>dataSize</code> minus <code>offset</code>"
},
{
"vuid": "VUID-VkSpecializationInfo-mapEntryCount-00775",
"text": " If <code>mapEntryCount</code> is not <code>0</code>, <code>pMapEntries</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>mapEntryCount</code> valid <code>VkSpecializationMapEntry</code> structures"
},
{
"vuid": "VUID-VkSpecializationInfo-pData-parameter",
"text": " If <code>dataSize</code> is not <code>0</code>, <code>pData</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>dataSize</code> bytes"
}
]
},
"VkSpecializationMapEntry": {
"core": [
{
"vuid": "VUID-VkSpecializationMapEntry-constantID-00776",
"text": " For a <code>constantID</code> specialization constant declared in a shader, <code>size</code> <strong class=\"purple\">must</strong> match the byte size of the <code>constantID</code>. If the specialization constant is of type <code>boolean</code>, <code>size</code> <strong class=\"purple\">must</strong> be the byte size of <code>VkBool32</code>"
}
]
},
"vkCmdBindPipeline": {
"core": [
{
"vuid": "VUID-vkCmdBindPipeline-pipelineBindPoint-00777",
"text": " If <code>pipelineBindPoint</code> is <code>VK_PIPELINE_BIND_POINT_COMPUTE</code>, the <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support compute operations"
},
{
"vuid": "VUID-vkCmdBindPipeline-pipelineBindPoint-00778",
"text": " If <code>pipelineBindPoint</code> is <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, the <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdBindPipeline-pipelineBindPoint-00779",
"text": " If <code>pipelineBindPoint</code> is <code>VK_PIPELINE_BIND_POINT_COMPUTE</code>, <code>pipeline</code> <strong class=\"purple\">must</strong> be a compute pipeline"
},
{
"vuid": "VUID-vkCmdBindPipeline-pipelineBindPoint-00780",
"text": " If <code>pipelineBindPoint</code> is <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, <code>pipeline</code> <strong class=\"purple\">must</strong> be a graphics pipeline"
},
{
"vuid": "VUID-vkCmdBindPipeline-pipeline-00781",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-variableMultisampleRate,variable multisample rate&amp;amp;gt;&amp;amp;gt; feature is not supported, <code>pipeline</code> is a graphics pipeline, the current subpass has no attachments, and this is not the first call to this function with a graphics pipeline after transitioning to the current subpass, then the sample count specified by this pipeline <strong class=\"purple\">must</strong> match that set in the previous pipeline"
},
{
"vuid": "VUID-vkCmdBindPipeline-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdBindPipeline-pipelineBindPoint-parameter",
"text": " <code>pipelineBindPoint</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipelineBindPoint\">VkPipelineBindPoint</a> value"
},
{
"vuid": "VUID-vkCmdBindPipeline-pipeline-parameter",
"text": " <code>pipeline</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipeline</code> handle"
},
{
"vuid": "VUID-vkCmdBindPipeline-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdBindPipeline-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
},
{
"vuid": "VUID-vkCmdBindPipeline-commonparent",
"text": " Both of <code>commandBuffer</code>, and <code>pipeline</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
],
"(VK_EXT_sample_locations)": [
{
"vuid": "VUID-vkCmdBindPipeline-variableSampleLocations-01525",
"text": " If <a href=\"#VkPhysicalDeviceSampleLocationsPropertiesEXT\">VkPhysicalDeviceSampleLocationsPropertiesEXT</a>::<code>variableSampleLocations</code> is <code>VK_FALSE</code>, and <code>pipeline</code> is a graphics pipeline created with a <a href=\"#VkPipelineSampleLocationsStateCreateInfoEXT\">VkPipelineSampleLocationsStateCreateInfoEXT</a> structure having its <code>sampleLocationsEnable</code> member set to <code>VK_TRUE</code> but without <code>VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT</code> enabled then the current render pass instance <strong class=\"purple\">must</strong> have been begun by specifying a <a href=\"#VkRenderPassSampleLocationsBeginInfoEXT\">VkRenderPassSampleLocationsBeginInfoEXT</a> structure whose <code>pPostSubpassSampleLocations</code> member contains an element with a <code>subpassIndex</code> matching the current subpass index and the <code>sampleLocationsInfo</code> member of that element <strong class=\"purple\">must</strong> match the <code>sampleLocationsInfo</code> specified in <a href=\"#VkPipelineSampleLocationsStateCreateInfoEXT\">VkPipelineSampleLocationsStateCreateInfoEXT</a> when the pipeline was created"
}
]
},
"vkGetShaderInfoAMD": {
"(VK_AMD_shader_info)": [
{
"vuid": "VUID-vkGetShaderInfoAMD-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkGetShaderInfoAMD-pipeline-parameter",
"text": " <code>pipeline</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipeline</code> handle"
},
{
"vuid": "VUID-vkGetShaderInfoAMD-shaderStage-parameter",
"text": " <code>shaderStage</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkShaderStageFlagBits\">VkShaderStageFlagBits</a> value"
},
{
"vuid": "VUID-vkGetShaderInfoAMD-infoType-parameter",
"text": " <code>infoType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkShaderInfoTypeAMD\">VkShaderInfoTypeAMD</a> value"
},
{
"vuid": "VUID-vkGetShaderInfoAMD-pInfoSize-parameter",
"text": " <code>pInfoSize</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>size_t</code> value"
},
{
"vuid": "VUID-vkGetShaderInfoAMD-pInfo-parameter",
"text": " If the value referenced by <code>pInfoSize</code> is not <code>0</code>, and <code>pInfo</code> is not <code>NULL</code>, <code>pInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pInfoSize</code> bytes"
},
{
"vuid": "VUID-vkGetShaderInfoAMD-pipeline-parent",
"text": " <code>pipeline</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"VkAllocationCallbacks": {
"core": [
{
"vuid": "VUID-VkAllocationCallbacks-pfnAllocation-00632",
"text": " <code>pfnAllocation</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid user-defined <a href=\"#PFN_vkAllocationFunction\">PFN_vkAllocationFunction</a>"
},
{
"vuid": "VUID-VkAllocationCallbacks-pfnReallocation-00633",
"text": " <code>pfnReallocation</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid user-defined <a href=\"#PFN_vkReallocationFunction\">PFN_vkReallocationFunction</a>"
},
{
"vuid": "VUID-VkAllocationCallbacks-pfnFree-00634",
"text": " <code>pfnFree</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid user-defined <a href=\"#PFN_vkFreeFunction\">PFN_vkFreeFunction</a>"
},
{
"vuid": "VUID-VkAllocationCallbacks-pfnInternalAllocation-00635",
"text": " If either of <code>pfnInternalAllocation</code> or <code>pfnInternalFree</code> is not <code>NULL</code>, both <strong class=\"purple\">must</strong> be valid callbacks"
}
]
},
"vkGetPhysicalDeviceMemoryProperties": {
"core": [
{
"vuid": "VUID-vkGetPhysicalDeviceMemoryProperties-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceMemoryProperties-pMemoryProperties-parameter",
"text": " <code>pMemoryProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkPhysicalDeviceMemoryProperties</code> structure"
}
]
},
"vkGetPhysicalDeviceMemoryProperties2": {
"(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
{
"vuid": "VUID-vkGetPhysicalDeviceMemoryProperties2-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceMemoryProperties2-pMemoryProperties-parameter",
"text": " <code>pMemoryProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkPhysicalDeviceMemoryProperties2</code> structure"
}
]
},
"VkPhysicalDeviceMemoryProperties2": {
"(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
{
"vuid": "VUID-VkPhysicalDeviceMemoryProperties2-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2</code>"
},
{
"vuid": "VUID-VkPhysicalDeviceMemoryProperties2-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
},
"vkAllocateMemory": {
"core": [
{
"vuid": "VUID-vkAllocateMemory-pAllocateInfo-01713",
"text": " <code>pAllocateInfo</code>\\-&amp;amp;gt;<code>allocationSize</code> <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkPhysicalDeviceMemoryProperties\">VkPhysicalDeviceMemoryProperties</a>::<code>memoryHeaps</code>[<code>pAllocateInfo</code>\\-&amp;amp;gt;<code>memoryTypeIndex</code>].<code>size</code> as returned by <a href=\"#vkGetPhysicalDeviceMemoryProperties\">vkGetPhysicalDeviceMemoryProperties</a> for the <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> that <code>device</code> was created from."
},
{
"vuid": "VUID-vkAllocateMemory-pAllocateInfo-01714",
"text": " <code>pAllocateInfo</code>\\-&amp;amp;gt;<code>memoryTypeIndex</code> <strong class=\"purple\">must</strong> be less than <a href=\"#VkPhysicalDeviceMemoryProperties\">VkPhysicalDeviceMemoryProperties</a>::<code>memoryTypeCount</code> as returned by <a href=\"#vkGetPhysicalDeviceMemoryProperties\">vkGetPhysicalDeviceMemoryProperties</a> for the <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> that <code>device</code> was created from."
},
{
"vuid": "VUID-vkAllocateMemory-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkAllocateMemory-pAllocateInfo-parameter",
"text": " <code>pAllocateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkMemoryAllocateInfo</code> structure"
},
{
"vuid": "VUID-vkAllocateMemory-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkAllocateMemory-pMemory-parameter",
"text": " <code>pMemory</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkDeviceMemory</code> handle"
}
]
},
"VkMemoryAllocateInfo": {
"!(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-VkMemoryAllocateInfo-allocationSize-00638",
"text": " <code>allocationSize</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
],
"(VK_KHR_external_memory)+(VK_KHR_dedicated_allocation,VK_NV_dedicated_allocation)": [
{
"vuid": "VUID-VkMemoryAllocateInfo-pNext-00639",
"text": " If the <code>pNext</code> chain contains an instance of <code>VkExportMemoryAllocateInfo</code>, and any of the handle types specified in <code>VkExportMemoryAllocateInfo</code>::<code>handleTypes</code> require a dedicated allocation, as reported by <a href=\"#vkGetPhysicalDeviceImageFormatProperties2\">vkGetPhysicalDeviceImageFormatProperties2</a> in <code>VkExternalImageFormatProperties</code>::<code>externalMemoryProperties</code>::<code>externalMemoryFeatures</code> or <code>VkExternalBufferProperties</code>::<code>externalMemoryProperties</code>::<code>externalMemoryFeatures</code>, the <code>pNext</code> chain must contain an instance of ifdef::VK_KHR_dedicated_allocation[<a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>]"
}
],
"(VK_KHR_external_memory)+(VK_NV_external_memory)": [
{
"vuid": "VUID-VkMemoryAllocateInfo-pNext-00640",
"text": " If the <code>pNext</code> chain contains an instance of <a href=\"#VkExportMemoryAllocateInfo\">VkExportMemoryAllocateInfo</a>, it <strong class=\"purple\">must</strong> not contain an instance of <a href=\"#VkExportMemoryAllocateInfoNV\">VkExportMemoryAllocateInfoNV</a> or <a href=\"#VkExportMemoryWin32HandleInfoNV\">VkExportMemoryWin32HandleInfoNV</a>."
}
],
"(VK_KHR_external_memory_win32+VK_NV_external_memory_win32)": [
{
"vuid": "VUID-VkMemoryAllocateInfo-pNext-00641",
"text": " If the <code>pNext</code> chain contains an instance of <a href=\"#VkImportMemoryWin32HandleInfoKHR\">VkImportMemoryWin32HandleInfoKHR</a>, it <strong class=\"purple\">must</strong> not contain an instance of <a href=\"#VkImportMemoryWin32HandleInfoNV\">VkImportMemoryWin32HandleInfoNV</a>."
}
],
"(VK_KHR_external_memory_fd)": [
{
"vuid": "VUID-VkMemoryAllocateInfo-allocationSize-01742",
"text": " If the parameters define an import operation, the external handle specified was created by the Vulkan API, and the external handle type is <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR</code>, then the values of <code>allocationSize</code> and <code>memoryTypeIndex</code> <strong class=\"purple\">must</strong> match those specified when the memory object being imported was created."
},
{
"vuid": "VUID-VkMemoryAllocateInfo-memoryTypeIndex-00648",
"text": " If the parameters define an import operation and the external handle is a POSIX file descriptor created outside of the Vulkan API, the value of <code>memoryTypeIndex</code> <strong class=\"purple\">must</strong> be one of those returned by <a href=\"#vkGetMemoryFdPropertiesKHR\">vkGetMemoryFdPropertiesKHR</a>."
}
],
"(VK_KHR_external_memory+VK_KHR_device_group)": [
{
"vuid": "VUID-VkMemoryAllocateInfo-None-00643",
"text": " If the parameters define an import operation and the external handle specified was created by the Vulkan API, the device mask specified by <a href=\"#VkMemoryAllocateFlagsInfo\">VkMemoryAllocateFlagsInfo</a> <strong class=\"purple\">must</strong> match that specified when the memory object being imported was allocated."
},
{
"vuid": "VUID-VkMemoryAllocateInfo-None-00644",
"text": " If the parameters define an import operation and the external handle specified was created by the Vulkan API, the list of physical devices that comprise the logical device passed to <a href=\"#vkAllocateMemory\">vkAllocateMemory</a> <strong class=\"purple\">must</strong> match the list of physical devices that comprise the logical device on which the memory was originally allocated."
}
],
"(VK_KHR_external_memory_win32)": [
{
"vuid": "VUID-VkMemoryAllocateInfo-memoryTypeIndex-00645",
"text": " If the parameters define an import operation and the external handle is an NT handle or a global share handle created outside of the Vulkan API, the value of <code>memoryTypeIndex</code> <strong class=\"purple\">must</strong> be one of those returned by <a href=\"#vkGetMemoryWin32HandlePropertiesKHR\">vkGetMemoryWin32HandlePropertiesKHR</a>."
},
{
"vuid": "VUID-VkMemoryAllocateInfo-allocationSize-01743",
"text": " If the parameters define an import operation, the external handle was created by the Vulkan API, and the external handle type is <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR</code> or <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR</code>, then the values of <code>allocationSize</code> and <code>memoryTypeIndex</code> <strong class=\"purple\">must</strong> match those specified when the memory object being imported was created."
},
{
"vuid": "VUID-VkMemoryAllocateInfo-allocationSize-00646",
"text": " If the parameters define an import operation and the external handle type is <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT</code>, <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT</code>, or <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT</code>, <code>allocationSize</code> <strong class=\"purple\">must</strong> match the size reported in the memory requirements of the <code>image</code> or <code>buffer</code> member of the instance of <code>VkDedicatedAllocationMemoryAllocateInfoNV</code> included in the <code>pNext</code> chain."
},
{
"vuid": "VUID-VkMemoryAllocateInfo-allocationSize-00647",
"text": " If the parameters define an import operation and the external handle type is <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT</code>, <code>allocationSize</code> <strong class=\"purple\">must</strong> match the size specified when creating the Direct3D 12 heap from which the external handle was extracted."
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-VkMemoryAllocateInfo-memoryTypeIndex-01872",
"text": " If the protected memory feature is not enabled, the <code>VkMemoryAllocateInfo</code>::<code>memoryTypeIndex</code> <strong class=\"purple\">must</strong> not indicate a memory type that reports <code>VK_MEMORY_PROPERTY_PROTECTED_BIT</code>."
}
],
"(VK_EXT_external_memory_host)": [
{
"vuid": "VUID-VkMemoryAllocateInfo-memoryTypeIndex-01744",
"text": " If the parameters define an import operation and the external handle is a host pointer, the value of <code>memoryTypeIndex</code> <strong class=\"purple\">must</strong> be one of those returned by <a href=\"#vkGetMemoryHostPointerPropertiesEXT\">vkGetMemoryHostPointerPropertiesEXT</a>"
},
{
"vuid": "VUID-VkMemoryAllocateInfo-allocationSize-01745",
"text": " If the parameters define an import operation and the external handle is a host pointer, <code>allocationSize</code> <strong class=\"purple\">must</strong> be an integer multiple of <code>VkPhysicalDeviceExternalMemoryHostPropertiesEXT</code>::<code>minImportedHostPointerAlignment</code>"
}
],
"(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-VkMemoryAllocateInfo-None-01873",
"text": " If the parameters define an import operation and the external handle type is <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BIT_ANDROID</code>:"
},
{
"vuid": "VUID-VkMemoryAllocateInfo-pNext-01874",
"text": " If the parameters do not define an import operation, and the <code>pNext</code> chain contains an instance of <code>VkExportMemoryAllocateInfo</code> with <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID</code> included in its <code>handleTypes</code> member, and the <code>pNext</code> contains an instance of <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a> with <code>image</code> not equal to <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, then <code>allocationSize</code> <strong class=\"purple\">must</strong> be <code>0</code>, otherwise <code>allocationSize</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>."
},
{
"vuid": "VUID-VkMemoryAllocateInfo-pNext-01875",
"text": " If the parameters define an import operation, the external handle is an Android hardware buffer, and the <code>pNext</code> chain includes an instance of <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a> with <code>image</code> that is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>:"
}
],
"core": [
{
"vuid": "VUID-VkMemoryAllocateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO</code>"
},
{
"vuid": "VUID-VkMemoryAllocateInfo-pNext-pNext",
"text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkDedicatedAllocationMemoryAllocateInfoNV\">VkDedicatedAllocationMemoryAllocateInfoNV</a>, <a href=\"#VkExportMemoryAllocateInfo\">VkExportMemoryAllocateInfo</a>, <a href=\"#VkExportMemoryAllocateInfoNV\">VkExportMemoryAllocateInfoNV</a>, <a href=\"#VkExportMemoryWin32HandleInfoKHR\">VkExportMemoryWin32HandleInfoKHR</a>, <a href=\"#VkExportMemoryWin32HandleInfoNV\">VkExportMemoryWin32HandleInfoNV</a>, <a href=\"#VkImportAndroidHardwareBufferInfoANDROID\">VkImportAndroidHardwareBufferInfoANDROID</a>, <a href=\"#VkImportMemoryFdInfoKHR\">VkImportMemoryFdInfoKHR</a>, <a href=\"#VkImportMemoryHostPointerInfoEXT\">VkImportMemoryHostPointerInfoEXT</a>, <a href=\"#VkImportMemoryWin32HandleInfoKHR\">VkImportMemoryWin32HandleInfoKHR</a>, <a href=\"#VkImportMemoryWin32HandleInfoNV\">VkImportMemoryWin32HandleInfoNV</a>, <a href=\"#VkMemoryAllocateFlagsInfo\">VkMemoryAllocateFlagsInfo</a>, or <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>"
},
{
"vuid": "VUID-VkMemoryAllocateInfo-sType-unique",
"text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
}
]
},
"VkMemoryDedicatedAllocateInfo": {
"(VK_VERSION_1_1,VK_KHR_dedicated_allocation)": [
{
"vuid": "VUID-VkMemoryDedicatedAllocateInfo-image-01432",
"text": " At least one of <code>image</code> and <code>buffer</code> <strong class=\"purple\">must</strong> be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-VkMemoryDedicatedAllocateInfo-image-01433",
"text": " If <code>image</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>VkMemoryAllocateInfo</code>::<code>allocationSize</code> <strong class=\"purple\">must</strong> equal the <code>VkMemoryRequirements</code>::<code>size</code> of the image"
},
{
"vuid": "VUID-VkMemoryDedicatedAllocateInfo-image-01434",
"text": " If <code>image</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>image</code> <strong class=\"purple\">must</strong> have been created without <code>VK_IMAGE_CREATE_SPARSE_BINDING_BIT</code> set in <code>VkImageCreateInfo</code>::<code>flags</code>"
},
{
"vuid": "VUID-VkMemoryDedicatedAllocateInfo-buffer-01435",
"text": " If <code>buffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>VkMemoryAllocateInfo</code>::<code>allocationSize</code> <strong class=\"purple\">must</strong> equal the <code>VkMemoryRequirements</code>::<code>size</code> of the buffer"
},
{
"vuid": "VUID-VkMemoryDedicatedAllocateInfo-buffer-01436",
"text": " If <code>buffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>buffer</code> <strong class=\"purple\">must</strong> have been created without <code>VK_BUFFER_CREATE_SPARSE_BINDING_BIT</code> set in <a href=\"#VkBufferCreateInfo\">VkBufferCreateInfo</a>::<code>flags</code>"
},
{
"vuid": "VUID-VkMemoryDedicatedAllocateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO</code>"
},
{
"vuid": "VUID-VkMemoryDedicatedAllocateInfo-image-parameter",
"text": " If <code>image</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>image</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
},
{
"vuid": "VUID-VkMemoryDedicatedAllocateInfo-buffer-parameter",
"text": " If <code>buffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
},
{
"vuid": "VUID-VkMemoryDedicatedAllocateInfo-commonparent",
"text": " Both of <code>buffer</code>, and <code>image</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_dedicated_allocation)+(VK_KHR_external_memory_win32)": [
{
"vuid": "VUID-VkMemoryDedicatedAllocateInfo-image-01876",
"text": " If <code>image</code> is not <code>VK_NULL_HANDLE</code> and <a href=\"#VkMemoryAllocateInfo\">VkMemoryAllocateInfo</a> defines a memory import operation with handle type <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT</code>, <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT</code>, <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT</code>, <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT</code>, <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT</code>, or <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT</code>, and the external handle was created by the Vulkan API, then the memory being imported <strong class=\"purple\">must</strong> also be a dedicated image allocation and <code>image</code> must be identical to the image associated with the imported memory."
},
{
"vuid": "VUID-VkMemoryDedicatedAllocateInfo-buffer-01877",
"text": " If <code>buffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a> and <a href=\"#VkMemoryAllocateInfo\">VkMemoryAllocateInfo</a> defines a memory import operation with handle type <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT</code>, <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT</code>, <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT</code>, <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT</code>, <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT</code>, or <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT</code>, and the external handle was created by the Vulkan API, then the memory being imported <strong class=\"purple\">must</strong> also be a dedicated buffer allocation and <code>buffer</code> must be identical to the buffer associated with the imported memory."
}
],
"(VK_VERSION_1_1,VK_KHR_dedicated_allocation)+(VK_KHR_external_memory_fd)": [
{
"vuid": "VUID-VkMemoryDedicatedAllocateInfo-image-01878",
"text": " If <code>image</code> is not <code>VK_NULL_HANDLE</code> and <a href=\"#VkMemoryAllocateInfo\">VkMemoryAllocateInfo</a> defines a memory import operation with handle type <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT</code>, the memory being imported <strong class=\"purple\">must</strong> also be a dedicated image allocation and <code>image</code> must be identical to the image associated with the imported memory."
},
{
"vuid": "VUID-VkMemoryDedicatedAllocateInfo-buffer-01879",
"text": " If <code>buffer</code> is not <code>VK_NULL_HANDLE</code> and <a href=\"#VkMemoryAllocateInfo\">VkMemoryAllocateInfo</a> defines a memory import operation with handle type <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT</code>, the memory being imported <strong class=\"purple\">must</strong> also be a dedicated buffer allocation and <code>buffer</code> must be identical to the buffer associated with the imported memory."
}
],
"(VK_VERSION_1_1,VK_KHR_dedicated_allocation)+(VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-VkMemoryDedicatedAllocateInfo-image-01797",
"text": " If <code>image</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>image</code> <strong class=\"purple\">must</strong> not have been created with <code>VK_IMAGE_CREATE_DISJOINT_BIT</code> set in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>::<code>flags</code>"
}
]
},
"VkDedicatedAllocationMemoryAllocateInfoNV": {
"(VK_NV_dedicated_allocation)": [
{
"vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-image-00649",
"text": " At least one of <code>image</code> and <code>buffer</code> <strong class=\"purple\">must</strong> be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-image-00650",
"text": " If <code>image</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, the image <strong class=\"purple\">must</strong> have been created with <code>VkDedicatedAllocationImageCreateInfoNV</code>::<code>dedicatedAllocation</code> equal to <code>VK_TRUE</code>"
},
{
"vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-buffer-00651",
"text": " If <code>buffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, the buffer <strong class=\"purple\">must</strong> have been created with <code>VkDedicatedAllocationBufferCreateInfoNV</code>::<code>dedicatedAllocation</code> equal to <code>VK_TRUE</code>"
},
{
"vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-image-00652",
"text": " If <code>image</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>VkMemoryAllocateInfo</code>::<code>allocationSize</code> <strong class=\"purple\">must</strong> equal the <code>VkMemoryRequirements</code>::<code>size</code> of the image"
},
{
"vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-buffer-00653",
"text": " If <code>buffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>VkMemoryAllocateInfo</code>::<code>allocationSize</code> <strong class=\"purple\">must</strong> equal the <code>VkMemoryRequirements</code>::<code>size</code> of the buffer"
},
{
"vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV</code>"
},
{
"vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-image-parameter",
"text": " If <code>image</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>image</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
},
{
"vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-buffer-parameter",
"text": " If <code>buffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
},
{
"vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-commonparent",
"text": " Both of <code>buffer</code>, and <code>image</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
],
"(VK_NV_dedicated_allocation)+(VK_KHR_external_memory_win32,VK_KHR_external_memory_fd)": [
{
"vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-image-00654",
"text": " If <code>image</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a> and <a href=\"#VkMemoryAllocateInfo\">VkMemoryAllocateInfo</a> defines a memory import operation, the memory being imported <strong class=\"purple\">must</strong> also be a dedicated image allocation and <code>image</code> <strong class=\"purple\">must</strong> be identical to the image associated with the imported memory."
},
{
"vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-buffer-00655",
"text": " If <code>buffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a> and <a href=\"#VkMemoryAllocateInfo\">VkMemoryAllocateInfo</a> defines a memory import operation, the memory being imported <strong class=\"purple\">must</strong> also be a dedicated buffer allocation and <code>buffer</code> <strong class=\"purple\">must</strong> be identical to the buffer associated with the imported memory."
}
]
},
"VkExportMemoryAllocateInfo": {
"(VK_VERSION_1_1,VK_KHR_external_memory)": [
{
"vuid": "VUID-VkExportMemoryAllocateInfo-handleTypes-00656",
"text": " The bits in <code>handleTypes</code> <strong class=\"purple\">must</strong> be supported and compatible, as reported by <a href=\"#VkExternalImageFormatProperties\">VkExternalImageFormatProperties</a> or <a href=\"#VkExternalBufferProperties\">VkExternalBufferProperties</a>."
},
{
"vuid": "VUID-VkExportMemoryAllocateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO</code>"
},
{
"vuid": "VUID-VkExportMemoryAllocateInfo-handleTypes-parameter",
"text": " <code>handleTypes</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkExternalMemoryHandleTypeFlagBits\">VkExternalMemoryHandleTypeFlagBits</a> values"
}
]
},
"VkExportMemoryWin32HandleInfoKHR": {
"(VK_KHR_external_memory_win32)": [
{
"vuid": "VUID-VkExportMemoryWin32HandleInfoKHR-handleTypes-00657",
"text": " If <a href=\"#VkExportMemoryAllocateInfo\">VkExportMemoryAllocateInfo</a>::<code>handleTypes</code> does not include <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT</code>, <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT</code>, <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT</code>, or <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT</code>, <code>VkExportMemoryWin32HandleInfoKHR</code> <strong class=\"purple\">must</strong> not be in the <code>pNext</code> chain of <a href=\"#VkMemoryAllocateInfo\">VkMemoryAllocateInfo</a>."
},
{
"vuid": "VUID-VkExportMemoryWin32HandleInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR</code>"
},
{
"vuid": "VUID-VkExportMemoryWin32HandleInfoKHR-pAttributes-parameter",
"text": " If <code>pAttributes</code> is not <code>NULL</code>, <code>pAttributes</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>SECURITY_ATTRIBUTES</code> value"
}
]
},
"VkImportMemoryWin32HandleInfoKHR": {
"(VK_KHR_external_memory_win32)": [
{
"vuid": "VUID-VkImportMemoryWin32HandleInfoKHR-handleType-00658",
"text": " If <code>handleType</code> is not <code>0</code>, it <strong class=\"purple\">must</strong> be supported for import, as reported by <a href=\"#VkExternalImageFormatProperties\">VkExternalImageFormatProperties</a> or <a href=\"#VkExternalBufferProperties\">VkExternalBufferProperties</a>."
},
{
"vuid": "VUID-VkImportMemoryWin32HandleInfoKHR-handle-00659",
"text": " The memory from which <code>handle</code> was exported, or the memory named by <code>name</code> <strong class=\"purple\">must</strong> have been created on the same underlying physical device as <code>device</code>."
},
{
"vuid": "VUID-VkImportMemoryWin32HandleInfoKHR-handleType-00660",
"text": " If <code>handleType</code> is not <code>0</code>, it <strong class=\"purple\">must</strong> be defined as an NT handle or a global share handle."
},
{
"vuid": "VUID-VkImportMemoryWin32HandleInfoKHR-handleType-01439",
"text": " If <code>handleType</code> is not <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT</code>, <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT</code>, <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT</code>, or <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT</code>, <code>name</code> <strong class=\"purple\">must</strong> be <code>NULL</code>."
},
{
"vuid": "VUID-VkImportMemoryWin32HandleInfoKHR-handleType-01440",
"text": " If <code>handleType</code> is not <code>0</code> and <code>handle</code> is <code>NULL</code>, <code>name</code> <strong class=\"purple\">must</strong> name a valid memory resource of the type specified by <code>handleType</code>."
},
{
"vuid": "VUID-VkImportMemoryWin32HandleInfoKHR-handleType-00661",
"text": " If <code>handleType</code> is not <code>0</code> and <code>name</code> is <code>NULL</code>, <code>handle</code> <strong class=\"purple\">must</strong> be a valid handle of the type specified by <code>handleType</code>."
},
{
"vuid": "VUID-VkImportMemoryWin32HandleInfoKHR-handle-01441",
"text": " if <code>handle</code> is not <code>NULL</code>, <code>name</code> must be <code>NULL</code>."
},
{
"vuid": "VUID-VkImportMemoryWin32HandleInfoKHR-handle-01518",
"text": " If <code>handle</code> is not <code>NULL</code>, it <strong class=\"purple\">must</strong> obey any requirements listed for <code>handleType</code> in <a href=\"#external-memory-handle-types-compatibility\">external memory handle types compatibility</a>."
},
{
"vuid": "VUID-VkImportMemoryWin32HandleInfoKHR-name-01519",
"text": " If <code>name</code> is not <code>NULL</code>, it <strong class=\"purple\">must</strong> obey any requirements listed for <code>handleType</code> in <a href=\"#external-memory-handle-types-compatibility\">external memory handle types compatibility</a>."
},
{
"vuid": "VUID-VkImportMemoryWin32HandleInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR</code>"
},
{
"vuid": "VUID-VkImportMemoryWin32HandleInfoKHR-handleType-parameter",
"text": " If <code>handleType</code> is not <code>0</code>, <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalMemoryHandleTypeFlagBits\">VkExternalMemoryHandleTypeFlagBits</a> value"
}
]
},
"vkGetMemoryWin32HandleKHR": {
"(VK_KHR_external_memory_win32)": [
{
"vuid": "VUID-vkGetMemoryWin32HandleKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkGetMemoryWin32HandleKHR-pGetWin32HandleInfo-parameter",
"text": " <code>pGetWin32HandleInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkMemoryGetWin32HandleInfoKHR</code> structure"
},
{
"vuid": "VUID-vkGetMemoryWin32HandleKHR-pHandle-parameter",
"text": " <code>pHandle</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>HANDLE</code> value"
}
]
},
"VkMemoryGetWin32HandleInfoKHR": {
"(VK_KHR_external_memory_win32)": [
{
"vuid": "VUID-VkMemoryGetWin32HandleInfoKHR-handleType-00662",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> have been included in <a href=\"#VkExportMemoryAllocateInfo\">VkExportMemoryAllocateInfo</a>::<code>handleTypes</code> when <code>memory</code> was created."
},
{
"vuid": "VUID-VkMemoryGetWin32HandleInfoKHR-handleType-00663",
"text": " If <code>handleType</code> is defined as an NT handle, <a href=\"#vkGetMemoryWin32HandleKHR\">vkGetMemoryWin32HandleKHR</a> <strong class=\"purple\">must</strong> be called no more than once for each valid unique combination of <code>memory</code> and <code>handleType</code>."
},
{
"vuid": "VUID-VkMemoryGetWin32HandleInfoKHR-handleType-00664",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> be defined as an NT handle or a global share handle."
},
{
"vuid": "VUID-VkMemoryGetWin32HandleInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR</code>"
},
{
"vuid": "VUID-VkMemoryGetWin32HandleInfoKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkMemoryGetWin32HandleInfoKHR-memory-parameter",
"text": " <code>memory</code> <strong class=\"purple\">must</strong> be a valid <code>VkDeviceMemory</code> handle"
},
{
"vuid": "VUID-VkMemoryGetWin32HandleInfoKHR-handleType-parameter",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalMemoryHandleTypeFlagBits\">VkExternalMemoryHandleTypeFlagBits</a> value"
}
]
},
"vkGetMemoryWin32HandlePropertiesKHR": {
"(VK_KHR_external_memory_win32)": [
{
"vuid": "VUID-vkGetMemoryWin32HandlePropertiesKHR-handle-00665",
"text": " <code>handle</code> <strong class=\"purple\">must</strong> be an external memory handle created outside of the Vulkan API."
},
{
"vuid": "VUID-vkGetMemoryWin32HandlePropertiesKHR-handleType-00666",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> not be one of the handle types defined as opaque."
},
{
"vuid": "VUID-vkGetMemoryWin32HandlePropertiesKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkGetMemoryWin32HandlePropertiesKHR-handleType-parameter",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalMemoryHandleTypeFlagBits\">VkExternalMemoryHandleTypeFlagBits</a> value"
},
{
"vuid": "VUID-vkGetMemoryWin32HandlePropertiesKHR-pMemoryWin32HandleProperties-parameter",
"text": " <code>pMemoryWin32HandleProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkMemoryWin32HandlePropertiesKHR</code> structure"
}
]
},
"VkImportMemoryFdInfoKHR": {
"(VK_KHR_external_memory_fd)": [
{
"vuid": "VUID-VkImportMemoryFdInfoKHR-handleType-00667",
"text": " If <code>handleType</code> is not <code>0</code>, it <strong class=\"purple\">must</strong> be supported for import, as reported by <a href=\"#VkExternalImageFormatProperties\">VkExternalImageFormatProperties</a> or <a href=\"#VkExternalBufferProperties\">VkExternalBufferProperties</a>."
},
{
"vuid": "VUID-VkImportMemoryFdInfoKHR-fd-00668",
"text": " The memory from which <code>fd</code> was exported <strong class=\"purple\">must</strong> have been created on the same underlying physical device as <code>device</code>."
},
{
"vuid": "VUID-VkImportMemoryFdInfoKHR-handleType-00669",
"text": " If <code>handleType</code> is not <code>0</code>, it <strong class=\"purple\">must</strong> be defined as a POSIX file descriptor handle."
},
{
"vuid": "VUID-VkImportMemoryFdInfoKHR-handleType-00670",
"text": " If <code>handleType</code> is not <code>0</code>, <code>fd</code> <strong class=\"purple\">must</strong> be a valid handle of the type specified by <code>handleType</code>."
},
{
"vuid": "VUID-VkImportMemoryFdInfoKHR-fd-01746",
"text": " The memory represented by <code>fd</code> <strong class=\"purple\">must</strong> have been created from a physical device and driver that is compatible with <code>device</code> and <code>handleType</code>, as described in &amp;amp;lt;&amp;amp;lt;external-memory-handle-types-compatibility&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-VkImportMemoryFdInfoKHR-fd-01520",
"text": " <code>fd</code> <strong class=\"purple\">must</strong> obey any requirements listed for <code>handleType</code> in &amp;amp;lt;&amp;amp;lt;external-memory-handle-types-compatibility,external memory handle types compatibility&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-VkImportMemoryFdInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR</code>"
},
{
"vuid": "VUID-VkImportMemoryFdInfoKHR-handleType-parameter",
"text": " If <code>handleType</code> is not <code>0</code>, <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalMemoryHandleTypeFlagBits\">VkExternalMemoryHandleTypeFlagBits</a> value"
}
]
},
"vkGetMemoryFdKHR": {
"(VK_KHR_external_memory_fd)": [
{
"vuid": "VUID-vkGetMemoryFdKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkGetMemoryFdKHR-pGetFdInfo-parameter",
"text": " <code>pGetFdInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkMemoryGetFdInfoKHR</code> structure"
},
{
"vuid": "VUID-vkGetMemoryFdKHR-pFd-parameter",
"text": " <code>pFd</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>int</code> value"
}
]
},
"VkMemoryGetFdInfoKHR": {
"(VK_KHR_external_memory_fd)": [
{
"vuid": "VUID-VkMemoryGetFdInfoKHR-handleType-00671",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> have been included in <a href=\"#VkExportMemoryAllocateInfo\">VkExportMemoryAllocateInfo</a>::<code>handleTypes</code> when <code>memory</code> was created."
},
{
"vuid": "VUID-VkMemoryGetFdInfoKHR-handleType-00672",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> be defined as a POSIX file descriptor handle."
},
{
"vuid": "VUID-VkMemoryGetFdInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR</code>"
},
{
"vuid": "VUID-VkMemoryGetFdInfoKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkMemoryGetFdInfoKHR-memory-parameter",
"text": " <code>memory</code> <strong class=\"purple\">must</strong> be a valid <code>VkDeviceMemory</code> handle"
},
{
"vuid": "VUID-VkMemoryGetFdInfoKHR-handleType-parameter",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalMemoryHandleTypeFlagBits\">VkExternalMemoryHandleTypeFlagBits</a> value"
}
]
},
"vkGetMemoryFdPropertiesKHR": {
"(VK_KHR_external_memory_fd)": [
{
"vuid": "VUID-vkGetMemoryFdPropertiesKHR-fd-00673",
"text": " <code>fd</code> <strong class=\"purple\">must</strong> be an external memory handle created outside of the Vulkan API."
},
{
"vuid": "VUID-vkGetMemoryFdPropertiesKHR-handleType-00674",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> not be <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR</code>."
},
{
"vuid": "VUID-vkGetMemoryFdPropertiesKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkGetMemoryFdPropertiesKHR-handleType-parameter",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalMemoryHandleTypeFlagBits\">VkExternalMemoryHandleTypeFlagBits</a> value"
},
{
"vuid": "VUID-vkGetMemoryFdPropertiesKHR-pMemoryFdProperties-parameter",
"text": " <code>pMemoryFdProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkMemoryFdPropertiesKHR</code> structure"
}
]
},
"VkImportMemoryHostPointerInfoEXT": {
"(VK_EXT_external_memory_host)": [
{
"vuid": "VUID-VkImportMemoryHostPointerInfoEXT-handleType-01747",
"text": " If <code>handleType</code> is not <code>0</code>, it <strong class=\"purple\">must</strong> be supported for import, as reported in <a href=\"#VkExternalMemoryPropertiesKHR\">VkExternalMemoryPropertiesKHR</a>"
},
{
"vuid": "VUID-VkImportMemoryHostPointerInfoEXT-handleType-01748",
"text": " If <code>handleType</code> is not <code>0</code>, it <strong class=\"purple\">must</strong> be <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT</code> or <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT</code>"
},
{
"vuid": "VUID-VkImportMemoryHostPointerInfoEXT-pHostPointer-01749",
"text": " <code>pHostPointer</code> <strong class=\"purple\">must</strong> be a pointer aligned to an integer multiple of <code>VkPhysicalDeviceExternalMemoryHostPropertiesEXT</code>::<code>minImportedHostPointerAlignment</code>"
},
{
"vuid": "VUID-VkImportMemoryHostPointerInfoEXT-handleType-01750",
"text": " If <code>handleType</code> is <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT</code>, <code>pHostPointer</code> <strong class=\"purple\">must</strong> be a pointer to <code>allocationSize</code> number of bytes of host memory, where <code>allocationSize</code> is the member of the <code>VkMemoryAllocateInfo</code> structure this structure is chained to"
},
{
"vuid": "VUID-VkImportMemoryHostPointerInfoEXT-handleType-01751",
"text": " If <code>handleType</code> is <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT</code>, <code>pHostPointer</code> <strong class=\"purple\">must</strong> be a pointer to <code>allocationSize</code> number of bytes of host mapped foreign memory, where <code>allocationSize</code> is the member of the <code>VkMemoryAllocateInfo</code> structure this structure is chained to"
},
{
"vuid": "VUID-VkImportMemoryHostPointerInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT</code>"
},
{
"vuid": "VUID-VkImportMemoryHostPointerInfoEXT-handleType-parameter",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalMemoryHandleTypeFlagBits\">VkExternalMemoryHandleTypeFlagBits</a> value"
}
]
},
"vkGetMemoryHostPointerPropertiesEXT": {
"(VK_EXT_external_memory_host)": [
{
"vuid": "VUID-vkGetMemoryHostPointerPropertiesEXT-handleType-01752",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> be <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT</code> or <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT</code>"
},
{
"vuid": "VUID-vkGetMemoryHostPointerPropertiesEXT-pHostPointer-01753",
"text": " <code>pHostPointer</code> <strong class=\"purple\">must</strong> be a pointer aligned to an integer multiple of <code>VkPhysicalDeviceExternalMemoryHostPropertiesEXT</code>::<code>minImportedHostPointerAlignment</code>"
},
{
"vuid": "VUID-vkGetMemoryHostPointerPropertiesEXT-handleType-01754",
"text": " If <code>handleType</code> is <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT</code>, <code>pHostPointer</code> <strong class=\"purple\">must</strong> be a pointer to host memory"
},
{
"vuid": "VUID-vkGetMemoryHostPointerPropertiesEXT-handleType-01755",
"text": " If <code>handleType</code> is <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT</code>, <code>pHostPointer</code> <strong class=\"purple\">must</strong> be a pointer to host mapped foreign memory"
},
{
"vuid": "VUID-vkGetMemoryHostPointerPropertiesEXT-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkGetMemoryHostPointerPropertiesEXT-handleType-parameter",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalMemoryHandleTypeFlagBits\">VkExternalMemoryHandleTypeFlagBits</a> value"
},
{
"vuid": "VUID-vkGetMemoryHostPointerPropertiesEXT-pMemoryHostPointerProperties-parameter",
"text": " <code>pMemoryHostPointerProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkMemoryHostPointerPropertiesEXT</code> structure"
}
]
},
"VkMemoryHostPointerPropertiesEXT": {
"(VK_EXT_external_memory_host)": [
{
"vuid": "VUID-VkMemoryHostPointerPropertiesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT</code>"
},
{
"vuid": "VUID-VkMemoryHostPointerPropertiesEXT-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
},
"VkImportAndroidHardwareBufferInfoANDROID": {
"(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-VkImportAndroidHardwareBufferInfoANDROID-buffer-01880",
"text": " If <code>buffer</code> is not <code>NULL</code>, Android hardware buffers <strong class=\"purple\">must</strong> be supported for import, as reported by <a href=\"#VkExternalImageFormatProperties\">VkExternalImageFormatProperties</a> or <a href=\"#VkExternalBufferProperties\">VkExternalBufferProperties</a>."
},
{
"vuid": "VUID-VkImportAndroidHardwareBufferInfoANDROID-buffer-01881",
"text": " If <code>buffer</code> is not <code>NULL</code>, it <strong class=\"purple\">must</strong> be a valid Android hardware buffer object with format and usage compatible with Vulkan as described by <a href=\"#VkExternalMemoryHandleTypeFlagBits\">VkExternalMemoryHandleTypeFlagBits</a>."
},
{
"vuid": "VUID-VkImportAndroidHardwareBufferInfoANDROID-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID</code>"
},
{
"vuid": "VUID-VkImportAndroidHardwareBufferInfoANDROID-buffer-parameter",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>AHardwareBuffer</code> value"
}
]
},
"vkGetMemoryAndroidHardwareBufferANDROID": {
"(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-vkGetMemoryAndroidHardwareBufferANDROID-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkGetMemoryAndroidHardwareBufferANDROID-pInfo-parameter",
"text": " <code>pInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkMemoryGetAndroidHardwareBufferInfoANDROID</code> structure"
},
{
"vuid": "VUID-vkGetMemoryAndroidHardwareBufferANDROID-pBuffer-parameter",
"text": " <code>pBuffer</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid pointer to a <code>AHardwareBuffer</code> value"
}
]
},
"VkMemoryGetAndroidHardwareBufferInfoANDROID": {
"(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-VkMemoryGetAndroidHardwareBufferInfoANDROID-handleTypes-01882",
"text": " <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID</code> <strong class=\"purple\">must</strong> have been included in <a href=\"#VkExportMemoryAllocateInfoKHR\">VkExportMemoryAllocateInfoKHR</a>::<code>handleTypes</code> when <code>memory</code> was created."
},
{
"vuid": "VUID-VkMemoryGetAndroidHardwareBufferInfoANDROID-pNext-01883",
"text": " If the <code>pNext</code> chain of the <a href=\"#VkMemoryAllocateInfo\">VkMemoryAllocateInfo</a> used to allocate <code>memory</code> included a <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a> with non-<code>NULL</code> <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"
}
]
},
"vkCreateBuffer": {
"core": [
{
"vuid": "VUID-vkCreateBuffer-flags-00911",
"text": " If the <code>flags</code> member of <code>pCreateInfo</code> includes <code>VK_BUFFER_CREATE_SPARSE_BINDING_BIT</code>, creating this <code>VkBuffer</code> <strong class=\"purple\">must</strong> not cause the total required sparse memory for all currently valid sparse resources on the device to exceed <code>VkPhysicalDeviceLimits</code>::<code>sparseAddressSpaceSize</code>"
},
{
"vuid": "VUID-vkCreateBuffer-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkCreateBuffer-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkBufferCreateInfo</code> structure"
},
{
"vuid": "VUID-vkCreateBuffer-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateBuffer-pBuffer-parameter",
"text": " <code>pBuffer</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkBuffer</code> handle"
}
]
},
"VkBufferCreateInfo": {
"core": [
{
"vuid": "VUID-VkBufferCreateInfo-size-00912",
"text": " <code>size</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-VkBufferCreateInfo-sharingMode-00913",
"text": " If <code>sharingMode</code> is <code>VK_SHARING_MODE_CONCURRENT</code>, <code>pQueueFamilyIndices</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>queueFamilyIndexCount</code> <code>uint32_t</code> values"
},
{
"vuid": "VUID-VkBufferCreateInfo-sharingMode-00914",
"text": " If <code>sharingMode</code> is <code>VK_SHARING_MODE_CONCURRENT</code>, <code>queueFamilyIndexCount</code> <strong class=\"purple\">must</strong> be greater than <code>1</code>"
},
{
"vuid": "VUID-VkBufferCreateInfo-flags-00915",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-sparseBinding,sparse bindings&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_BUFFER_CREATE_SPARSE_BINDING_BIT</code>"
},
{
"vuid": "VUID-VkBufferCreateInfo-flags-00916",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-sparseResidencyBuffer,sparse buffer residency&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT</code>"
},
{
"vuid": "VUID-VkBufferCreateInfo-flags-00917",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-sparseResidencyAliased,sparse aliased residency&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_BUFFER_CREATE_SPARSE_ALIASED_BIT</code>"
},
{
"vuid": "VUID-VkBufferCreateInfo-flags-00918",
"text": " If <code>flags</code> contains <code>VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT</code> or <code>VK_BUFFER_CREATE_SPARSE_ALIASED_BIT</code>, it <strong class=\"purple\">must</strong> also contain <code>VK_BUFFER_CREATE_SPARSE_BINDING_BIT</code>"
},
{
"vuid": "VUID-VkBufferCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkBufferCreateInfo-pNext-pNext",
"text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkDedicatedAllocationBufferCreateInfoNV\">VkDedicatedAllocationBufferCreateInfoNV</a> or <a href=\"#VkExternalMemoryBufferCreateInfo\">VkExternalMemoryBufferCreateInfo</a>"
},
{
"vuid": "VUID-VkBufferCreateInfo-sType-unique",
"text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkBufferCreateInfo-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkBufferCreateFlagBits\">VkBufferCreateFlagBits</a> values"
},
{
"vuid": "VUID-VkBufferCreateInfo-usage-parameter",
"text": " <code>usage</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkBufferUsageFlagBits\">VkBufferUsageFlagBits</a> values"
},
{
"vuid": "VUID-VkBufferCreateInfo-usage-requiredbitmask",
"text": " <code>usage</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-VkBufferCreateInfo-sharingMode-parameter",
"text": " <code>sharingMode</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSharingMode\">VkSharingMode</a> value"
}
],
"!(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
{
"vuid": "VUID-VkBufferCreateInfo-sharingMode-01391",
"text": " If <code>sharingMode</code> is <code>VK_SHARING_MODE_CONCURRENT</code>, each element of <code>pQueueFamilyIndices</code> <strong class=\"purple\">must</strong> be unique and <strong class=\"purple\">must</strong> be less than <code>pQueueFamilyPropertyCount</code> returned by <a href=\"#vkGetPhysicalDeviceQueueFamilyProperties\">vkGetPhysicalDeviceQueueFamilyProperties</a> for the <code>physicalDevice</code> that was used to create <code>device</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
{
"vuid": "VUID-VkBufferCreateInfo-sharingMode-01419",
"text": " If <code>sharingMode</code> is <code>VK_SHARING_MODE_CONCURRENT</code>, each element of <code>pQueueFamilyIndices</code> <strong class=\"purple\">must</strong> be unique and <strong class=\"purple\">must</strong> be less than <code>pQueueFamilyPropertyCount</code> returned by either <a href=\"#vkGetPhysicalDeviceQueueFamilyProperties\">vkGetPhysicalDeviceQueueFamilyProperties</a> or <a href=\"#vkGetPhysicalDeviceQueueFamilyProperties2\">vkGetPhysicalDeviceQueueFamilyProperties2</a> for the <code>physicalDevice</code> that was used to create <code>device</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_external_memory)": [
{
"vuid": "VUID-VkBufferCreateInfo-pNext-00920",
"text": " If the <code>pNext</code> chain contains an instance of <a href=\"#VkExternalMemoryBufferCreateInfo\">VkExternalMemoryBufferCreateInfo</a>, its <code>handleTypes</code> member <strong class=\"purple\">must</strong> only contain bits that are also in <a href=\"#VkExternalBufferProperties\">VkExternalBufferProperties</a>::<code>externalMemoryProperties.compatibleHandleTypes</code>, as returned by <a href=\"#vkGetPhysicalDeviceExternalBufferProperties\">vkGetPhysicalDeviceExternalBufferProperties</a> with <code>pExternalBufferInfo</code>\\-&amp;amp;gt;<code>handleType</code> equal to any one of the handle types specified in <a href=\"#VkExternalMemoryBufferCreateInfo\">VkExternalMemoryBufferCreateInfo</a>::<code>handleTypes</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-VkBufferCreateInfo-flags-01887",
"text": " If the protected memory feature is not enabled, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_BUFFER_CREATE_PROTECTED_BIT</code>"
},
{
"vuid": "VUID-VkBufferCreateInfo-None-01888",
"text": " If any of the bits <code>VK_BUFFER_CREATE_SPARSE_BINDING_BIT</code>, <code>VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT</code>, or <code>VK_BUFFER_CREATE_SPARSE_ALIASED_BIT</code> are set, <code>VK_BUFFER_CREATE_PROTECTED_BIT</code> <strong class=\"purple\">must</strong> not also be set"
}
],
"(VK_NV_dedicated_allocation)": [
{
"vuid": "VUID-VkBufferCreateInfo-pNext-01571",
"text": " If the <code>pNext</code> chain contains an instance of <a href=\"#VkDedicatedAllocationBufferCreateInfoNV\">VkDedicatedAllocationBufferCreateInfoNV</a>, and the <code>dedicatedAllocation</code> member of the chained structure is <code>VK_TRUE</code>, then <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_BUFFER_CREATE_SPARSE_BINDING_BIT</code>, <code>VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT</code>, or <code>VK_BUFFER_CREATE_SPARSE_ALIASED_BIT</code>"
}
]
},
"VkDedicatedAllocationBufferCreateInfoNV": {
"(VK_NV_dedicated_allocation)": [
{
"vuid": "VUID-VkDedicatedAllocationBufferCreateInfoNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV</code>"
}
]
},
"VkExternalMemoryBufferCreateInfo": {
"(VK_VERSION_1_1,VK_KHR_external_memory)": [
{
"vuid": "VUID-VkExternalMemoryBufferCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkExternalMemoryBufferCreateInfo-handleTypes-parameter",
"text": " <code>handleTypes</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkExternalMemoryHandleTypeFlagBits\">VkExternalMemoryHandleTypeFlagBits</a> values"
}
]
},
"vkDestroyBuffer": {
"core": [
{
"vuid": "VUID-vkDestroyBuffer-buffer-00922",
"text": " All submitted commands that refer to <code>buffer</code>, either directly or via a <code>VkBufferView</code>, <strong class=\"purple\">must</strong> have completed execution"
},
{
"vuid": "VUID-vkDestroyBuffer-buffer-00923",
"text": " If <code>VkAllocationCallbacks</code> were provided when <code>buffer</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
},
{
"vuid": "VUID-vkDestroyBuffer-buffer-00924",
"text": " If no <code>VkAllocationCallbacks</code> were provided when <code>buffer</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-vkDestroyBuffer-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkDestroyBuffer-buffer-parameter",
"text": " If <code>buffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
},
{
"vuid": "VUID-vkDestroyBuffer-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkDestroyBuffer-buffer-parent",
"text": " If <code>buffer</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkCreateBufferView": {
"core": [
{
"vuid": "VUID-vkCreateBufferView-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkCreateBufferView-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkBufferViewCreateInfo</code> structure"
},
{
"vuid": "VUID-vkCreateBufferView-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateBufferView-pView-parameter",
"text": " <code>pView</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkBufferView</code> handle"
}
]
},
"VkBufferViewCreateInfo": {
"core": [
{
"vuid": "VUID-VkBufferViewCreateInfo-offset-00925",
"text": " <code>offset</code> <strong class=\"purple\">must</strong> be less than the size of <code>buffer</code>"
},
{
"vuid": "VUID-VkBufferViewCreateInfo-offset-00926",
"text": " <code>offset</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceLimits</code>::<code>minTexelBufferOffsetAlignment</code>"
},
{
"vuid": "VUID-VkBufferViewCreateInfo-range-00928",
"text": " If <code>range</code> is not equal to <code>VK_WHOLE_SIZE</code>, <code>range</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-VkBufferViewCreateInfo-range-00929",
"text": " If <code>range</code> is not equal to <code>VK_WHOLE_SIZE</code>, <code>range</code> <strong class=\"purple\">must</strong> be a multiple of the element size of <code>format</code>"
},
{
"vuid": "VUID-VkBufferViewCreateInfo-range-00930",
"text": " If <code>range</code> is not equal to <code>VK_WHOLE_SIZE</code>, <code>range</code> divided by the element size of <code>format</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxTexelBufferElements</code>"
},
{
"vuid": "VUID-VkBufferViewCreateInfo-offset-00931",
"text": " If <code>range</code> is not equal to <code>VK_WHOLE_SIZE</code>, the sum of <code>offset</code> and <code>range</code> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
},
{
"vuid": "VUID-VkBufferViewCreateInfo-buffer-00932",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> have been created with a <code>usage</code> value containing at least one of <code>VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT</code> or <code>VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT</code>"
},
{
"vuid": "VUID-VkBufferViewCreateInfo-buffer-00933",
"text": " If <code>buffer</code> was created with <code>usage</code> containing <code>VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT</code>, <code>format</code> <strong class=\"purple\">must</strong> be supported for uniform texel buffers, as specified by the <code>VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT</code> flag in <code>VkFormatProperties</code>::<code>bufferFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code>"
},
{
"vuid": "VUID-VkBufferViewCreateInfo-buffer-00934",
"text": " If <code>buffer</code> was created with <code>usage</code> containing <code>VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT</code>, <code>format</code> <strong class=\"purple\">must</strong> be supported for storage texel buffers, as specified by the <code>VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT</code> flag in <code>VkFormatProperties</code>::<code>bufferFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code>"
},
{
"vuid": "VUID-VkBufferViewCreateInfo-buffer-00935",
"text": " If <code>buffer</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
},
{
"vuid": "VUID-VkBufferViewCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkBufferViewCreateInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkBufferViewCreateInfo-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkBufferViewCreateInfo-buffer-parameter",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
},
{
"vuid": "VUID-VkBufferViewCreateInfo-format-parameter",
"text": " <code>format</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFormat\">VkFormat</a> value"
}
]
},
"vkDestroyBufferView": {
"core": [
{
"vuid": "VUID-vkDestroyBufferView-bufferView-00936",
"text": " All submitted commands that refer to <code>bufferView</code> <strong class=\"purple\">must</strong> have completed execution"
},
{
"vuid": "VUID-vkDestroyBufferView-bufferView-00937",
"text": " If <code>VkAllocationCallbacks</code> were provided when <code>bufferView</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
},
{
"vuid": "VUID-vkDestroyBufferView-bufferView-00938",
"text": " If no <code>VkAllocationCallbacks</code> were provided when <code>bufferView</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-vkDestroyBufferView-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkDestroyBufferView-bufferView-parameter",
"text": " If <code>bufferView</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>bufferView</code> <strong class=\"purple\">must</strong> be a valid <code>VkBufferView</code> handle"
},
{
"vuid": "VUID-vkDestroyBufferView-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkDestroyBufferView-bufferView-parent",
"text": " If <code>bufferView</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkCreateImage": {
"core": [
{
"vuid": "VUID-vkCreateImage-flags-00939",
"text": " If the <code>flags</code> member of <code>pCreateInfo</code> includes <code>VK_IMAGE_CREATE_SPARSE_BINDING_BIT</code>, creating this <code>VkImage</code> <strong class=\"purple\">must</strong> not cause the total required sparse memory for all currently valid sparse resources on the device to exceed <code>VkPhysicalDeviceLimits</code>::<code>sparseAddressSpaceSize</code>"
},
{
"vuid": "VUID-vkCreateImage-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkCreateImage-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkImageCreateInfo</code> structure"
},
{
"vuid": "VUID-vkCreateImage-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateImage-pImage-parameter",
"text": " <code>pImage</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkImage</code> handle"
}
]
},
"VkImageCreateInfo": {
"!(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-VkImageCreateInfo-format-00940",
"text": " The combination of <code>format</code>, <code>imageType</code>, <code>tiling</code>, <code>usage</code>, and <code>flags</code> <strong class=\"purple\">must</strong> be supported, as indicated by a <code>VK_SUCCESS</code> return value from <code>vkGetPhysicalDeviceImageFormatProperties</code> invoked with the same values passed to the corresponding parameters."
},
{
"vuid": "VUID-VkImageCreateInfo-format-00943",
"text": " <code>format</code> <strong class=\"purple\">must</strong> not be <code>VK_FORMAT_UNDEFINED</code>"
}
],
"(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-VkImageCreateInfo-pNext-01889",
"text": " If the <code>pNext</code> chain does not contain an instance of <a href=\"#VkExternalFormatANDROID\">VkExternalFormatANDROID</a>, or if <code>format</code> is not <code>VK_FORMAT_UNDEFINED</code>, 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-01974",
"text": " If the <code>pNext</code> chain contains an instance of <a href=\"#VkExternalFormatANDROID\">VkExternalFormatANDROID</a>, and its member <code>externalFormat</code> is non-zero the <code>format</code> <strong class=\"purple\">must</strong> be <code>VK_FORMAT_UNDEFINED</code>."
},
{
"vuid": "VUID-VkImageCreateInfo-pNext-01975",
"text": " If the <code>pNext</code> chain does not contain an instance of <a href=\"#VkExternalFormatANDROID\">VkExternalFormatANDROID</a>, or does and its member <code>externalFormat</code> is <code>0</code> the <code>format</code> <strong class=\"purple\">must</strong> not be <code>VK_FORMAT_UNDEFINED</code>."
},
{
"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-extent-00944",
"text": " <code>extent</code>::<code>width</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>."
},
{
"vuid": "VUID-VkImageCreateInfo-extent-00945",
"text": " <code>extent</code>::<code>height</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>."
},
{
"vuid": "VUID-VkImageCreateInfo-extent-00946",
"text": " <code>extent</code>::<code>depth</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>."
},
{
"vuid": "VUID-VkImageCreateInfo-mipLevels-00947",
"text": " <code>mipLevels</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-arrayLayers-00948",
"text": " <code>arrayLayers</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-flags-00949",
"text": " If <code>flags</code> contains <code>VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT</code>, <code>imageType</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_TYPE_2D</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-imageType-00951",
"text": " If <code>imageType</code> is <code>VK_IMAGE_TYPE_1D</code>, <code>extent.width</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxImageDimension1D</code>, or <code>VkImageFormatProperties</code>::<code>maxExtent.width</code> (as returned by <code>vkGetPhysicalDeviceImageFormatProperties</code> with <code>format</code>, <code>imageType</code>, <code>tiling</code>, <code>usage</code>, and <code>flags</code> equal to those in this structure) - whichever is higher"
},
{
"vuid": "VUID-VkImageCreateInfo-imageType-00952",
"text": " If <code>imageType</code> is <code>VK_IMAGE_TYPE_2D</code> and <code>flags</code> does not contain <code>VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT</code>, <code>extent.width</code> and <code>extent.height</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxImageDimension2D</code>, or <code>VkImageFormatProperties</code>::<code>maxExtent.width</code>/<code>height</code> (as returned by <code>vkGetPhysicalDeviceImageFormatProperties</code> with <code>format</code>, <code>imageType</code>, <code>tiling</code>, <code>usage</code>, and <code>flags</code> equal to those in this structure) - whichever is higher"
},
{
"vuid": "VUID-VkImageCreateInfo-imageType-00953",
"text": " If <code>imageType</code> is <code>VK_IMAGE_TYPE_2D</code> and <code>flags</code> contains <code>VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT</code>, <code>extent.width</code> and <code>extent.height</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxImageDimensionCube</code>, or <code>VkImageFormatProperties</code>::<code>maxExtent.width</code>/<code>height</code> (as returned by <code>vkGetPhysicalDeviceImageFormatProperties</code> with <code>format</code>, <code>imageType</code>, <code>tiling</code>, <code>usage</code>, and <code>flags</code> equal to those in this structure) - whichever is higher"
},
{
"vuid": "VUID-VkImageCreateInfo-imageType-00954",
"text": " If <code>imageType</code> is <code>VK_IMAGE_TYPE_2D</code> and <code>flags</code> contains <code>VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT</code>, <code>extent.width</code> and <code>extent.height</code> <strong class=\"purple\">must</strong> be equal and <code>arrayLayers</code> <strong class=\"purple\">must</strong> be greater than or equal to 6"
},
{
"vuid": "VUID-VkImageCreateInfo-imageType-00955",
"text": " If <code>imageType</code> is <code>VK_IMAGE_TYPE_3D</code>, <code>extent.width</code>, <code>extent.height</code> and <code>extent.depth</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxImageDimension3D</code>, or <code>VkImageFormatProperties</code>::<code>maxExtent.width</code>/<code>height</code>/<code>depth</code> (as returned by <code>vkGetPhysicalDeviceImageFormatProperties</code> with <code>format</code>, <code>imageType</code>, <code>tiling</code>, <code>usage</code>, and <code>flags</code> equal to those in this structure) - whichever is higher"
},
{
"vuid": "VUID-VkImageCreateInfo-imageType-00956",
"text": " If <code>imageType</code> is <code>VK_IMAGE_TYPE_1D</code>, both <code>extent.height</code> and <code>extent.depth</code> <strong class=\"purple\">must</strong> be <code>1</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-imageType-00957",
"text": " If <code>imageType</code> is <code>VK_IMAGE_TYPE_2D</code>, <code>extent.depth</code> <strong class=\"purple\">must</strong> be <code>1</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-mipLevels-00958",
"text": " <code>mipLevels</code> <strong class=\"purple\">must</strong> be less than or equal to <span class=\"eq\">{lfloor}log<sub>2</sub>(max(<code>extent.width</code>, <code>extent.height</code>, <code>extent.depth</code>)){rfloor} &#43; 1</span>."
},
{
"vuid": "VUID-VkImageCreateInfo-extent-00959",
"text": " <code>mipLevels</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkImageFormatProperties</code>::<code>maxMipLevels</code> (as returned by <code>vkGetPhysicalDeviceImageFormatProperties</code> with <code>format</code>, <code>imageType</code>, <code>tiling</code>, <code>usage</code>, and <code>flags</code> equal to those in this structure)"
},
{
"vuid": "VUID-VkImageCreateInfo-arrayLayers-00960",
"text": " <code>arrayLayers</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkImageFormatProperties</code>::<code>maxArrayLayers</code> (as returned by <code>vkGetPhysicalDeviceImageFormatProperties</code> with <code>format</code>, <code>imageType</code>, <code>tiling</code>, <code>usage</code>, and <code>flags</code> equal to those in this structure)"
},
{
"vuid": "VUID-VkImageCreateInfo-imageType-00961",
"text": " If <code>imageType</code> is <code>VK_IMAGE_TYPE_3D</code>, <code>arrayLayers</code> <strong class=\"purple\">must</strong> be <code>1</code>."
},
{
"vuid": "VUID-VkImageCreateInfo-samples-00962",
"text": " If <code>samples</code> is not <code>VK_SAMPLE_COUNT_1_BIT</code>, <code>imageType</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_TYPE_2D</code>, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT</code>, <code>tiling</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_TILING_OPTIMAL</code>, and <code>mipLevels</code> <strong class=\"purple\">must</strong> be equal to <code>1</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-usage-00963",
"text": " If <code>usage</code> includes <code>VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT</code>, then bits other than <code>VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT</code>, <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code>, and <code>VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT</code> <strong class=\"purple\">must</strong> not be set"
},
{
"vuid": "VUID-VkImageCreateInfo-usage-00964",
"text": " If <code>usage</code> includes <code>VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT</code>, <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code>, <code>VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT</code>, or <code>VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT</code>, <code>extent.width</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxFramebufferWidth</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-usage-00965",
"text": " If <code>usage</code> includes <code>VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT</code>, <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code>, <code>VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT</code>, or <code>VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT</code>, <code>extent.height</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxFramebufferHeight</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-usage-00966",
"text": " If <code>usage</code> includes <code>VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT</code>, <code>usage</code> <strong class=\"purple\">must</strong> also contain at least one of <code>VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT</code>, <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code>, or <code>VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT</code>."
},
{
"vuid": "VUID-VkImageCreateInfo-samples-00967",
"text": " <code>samples</code> <strong class=\"purple\">must</strong> be a bit value that is set in <code>VkImageFormatProperties</code>::<code>sampleCounts</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties</code> with <code>format</code>, <code>imageType</code>, <code>tiling</code>, <code>usage</code>, and <code>flags</code> equal to those in this structure"
},
{
"vuid": "VUID-VkImageCreateInfo-usage-00968",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-shaderStorageImageMultisample,multisampled storage images&amp;amp;gt;&amp;amp;gt; feature is not enabled, and <code>usage</code> contains <code>VK_IMAGE_USAGE_STORAGE_BIT</code>, <code>samples</code> <strong class=\"purple\">must</strong> be <code>VK_SAMPLE_COUNT_1_BIT</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-flags-00969",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-sparseBinding,sparse bindings&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_CREATE_SPARSE_BINDING_BIT</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-flags-01924",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-sparseResidencyAliased,sparse aliased residency&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_CREATE_SPARSE_ALIASED_BIT</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-imageType-00970",
"text": " If <code>imageType</code> is <code>VK_IMAGE_TYPE_1D</code>, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-imageType-00971",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-sparseResidencyImage2D,sparse residency for 2D images&amp;amp;gt;&amp;amp;gt; feature is not enabled, and <code>imageType</code> is <code>VK_IMAGE_TYPE_2D</code>, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-imageType-00972",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-sparseResidencyImage3D,sparse residency for 3D images&amp;amp;gt;&amp;amp;gt; feature is not enabled, and <code>imageType</code> is <code>VK_IMAGE_TYPE_3D</code>, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-imageType-00973",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-sparseResidency2Samples,sparse residency for images with 2 samples&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>imageType</code> is <code>VK_IMAGE_TYPE_2D</code>, and <code>samples</code> is <code>VK_SAMPLE_COUNT_2_BIT</code>, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-imageType-00974",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-sparseResidency4Samples,sparse residency for images with 4 samples&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>imageType</code> is <code>VK_IMAGE_TYPE_2D</code>, and <code>samples</code> is <code>VK_SAMPLE_COUNT_4_BIT</code>, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-imageType-00975",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-sparseResidency8Samples,sparse residency for images with 8 samples&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>imageType</code> is <code>VK_IMAGE_TYPE_2D</code>, and <code>samples</code> is <code>VK_SAMPLE_COUNT_8_BIT</code>, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-imageType-00976",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-sparseResidency16Samples,sparse residency for images with 16 samples&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>imageType</code> is <code>VK_IMAGE_TYPE_2D</code>, and <code>samples</code> is <code>VK_SAMPLE_COUNT_16_BIT</code>, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-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.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.compatibleHandleTypes</code>, as returned by <a href=\"#vkGetPhysicalDeviceExternalImageFormatPropertiesNV\">vkGetPhysicalDeviceExternalImageFormatPropertiesNV</a> with <code>format</code>, <code>imageType</code>, <code>tiling</code>, <code>usage</code>, and <code>flags</code> equal to those in this structure, and with <code>externalHandleType</code> equal to any one of the handle types specified in <a href=\"#VkExternalMemoryImageCreateInfoNV\">VkExternalMemoryImageCreateInfoNV</a>::<code>handleTypes</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_device_group)": [
{
"vuid": "VUID-VkImageCreateInfo-physicalDeviceCount-01421",
"text": " If the logical device was created with <a href=\"#VkDeviceGroupDeviceCreateInfo\">VkDeviceGroupDeviceCreateInfo</a>::<code>physicalDeviceCount</code> equal to 1, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-flags-00992",
"text": " If <code>flags</code> contains <code>VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT</code>, then <code>mipLevels</code> <strong class=\"purple\">must</strong> be one, <code>arrayLayers</code> <strong class=\"purple\">must</strong> be one, <code>imageType</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_TYPE_2D</code>, and <code>tiling</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_TILING_OPTIMAL</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_maintenance2)": [
{
"vuid": "VUID-VkImageCreateInfo-flags-01572",
"text": " If <code>flags</code> contains <code>VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT</code>, then <code>format</code> <strong class=\"purple\">must</strong> be a &amp;amp;lt;&amp;amp;lt;appendix-compressedtex-bc,block-compressed image format&amp;amp;gt;&amp;amp;gt;, an &amp;amp;lt;&amp;amp;lt;appendix-compressedtex-etc2, ETC compressed image format&amp;amp;gt;&amp;amp;gt;, or an &amp;amp;lt;&amp;amp;lt;appendix-compressedtex-astc, ASTC compressed image format&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-VkImageCreateInfo-flags-01573",
"text": " If <code>flags</code> contains <code>VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT</code>, then <code>flags</code> <strong class=\"purple\">must</strong> also contain <code>VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT</code>."
}
],
"(VK_VERSION_1_1,VK_KHR_external_memory,VK_NV_external_memory)": [
{
"vuid": "VUID-VkImageCreateInfo-pNext-01443",
"text": " If the <code>pNext</code> chain includes a ifdef::VK_VERSION_1_1,VK_KHR_external_memory[<a href=\"#VkExternalMemoryImageCreateInfo\">VkExternalMemoryImageCreateInfo</a>]"
}
],
"(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-VkImageCreateInfo-format-01574",
"text": " If the image <code>format</code> is one of those listed in &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion&amp;amp;gt;&amp;amp;gt;:"
},
{
"vuid": "VUID-VkImageCreateInfo-tiling-01575",
"text": " If <code>tiling</code> is <code>VK_IMAGE_TILING_OPTIMAL</code>, <code>format</code> is a <em>multi-planar</em> format, and <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> (as returned by <code>vkGetPhysicalDeviceFormatProperties</code> with the same value of <code>format</code>) does not include <code>VK_FORMAT_FEATURE_DISJOINT_BIT</code>, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_CREATE_DISJOINT_BIT</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-tiling-01576",
"text": " If <code>tiling</code> is <code>VK_IMAGE_TILING_LINEAR</code>, <code>format</code> is a <em>multi-planar</em> format, and <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> (as returned by <code>vkGetPhysicalDeviceFormatProperties</code> with the same value of <code>format</code>) does not include <code>VK_FORMAT_FEATURE_DISJOINT_BIT</code>, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_CREATE_DISJOINT_BIT</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-format-01577",
"text": " If <code>format</code> is not a <em>multi-planar</em> format, and <code>flags</code> does not include <code>VK_IMAGE_CREATE_ALIAS_BIT</code>, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_CREATE_DISJOINT_BIT</code>"
}
],
"(VK_EXT_sample_locations)": [
{
"vuid": "VUID-VkImageCreateInfo-flags-01533",
"text": " If <code>flags</code> contains <code>VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT</code> <code>format</code> <strong class=\"purple\">must</strong> be a depth or depth/stencil format"
}
]
},
"VkDedicatedAllocationImageCreateInfoNV": {
"(VK_NV_dedicated_allocation)": [
{
"vuid": "VUID-VkDedicatedAllocationImageCreateInfoNV-dedicatedAllocation-00994",
"text": " If <code>dedicatedAllocation</code> is <code>VK_TRUE</code>, <code>VkImageCreateInfo</code>::<code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_IMAGE_CREATE_SPARSE_BINDING_BIT</code>, <code>VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT</code>, or <code>VK_IMAGE_CREATE_SPARSE_ALIASED_BIT</code>"
},
{
"vuid": "VUID-VkDedicatedAllocationImageCreateInfoNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV</code>"
}
]
},
"VkExternalMemoryImageCreateInfo": {
"(VK_VERSION_1_1,VK_KHR_external_memory)": [
{
"vuid": "VUID-VkExternalMemoryImageCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkExternalMemoryImageCreateInfo-handleTypes-parameter",
"text": " <code>handleTypes</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkExternalMemoryHandleTypeFlagBits\">VkExternalMemoryHandleTypeFlagBits</a> values"
},
{
"vuid": "VUID-VkExternalMemoryImageCreateInfo-handleTypes-requiredbitmask",
"text": " <code>handleTypes</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
}
]
},
"VkExternalMemoryImageCreateInfoNV": {
"(VK_NV_external_memory)": [
{
"vuid": "VUID-VkExternalMemoryImageCreateInfoNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV</code>"
},
{
"vuid": "VUID-VkExternalMemoryImageCreateInfoNV-handleTypes-parameter",
"text": " <code>handleTypes</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkExternalMemoryHandleTypeFlagBitsNV\">VkExternalMemoryHandleTypeFlagBitsNV</a> values"
}
]
},
"VkExternalFormatANDROID": {
"(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-VkExternalFormatANDROID-externalFormat-01894",
"text": " <code>externalFormat</code> <strong class=\"purple\">must</strong> be <code>0</code> or a value returned in the <code>externalFormat</code> member of <a href=\"#VkAndroidHardwareBufferFormatPropertiesANDROID\">VkAndroidHardwareBufferFormatPropertiesANDROID</a> by an earlier call to <a href=\"#vkGetAndroidHardwareBufferPropertiesANDROID\">vkGetAndroidHardwareBufferPropertiesANDROID</a>"
},
{
"vuid": "VUID-VkExternalFormatANDROID-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID</code>"
}
]
},
"VkImageSwapchainCreateInfoKHR": {
"(VK_VERSION_1_1,VK_KHR_device_group)+(VK_KHR_swapchain)": [
{
"vuid": "VUID-VkImageSwapchainCreateInfoKHR-swapchain-00995",
"text": " If <code>swapchain</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, the fields of <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> <strong class=\"purple\">must</strong> match the &amp;amp;lt;&amp;amp;lt;swapchain-wsi-image-create-info, implied image creation parameters&amp;amp;gt;&amp;amp;gt; of the swapchain"
},
{
"vuid": "VUID-VkImageSwapchainCreateInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR</code>"
},
{
"vuid": "VUID-VkImageSwapchainCreateInfoKHR-swapchain-parameter",
"text": " If <code>swapchain</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>swapchain</code> <strong class=\"purple\">must</strong> be a valid <code>VkSwapchainKHR</code> handle"
}
]
},
"VkImageFormatListCreateInfoKHR": {
"(VK_KHR_image_format_list)": [
{
"vuid": "VUID-VkImageFormatListCreateInfoKHR-viewFormatCount-01578",
"text": " If <code>viewFormatCount</code> is not <code>0</code>, all of the formats in the <code>pViewFormats</code> array <strong class=\"purple\">must</strong> be compatible with the format specified in the <code>format</code> field of <code>VkImageCreateInfo</code>, as described in the <a href=\"#features-formats-compatibility\">compatibility table</a>."
},
{
"vuid": "VUID-VkImageFormatListCreateInfoKHR-flags-01579",
"text": " If <code>VkImageCreateInfo</code>::<code>flags</code> does not contain <code>VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT</code>, <code>viewFormatCount</code> <strong class=\"purple\">must</strong> be <code>0</code> or <code>1</code>."
},
{
"vuid": "VUID-VkImageFormatListCreateInfoKHR-viewFormatCount-01580",
"text": " If <code>viewFormatCount</code> is not <code>0</code>, <code>VkImageCreateInfo</code>::<code>format</code> <strong class=\"purple\">must</strong> be in <code>pViewFormats</code>."
},
{
"vuid": "VUID-VkImageFormatListCreateInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR</code>"
},
{
"vuid": "VUID-VkImageFormatListCreateInfoKHR-pViewFormats-parameter",
"text": " If <code>viewFormatCount</code> is not <code>0</code>, <code>pViewFormats</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>viewFormatCount</code> valid <a href=\"#VkFormat\">VkFormat</a> values"
}
]
},
"vkGetImageSubresourceLayout": {
"core": [
{
"vuid": "VUID-vkGetImageSubresourceLayout-image-00996",
"text": " <code>image</code> <strong class=\"purple\">must</strong> have been created with <code>tiling</code> equal to <code>VK_IMAGE_TILING_LINEAR</code>"
},
{
"vuid": "VUID-vkGetImageSubresourceLayout-aspectMask-00997",
"text": " The <code>aspectMask</code> member of <code>pSubresource</code> <strong class=\"purple\">must</strong> only have a single bit set"
},
{
"vuid": "VUID-vkGetImageSubresourceLayout-mipLevel-01716",
"text": " The <code>mipLevel</code> member of <code>pSubresource</code> <strong class=\"purple\">must</strong> be less than the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
},
{
"vuid": "VUID-vkGetImageSubresourceLayout-arrayLayer-01717",
"text": " The <code>arrayLayer</code> member of <code>pSubresource</code> <strong class=\"purple\">must</strong> be less than the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
},
{
"vuid": "VUID-vkGetImageSubresourceLayout-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkGetImageSubresourceLayout-image-parameter",
"text": " <code>image</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
},
{
"vuid": "VUID-vkGetImageSubresourceLayout-pSubresource-parameter",
"text": " <code>pSubresource</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkImageSubresource</code> structure"
},
{
"vuid": "VUID-vkGetImageSubresourceLayout-pLayout-parameter",
"text": " <code>pLayout</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSubresourceLayout</code> structure"
},
{
"vuid": "VUID-vkGetImageSubresourceLayout-image-parent",
"text": " <code>image</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-vkGetImageSubresourceLayout-format-01581",
"text": " If the <code>format</code> of <code>image</code> is a &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar format&amp;amp;gt;&amp;amp;gt; with two planes, the <code>aspectMask</code> member of <code>pSubresource</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_ASPECT_PLANE_0_BIT</code> or <code>VK_IMAGE_ASPECT_PLANE_1_BIT</code>"
},
{
"vuid": "VUID-vkGetImageSubresourceLayout-format-01582",
"text": " If the <code>format</code> of <code>image</code> is a &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar format&amp;amp;gt;&amp;amp;gt; with three planes, the <code>aspectMask</code> member of <code>pSubresource</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_ASPECT_PLANE_0_BIT</code>, <code>VK_IMAGE_ASPECT_PLANE_1_BIT</code> or <code>VK_IMAGE_ASPECT_PLANE_2_BIT</code>"
}
],
"(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-vkGetImageSubresourceLayout-image-01895",
"text": " If <code>image</code> was created with the <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID</code> external memory handle type, then <code>image</code> <strong class=\"purple\">must</strong> be bound to memory."
}
]
},
"VkImageSubresource": {
"core": [
{
"vuid": "VUID-VkImageSubresource-aspectMask-parameter",
"text": " <code>aspectMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageAspectFlagBits\">VkImageAspectFlagBits</a> values"
},
{
"vuid": "VUID-VkImageSubresource-aspectMask-requiredbitmask",
"text": " <code>aspectMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
}
]
},
"vkDestroyImage": {
"core": [
{
"vuid": "VUID-vkDestroyImage-image-01000",
"text": " All submitted commands that refer to <code>image</code>, either directly or via a <code>VkImageView</code>, <strong class=\"purple\">must</strong> have completed execution"
},
{
"vuid": "VUID-vkDestroyImage-image-01001",
"text": " If <code>VkAllocationCallbacks</code> were provided when <code>image</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
},
{
"vuid": "VUID-vkDestroyImage-image-01002",
"text": " If no <code>VkAllocationCallbacks</code> were provided when <code>image</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-vkDestroyImage-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkDestroyImage-image-parameter",
"text": " If <code>image</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>image</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
},
{
"vuid": "VUID-vkDestroyImage-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkDestroyImage-image-parent",
"text": " If <code>image</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkCreateImageView": {
"core": [
{
"vuid": "VUID-vkCreateImageView-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkCreateImageView-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkImageViewCreateInfo</code> structure"
},
{
"vuid": "VUID-vkCreateImageView-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateImageView-pView-parameter",
"text": " <code>pView</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkImageView</code> handle"
}
]
},
"VkImageViewCreateInfo": {
"core": [
{
"vuid": "VUID-VkImageViewCreateInfo-image-01003",
"text": " If <code>image</code> was not created with <code>VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT</code> then <code>viewType</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_VIEW_TYPE_CUBE</code> or <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code>"
},
{
"vuid": "VUID-VkImageViewCreateInfo-viewType-01004",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-imageCubeArray,image cubemap arrays&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>viewType</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code>"
},
{
"vuid": "VUID-VkImageViewCreateInfo-image-01006",
"text": " If <code>image</code> was created with <code>VK_IMAGE_TILING_LINEAR</code>, <code>format</code> <strong class=\"purple\">must</strong> be format that has at least one supported feature bit present in the value of <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> with the same value of <code>format</code>"
},
{
"vuid": "VUID-VkImageViewCreateInfo-image-01007",
"text": " <code>image</code> <strong class=\"purple\">must</strong> have been created with a <code>usage</code> value containing at least one of <code>VK_IMAGE_USAGE_SAMPLED_BIT</code>, <code>VK_IMAGE_USAGE_STORAGE_BIT</code>, <code>VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT</code>, <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code>, or <code>VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT</code>"
},
{
"vuid": "VUID-VkImageViewCreateInfo-image-01008",
"text": " If <code>image</code> was created with <code>VK_IMAGE_TILING_LINEAR</code> and <code>usage</code> contains <code>VK_IMAGE_USAGE_SAMPLED_BIT</code>, <code>format</code> <strong class=\"purple\">must</strong> be supported for sampled images, as specified by the <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT</code> flag in <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> with the same value of <code>format</code>"
},
{
"vuid": "VUID-VkImageViewCreateInfo-image-01009",
"text": " If <code>image</code> was created with <code>VK_IMAGE_TILING_LINEAR</code> and <code>usage</code> contains <code>VK_IMAGE_USAGE_STORAGE_BIT</code>, <code>format</code> <strong class=\"purple\">must</strong> be supported for storage images, as specified by the <code>VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT</code> flag in <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> with the same value of <code>format</code>"
},
{
"vuid": "VUID-VkImageViewCreateInfo-image-01010",
"text": " If <code>image</code> was created with <code>VK_IMAGE_TILING_LINEAR</code> and <code>usage</code> contains <code>VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT</code>, <code>format</code> <strong class=\"purple\">must</strong> be supported for color attachments, as specified by the <code>VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT</code> flag in <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> with the same value of <code>format</code>"
},
{
"vuid": "VUID-VkImageViewCreateInfo-image-01011",
"text": " If <code>image</code> was created with <code>VK_IMAGE_TILING_LINEAR</code> and <code>usage</code> contains <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code>, <code>format</code> <strong class=\"purple\">must</strong> be supported for depth/stencil attachments, as specified by the <code>VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT</code> flag in <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> with the same value of <code>format</code>"
},
{
"vuid": "VUID-VkImageViewCreateInfo-subresourceRange-01478",
"text": " <code>subresourceRange.baseMipLevel</code> <strong class=\"purple\">must</strong> be less than the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
},
{
"vuid": "VUID-VkImageViewCreateInfo-subresourceRange-01718",
"text": " If <code>subresourceRange.levelCount</code> is not <code>VK_REMAINING_MIP_LEVELS</code>, <span class=\"eq\"><code>subresourceRange.baseMipLevel</code> &#43; <code>subresourceRange.levelCount</code></span> <strong class=\"purple\">must</strong> be less than or equal to the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
},
{
"vuid": "VUID-VkImageViewCreateInfo-image-01018",
"text": " If <code>image</code> was created with the <code>VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT</code> flag, <code>format</code> <strong class=\"purple\">must</strong> be compatible with the <code>format</code> used to create <code>image</code>, as defined in &amp;amp;lt;&amp;amp;lt;features-formats-compatibility-classes,Format Compatibility Classes&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-VkImageViewCreateInfo-image-01020",
"text": " If <code>image</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
},
{
"vuid": "VUID-VkImageViewCreateInfo-subResourceRange-01021",
"text": " <code>subresourceRange</code> and <code>viewType</code> <strong class=\"purple\">must</strong> be compatible with the image, as described in the &amp;amp;lt;&amp;amp;lt;resources-image-views-compatibility,compatibility table&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-VkImageViewCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkImageViewCreateInfo-pNext-pNext",
"text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkImageViewUsageCreateInfo\">VkImageViewUsageCreateInfo</a> or <a href=\"#VkSamplerYcbcrConversionInfo\">VkSamplerYcbcrConversionInfo</a>"
},
{
"vuid": "VUID-VkImageViewCreateInfo-sType-unique",
"text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkImageViewCreateInfo-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkImageViewCreateInfo-image-parameter",
"text": " <code>image</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
},
{
"vuid": "VUID-VkImageViewCreateInfo-viewType-parameter",
"text": " <code>viewType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageViewType\">VkImageViewType</a> value"
},
{
"vuid": "VUID-VkImageViewCreateInfo-format-parameter",
"text": " <code>format</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFormat\">VkFormat</a> value"
},
{
"vuid": "VUID-VkImageViewCreateInfo-components-parameter",
"text": " <code>components</code> <strong class=\"purple\">must</strong> be a valid <code>VkComponentMapping</code> structure"
},
{
"vuid": "VUID-VkImageViewCreateInfo-subresourceRange-parameter",
"text": " <code>subresourceRange</code> <strong class=\"purple\">must</strong> be a valid <code>VkImageSubresourceRange</code> structure"
}
],
"(VK_VERSION_1_1,VK_KHR_maintenance1)": [
{
"vuid": "VUID-VkImageViewCreateInfo-image-01005",
"text": " If <code>image</code> was created with <code>VK_IMAGE_TYPE_3D</code> but without <code>VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT</code> set then <code>viewType</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_VIEW_TYPE_2D</code> or <code>VK_IMAGE_VIEW_TYPE_2D_ARRAY</code>"
},
{
"vuid": "VUID-VkImageViewCreateInfo-image-01482",
"text": " If <code>image</code> is not a 3D image created with <code>VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT</code> set, or <code>viewType</code> is not <code>VK_IMAGE_VIEW_TYPE_2D</code> or <code>VK_IMAGE_VIEW_TYPE_2D_ARRAY</code>, <code>subresourceRange</code>::<code>baseArrayLayer</code> <strong class=\"purple\">must</strong> be less than the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
},
{
"vuid": "VUID-VkImageViewCreateInfo-subresourceRange-01483",
"text": " If <code>subresourceRange</code>::<code>layerCount</code> is not <code>VK_REMAINING_ARRAY_LAYERS</code>, <code>image</code> is not a 3D image created with <code>VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT</code> set, or <code>viewType</code> is not <code>VK_IMAGE_VIEW_TYPE_2D</code> or <code>VK_IMAGE_VIEW_TYPE_2D_ARRAY</code>, <code>subresourceRange</code>::<code>layerCount</code> <strong class=\"purple\">must</strong> be non-zero and <span class=\"eq\"><code>subresourceRange</code>::<code>baseArrayLayer</code> &#43; <code>subresourceRange</code>::<code>layerCount</code></span> <strong class=\"purple\">must</strong> be less than or equal to the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
},
{
"vuid": "VUID-VkImageViewCreateInfo-image-01484",
"text": " If <code>image</code> is a 3D image created with <code>VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT</code> set, and <code>viewType</code> is <code>VK_IMAGE_VIEW_TYPE_2D</code> or <code>VK_IMAGE_VIEW_TYPE_2D_ARRAY</code>, <code>subresourceRange</code>::<code>baseArrayLayer</code> <strong class=\"purple\">must</strong> be less than the <code>extent.depth</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
},
{
"vuid": "VUID-VkImageViewCreateInfo-subresourceRange-01485",
"text": " If <code>subresourceRange</code>::<code>layerCount</code> is not <code>VK_REMAINING_ARRAY_LAYERS</code>, <code>image</code> is a 3D image created with <code>VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT</code> set, and <code>viewType</code> is <code>VK_IMAGE_VIEW_TYPE_2D</code> or <code>VK_IMAGE_VIEW_TYPE_2D_ARRAY</code>, <code>subresourceRange</code>::<code>layerCount</code> <strong class=\"purple\">must</strong> be non-zero and <span class=\"eq\"><code>subresourceRange</code>::<code>baseArrayLayer</code> &#43; <code>subresourceRange</code>::<code>layerCount</code></span> <strong class=\"purple\">must</strong> be less than or equal to the <code>extent.depth</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
}
],
"!(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"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>"
}
],
"(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-VkImageViewCreateInfo-image-01965",
"text": " If <code>image</code> was created with <code>VK_IMAGE_TILING_OPTIMAL</code> and <code>format</code> is not <code>VK_FORMAT_UNDEFINED</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-01966",
"text": " If <code>image</code> was created with <code>VK_IMAGE_TILING_OPTIMAL</code>, and <code>format</code> is not <code>VK_FORMAT_UNDEFINED</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-01967",
"text": " If <code>image</code> was created with <code>VK_IMAGE_TILING_OPTIMAL</code>, and <code>format</code> is not <code>VK_FORMAT_UNDEFINED</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-01968",
"text": " If <code>image</code> was created with <code>VK_IMAGE_TILING_OPTIMAL</code>, and <code>format</code> is not <code>VK_FORMAT_UNDEFINED</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-01969",
"text": " If <code>image</code> was created with <code>VK_IMAGE_TILING_OPTIMAL</code>, and <code>format</code> is not <code>VK_FORMAT_UNDEFINED</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-image-01896",
"text": " If <code>image</code> has an &amp;amp;lt;&amp;amp;lt;memory-external-android-hardware-buffer-external-formats,external format&amp;amp;gt;&amp;amp;gt;:"
}
],
"!(VK_VERSION_1_1,VK_KHR_maintenance1)": [
{
"vuid": "VUID-VkImageViewCreateInfo-subresourceRange-01480",
"text": " <code>subresourceRange.baseArrayLayer</code> <strong class=\"purple\">must</strong> be less than the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
},
{
"vuid": "VUID-VkImageViewCreateInfo-subresourceRange-01719",
"text": " If <code>subresourceRange.layerCount</code> is not <code>VK_REMAINING_ARRAY_LAYERS</code>, <span class=\"eq\"><code>subresourceRange.baseArrayLayer</code> &#43; <code>subresourceRange.layerCount</code></span> <strong class=\"purple\">must</strong> be less than or equal to the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
}
],
"(VK_VERSION_1_1,VK_KHR_maintenance2)+!(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-VkImageViewCreateInfo-image-01759",
"text": " If <code>image</code> was created with the <code>VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT</code> flag, but without the <code>VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT</code> flag, <code>format</code> <strong class=\"purple\">must</strong> be compatible with the <code>format</code> used to create <code>image</code>, as defined in &amp;amp;lt;&amp;amp;lt;features-formats-compatibility-classes,Format Compatibility Classes&amp;amp;gt;&amp;amp;gt;"
}
],
"!(VK_VERSION_1_1,VK_KHR_maintenance2)+(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-VkImageViewCreateInfo-image-01760",
"text": " If <code>image</code> was created with the <code>VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT</code> flag, and if the <code>format</code> of the <code>image</code> is not a &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar&amp;amp;gt;&amp;amp;gt; format, <code>format</code> <strong class=\"purple\">must</strong> be compatible with the <code>format</code> used to create <code>image</code>, as defined in &amp;amp;lt;&amp;amp;lt;features-formats-compatibility-classes,Format Compatibility Classes&amp;amp;gt;&amp;amp;gt;"
}
],
"(VK_VERSION_1_1,VK_KHR_maintenance2)+(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-VkImageViewCreateInfo-image-01761",
"text": " If <code>image</code> was created with the <code>VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT</code> flag, but without the <code>VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT</code> flag, and if the <code>format</code> of the <code>image</code> is not a &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar&amp;amp;gt;&amp;amp;gt; format, <code>format</code> <strong class=\"purple\">must</strong> be compatible with the <code>format</code> used to create <code>image</code>, as defined in &amp;amp;lt;&amp;amp;lt;features-formats-compatibility-classes,Format Compatibility Classes&amp;amp;gt;&amp;amp;gt;"
}
],
"(VK_VERSION_1_1,VK_KHR_maintenance2)": [
{
"vuid": "VUID-VkImageViewCreateInfo-image-01583",
"text": " If <code>image</code> was created with the <code>VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT</code> flag, <code>format</code> <strong class=\"purple\">must</strong> be compatible with, or <strong class=\"purple\">must</strong> be an uncompressed format that is size-compatible with, the <code>format</code> used to create <code>image</code>."
},
{
"vuid": "VUID-VkImageViewCreateInfo-image-01584",
"text": " If <code>image</code> was created with the <code>VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT</code> flag, the <code>levelCount</code> and <code>layerCount</code> members of <code>subresourceRange</code> <strong class=\"purple\">must</strong> both be <code>1</code>."
}
],
"(VK_KHR_image_format_list)": [
{
"vuid": "VUID-VkImageViewCreateInfo-pNext-01585",
"text": " If a <code>VkImageFormatListCreateInfoKHR</code> structure was included in the <code>pNext</code> chain of the <code>VkImageCreateInfo</code> struct used when creating <code>image</code> and the <code>viewFormatCount</code> field of <code>VkImageFormatListCreateInfoKHR</code> is not zero then <code>format</code> <strong class=\"purple\">must</strong> be one of the formats in <code>VkImageFormatListCreateInfoKHR</code>::<code>pViewFormats</code>."
}
],
"(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-VkImageViewCreateInfo-image-01586",
"text": " If <code>image</code> was created with the <code>VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT</code> flag, if the <code>format</code> of the <code>image</code> is a &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar&amp;amp;gt;&amp;amp;gt; format, and if <code>subresourceRange.aspectMask</code> is one of <code>VK_IMAGE_ASPECT_PLANE_0_BIT</code>, <code>VK_IMAGE_ASPECT_PLANE_1_BIT</code>, or <code>VK_IMAGE_ASPECT_PLANE_2_BIT</code>, then <code>format</code> <strong class=\"purple\">must</strong> be compatible with the <a href=\"#VkFormat\">VkFormat</a> for the plane of the <code>image</code> <code>format</code> indicated by <code>subresourceRange.aspectMask</code>, as defined in &amp;amp;lt;&amp;amp;lt;features-formats-compatible-planes&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-VkImageViewCreateInfo-image-01762",
"text": " If <code>image</code> was not created with the <code>VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT</code> flag, or if the <code>format</code> of the <code>image</code> is a &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar&amp;amp;gt;&amp;amp;gt; format and if <code>subresourceRange.aspectMask</code> is <code>VK_IMAGE_ASPECT_COLOR_BIT</code>, <code>format</code> <strong class=\"purple\">must</strong> be identical to the <code>format</code> used to create <code>image</code>"
},
{
"vuid": "VUID-VkImageViewCreateInfo-pNext-01970",
"text": " If the <code>pNext</code> chain contains an instance of <a href=\"#VkSamplerYcbcrConversionInfo\">VkSamplerYcbcrConversionInfo</a> with a <code>conversion</code> value other than <code>VK_NULL_HANDLE</code>, all members of <code>components</code> <strong class=\"purple\">must</strong> have the value <code>VK_COMPONENT_SWIZZLE_IDENTITY</code>."
}
],
"!(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>"
}
]
},
"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 <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID</code> 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-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-memory-01599",
"text": " <code>memory</code> <strong class=\"purple\">must</strong> have been allocated using one of the memory types allowed in the <code>memoryTypeBits</code> member of the <code>VkMemoryRequirements</code> structure returned from a call to <code>vkGetBufferMemoryRequirements</code> with <code>buffer</code>"
},
{
"vuid": "VUID-VkBindBufferMemoryInfo-memoryOffset-01600",
"text": " <code>memoryOffset</code> <strong class=\"purple\">must</strong> be an integer multiple of the <code>alignment</code> member of the <code>VkMemoryRequirements</code> structure returned from a call to <code>vkGetBufferMemoryRequirements</code> with <code>buffer</code>"
},
{
"vuid": "VUID-VkBindBufferMemoryInfo-size-01601",
"text": " The <code>size</code> member of the <code>VkMemoryRequirements</code> structure returned from a call to <code>vkGetBufferMemoryRequirements</code> with <code>buffer</code> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>memory</code> minus <code>memoryOffset</code>"
},
{
"vuid": "VUID-VkBindBufferMemoryInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO</code>"
},
{
"vuid": "VUID-VkBindBufferMemoryInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkBindBufferMemoryDeviceGroupInfo\">VkBindBufferMemoryDeviceGroupInfo</a>"
},
{
"vuid": "VUID-VkBindBufferMemoryInfo-buffer-parameter",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
},
{
"vuid": "VUID-VkBindBufferMemoryInfo-memory-parameter",
"text": " <code>memory</code> <strong class=\"purple\">must</strong> be a valid <code>VkDeviceMemory</code> handle"
},
{
"vuid": "VUID-VkBindBufferMemoryInfo-commonparent",
"text": " Both of <code>buffer</code>, and <code>memory</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_VERSION_1_1,VK_KHR_dedicated_allocation)": [
{
"vuid": "VUID-VkBindBufferMemoryInfo-buffer-01602",
"text": " If <code>buffer</code> requires a dedicated allocation(as reported by <a href=\"#vkGetBufferMemoryRequirements2\">vkGetBufferMemoryRequirements2</a> in <a href=\"#VkMemoryDedicatedRequirements\">VkMemoryDedicatedRequirements</a>::requiresDedicatedAllocation for <code>buffer</code>), <code>memory</code> <strong class=\"purple\">must</strong> have been created with <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>::<code>buffer</code> equal to <code>buffer</code> and <code>memoryOffset</code> <strong class=\"purple\">must</strong> be zero"
},
{
"vuid": "VUID-VkBindBufferMemoryInfo-memory-01900",
"text": " If the <code>VkMemoryAllocateInfo</code> provided when <code>memory</code> was allocated included an instance of <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a> in its <code>pNext</code> chain, and <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>::<code>buffer</code> was not <code>VK_NULL_HANDLE</code>, then <code>buffer</code> <strong class=\"purple\">must</strong> equal <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>::<code>buffer</code> and <code>memoryOffset</code> <strong class=\"purple\">must</strong> be zero."
}
],
"(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_NV_dedicated_allocation)": [
{
"vuid": "VUID-VkBindBufferMemoryInfo-buffer-01603",
"text": " If <code>buffer</code> was created with <a href=\"#VkDedicatedAllocationBufferCreateInfoNV\">VkDedicatedAllocationBufferCreateInfoNV</a>::<code>dedicatedAllocation</code> equal to <code>VK_TRUE</code>, <code>memory</code> <strong class=\"purple\">must</strong> have been created with <a href=\"#VkDedicatedAllocationMemoryAllocateInfoNV\">VkDedicatedAllocationMemoryAllocateInfoNV</a>::<code>buffer</code> equal to <code>buffer</code> and <code>memoryOffset</code> <strong class=\"purple\">must</strong> be zero"
}
],
"(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_NV_dedicated_allocation)+!(VK_VERSION_1_1,VK_KHR_dedicated_allocation)": [
{
"vuid": "VUID-VkBindBufferMemoryInfo-buffer-01604",
"text": " If <code>buffer</code> was not created with <a href=\"#VkDedicatedAllocationBufferCreateInfoNV\">VkDedicatedAllocationBufferCreateInfoNV</a>::<code>dedicatedAllocation</code> equal to <code>VK_TRUE</code>, <code>memory</code> <strong class=\"purple\">must</strong> not have been allocated dedicated for a specific buffer or image"
}
],
"(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_VERSION_1_1,VK_KHR_device_group)": [
{
"vuid": "VUID-VkBindBufferMemoryInfo-pNext-01605",
"text": " If the <code>pNext</code> chain includes <a href=\"#VkBindBufferMemoryDeviceGroupInfo\">VkBindBufferMemoryDeviceGroupInfo</a>, all instances of <code>memory</code> specified by <a href=\"#VkBindBufferMemoryDeviceGroupInfo\">VkBindBufferMemoryDeviceGroupInfo</a>::<code>pDeviceIndices</code> <strong class=\"purple\">must</strong> have been allocated"
}
]
},
"VkBindBufferMemoryDeviceGroupInfo": {
"(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_VERSION_1_1,VK_KHR_device_group)": [
{
"vuid": "VUID-VkBindBufferMemoryDeviceGroupInfo-deviceIndexCount-01606",
"text": " <code>deviceIndexCount</code> <strong class=\"purple\">must</strong> either be zero or equal to the number of physical devices in the logical device"
},
{
"vuid": "VUID-VkBindBufferMemoryDeviceGroupInfo-pDeviceIndices-01607",
"text": " All elements of <code>pDeviceIndices</code> <strong class=\"purple\">must</strong> be valid device indices"
},
{
"vuid": "VUID-VkBindBufferMemoryDeviceGroupInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO</code>"
},
{
"vuid": "VUID-VkBindBufferMemoryDeviceGroupInfo-pDeviceIndices-parameter",
"text": " If <code>deviceIndexCount</code> is not <code>0</code>, <code>pDeviceIndices</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>deviceIndexCount</code> <code>uint32_t</code> values"
}
]
},
"vkBindImageMemory": {
"(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-vkBindImageMemory-image-01608",
"text": " <code>image</code> <strong class=\"purple\">must</strong> not have been created with the <code>VK_IMAGE_CREATE_DISJOINT_BIT</code> set."
}
],
"core": [
{
"vuid": "VUID-vkBindImageMemory-image-01044",
"text": " <code>image</code> <strong class=\"purple\">must</strong> not already be backed by a memory object"
},
{
"vuid": "VUID-vkBindImageMemory-image-01045",
"text": " <code>image</code> <strong class=\"purple\">must</strong> not have been created with any sparse memory binding flags"
},
{
"vuid": "VUID-vkBindImageMemory-memoryOffset-01046",
"text": " <code>memoryOffset</code> <strong class=\"purple\">must</strong> be less than the size of <code>memory</code>"
},
{
"vuid": "VUID-vkBindImageMemory-memory-01047",
"text": " <code>memory</code> <strong class=\"purple\">must</strong> have been allocated using one of the memory types allowed in the <code>memoryTypeBits</code> member of the <code>VkMemoryRequirements</code> structure returned from a call to <code>vkGetImageMemoryRequirements</code> with <code>image</code>"
},
{
"vuid": "VUID-vkBindImageMemory-memoryOffset-01048",
"text": " <code>memoryOffset</code> <strong class=\"purple\">must</strong> be an integer multiple of the <code>alignment</code> member of the <code>VkMemoryRequirements</code> structure returned from a call to <code>vkGetImageMemoryRequirements</code> with <code>image</code>"
},
{
"vuid": "VUID-vkBindImageMemory-size-01049",
"text": " The <code>size</code> member of the <code>VkMemoryRequirements</code> structure returned from a call to <code>vkGetImageMemoryRequirements</code> with <code>image</code> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>memory</code> minus <code>memoryOffset</code>"
},
{
"vuid": "VUID-vkBindImageMemory-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkBindImageMemory-image-parameter",
"text": " <code>image</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
},
{
"vuid": "VUID-vkBindImageMemory-memory-parameter",
"text": " <code>memory</code> <strong class=\"purple\">must</strong> be a valid <code>VkDeviceMemory</code> handle"
},
{
"vuid": "VUID-vkBindImageMemory-image-parent",
"text": " <code>image</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
},
{
"vuid": "VUID-vkBindImageMemory-memory-parent",
"text": " <code>memory</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_dedicated_allocation)": [
{
"vuid": "VUID-vkBindImageMemory-image-01445",
"text": " If <code>image</code> requires a dedicated allocation (as reported by <a href=\"#vkGetImageMemoryRequirements2\">vkGetImageMemoryRequirements2</a> in <a href=\"#VkMemoryDedicatedRequirements\">VkMemoryDedicatedRequirements</a>::requiresDedicatedAllocation for <code>image</code>), <code>memory</code> <strong class=\"purple\">must</strong> have been created with <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>::<code>image</code> equal to <code>image</code>"
},
{
"vuid": "VUID-vkBindImageMemory-memory-01509",
"text": " If the <code>VkMemoryAllocateInfo</code> provided when <code>memory</code> was allocated included an instance of <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a> in its <code>pNext</code> chain, and <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>::<code>image</code> was not <code>VK_NULL_HANDLE</code>, then <code>image</code> <strong class=\"purple\">must</strong> equal <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>::<code>image</code> and <code>memoryOffset</code> <strong class=\"purple\">must</strong> be zero."
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkBindImageMemory-None-01901",
"text": " If image was created with the <code>VK_IMAGE_CREATE_PROTECTED_BIT</code> bit set, the image <strong class=\"purple\">must</strong> be bound to a memory object allocated with a memory type that reports <code>VK_MEMORY_PROPERTY_PROTECTED_BIT</code>"
},
{
"vuid": "VUID-vkBindImageMemory-None-01902",
"text": " If image was created with the <code>VK_IMAGE_CREATE_PROTECTED_BIT</code> bit not set, the image <strong class=\"purple\">must</strong> not be bound to a memory object created with a memory type that reports <code>VK_MEMORY_PROPERTY_PROTECTED_BIT</code>"
}
],
"(VK_NV_dedicated_allocation)": [
{
"vuid": "VUID-vkBindImageMemory-image-01050",
"text": " If <code>image</code> was created with <a href=\"#VkDedicatedAllocationImageCreateInfoNV\">VkDedicatedAllocationImageCreateInfoNV</a>::<code>dedicatedAllocation</code> equal to <code>VK_TRUE</code>, <code>memory</code> <strong class=\"purple\">must</strong> have been created with <a href=\"#VkDedicatedAllocationMemoryAllocateInfoNV\">VkDedicatedAllocationMemoryAllocateInfoNV</a>::<code>image</code> equal to an image handle created with identical creation parameters to <code>image</code> and <code>memoryOffset</code> <strong class=\"purple\">must</strong> be zero"
}
],
"(VK_NV_dedicated_allocation)+!(VK_VERSION_1_1,VK_KHR_dedicated_allocation)": [
{
"vuid": "VUID-vkBindImageMemory-image-01051",
"text": " If <code>image</code> was not created with <a href=\"#VkDedicatedAllocationImageCreateInfoNV\">VkDedicatedAllocationImageCreateInfoNV</a>::<code>dedicatedAllocation</code> equal to <code>VK_TRUE</code>, <code>memory</code> <strong class=\"purple\">must</strong> not have been allocated dedicated for a specific buffer or image"
}
]
},
"vkBindImageMemory2": {
"(VK_VERSION_1_1,VK_KHR_bind_memory2)": [
{
"vuid": "VUID-vkBindImageMemory2-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkBindImageMemory2-pBindInfos-parameter",
"text": " <code>pBindInfos</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>bindInfoCount</code> valid <code>VkBindImageMemoryInfo</code> structures"
},
{
"vuid": "VUID-vkBindImageMemory2-bindInfoCount-arraylength",
"text": " <code>bindInfoCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"VkBindImageMemoryInfo": {
"(VK_VERSION_1_1,VK_KHR_bind_memory2)": [
{
"vuid": "VUID-VkBindImageMemoryInfo-image-01609",
"text": " <code>image</code> <strong class=\"purple\">must</strong> not already be backed by a memory object"
},
{
"vuid": "VUID-VkBindImageMemoryInfo-image-01610",
"text": " <code>image</code> <strong class=\"purple\">must</strong> not have been created with any sparse memory binding flags"
},
{
"vuid": "VUID-VkBindImageMemoryInfo-memoryOffset-01611",
"text": " <code>memoryOffset</code> <strong class=\"purple\">must</strong> be less than the size of <code>memory</code>"
},
{
"vuid": "VUID-VkBindImageMemoryInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO</code>"
},
{
"vuid": "VUID-VkBindImageMemoryInfo-pNext-pNext",
"text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkBindImageMemoryDeviceGroupInfo\">VkBindImageMemoryDeviceGroupInfo</a>, <a href=\"#VkBindImageMemorySwapchainInfoKHR\">VkBindImageMemorySwapchainInfoKHR</a>, or <a href=\"#VkBindImagePlaneMemoryInfo\">VkBindImagePlaneMemoryInfo</a>"
},
{
"vuid": "VUID-VkBindImageMemoryInfo-sType-unique",
"text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkBindImageMemoryInfo-image-parameter",
"text": " <code>image</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
},
{
"vuid": "VUID-VkBindImageMemoryInfo-commonparent",
"text": " Both of <code>image</code>, and <code>memory</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_bind_memory2)+!(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-VkBindImageMemoryInfo-memory-01612",
"text": " <code>memory</code> <strong class=\"purple\">must</strong> have been allocated using one of the memory types allowed in the <code>memoryTypeBits</code> member of the <a href=\"#VkMemoryRequirements\">VkMemoryRequirements</a> structure returned from a call to <a href=\"#vkGetImageMemoryRequirements\">vkGetImageMemoryRequirements</a> with <code>image</code>"
},
{
"vuid": "VUID-VkBindImageMemoryInfo-memoryOffset-01613",
"text": " <code>memoryOffset</code> <strong class=\"purple\">must</strong> be an integer multiple of the <code>alignment</code> member of the <a href=\"#VkMemoryRequirements\">VkMemoryRequirements</a> structure returned from a call to <a href=\"#vkGetImageMemoryRequirements\">vkGetImageMemoryRequirements</a> with <code>image</code>"
},
{
"vuid": "VUID-VkBindImageMemoryInfo-memory-01614",
"text": " The difference of the size of <code>memory</code> and <code>memoryOffset</code> <strong class=\"purple\">must</strong> be greater than or equal to the <code>size</code> member of the <a href=\"#VkMemoryRequirements\">VkMemoryRequirements</a> structure returned from a call to <a href=\"#vkGetImageMemoryRequirements\">vkGetImageMemoryRequirements</a> with the same <code>image</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-VkBindImageMemoryInfo-pNext-01615",
"text": " If the <code>pNext</code> chain does not include an instance of the <a href=\"#VkBindImagePlaneMemoryInfo\">VkBindImagePlaneMemoryInfo</a> structure, <code>memory</code> <strong class=\"purple\">must</strong> have been allocated using one of the memory types allowed in the <code>memoryTypeBits</code> member of the <a href=\"#VkMemoryRequirements\">VkMemoryRequirements</a> structure returned from a call to <a href=\"#vkGetImageMemoryRequirements2\">vkGetImageMemoryRequirements2</a> with <code>image</code>"
},
{
"vuid": "VUID-VkBindImageMemoryInfo-pNext-01616",
"text": " If the <code>pNext</code> chain does not include an instance of the <a href=\"#VkBindImagePlaneMemoryInfo\">VkBindImagePlaneMemoryInfo</a> structure, <code>memoryOffset</code> <strong class=\"purple\">must</strong> be an integer multiple of the <code>alignment</code> member of the <a href=\"#VkMemoryRequirements\">VkMemoryRequirements</a> structure returned from a call to <a href=\"#vkGetImageMemoryRequirements2\">vkGetImageMemoryRequirements2</a> with <code>image</code>"
},
{
"vuid": "VUID-VkBindImageMemoryInfo-pNext-01617",
"text": " If the <code>pNext</code> chain does not include an instance of the <a href=\"#VkBindImagePlaneMemoryInfo\">VkBindImagePlaneMemoryInfo</a> structure, the difference of the size of <code>memory</code> and <code>memoryOffset</code> <strong class=\"purple\">must</strong> be greater than or equal to the <code>size</code> member of the <a href=\"#VkMemoryRequirements\">VkMemoryRequirements</a> structure returned from a call to <a href=\"#vkGetImageMemoryRequirements2\">vkGetImageMemoryRequirements2</a> with the same <code>image</code>"
},
{
"vuid": "VUID-VkBindImageMemoryInfo-pNext-01618",
"text": " If the <code>pNext</code> chain includes an instance of the <a href=\"#VkBindImagePlaneMemoryInfo\">VkBindImagePlaneMemoryInfo</a> structure, <code>image</code> <strong class=\"purple\">must</strong> have been created with the <code>VK_IMAGE_CREATE_DISJOINT_BIT</code> bit set."
},
{
"vuid": "VUID-VkBindImageMemoryInfo-pNext-01619",
"text": " If the <code>pNext</code> chain includes an instance of the <a href=\"#VkBindImagePlaneMemoryInfo\">VkBindImagePlaneMemoryInfo</a> structure, <code>memory</code> <strong class=\"purple\">must</strong> have been allocated using one of the memory types allowed in the <code>memoryTypeBits</code> member of the <a href=\"#VkMemoryRequirements\">VkMemoryRequirements</a> structure returned from a call to <a href=\"#vkGetImageMemoryRequirements2\">vkGetImageMemoryRequirements2</a> with <code>image</code> and the correct <code>planeAspect</code> for this plane in the <a href=\"#VkImagePlaneMemoryRequirementsInfo\">VkImagePlaneMemoryRequirementsInfo</a> structure attached to the <a href=\"#VkImageMemoryRequirementsInfo2\">VkImageMemoryRequirementsInfo2</a>&#8217;s <code>pNext</code> chain"
},
{
"vuid": "VUID-VkBindImageMemoryInfo-pNext-01620",
"text": " If the <code>pNext</code> chain includes an instance of the <a href=\"#VkBindImagePlaneMemoryInfo\">VkBindImagePlaneMemoryInfo</a> structure, <code>memoryOffset</code> <strong class=\"purple\">must</strong> be an integer multiple of the <code>alignment</code> member of the <a href=\"#VkMemoryRequirements\">VkMemoryRequirements</a> structure returned from a call to <a href=\"#vkGetImageMemoryRequirements2\">vkGetImageMemoryRequirements2</a> with <code>image</code> and the correct <code>planeAspect</code> for this plane in the <a href=\"#VkImagePlaneMemoryRequirementsInfo\">VkImagePlaneMemoryRequirementsInfo</a> structure attached to the <a href=\"#VkImageMemoryRequirementsInfo2\">VkImageMemoryRequirementsInfo2</a>&#8217;s <code>pNext</code> chain"
},
{
"vuid": "VUID-VkBindImageMemoryInfo-pNext-01621",
"text": " If the <code>pNext</code> chain includes an instance of the <a href=\"#VkBindImagePlaneMemoryInfo\">VkBindImagePlaneMemoryInfo</a> structure, the difference of the size of <code>memory</code> and <code>memoryOffset</code> <strong class=\"purple\">must</strong> be greater than or equal to the <code>size</code> member of the <a href=\"#VkMemoryRequirements\">VkMemoryRequirements</a> structure returned from a call to <a href=\"#vkGetImageMemoryRequirements2\">vkGetImageMemoryRequirements2</a> with the same <code>image</code> and the correct <code>planeAspect</code> for this plane in the <a href=\"#VkImagePlaneMemoryRequirementsInfo\">VkImagePlaneMemoryRequirementsInfo</a> structure attached to the <a href=\"#VkImageMemoryRequirementsInfo2\">VkImageMemoryRequirementsInfo2</a>&#8217;s <code>pNext</code> chain"
}
],
"(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_VERSION_1_1,VK_KHR_dedicated_allocation)": [
{
"vuid": "VUID-VkBindImageMemoryInfo-image-01622",
"text": " If <code>image</code> requires a dedicated allocation (as reported by <a href=\"#vkGetImageMemoryRequirements2\">vkGetImageMemoryRequirements2</a> in <a href=\"#VkMemoryDedicatedRequirements\">VkMemoryDedicatedRequirements</a>::requiresDedicatedAllocation for <code>image</code>), <code>memory</code> <strong class=\"purple\">must</strong> have been created with <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>::<code>image</code> equal to <code>image</code> and <code>memoryOffset</code> <strong class=\"purple\">must</strong> be zero"
},
{
"vuid": "VUID-VkBindImageMemoryInfo-memory-01903",
"text": " If the <code>VkMemoryAllocateInfo</code> provided when <code>memory</code> was allocated included an instance of <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a> in its <code>pNext</code> chain, and <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>::<code>image</code> was not <code>VK_NULL_HANDLE</code>, then <code>image</code> <strong class=\"purple\">must</strong> equal <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>::<code>image</code> and <code>memoryOffset</code> <strong class=\"purple\">must</strong> be zero."
}
],
"(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_NV_dedicated_allocation)": [
{
"vuid": "VUID-VkBindImageMemoryInfo-image-01623",
"text": " If <code>image</code> was created with <a href=\"#VkDedicatedAllocationImageCreateInfoNV\">VkDedicatedAllocationImageCreateInfoNV</a>::<code>dedicatedAllocation</code> equal to <code>VK_TRUE</code>, <code>memory</code> <strong class=\"purple\">must</strong> have been created with <a href=\"#VkDedicatedAllocationMemoryAllocateInfoNV\">VkDedicatedAllocationMemoryAllocateInfoNV</a>::<code>image</code> equal to <code>image</code> and <code>memoryOffset</code> <strong class=\"purple\">must</strong> be zero"
}
],
"(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_NV_dedicated_allocation)+!(VK_VERSION_1_1,VK_KHR_dedicated_allocation)": [
{
"vuid": "VUID-VkBindImageMemoryInfo-image-01624",
"text": " If <code>image</code> was not created with <a href=\"#VkDedicatedAllocationImageCreateInfoNV\">VkDedicatedAllocationImageCreateInfoNV</a>::<code>dedicatedAllocation</code> equal to <code>VK_TRUE</code>, <code>memory</code> <strong class=\"purple\">must</strong> not have been allocated dedicated for a specific buffer or image"
}
],
"(VK_VERSION_1_1,VK_KHR_bind_memory2)+!(VK_VERSION_1_1+VK_KHR_swapchain)+!(VK_KHR_device_group+VK_KHR_swapchain)": [
{
"vuid": "VUID-VkBindImageMemoryInfo-memory-01625",
"text": " <code>memory</code> <strong class=\"purple\">must</strong> be a valid <code>VkDeviceMemory</code> handle"
}
],
"(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_VERSION_1_1,VK_KHR_device_group)": [
{
"vuid": "VUID-VkBindImageMemoryInfo-pNext-01626",
"text": " If the <code>pNext</code> chain includes <a href=\"#VkBindImageMemoryDeviceGroupInfo\">VkBindImageMemoryDeviceGroupInfo</a>, all instances of <code>memory</code> specified by <a href=\"#VkBindImageMemoryDeviceGroupInfo\">VkBindImageMemoryDeviceGroupInfo</a>::<code>pDeviceIndices</code> <strong class=\"purple\">must</strong> have been allocated"
},
{
"vuid": "VUID-VkBindImageMemoryInfo-pNext-01627",
"text": " If the <code>pNext</code> chain includes <a href=\"#VkBindImageMemoryDeviceGroupInfo\">VkBindImageMemoryDeviceGroupInfo</a>, and <a href=\"#VkBindImageMemoryDeviceGroupInfo\">VkBindImageMemoryDeviceGroupInfo</a>::<code>splitInstanceBindRegionCount</code> is not zero, then <code>image</code> <strong class=\"purple\">must</strong> have been created with the <code>VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT</code> bit set"
},
{
"vuid": "VUID-VkBindImageMemoryInfo-pNext-01628",
"text": " If the <code>pNext</code> chain includes <a href=\"#VkBindImageMemoryDeviceGroupInfo\">VkBindImageMemoryDeviceGroupInfo</a>, all elements of <a href=\"#VkBindImageMemoryDeviceGroupInfo\">VkBindImageMemoryDeviceGroupInfo</a>::<code>pSplitInstanceBindRegions</code> <strong class=\"purple\">must</strong> be valid rectangles contained within the dimensions of <code>image</code>"
},
{
"vuid": "VUID-VkBindImageMemoryInfo-pNext-01629",
"text": " If the <code>pNext</code> chain includes <a href=\"#VkBindImageMemoryDeviceGroupInfo\">VkBindImageMemoryDeviceGroupInfo</a>, the union of the areas of all elements of <a href=\"#VkBindImageMemoryDeviceGroupInfo\">VkBindImageMemoryDeviceGroupInfo</a>::<code>pSplitInstanceBindRegions</code> that correspond to the same instance of <code>image</code> <strong class=\"purple\">must</strong> cover the entire image."
}
],
"(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_VERSION_1_1,VK_KHR_device_group)+(VK_KHR_swapchain)": [
{
"vuid": "VUID-VkBindImageMemoryInfo-image-01630",
"text": " If <code>image</code> was created with a valid swapchain handle in <a href=\"#VkImageSwapchainCreateInfoKHR\">VkImageSwapchainCreateInfoKHR</a>::<code>swapchain</code>, then the <code>pNext</code> chain <strong class=\"purple\">must</strong> include a valid instance of <a href=\"#VkBindImageMemorySwapchainInfoKHR\">VkBindImageMemorySwapchainInfoKHR</a>"
},
{
"vuid": "VUID-VkBindImageMemoryInfo-pNext-01631",
"text": " If the <code>pNext</code> chain includes an instance of <a href=\"#VkBindImageMemorySwapchainInfoKHR\">VkBindImageMemorySwapchainInfoKHR</a>, <code>memory</code> <strong class=\"purple\">must</strong> be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-VkBindImageMemoryInfo-pNext-01632",
"text": " If the <code>pNext</code> chain does not include an instance of <a href=\"#VkBindImageMemorySwapchainInfoKHR\">VkBindImageMemorySwapchainInfoKHR</a>, <code>memory</code> <strong class=\"purple\">must</strong> be a valid <code>VkDeviceMemory</code> handle"
}
]
},
"VkBindImageMemoryDeviceGroupInfo": {
"(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_VERSION_1_1,VK_KHR_device_group)": [
{
"vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-deviceIndexCount-01633",
"text": " At least one of <code>deviceIndexCount</code> and <code>splitInstanceBindRegionCount</code> <strong class=\"purple\">must</strong> be zero."
},
{
"vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-deviceIndexCount-01634",
"text": " <code>deviceIndexCount</code> <strong class=\"purple\">must</strong> either be zero or equal to the number of physical devices in the logical device"
},
{
"vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-pDeviceIndices-01635",
"text": " All elements of <code>pDeviceIndices</code> <strong class=\"purple\">must</strong> be valid device indices."
},
{
"vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-splitInstanceBindRegionCount-01636",
"text": " <code>splitInstanceBindRegionCount</code> <strong class=\"purple\">must</strong> either be zero or equal to the number of physical devices in the logical device squared"
},
{
"vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-pSplitInstanceBindRegions-01637",
"text": " Elements of <code>pSplitInstanceBindRegions</code> that correspond to the same instance of an image <strong class=\"purple\">must</strong> not overlap."
},
{
"vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-offset-01638",
"text": " The <code>offset.x</code> member of any element of <code>pSplitInstanceBindRegions</code> <strong class=\"purple\">must</strong> be a multiple of the sparse image block width (<code>VkSparseImageFormatProperties</code>::<code>imageGranularity.width</code>) of all non-metadata aspects of the image"
},
{
"vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-offset-01639",
"text": " The <code>offset.y</code> member of any element of <code>pSplitInstanceBindRegions</code> <strong class=\"purple\">must</strong> be a multiple of the sparse image block height (<code>VkSparseImageFormatProperties</code>::<code>imageGranularity.height</code>) of all non-metadata aspects of the image"
},
{
"vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-extent-01640",
"text": " The <code>extent.width</code> member of any element of <code>pSplitInstanceBindRegions</code> <strong class=\"purple\">must</strong> either be a multiple of the sparse image block width of all non-metadata aspects of the image, or else <code>extent.width</code> + <code>offset.x</code> <strong class=\"purple\">must</strong> equal the width of the image subresource"
},
{
"vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-extent-01641",
"text": " The <code>extent.height</code> member of any element of <code>pSplitInstanceBindRegions</code> <strong class=\"purple\">must</strong> either be a multiple of the sparse image block height of all non-metadata aspects of the image, or else <code>extent.height</code><br> <code>offset.y</code> <strong class=\"purple\">must</strong> equal the width of the image subresource"
},
{
"vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO</code>"
},
{
"vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-pDeviceIndices-parameter",
"text": " If <code>deviceIndexCount</code> is not <code>0</code>, <code>pDeviceIndices</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>deviceIndexCount</code> <code>uint32_t</code> values"
},
{
"vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-pSplitInstanceBindRegions-parameter",
"text": " If <code>splitInstanceBindRegionCount</code> is not <code>0</code>, <code>pSplitInstanceBindRegions</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>splitInstanceBindRegionCount</code> <code>VkRect2D</code> structures"
}
]
},
"VkBindImageMemorySwapchainInfoKHR": {
"(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_VERSION_1_1,VK_KHR_device_group)+(VK_KHR_swapchain)": [
{
"vuid": "VUID-VkBindImageMemorySwapchainInfoKHR-imageIndex-01644",
"text": " <code>imageIndex</code> <strong class=\"purple\">must</strong> be less than the number of images in <code>swapchain</code>"
},
{
"vuid": "VUID-VkBindImageMemorySwapchainInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR</code>"
},
{
"vuid": "VUID-VkBindImageMemorySwapchainInfoKHR-swapchain-parameter",
"text": " <code>swapchain</code> <strong class=\"purple\">must</strong> be a valid <code>VkSwapchainKHR</code> handle"
}
]
},
"VkBindImagePlaneMemoryInfo": {
"(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-VkBindImagePlaneMemoryInfo-planeAspect-01642",
"text": " <code>planeAspect</code> <strong class=\"purple\">must</strong> be a single valid plane aspect for the image format (that is, <code>planeAspect</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_ASPECT_PLANE_0_BIT</code> or <code>VK_IMAGE_ASPECT_PLANE_1_BIT</code> for &#8220;<code>_2PLANE</code>&#8221; formats and <code>planeAspect</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_ASPECT_PLANE_0_BIT</code>, <code>VK_IMAGE_ASPECT_PLANE_1_BIT</code>, or <code>VK_IMAGE_ASPECT_PLANE_2_BIT</code> for &#8220;<code>_3PLANE</code>&#8221; formats)"
},
{
"vuid": "VUID-VkBindImagePlaneMemoryInfo-None-01643",
"text": " A single call to <a href=\"#vkBindImageMemory2\">vkBindImageMemory2</a> <strong class=\"purple\">must</strong> bind all or none of the planes of an image (i.e. bindings to all planes of an image <strong class=\"purple\">must</strong> be made in a single <a href=\"#vkBindImageMemory2\">vkBindImageMemory2</a> call), as separate bindings"
},
{
"vuid": "VUID-VkBindImagePlaneMemoryInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO</code>"
},
{
"vuid": "VUID-VkBindImagePlaneMemoryInfo-planeAspect-parameter",
"text": " <code>planeAspect</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageAspectFlagBits\">VkImageAspectFlagBits</a> value"
}
]
},
"vkCreateSampler": {
"core": [
{
"vuid": "VUID-vkCreateSampler-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkCreateSampler-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkSamplerCreateInfo</code> structure"
},
{
"vuid": "VUID-vkCreateSampler-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateSampler-pSampler-parameter",
"text": " <code>pSampler</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSampler</code> handle"
}
]
},
"VkSamplerCreateInfo": {
"core": [
{
"vuid": "VUID-VkSamplerCreateInfo-mipLodBias-01069",
"text": " The absolute value of <code>mipLodBias</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxSamplerLodBias</code>"
},
{
"vuid": "VUID-VkSamplerCreateInfo-maxLod-01973",
"text": " <code>maxLod</code> <strong class=\"purple\">must</strong> be greater than or equal to <code>minLod</code>"
},
{
"vuid": "VUID-VkSamplerCreateInfo-anisotropyEnable-01070",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-samplerAnisotropy,anisotropic sampling&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>anisotropyEnable</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
},
{
"vuid": "VUID-VkSamplerCreateInfo-anisotropyEnable-01071",
"text": " If <code>anisotropyEnable</code> is <code>VK_TRUE</code>, <code>maxAnisotropy</code> <strong class=\"purple\">must</strong> be between <code>1.0</code> and <code>VkPhysicalDeviceLimits</code>::<code>maxSamplerAnisotropy</code>, inclusive"
},
{
"vuid": "VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01072",
"text": " If <code>unnormalizedCoordinates</code> is <code>VK_TRUE</code>, <code>minFilter</code> and <code>magFilter</code> <strong class=\"purple\">must</strong> be equal"
},
{
"vuid": "VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01073",
"text": " If <code>unnormalizedCoordinates</code> is <code>VK_TRUE</code>, <code>mipmapMode</code> <strong class=\"purple\">must</strong> be <code>VK_SAMPLER_MIPMAP_MODE_NEAREST</code>"
},
{
"vuid": "VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01074",
"text": " If <code>unnormalizedCoordinates</code> is <code>VK_TRUE</code>, <code>minLod</code> and <code>maxLod</code> <strong class=\"purple\">must</strong> be zero"
},
{
"vuid": "VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01075",
"text": " If <code>unnormalizedCoordinates</code> is <code>VK_TRUE</code>, <code>addressModeU</code> and <code>addressModeV</code> <strong class=\"purple\">must</strong> each be either <code>VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE</code> or <code>VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER</code>"
},
{
"vuid": "VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01076",
"text": " If <code>unnormalizedCoordinates</code> is <code>VK_TRUE</code>, <code>anisotropyEnable</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
},
{
"vuid": "VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01077",
"text": " If <code>unnormalizedCoordinates</code> is <code>VK_TRUE</code>, <code>compareEnable</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
},
{
"vuid": "VUID-VkSamplerCreateInfo-addressModeU-01078",
"text": " If any of <code>addressModeU</code>, <code>addressModeV</code> or <code>addressModeW</code> are <code>VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER</code>, <code>borderColor</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBorderColor\">VkBorderColor</a> value"
},
{
"vuid": "VUID-VkSamplerCreateInfo-addressModeU-01079",
"text": " If the <code><a href=\"#VK_KHR_sampler_mirror_clamp_to_edge\">VK_KHR_sampler_mirror_clamp_to_edge</a></code> extension is not enabled, <code>addressModeU</code>, <code>addressModeV</code> and <code>addressModeW</code> <strong class=\"purple\">must</strong> not be <code>VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE</code>"
},
{
"vuid": "VUID-VkSamplerCreateInfo-compareEnable-01080",
"text": " If <code>compareEnable</code> is <code>VK_TRUE</code>, <code>compareOp</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCompareOp\">VkCompareOp</a> value"
},
{
"vuid": "VUID-VkSamplerCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkSamplerCreateInfo-pNext-pNext",
"text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkSamplerReductionModeCreateInfoEXT\">VkSamplerReductionModeCreateInfoEXT</a> or <a href=\"#VkSamplerYcbcrConversionInfo\">VkSamplerYcbcrConversionInfo</a>"
},
{
"vuid": "VUID-VkSamplerCreateInfo-sType-unique",
"text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkSamplerCreateInfo-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkSamplerCreateInfo-magFilter-parameter",
"text": " <code>magFilter</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFilter\">VkFilter</a> value"
},
{
"vuid": "VUID-VkSamplerCreateInfo-minFilter-parameter",
"text": " <code>minFilter</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFilter\">VkFilter</a> value"
},
{
"vuid": "VUID-VkSamplerCreateInfo-mipmapMode-parameter",
"text": " <code>mipmapMode</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSamplerMipmapMode\">VkSamplerMipmapMode</a> value"
},
{
"vuid": "VUID-VkSamplerCreateInfo-addressModeU-parameter",
"text": " <code>addressModeU</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSamplerAddressMode\">VkSamplerAddressMode</a> value"
},
{
"vuid": "VUID-VkSamplerCreateInfo-addressModeV-parameter",
"text": " <code>addressModeV</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSamplerAddressMode\">VkSamplerAddressMode</a> value"
},
{
"vuid": "VUID-VkSamplerCreateInfo-addressModeW-parameter",
"text": " <code>addressModeW</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSamplerAddressMode\">VkSamplerAddressMode</a> value"
}
],
"(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-VkSamplerCreateInfo-minFilter-01645",
"text": " If &amp;amp;lt;&amp;amp;lt;samplers-YCbCr-conversion,sampler Y&#8217;C<sub>B</sub>C<sub>R</sub> conversion&amp;amp;gt;&amp;amp;gt; is enabled and <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT</code> is not set for the format, <code>minFilter</code> and <code>magFilter</code> <strong class=\"purple\">must</strong> be equal to the sampler Y&#8217;C<sub>B</sub>C<sub>R</sub> conversion&#8217;s <code>chromaFilter</code>"
},
{
"vuid": "VUID-VkSamplerCreateInfo-addressModeU-01646",
"text": " If &amp;amp;lt;&amp;amp;lt;samplers-YCbCr-conversion,sampler Y&#8217;C<sub>B</sub>C<sub>R</sub> conversion&amp;amp;gt;&amp;amp;gt; is enabled, <code>addressModeU</code>, <code>addressModeV</code>, and <code>addressModeW</code> <strong class=\"purple\">must</strong> be <code>VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE</code>, <code>anisotropyEnable</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>, and <code>unnormalizedCoordinates</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)+(VK_EXT_sampler_filter_minmax)": [
{
"vuid": "VUID-VkSamplerCreateInfo-None-01647",
"text": " The sampler reduction mode <strong class=\"purple\">must</strong> be set to <code>VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT</code> if &amp;amp;lt;&amp;amp;lt;samplers-YCbCr-conversion,sampler Y&#8217;C<sub>B</sub>C<sub>R</sub> conversion&amp;amp;gt;&amp;amp;gt; is enabled"
}
],
"(VK_IMG_filter_cubic)": [
{
"vuid": "VUID-VkSamplerCreateInfo-magFilter-01081",
"text": " If either <code>magFilter</code> or <code>minFilter</code> is <code>VK_FILTER_CUBIC_IMG</code>, <code>anisotropyEnable</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
}
],
"(VK_IMG_filter_cubic+VK_EXT_sampler_filter_minmax)": [
{
"vuid": "VUID-VkSamplerCreateInfo-magFilter-01422",
"text": " If either <code>magFilter</code> or <code>minFilter</code> is <code>VK_FILTER_CUBIC_IMG</code>, the <code>reductionMode</code> member of <a href=\"#VkSamplerReductionModeCreateInfoEXT\">VkSamplerReductionModeCreateInfoEXT</a> <strong class=\"purple\">must</strong> be <code>VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT</code>"
}
],
"(VK_EXT_sampler_filter_minmax)": [
{
"vuid": "VUID-VkSamplerCreateInfo-compareEnable-01423",
"text": " If <code>compareEnable</code> is <code>VK_TRUE</code>, the <code>reductionMode</code> member of <a href=\"#VkSamplerReductionModeCreateInfoEXT\">VkSamplerReductionModeCreateInfoEXT</a> <strong class=\"purple\">must</strong> be <code>VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT</code>"
}
]
},
"VkSamplerReductionModeCreateInfoEXT": {
"(VK_EXT_sampler_filter_minmax)": [
{
"vuid": "VUID-VkSamplerReductionModeCreateInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT</code>"
},
{
"vuid": "VUID-VkSamplerReductionModeCreateInfoEXT-reductionMode-parameter",
"text": " <code>reductionMode</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSamplerReductionModeEXT\">VkSamplerReductionModeEXT</a> value"
}
]
},
"vkDestroySampler": {
"core": [
{
"vuid": "VUID-vkDestroySampler-sampler-01082",
"text": " All submitted commands that refer to <code>sampler</code> <strong class=\"purple\">must</strong> have completed execution"
},
{
"vuid": "VUID-vkDestroySampler-sampler-01083",
"text": " If <code>VkAllocationCallbacks</code> were provided when <code>sampler</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
},
{
"vuid": "VUID-vkDestroySampler-sampler-01084",
"text": " If no <code>VkAllocationCallbacks</code> were provided when <code>sampler</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-vkDestroySampler-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkDestroySampler-sampler-parameter",
"text": " If <code>sampler</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>sampler</code> <strong class=\"purple\">must</strong> be a valid <code>VkSampler</code> handle"
},
{
"vuid": "VUID-vkDestroySampler-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkDestroySampler-sampler-parent",
"text": " If <code>sampler</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"VkSamplerYcbcrConversionInfo": {
"(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-VkSamplerYcbcrConversionInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO</code>"
},
{
"vuid": "VUID-VkSamplerYcbcrConversionInfo-conversion-parameter",
"text": " <code>conversion</code> <strong class=\"purple\">must</strong> be a valid <code>VkSamplerYcbcrConversion</code> handle"
}
]
},
"vkCreateSamplerYcbcrConversion": {
"(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-vkCreateSamplerYcbcrConversion-None-01648",
"text": " The &amp;amp;lt;&amp;amp;lt;features-features-sampler-YCbCr-conversion, sampler Y&#8217;C<sub>B</sub>C<sub>R</sub> conversion feature&amp;amp;gt;&amp;amp;gt; <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkCreateSamplerYcbcrConversion-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkCreateSamplerYcbcrConversion-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkSamplerYcbcrConversionCreateInfo</code> structure"
},
{
"vuid": "VUID-vkCreateSamplerYcbcrConversion-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateSamplerYcbcrConversion-pYcbcrConversion-parameter",
"text": " <code>pYcbcrConversion</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSamplerYcbcrConversion</code> handle"
}
]
},
"VkSamplerYcbcrConversionCreateInfo": {
"(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)+!(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-format-01649",
"text": " <code>format</code> <strong class=\"purple\">must</strong> not be <code>VK_FORMAT_UNDEFINED</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)+(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-format-01904",
"text": " If an external format conversion is being created, <code>format</code> <strong class=\"purple\">must</strong> be <code>VK_FORMAT_UNDEFINED</code>, otherwise it <strong class=\"purple\">must</strong> not be <code>VK_FORMAT_UNDEFINED</code>."
}
],
"(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-format-01650",
"text": " <code>format</code> <strong class=\"purple\">must</strong> support <code>VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT</code> or <code>VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT</code>"
},
{
"vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-xChromaOffset-01651",
"text": " If the format does not support <code>VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT</code>, <code>xChromaOffset</code> and <code>yChromaOffset</code> <strong class=\"purple\">must</strong> not be <code>VK_CHROMA_LOCATION_COSITED_EVEN</code>"
},
{
"vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-xChromaOffset-01652",
"text": " If the format does not support <code>VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT</code>, <code>xChromaOffset</code> and <code>yChromaOffset</code> <strong class=\"purple\">must</strong> not be <code>VK_CHROMA_LOCATION_MIDPOINT</code>"
},
{
"vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-format-01653",
"text": " <code>format</code> <strong class=\"purple\">must</strong> represent unsigned normalized values (i.e. the format must be a <code>UNORM</code> format)"
},
{
"vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-None-01654",
"text": " If the format has a <code>_422</code> or <code>_420</code> suffix:"
},
{
"vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-ycbcrModel-01655",
"text": " If <code>ycbcrModel</code> is not <code>VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY</code>, then <code>components.r</code>, <code>components.g</code>, and <code>components.b</code> <strong class=\"purple\">must</strong> correspond to channels of the <code>format</code>; that is, <code>components.r</code>, <code>components.g</code>, and <code>components.b</code> <strong class=\"purple\">must</strong> not be <code>VK_COMPONENT_SWIZZLE_ZERO</code> or <code>VK_COMPONENT_SWIZZLE_ONE</code>, and <strong class=\"purple\">must</strong> not correspond to a channel which contains zero or one as a consequence of &amp;amp;lt;&amp;amp;lt;textures-conversion-to-rgba,conversion to RGBA&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-forceExplicitReconstruction-01656",
"text": " If the format does not support <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT</code>, <code>forceExplicitReconstruction</code> <strong class=\"purple\">must</strong> be FALSE"
},
{
"vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-chromaFilter-01657",
"text": " If the format does not support <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT</code>, <code>chromaFilter</code> <strong class=\"purple\">must</strong> be <code>VK_FILTER_NEAREST</code>"
},
{
"vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkExternalFormatANDROID\">VkExternalFormatANDROID</a>"
},
{
"vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-format-parameter",
"text": " <code>format</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFormat\">VkFormat</a> value"
},
{
"vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-ycbcrModel-parameter",
"text": " <code>ycbcrModel</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSamplerYcbcrModelConversion\">VkSamplerYcbcrModelConversion</a> value"
},
{
"vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-ycbcrRange-parameter",
"text": " <code>ycbcrRange</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSamplerYcbcrRange\">VkSamplerYcbcrRange</a> value"
},
{
"vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-components-parameter",
"text": " <code>components</code> <strong class=\"purple\">must</strong> be a valid <code>VkComponentMapping</code> structure"
},
{
"vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-xChromaOffset-parameter",
"text": " <code>xChromaOffset</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkChromaLocation\">VkChromaLocation</a> value"
},
{
"vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-yChromaOffset-parameter",
"text": " <code>yChromaOffset</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkChromaLocation\">VkChromaLocation</a> value"
},
{
"vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-chromaFilter-parameter",
"text": " <code>chromaFilter</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFilter\">VkFilter</a> value"
}
]
},
"vkDestroySamplerYcbcrConversion": {
"(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-vkDestroySamplerYcbcrConversion-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkDestroySamplerYcbcrConversion-ycbcrConversion-parameter",
"text": " If <code>ycbcrConversion</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>ycbcrConversion</code> <strong class=\"purple\">must</strong> be a valid <code>VkSamplerYcbcrConversion</code> handle"
},
{
"vuid": "VUID-vkDestroySamplerYcbcrConversion-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkDestroySamplerYcbcrConversion-ycbcrConversion-parent",
"text": " If <code>ycbcrConversion</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkCreateDescriptorSetLayout": {
"core": [
{
"vuid": "VUID-vkCreateDescriptorSetLayout-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkCreateDescriptorSetLayout-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDescriptorSetLayoutCreateInfo</code> structure"
},
{
"vuid": "VUID-vkCreateDescriptorSetLayout-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateDescriptorSetLayout-pSetLayout-parameter",
"text": " <code>pSetLayout</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkDescriptorSetLayout</code> handle"
}
]
},
"VkDescriptorSetLayoutCreateInfo": {
"core": [
{
"vuid": "VUID-VkDescriptorSetLayoutCreateInfo-binding-00279",
"text": " The <a href=\"#VkDescriptorSetLayoutBinding\">VkDescriptorSetLayoutBinding</a>::<code>binding</code> members of the elements of the <code>pBindings</code> array <strong class=\"purple\">must</strong> each have different values."
},
{
"vuid": "VUID-VkDescriptorSetLayoutCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutCreateInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkDescriptorSetLayoutBindingFlagsCreateInfoEXT\">VkDescriptorSetLayoutBindingFlagsCreateInfoEXT</a>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutCreateInfo-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkDescriptorSetLayoutCreateFlagBits\">VkDescriptorSetLayoutCreateFlagBits</a> values"
},
{
"vuid": "VUID-VkDescriptorSetLayoutCreateInfo-pBindings-parameter",
"text": " If <code>bindingCount</code> is not <code>0</code>, <code>pBindings</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>bindingCount</code> valid <code>VkDescriptorSetLayoutBinding</code> structures"
}
],
"(VK_KHR_push_descriptor)": [
{
"vuid": "VUID-VkDescriptorSetLayoutCreateInfo-flags-00280",
"text": " If <code>flags</code> contains <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR</code>, then all elements of <code>pBindings</code> <strong class=\"purple\">must</strong> not have a <code>descriptorType</code> of <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC</code> or <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC</code>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutCreateInfo-flags-00281",
"text": " If <code>flags</code> contains <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR</code>, then the total number of elements of all bindings <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkPhysicalDevicePushDescriptorPropertiesKHR\">VkPhysicalDevicePushDescriptorPropertiesKHR</a>::<code>maxPushDescriptors</code>"
}
],
"(VK_EXT_descriptor_indexing)": [
{
"vuid": "VUID-VkDescriptorSetLayoutCreateInfo-flags-03000",
"text": " If any binding has the <code>VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT</code> bit set, <code>flags</code> <strong class=\"purple\">must</strong> include <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT</code>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutCreateInfo-descriptorType-03001",
"text": " If any binding has the <code>VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT</code> bit set, then all bindings <strong class=\"purple\">must</strong> not have <code>descriptorType</code> of <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC</code> or <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC</code>"
}
]
},
"VkDescriptorSetLayoutBinding": {
"core": [
{
"vuid": "VUID-VkDescriptorSetLayoutBinding-descriptorType-00282",
"text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_SAMPLER</code> or <code>VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER</code>, and <code>descriptorCount</code> is not <code>0</code> and <code>pImmutableSamplers</code> is not <code>NULL</code>, <code>pImmutableSamplers</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>descriptorCount</code> valid <code>VkSampler</code> handles"
},
{
"vuid": "VUID-VkDescriptorSetLayoutBinding-descriptorCount-00283",
"text": " If <code>descriptorCount</code> is not <code>0</code>, <code>stageFlags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkShaderStageFlagBits\">VkShaderStageFlagBits</a> values"
},
{
"vuid": "VUID-VkDescriptorSetLayoutBinding-descriptorType-01510",
"text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT</code> and <code>descriptorCount</code> is not <code>0</code>, then <code>stageFlags</code> <strong class=\"purple\">must</strong> be <code>0</code> or <code>VK_SHADER_STAGE_FRAGMENT_BIT</code>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutBinding-descriptorType-parameter",
"text": " <code>descriptorType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDescriptorType\">VkDescriptorType</a> value"
}
]
},
"VkDescriptorSetLayoutBindingFlagsCreateInfoEXT": {
"(VK_EXT_descriptor_indexing)": [
{
"vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-bindingCount-03002",
"text": " If <code>bindingCount</code> is not zero, <code>bindingCount</code> <strong class=\"purple\">must</strong> equal <a href=\"#VkDescriptorSetLayoutCreateInfo\">VkDescriptorSetLayoutCreateInfo</a>::<code>bindingCount</code>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-pBindingFlags-03004",
"text": " If an element of <code>pBindingFlags</code> includes <code>VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT</code>, then all other elements of <a href=\"#VkDescriptorSetLayoutCreateInfo\">VkDescriptorSetLayoutCreateInfo</a>::<code>pBindings</code> <strong class=\"purple\">must</strong> have a smaller value of <code>binding</code>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-descriptorBindingUniformBufferUpdateAfterBind-03005",
"text": " If <a href=\"#VkPhysicalDeviceDescriptorIndexingFeaturesEXT\">VkPhysicalDeviceDescriptorIndexingFeaturesEXT</a>::<code>descriptorBindingUniformBufferUpdateAfterBind</code> is not enabled, all bindings with descriptor type <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER</code> <strong class=\"purple\">must</strong> not use <code>VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT</code>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-descriptorBindingSampledImageUpdateAfterBind-03006",
"text": " If <a href=\"#VkPhysicalDeviceDescriptorIndexingFeaturesEXT\">VkPhysicalDeviceDescriptorIndexingFeaturesEXT</a>::<code>descriptorBindingSampledImageUpdateAfterBind</code> is not enabled, all bindings with descriptor type <code>VK_DESCRIPTOR_TYPE_SAMPLER</code>, <code>VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER</code>, or <code>VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE</code> <strong class=\"purple\">must</strong> not use <code>VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT</code>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-descriptorBindingStorageImageUpdateAfterBind-03007",
"text": " If <a href=\"#VkPhysicalDeviceDescriptorIndexingFeaturesEXT\">VkPhysicalDeviceDescriptorIndexingFeaturesEXT</a>::<code>descriptorBindingStorageImageUpdateAfterBind</code> is not enabled, all bindings with descriptor type <code>VK_DESCRIPTOR_TYPE_STORAGE_IMAGE</code> <strong class=\"purple\">must</strong> not use <code>VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT</code>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-descriptorBindingStorageBufferUpdateAfterBind-03008",
"text": " If <a href=\"#VkPhysicalDeviceDescriptorIndexingFeaturesEXT\">VkPhysicalDeviceDescriptorIndexingFeaturesEXT</a>::<code>descriptorBindingStorageBufferUpdateAfterBind</code> is not enabled, all bindings with descriptor type <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER</code> <strong class=\"purple\">must</strong> not use <code>VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT</code>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-descriptorBindingUniformTexelBufferUpdateAfterBind-03009",
"text": " If <a href=\"#VkPhysicalDeviceDescriptorIndexingFeaturesEXT\">VkPhysicalDeviceDescriptorIndexingFeaturesEXT</a>::<code>descriptorBindingUniformTexelBufferUpdateAfterBind</code> is not enabled, all bindings with descriptor type <code>VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER</code> <strong class=\"purple\">must</strong> not use <code>VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT</code>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-descriptorBindingStorageTexelBufferUpdateAfterBind-03010",
"text": " If <a href=\"#VkPhysicalDeviceDescriptorIndexingFeaturesEXT\">VkPhysicalDeviceDescriptorIndexingFeaturesEXT</a>::<code>descriptorBindingStorageTexelBufferUpdateAfterBind</code> is not enabled, all bindings with descriptor type <code>VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER</code> <strong class=\"purple\">must</strong> not use <code>VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT</code>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-None-03011",
"text": " All bindings with descriptor type <code>VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT</code>, <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC</code>, or <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC</code> <strong class=\"purple\">must</strong> not use <code>VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT</code>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-descriptorBindingUpdateUnusedWhilePending-03012",
"text": " If <a href=\"#VkPhysicalDeviceDescriptorIndexingFeaturesEXT\">VkPhysicalDeviceDescriptorIndexingFeaturesEXT</a>::<code>descriptorBindingUpdateUnusedWhilePending</code> is not enabled, all elements of <code>pBindingFlags</code> <strong class=\"purple\">must</strong> not include <code>VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT</code>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-descriptorBindingPartiallyBound-03013",
"text": " If <a href=\"#VkPhysicalDeviceDescriptorIndexingFeaturesEXT\">VkPhysicalDeviceDescriptorIndexingFeaturesEXT</a>::<code>descriptorBindingPartiallyBound</code> is not enabled, all elements of <code>pBindingFlags</code> <strong class=\"purple\">must</strong> not include <code>VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT</code>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-descriptorBindingVariableDescriptorCount-03014",
"text": " If <a href=\"#VkPhysicalDeviceDescriptorIndexingFeaturesEXT\">VkPhysicalDeviceDescriptorIndexingFeaturesEXT</a>::<code>descriptorBindingVariableDescriptorCount</code> is not enabled, all elements of <code>pBindingFlags</code> <strong class=\"purple\">must</strong> not include <code>VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT</code>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-pBindingFlags-03015",
"text": " If an element of <code>pBindingFlags</code> includes <code>VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT</code>, that element&#8217;s <code>descriptorType</code> <strong class=\"purple\">must</strong> not be <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC</code> or <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC</code>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT</code>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-pBindingFlags-parameter",
"text": " If <code>bindingCount</code> is not <code>0</code>, <code>pBindingFlags</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>bindingCount</code> valid combinations of <a href=\"#VkDescriptorBindingFlagBitsEXT\">VkDescriptorBindingFlagBitsEXT</a> values"
},
{
"vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-pBindingFlags-requiredbitmask",
"text": " Each element of <code>pBindingFlags</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
}
],
"(VK_EXT_descriptor_indexing)+(VK_KHR_push_descriptor)": [
{
"vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-flags-03003",
"text": " If <a href=\"#VkDescriptorSetLayoutCreateInfo\">VkDescriptorSetLayoutCreateInfo</a>::<code>flags</code> includes <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR</code>, then all elements of <code>pBindingFlags</code> <strong class=\"purple\">must</strong> not include <code>VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT</code>, <code>VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT</code>, or <code>VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT</code>"
}
]
},
"vkGetDescriptorSetLayoutSupport": {
"(VK_VERSION_1_1,VK_KHR_maintenance3)": [
{
"vuid": "VUID-vkGetDescriptorSetLayoutSupport-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkGetDescriptorSetLayoutSupport-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDescriptorSetLayoutCreateInfo</code> structure"
},
{
"vuid": "VUID-vkGetDescriptorSetLayoutSupport-pSupport-parameter",
"text": " <code>pSupport</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkDescriptorSetLayoutSupport</code> structure"
}
]
},
"VkDescriptorSetLayoutSupport": {
"(VK_VERSION_1_1,VK_KHR_maintenance3)": [
{
"vuid": "VUID-VkDescriptorSetLayoutSupport-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT</code>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutSupport-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkDescriptorSetVariableDescriptorCountLayoutSupportEXT\">VkDescriptorSetVariableDescriptorCountLayoutSupportEXT</a>"
}
]
},
"VkDescriptorSetVariableDescriptorCountLayoutSupportEXT": {
"(VK_EXT_descriptor_indexing)": [
{
"vuid": "VUID-VkDescriptorSetVariableDescriptorCountLayoutSupportEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT</code>"
}
]
},
"vkDestroyDescriptorSetLayout": {
"core": [
{
"vuid": "VUID-vkDestroyDescriptorSetLayout-descriptorSetLayout-00284",
"text": " If <code>VkAllocationCallbacks</code> were provided when <code>descriptorSetLayout</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
},
{
"vuid": "VUID-vkDestroyDescriptorSetLayout-descriptorSetLayout-00285",
"text": " If no <code>VkAllocationCallbacks</code> were provided when <code>descriptorSetLayout</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-vkDestroyDescriptorSetLayout-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkDestroyDescriptorSetLayout-descriptorSetLayout-parameter",
"text": " If <code>descriptorSetLayout</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>descriptorSetLayout</code> <strong class=\"purple\">must</strong> be a valid <code>VkDescriptorSetLayout</code> handle"
},
{
"vuid": "VUID-vkDestroyDescriptorSetLayout-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkDestroyDescriptorSetLayout-descriptorSetLayout-parent",
"text": " If <code>descriptorSetLayout</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkCreatePipelineLayout": {
"core": [
{
"vuid": "VUID-vkCreatePipelineLayout-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkCreatePipelineLayout-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPipelineLayoutCreateInfo</code> structure"
},
{
"vuid": "VUID-vkCreatePipelineLayout-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreatePipelineLayout-pPipelineLayout-parameter",
"text": " <code>pPipelineLayout</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkPipelineLayout</code> handle"
}
]
},
"VkPipelineLayoutCreateInfo": {
"core": [
{
"vuid": "VUID-VkPipelineLayoutCreateInfo-setLayoutCount-00286",
"text": " <code>setLayoutCount</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxBoundDescriptorSets</code>"
},
{
"vuid": "VUID-VkPipelineLayoutCreateInfo-pPushConstantRanges-00292",
"text": " Any two elements of <code>pPushConstantRanges</code> <strong class=\"purple\">must</strong> not include the same stage in <code>stageFlags</code>"
},
{
"vuid": "VUID-VkPipelineLayoutCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkPipelineLayoutCreateInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkPipelineLayoutCreateInfo-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-parameter",
"text": " If <code>setLayoutCount</code> is not <code>0</code>, <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>setLayoutCount</code> valid <code>VkDescriptorSetLayout</code> handles"
},
{
"vuid": "VUID-VkPipelineLayoutCreateInfo-pPushConstantRanges-parameter",
"text": " If <code>pushConstantRangeCount</code> is not <code>0</code>, <code>pPushConstantRanges</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pushConstantRangeCount</code> valid <code>VkPushConstantRange</code> structures"
}
],
"!(VK_EXT_descriptor_indexing)": [
{
"vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-00287",
"text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_SAMPLER</code> and <code>VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER</code> accessible to any shader stage across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxPerStageDescriptorSamplers</code>"
},
{
"vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-00288",
"text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER</code> and <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC</code> accessible to any shader stage across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxPerStageDescriptorUniformBuffers</code>"
},
{
"vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-00289",
"text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER</code> and <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC</code> accessible to any shader stage across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxPerStageDescriptorStorageBuffers</code>"
},
{
"vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-00290",
"text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER</code>, <code>VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE</code>, and <code>VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER</code> accessible to any shader stage across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxPerStageDescriptorSampledImages</code>"
},
{
"vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-00291",
"text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_STORAGE_IMAGE</code>, and <code>VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER</code> accessible to any shader stage across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxPerStageDescriptorStorageImages</code>"
},
{
"vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01676",
"text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT</code> accessible to any given shader stage across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxPerStageDescriptorInputAttachments</code>"
},
{
"vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01677",
"text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_SAMPLER</code> and <code>VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER</code> accessible across all shader stages and across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxDescriptorSetSamplers</code>"
},
{
"vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01678",
"text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER</code> accessible across all shader stages 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 stages 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 stages and across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceDescriptorIndexingPropertiesEXT</code>::<code>maxDescriptorSetUpdateAfterBindUniformBuffers</code>"
},
{
"vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03038",
"text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC</code> accessible across all shader stages and across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceDescriptorIndexingPropertiesEXT</code>::<code>maxDescriptorSetUpdateAfterBindUniformBuffersDynamic</code>"
},
{
"vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03039",
"text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER</code> accessible across all shader stages and across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceDescriptorIndexingPropertiesEXT</code>::<code>maxDescriptorSetUpdateAfterBindStorageBuffers</code>"
},
{
"vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03040",
"text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC</code> accessible across all shader stages and across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceDescriptorIndexingPropertiesEXT</code>::<code>maxDescriptorSetUpdateAfterBindStorageBuffersDynamic</code>"
},
{
"vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03041",
"text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER</code>, <code>VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE</code>, and <code>VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER</code> accessible across all shader stages and across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceDescriptorIndexingPropertiesEXT</code>::<code>maxDescriptorSetUpdateAfterBindSampledImages</code>"
},
{
"vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03042",
"text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_STORAGE_IMAGE</code>, and <code>VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER</code> accessible across all shader stages and across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceDescriptorIndexingPropertiesEXT</code>::<code>maxDescriptorSetUpdateAfterBindStorageImages</code>"
},
{
"vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03043",
"text": " The total number of descriptors of the type <code>VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT</code> accessible across all shader stages and across all elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceDescriptorIndexingPropertiesEXT</code>::<code>maxDescriptorSetUpdateAfterBindInputAttachments</code>"
}
],
"(VK_KHR_push_descriptor)": [
{
"vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-00293",
"text": " <code>pSetLayouts</code> <strong class=\"purple\">must</strong> not contain more than one descriptor set layout that was created with <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR</code> set"
}
]
},
"VkPushConstantRange": {
"core": [
{
"vuid": "VUID-VkPushConstantRange-offset-00294",
"text": " <code>offset</code> <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceLimits</code>::<code>maxPushConstantsSize</code>"
},
{
"vuid": "VUID-VkPushConstantRange-offset-00295",
"text": " <code>offset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-VkPushConstantRange-size-00296",
"text": " <code>size</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-VkPushConstantRange-size-00297",
"text": " <code>size</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-VkPushConstantRange-size-00298",
"text": " <code>size</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxPushConstantsSize</code> minus <code>offset</code>"
},
{
"vuid": "VUID-VkPushConstantRange-stageFlags-parameter",
"text": " <code>stageFlags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkShaderStageFlagBits\">VkShaderStageFlagBits</a> values"
},
{
"vuid": "VUID-VkPushConstantRange-stageFlags-requiredbitmask",
"text": " <code>stageFlags</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
}
]
},
"vkDestroyPipelineLayout": {
"core": [
{
"vuid": "VUID-vkDestroyPipelineLayout-pipelineLayout-00299",
"text": " If <code>VkAllocationCallbacks</code> were provided when <code>pipelineLayout</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
},
{
"vuid": "VUID-vkDestroyPipelineLayout-pipelineLayout-00300",
"text": " If no <code>VkAllocationCallbacks</code> were provided when <code>pipelineLayout</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-vkDestroyPipelineLayout-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkDestroyPipelineLayout-pipelineLayout-parameter",
"text": " If <code>pipelineLayout</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>pipelineLayout</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipelineLayout</code> handle"
},
{
"vuid": "VUID-vkDestroyPipelineLayout-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkDestroyPipelineLayout-pipelineLayout-parent",
"text": " If <code>pipelineLayout</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkCreateDescriptorPool": {
"core": [
{
"vuid": "VUID-vkCreateDescriptorPool-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkCreateDescriptorPool-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDescriptorPoolCreateInfo</code> structure"
},
{
"vuid": "VUID-vkCreateDescriptorPool-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateDescriptorPool-pDescriptorPool-parameter",
"text": " <code>pDescriptorPool</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkDescriptorPool</code> handle"
}
]
},
"VkDescriptorPoolCreateInfo": {
"core": [
{
"vuid": "VUID-VkDescriptorPoolCreateInfo-maxSets-00301",
"text": " <code>maxSets</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-VkDescriptorPoolCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkDescriptorPoolCreateInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkDescriptorPoolCreateInfo-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkDescriptorPoolCreateFlagBits\">VkDescriptorPoolCreateFlagBits</a> values"
},
{
"vuid": "VUID-VkDescriptorPoolCreateInfo-pPoolSizes-parameter",
"text": " <code>pPoolSizes</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>poolSizeCount</code> valid <code>VkDescriptorPoolSize</code> structures"
},
{
"vuid": "VUID-VkDescriptorPoolCreateInfo-poolSizeCount-arraylength",
"text": " <code>poolSizeCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"VkDescriptorPoolSize": {
"core": [
{
"vuid": "VUID-VkDescriptorPoolSize-descriptorCount-00302",
"text": " <code>descriptorCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-VkDescriptorPoolSize-type-parameter",
"text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDescriptorType\">VkDescriptorType</a> value"
}
]
},
"vkDestroyDescriptorPool": {
"core": [
{
"vuid": "VUID-vkDestroyDescriptorPool-descriptorPool-00303",
"text": " All submitted commands that refer to <code>descriptorPool</code> (via any allocated descriptor sets) <strong class=\"purple\">must</strong> have completed execution"
},
{
"vuid": "VUID-vkDestroyDescriptorPool-descriptorPool-00304",
"text": " If <code>VkAllocationCallbacks</code> were provided when <code>descriptorPool</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
},
{
"vuid": "VUID-vkDestroyDescriptorPool-descriptorPool-00305",
"text": " If no <code>VkAllocationCallbacks</code> were provided when <code>descriptorPool</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-vkDestroyDescriptorPool-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkDestroyDescriptorPool-descriptorPool-parameter",
"text": " If <code>descriptorPool</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>descriptorPool</code> <strong class=\"purple\">must</strong> be a valid <code>VkDescriptorPool</code> handle"
},
{
"vuid": "VUID-vkDestroyDescriptorPool-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkDestroyDescriptorPool-descriptorPool-parent",
"text": " If <code>descriptorPool</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkAllocateDescriptorSets": {
"core": [
{
"vuid": "VUID-vkAllocateDescriptorSets-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkAllocateDescriptorSets-pAllocateInfo-parameter",
"text": " <code>pAllocateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDescriptorSetAllocateInfo</code> structure"
},
{
"vuid": "VUID-vkAllocateDescriptorSets-pDescriptorSets-parameter",
"text": " <code>pDescriptorSets</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pAllocateInfo</code>::descriptorSetCount <code>VkDescriptorSet</code> handles"
}
]
},
"VkDescriptorSetAllocateInfo": {
"!(VK_VERSION_1_1,VK_KHR_maintenance1)": [
{
"vuid": "VUID-VkDescriptorSetAllocateInfo-descriptorSetCount-00306",
"text": " <code>descriptorSetCount</code> <strong class=\"purple\">must</strong> not be greater than the number of sets that are currently available for allocation in <code>descriptorPool</code>"
},
{
"vuid": "VUID-VkDescriptorSetAllocateInfo-descriptorPool-00307",
"text": " <code>descriptorPool</code> <strong class=\"purple\">must</strong> have enough free descriptor capacity remaining to allocate the descriptor sets of the specified layouts"
}
],
"(VK_KHR_push_descriptor)": [
{
"vuid": "VUID-VkDescriptorSetAllocateInfo-pSetLayouts-00308",
"text": " Each element of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> not have been created with <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR</code> set"
}
],
"(VK_EXT_descriptor_indexing)": [
{
"vuid": "VUID-VkDescriptorSetAllocateInfo-pSetLayouts-03044",
"text": " If any element of <code>pSetLayouts</code> was created with the <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT</code> bit set, <code>descriptorPool</code> <strong class=\"purple\">must</strong> have been created with the <code>VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT</code> flag set"
}
],
"core": [
{
"vuid": "VUID-VkDescriptorSetAllocateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO</code>"
},
{
"vuid": "VUID-VkDescriptorSetAllocateInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkDescriptorSetVariableDescriptorCountAllocateInfoEXT\">VkDescriptorSetVariableDescriptorCountAllocateInfoEXT</a>"
},
{
"vuid": "VUID-VkDescriptorSetAllocateInfo-descriptorPool-parameter",
"text": " <code>descriptorPool</code> <strong class=\"purple\">must</strong> be a valid <code>VkDescriptorPool</code> handle"
},
{
"vuid": "VUID-VkDescriptorSetAllocateInfo-pSetLayouts-parameter",
"text": " <code>pSetLayouts</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>descriptorSetCount</code> valid <code>VkDescriptorSetLayout</code> handles"
},
{
"vuid": "VUID-VkDescriptorSetAllocateInfo-descriptorSetCount-arraylength",
"text": " <code>descriptorSetCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-VkDescriptorSetAllocateInfo-commonparent",
"text": " Both of <code>descriptorPool</code>, and the elements of <code>pSetLayouts</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
]
},
"VkDescriptorSetVariableDescriptorCountAllocateInfoEXT": {
"(VK_EXT_descriptor_indexing)": [
{
"vuid": "VUID-VkDescriptorSetVariableDescriptorCountAllocateInfoEXT-descriptorSetCount-03045",
"text": " If <code>descriptorSetCount</code> is not zero, <code>descriptorSetCount</code> <strong class=\"purple\">must</strong> equal <a href=\"#VkDescriptorSetAllocateInfo\">VkDescriptorSetAllocateInfo</a>::<code>descriptorSetCount</code>"
},
{
"vuid": "VUID-VkDescriptorSetVariableDescriptorCountAllocateInfoEXT-pSetLayouts-03046",
"text": " If <a href=\"#VkDescriptorSetAllocateInfo\">VkDescriptorSetAllocateInfo</a>::<code>pSetLayouts</code>[i] has a variable descriptor count binding, then <code>pDescriptorCounts</code>[i] <strong class=\"purple\">must</strong> be less than or equal to the descriptor count specified for that binding when the descriptor set layout was created."
},
{
"vuid": "VUID-VkDescriptorSetVariableDescriptorCountAllocateInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT</code>"
},
{
"vuid": "VUID-VkDescriptorSetVariableDescriptorCountAllocateInfoEXT-pDescriptorCounts-parameter",
"text": " If <code>descriptorSetCount</code> is not <code>0</code>, <code>pDescriptorCounts</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>descriptorSetCount</code> <code>uint32_t</code> values"
}
]
},
"vkFreeDescriptorSets": {
"core": [
{
"vuid": "VUID-vkFreeDescriptorSets-pDescriptorSets-00309",
"text": " All submitted commands that refer to any element of <code>pDescriptorSets</code> <strong class=\"purple\">must</strong> have completed execution"
},
{
"vuid": "VUID-vkFreeDescriptorSets-pDescriptorSets-00310",
"text": " <code>pDescriptorSets</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>descriptorSetCount</code> <code>VkDescriptorSet</code> handles, each element of which <strong class=\"purple\">must</strong> either be a valid handle or <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-vkFreeDescriptorSets-pDescriptorSets-00311",
"text": " Each valid handle in <code>pDescriptorSets</code> <strong class=\"purple\">must</strong> have been allocated from <code>descriptorPool</code>"
},
{
"vuid": "VUID-vkFreeDescriptorSets-descriptorPool-00312",
"text": " <code>descriptorPool</code> <strong class=\"purple\">must</strong> have been created with the <code>VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT</code> flag"
},
{
"vuid": "VUID-vkFreeDescriptorSets-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkFreeDescriptorSets-descriptorPool-parameter",
"text": " <code>descriptorPool</code> <strong class=\"purple\">must</strong> be a valid <code>VkDescriptorPool</code> handle"
},
{
"vuid": "VUID-vkFreeDescriptorSets-descriptorSetCount-arraylength",
"text": " <code>descriptorSetCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkFreeDescriptorSets-descriptorPool-parent",
"text": " <code>descriptorPool</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
},
{
"vuid": "VUID-vkFreeDescriptorSets-pDescriptorSets-parent",
"text": " Each element of <code>pDescriptorSets</code> that is a valid handle <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>descriptorPool</code>"
}
]
},
"vkResetDescriptorPool": {
"core": [
{
"vuid": "VUID-vkResetDescriptorPool-descriptorPool-00313",
"text": " All uses of <code>descriptorPool</code> (via any allocated descriptor sets) <strong class=\"purple\">must</strong> have completed execution"
},
{
"vuid": "VUID-vkResetDescriptorPool-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkResetDescriptorPool-descriptorPool-parameter",
"text": " <code>descriptorPool</code> <strong class=\"purple\">must</strong> be a valid <code>VkDescriptorPool</code> handle"
},
{
"vuid": "VUID-vkResetDescriptorPool-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-vkResetDescriptorPool-descriptorPool-parent",
"text": " <code>descriptorPool</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkUpdateDescriptorSets": {
"!(VK_EXT_descriptor_indexing)": [
{
"vuid": "VUID-vkUpdateDescriptorSets-dstSet-00314",
"text": " The <code>dstSet</code> member of each element of <code>pDescriptorWrites</code> or <code>pDescriptorCopies</code> <strong class=\"purple\">must</strong> not be used by any command that was recorded to a command buffer which is in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, pending state&amp;amp;gt;&amp;amp;gt;."
}
],
"(VK_EXT_descriptor_indexing)": [
{
"vuid": "VUID-vkUpdateDescriptorSets-None-03047",
"text": " Descriptor bindings updated by this command which were created without the <code>VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT</code> or <code>VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT</code> bits set <strong class=\"purple\">must</strong> not be used by any command that was recorded to a command buffer which is in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle,pending state&amp;amp;gt;&amp;amp;gt;."
}
],
"core": [
{
"vuid": "VUID-vkUpdateDescriptorSets-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkUpdateDescriptorSets-pDescriptorWrites-parameter",
"text": " If <code>descriptorWriteCount</code> is not <code>0</code>, <code>pDescriptorWrites</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>descriptorWriteCount</code> valid <code>VkWriteDescriptorSet</code> structures"
},
{
"vuid": "VUID-vkUpdateDescriptorSets-pDescriptorCopies-parameter",
"text": " If <code>descriptorCopyCount</code> is not <code>0</code>, <code>pDescriptorCopies</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>descriptorCopyCount</code> valid <code>VkCopyDescriptorSet</code> structures"
}
]
},
"VkWriteDescriptorSet": {
"core": [
{
"vuid": "VUID-VkWriteDescriptorSet-dstBinding-00315",
"text": " <code>dstBinding</code> <strong class=\"purple\">must</strong> be less than or equal to the maximum value of <code>binding</code> of all <a href=\"#VkDescriptorSetLayoutBinding\">VkDescriptorSetLayoutBinding</a> structures specified when <code>dstSet</code>&#8217;s descriptor set layout was created"
},
{
"vuid": "VUID-VkWriteDescriptorSet-dstBinding-00316",
"text": " <code>dstBinding</code> <strong class=\"purple\">must</strong> be a binding with a non-zero <code>descriptorCount</code>"
},
{
"vuid": "VUID-VkWriteDescriptorSet-descriptorCount-00317",
"text": " All consecutive bindings updated via a single <code>VkWriteDescriptorSet</code> structure, except those with a <code>descriptorCount</code> of zero, <strong class=\"purple\">must</strong> have identical <code>descriptorType</code> and <code>stageFlags</code>."
},
{
"vuid": "VUID-VkWriteDescriptorSet-descriptorCount-00318",
"text": " All consecutive bindings updated via a single <code>VkWriteDescriptorSet</code> structure, except those with a <code>descriptorCount</code> of zero, <strong class=\"purple\">must</strong> all either use immutable samplers or <strong class=\"purple\">must</strong> all not use immutable samplers."
},
{
"vuid": "VUID-VkWriteDescriptorSet-descriptorType-00319",
"text": " <code>descriptorType</code> <strong class=\"purple\">must</strong> match the type of <code>dstBinding</code> within <code>dstSet</code>"
},
{
"vuid": "VUID-VkWriteDescriptorSet-dstSet-00320",
"text": " <code>dstSet</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDescriptorSet\">VkDescriptorSet</a> handle"
},
{
"vuid": "VUID-VkWriteDescriptorSet-dstArrayElement-00321",
"text": " The sum of <code>dstArrayElement</code> and <code>descriptorCount</code> <strong class=\"purple\">must</strong> be less than or equal to the number of array elements in the descriptor set binding specified by <code>dstBinding</code>, and all applicable consecutive bindings, as described by &amp;amp;lt;&amp;amp;lt;descriptorsets-updates-consecutive&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-VkWriteDescriptorSet-descriptorType-00322",
"text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_SAMPLER</code>, <code>VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER</code>, <code>VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE</code>, <code>VK_DESCRIPTOR_TYPE_STORAGE_IMAGE</code>, or <code>VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT</code>, <code>pImageInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>descriptorCount</code> valid <code>VkDescriptorImageInfo</code> structures"
},
{
"vuid": "VUID-VkWriteDescriptorSet-descriptorType-00323",
"text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER</code> or <code>VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER</code>, <code>pTexelBufferView</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>descriptorCount</code> valid <code>VkBufferView</code> handles"
},
{
"vuid": "VUID-VkWriteDescriptorSet-descriptorType-00324",
"text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER</code>, <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER</code>, <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC</code>, or <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC</code>, <code>pBufferInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>descriptorCount</code> valid <code>VkDescriptorBufferInfo</code> structures"
},
{
"vuid": "VUID-VkWriteDescriptorSet-descriptorType-00325",
"text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_SAMPLER</code> or <code>VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER</code>, and <code>dstSet</code> was not allocated with a layout that included immutable samplers for <code>dstBinding</code> with <code>descriptorType</code>, the <code>sampler</code> member of each element of <code>pImageInfo</code> <strong class=\"purple\">must</strong> be a valid <code>VkSampler</code> object"
},
{
"vuid": "VUID-VkWriteDescriptorSet-descriptorType-00326",
"text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER</code>, <code>VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE</code>, <code>VK_DESCRIPTOR_TYPE_STORAGE_IMAGE</code>, or <code>VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT</code>, the <code>imageView</code> and <code>imageLayout</code> members of each element of <code>pImageInfo</code> <strong class=\"purple\">must</strong> be a valid <code>VkImageView</code> and <a href=\"#VkImageLayout\">VkImageLayout</a>, respectively"
},
{
"vuid": "VUID-VkWriteDescriptorSet-descriptorType-01946",
"text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE</code>, then the <code>imageView</code> member of each <code>pImageInfo</code> element <strong class=\"purple\">must</strong> have been created without a <code>VkSamplerYcbcrConversionInfo</code> structure in its <code>pNext</code> chain"
},
{
"vuid": "VUID-VkWriteDescriptorSet-descriptorType-01947",
"text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER</code>, and if any element of <code>pImageInfo</code> has a <code>imageView</code> member that was created with a <code>VkSamplerYcbcrConversionInfo</code> structure in its <code>pNext</code> chain, then <code>dstSet</code> <strong class=\"purple\">must</strong> have been allocated with a layout that included immutable samplers for <code>dstBinding</code>"
},
{
"vuid": "VUID-VkWriteDescriptorSet-descriptorType-01948",
"text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER</code>, and <code>dstSet</code> was allocated with a layout that included immutable samplers for <code>dstBinding</code>, then the <code>imageView</code> member of each element of <code>pImageInfo</code> which corresponds to a immutable sampler that enables &amp;amp;lt;&amp;amp;lt;samplers-YCbCr-conversion,sampler Y&#8217;C<sub>B</sub>C<sub>R</sub> conversion&amp;amp;gt;&amp;amp;gt; <strong class=\"purple\">must</strong> have been created with a <code>VkSamplerYcbcrConversionInfo</code> structure in its <code>pNext</code> chain with an <em>identically defined</em> <code>VkSamplerYcbcrConversionInfo</code> to the corresponding immutable sampler"
},
{
"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-imageView-01976",
"text": " If <code>imageView</code> is created from a depth/stencil image, the <code>aspectMask</code> used to create the <code>imageView</code> <strong class=\"purple\">must</strong> include either <code>VK_IMAGE_ASPECT_DEPTH_BIT</code> or <code>VK_IMAGE_ASPECT_STENCIL_BIT</code> but not both."
},
{
"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-01564",
"text": " If <code>sampler</code> is used and the <a href=\"#VkFormat\">VkFormat</a> of the image is a &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar format&amp;amp;gt;&amp;amp;gt;, the image <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT</code>, and the <code>aspectMask</code> of the <code>imageView</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_ASPECT_PLANE_0_BIT</code>, <code>VK_IMAGE_ASPECT_PLANE_1_BIT</code> or (for three-plane formats only) <code>VK_IMAGE_ASPECT_PLANE_2_BIT</code>"
}
]
},
"VkCopyDescriptorSet": {
"core": [
{
"vuid": "VUID-VkCopyDescriptorSet-srcBinding-00345",
"text": " <code>srcBinding</code> <strong class=\"purple\">must</strong> be a valid binding within <code>srcSet</code>"
},
{
"vuid": "VUID-VkCopyDescriptorSet-srcArrayElement-00346",
"text": " The sum of <code>srcArrayElement</code> and <code>descriptorCount</code> <strong class=\"purple\">must</strong> be less than or equal to the number of array elements in the descriptor set binding specified by <code>srcBinding</code>, and all applicable consecutive bindings, as described by &amp;amp;lt;&amp;amp;lt;descriptorsets-updates-consecutive&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-VkCopyDescriptorSet-dstBinding-00347",
"text": " <code>dstBinding</code> <strong class=\"purple\">must</strong> be a valid binding within <code>dstSet</code>"
},
{
"vuid": "VUID-VkCopyDescriptorSet-dstArrayElement-00348",
"text": " The sum of <code>dstArrayElement</code> and <code>descriptorCount</code> <strong class=\"purple\">must</strong> be less than or equal to the number of array elements in the descriptor set binding specified by <code>dstBinding</code>, and all applicable consecutive bindings, as described by &amp;amp;lt;&amp;amp;lt;descriptorsets-updates-consecutive&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-VkCopyDescriptorSet-srcSet-00349",
"text": " If <code>srcSet</code> is equal to <code>dstSet</code>, then the source and destination ranges of descriptors <strong class=\"purple\">must</strong> not overlap, where the ranges <strong class=\"purple\">may</strong> include array elements from consecutive bindings as described by &amp;amp;lt;&amp;amp;lt;descriptorsets-updates-consecutive&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-VkCopyDescriptorSet-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET</code>"
},
{
"vuid": "VUID-VkCopyDescriptorSet-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkCopyDescriptorSet-srcSet-parameter",
"text": " <code>srcSet</code> <strong class=\"purple\">must</strong> be a valid <code>VkDescriptorSet</code> handle"
},
{
"vuid": "VUID-VkCopyDescriptorSet-dstSet-parameter",
"text": " <code>dstSet</code> <strong class=\"purple\">must</strong> be a valid <code>VkDescriptorSet</code> handle"
},
{
"vuid": "VUID-VkCopyDescriptorSet-commonparent",
"text": " Both of <code>dstSet</code>, and <code>srcSet</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
],
"(VK_EXT_descriptor_indexing)": [
{
"vuid": "VUID-VkCopyDescriptorSet-srcSet-01918",
"text": " If <code>srcSet</code>&#8217;s layout was created with the <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT</code> flag set, then <code>dstSet</code>&#8217;s layout <strong class=\"purple\">must</strong> also have been created with the <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT</code> flag set"
},
{
"vuid": "VUID-VkCopyDescriptorSet-srcSet-01919",
"text": " If <code>srcSet</code>&#8217;s layout was created without the <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT</code> flag set, then <code>dstSet</code>&#8217;s layout <strong class=\"purple\">must</strong> also have been created without the <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT</code> flag set"
},
{
"vuid": "VUID-VkCopyDescriptorSet-srcSet-01920",
"text": " If the descriptor pool from which <code>srcSet</code> was allocated was created with the <code>VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT</code> flag set, then the descriptor pool from which <code>dstSet</code> was allocated <strong class=\"purple\">must</strong> also have been created with the <code>VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT</code> flag set"
},
{
"vuid": "VUID-VkCopyDescriptorSet-srcSet-01921",
"text": " If the descriptor pool from which <code>srcSet</code> was allocated was created without the <code>VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT</code> flag set, then the descriptor pool from which <code>dstSet</code> was allocated <strong class=\"purple\">must</strong> also have been created without the <code>VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT</code> flag set"
}
]
},
"vkCreateDescriptorUpdateTemplate": {
"(VK_VERSION_1_1,VK_KHR_descriptor_update_template)": [
{
"vuid": "VUID-vkCreateDescriptorUpdateTemplate-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkCreateDescriptorUpdateTemplate-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDescriptorUpdateTemplateCreateInfo</code> structure"
},
{
"vuid": "VUID-vkCreateDescriptorUpdateTemplate-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateDescriptorUpdateTemplate-pDescriptorUpdateTemplate-parameter",
"text": " <code>pDescriptorUpdateTemplate</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkDescriptorUpdateTemplate</code> handle"
}
]
},
"VkDescriptorUpdateTemplateCreateInfo": {
"(VK_VERSION_1_1,VK_KHR_descriptor_update_template)": [
{
"vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-templateType-00350",
"text": " If <code>templateType</code> is <code>VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET</code>, <code>descriptorSetLayout</code> <strong class=\"purple\">must</strong> be a valid <code>VkDescriptorSetLayout</code> handle"
},
{
"vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-pDescriptorUpdateEntries-parameter",
"text": " <code>pDescriptorUpdateEntries</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>descriptorUpdateEntryCount</code> valid <code>VkDescriptorUpdateTemplateEntry</code> structures"
},
{
"vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-templateType-parameter",
"text": " <code>templateType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDescriptorUpdateTemplateType\">VkDescriptorUpdateTemplateType</a> value"
},
{
"vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-descriptorSetLayout-parameter",
"text": " If <code>descriptorSetLayout</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>descriptorSetLayout</code> <strong class=\"purple\">must</strong> be a valid <code>VkDescriptorSetLayout</code> handle"
},
{
"vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-descriptorUpdateEntryCount-arraylength",
"text": " <code>descriptorUpdateEntryCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-commonparent",
"text": " Both of <code>descriptorSetLayout</code>, and <code>pipelineLayout</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_descriptor_update_template)+(VK_KHR_push_descriptor)": [
{
"vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-templateType-00351",
"text": " If <code>templateType</code> is <code>VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR</code>, <code>pipelineBindPoint</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipelineBindPoint\">VkPipelineBindPoint</a> value"
},
{
"vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-templateType-00352",
"text": " If <code>templateType</code> is <code>VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR</code>, <code>pipelineLayout</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipelineLayout</code> handle"
},
{
"vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-templateType-00353",
"text": " If <code>templateType</code> is <code>VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR</code>, <code>set</code> <strong class=\"purple\">must</strong> be the unique set number in the pipeline layout that uses a descriptor set layout that was created with <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR</code>"
}
]
},
"VkDescriptorUpdateTemplateEntry": {
"(VK_VERSION_1_1,VK_KHR_descriptor_update_template)": [
{
"vuid": "VUID-VkDescriptorUpdateTemplateEntry-dstBinding-00354",
"text": " <code>dstBinding</code> <strong class=\"purple\">must</strong> be a valid binding in the descriptor set layout implicitly specified when using a descriptor update template to update descriptors."
},
{
"vuid": "VUID-VkDescriptorUpdateTemplateEntry-dstArrayElement-00355",
"text": " <code>dstArrayElement</code> and <code>descriptorCount</code> <strong class=\"purple\">must</strong> be less than or equal to the number of array elements in the descriptor set binding implicitly specified when using a descriptor update template to update descriptors, and all applicable consecutive bindings, as described by &amp;amp;lt;&amp;amp;lt;descriptorsets-updates-consecutive&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-VkDescriptorUpdateTemplateEntry-descriptorType-parameter",
"text": " <code>descriptorType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDescriptorType\">VkDescriptorType</a> value"
}
]
},
"vkDestroyDescriptorUpdateTemplate": {
"(VK_VERSION_1_1,VK_KHR_descriptor_update_template)": [
{
"vuid": "VUID-vkDestroyDescriptorUpdateTemplate-descriptorSetLayout-00356",
"text": " If <code>VkAllocationCallbacks</code> were provided when <code>descriptorSetLayout</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
},
{
"vuid": "VUID-vkDestroyDescriptorUpdateTemplate-descriptorSetLayout-00357",
"text": " If no <code>VkAllocationCallbacks</code> were provided when <code>descriptorSetLayout</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-vkDestroyDescriptorUpdateTemplate-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkDestroyDescriptorUpdateTemplate-descriptorUpdateTemplate-parameter",
"text": " If <code>descriptorUpdateTemplate</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>descriptorUpdateTemplate</code> <strong class=\"purple\">must</strong> be a valid <code>VkDescriptorUpdateTemplate</code> handle"
},
{
"vuid": "VUID-vkDestroyDescriptorUpdateTemplate-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkDestroyDescriptorUpdateTemplate-descriptorUpdateTemplate-parent",
"text": " If <code>descriptorUpdateTemplate</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkUpdateDescriptorSetWithTemplate": {
"(VK_VERSION_1_1,VK_KHR_descriptor_update_template)": [
{
"vuid": "VUID-vkUpdateDescriptorSetWithTemplate-pData-01685",
"text": " <code>pData</code> <strong class=\"purple\">must</strong> be a valid pointer to a memory that contains one or more valid instances of <a href=\"#VkDescriptorImageInfo\">VkDescriptorImageInfo</a>, <a href=\"#VkDescriptorBufferInfo\">VkDescriptorBufferInfo</a>, or <a href=\"#VkBufferView\">VkBufferView</a> in a layout defined by <code>descriptorUpdateTemplate</code> when it was created with <a href=\"#vkCreateDescriptorUpdateTemplate\">vkCreateDescriptorUpdateTemplate</a>"
},
{
"vuid": "VUID-vkUpdateDescriptorSetWithTemplate-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkUpdateDescriptorSetWithTemplate-descriptorSet-parameter",
"text": " <code>descriptorSet</code> <strong class=\"purple\">must</strong> be a valid <code>VkDescriptorSet</code> handle"
},
{
"vuid": "VUID-vkUpdateDescriptorSetWithTemplate-descriptorUpdateTemplate-parameter",
"text": " <code>descriptorUpdateTemplate</code> <strong class=\"purple\">must</strong> be a valid <code>VkDescriptorUpdateTemplate</code> handle"
},
{
"vuid": "VUID-vkUpdateDescriptorSetWithTemplate-descriptorUpdateTemplate-parent",
"text": " <code>descriptorUpdateTemplate</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkCmdBindDescriptorSets": {
"core": [
{
"vuid": "VUID-vkCmdBindDescriptorSets-pDescriptorSets-00358",
"text": " Each element of <code>pDescriptorSets</code> <strong class=\"purple\">must</strong> have been allocated with a <code>VkDescriptorSetLayout</code> that matches (is the same as, or identically defined as) the <code>VkDescriptorSetLayout</code> at set <em>n</em> in <code>layout</code>, where <em>n</em> is the sum of <code>firstSet</code> and the index into <code>pDescriptorSets</code>"
},
{
"vuid": "VUID-vkCmdBindDescriptorSets-dynamicOffsetCount-00359",
"text": " <code>dynamicOffsetCount</code> <strong class=\"purple\">must</strong> be equal to the total number of dynamic descriptors in <code>pDescriptorSets</code>"
},
{
"vuid": "VUID-vkCmdBindDescriptorSets-firstSet-00360",
"text": " The sum of <code>firstSet</code> and <code>descriptorSetCount</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPipelineLayoutCreateInfo</code>::<code>setLayoutCount</code> provided when <code>layout</code> was created"
},
{
"vuid": "VUID-vkCmdBindDescriptorSets-pipelineBindPoint-00361",
"text": " <code>pipelineBindPoint</code> <strong class=\"purple\">must</strong> be supported by the <code>commandBuffer</code>&#8217;s parent <code>VkCommandPool</code>&#8217;s queue family"
},
{
"vuid": "VUID-vkCmdBindDescriptorSets-pDynamicOffsets-01971",
"text": " Each element of <code>pDynamicOffsets</code> which corresponds to a descriptor binding with type <code>VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceLimits</code>::<code>minUniformBufferOffsetAlignment</code>"
},
{
"vuid": "VUID-vkCmdBindDescriptorSets-pDynamicOffsets-01972",
"text": " Each element of <code>pDynamicOffsets</code> which corresponds to a descriptor binding with type <code>VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceLimits</code>::<code>minStorageBufferOffsetAlignment</code>"
},
{
"vuid": "VUID-vkCmdBindDescriptorSets-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdBindDescriptorSets-pipelineBindPoint-parameter",
"text": " <code>pipelineBindPoint</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipelineBindPoint\">VkPipelineBindPoint</a> value"
},
{
"vuid": "VUID-vkCmdBindDescriptorSets-layout-parameter",
"text": " <code>layout</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipelineLayout</code> handle"
},
{
"vuid": "VUID-vkCmdBindDescriptorSets-pDescriptorSets-parameter",
"text": " <code>pDescriptorSets</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>descriptorSetCount</code> valid <code>VkDescriptorSet</code> handles"
},
{
"vuid": "VUID-vkCmdBindDescriptorSets-pDynamicOffsets-parameter",
"text": " If <code>dynamicOffsetCount</code> is not <code>0</code>, <code>pDynamicOffsets</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>dynamicOffsetCount</code> <code>uint32_t</code> values"
},
{
"vuid": "VUID-vkCmdBindDescriptorSets-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdBindDescriptorSets-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
},
{
"vuid": "VUID-vkCmdBindDescriptorSets-descriptorSetCount-arraylength",
"text": " <code>descriptorSetCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkCmdBindDescriptorSets-commonparent",
"text": " Each of <code>commandBuffer</code>, <code>layout</code>, and the elements of <code>pDescriptorSets</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
]
},
"vkCmdPushDescriptorSetKHR": {
"(VK_KHR_push_descriptor)": [
{
"vuid": "VUID-vkCmdPushDescriptorSetKHR-pipelineBindPoint-00363",
"text": " <code>pipelineBindPoint</code> <strong class=\"purple\">must</strong> be supported by the <code>commandBuffer</code>&#8217;s parent <code>VkCommandPool</code>&#8217;s queue family"
},
{
"vuid": "VUID-vkCmdPushDescriptorSetKHR-set-00364",
"text": " <code>set</code> <strong class=\"purple\">must</strong> be less than <code>VkPipelineLayoutCreateInfo</code>::<code>setLayoutCount</code> provided when <code>layout</code> was created"
},
{
"vuid": "VUID-vkCmdPushDescriptorSetKHR-set-00365",
"text": " <code>set</code> <strong class=\"purple\">must</strong> be the unique set number in the pipeline layout that uses a descriptor set layout that was created with <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR</code>"
},
{
"vuid": "VUID-vkCmdPushDescriptorSetKHR-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdPushDescriptorSetKHR-pipelineBindPoint-parameter",
"text": " <code>pipelineBindPoint</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipelineBindPoint\">VkPipelineBindPoint</a> value"
},
{
"vuid": "VUID-vkCmdPushDescriptorSetKHR-layout-parameter",
"text": " <code>layout</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipelineLayout</code> handle"
},
{
"vuid": "VUID-vkCmdPushDescriptorSetKHR-pDescriptorWrites-parameter",
"text": " <code>pDescriptorWrites</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>descriptorWriteCount</code> valid <code>VkWriteDescriptorSet</code> structures"
},
{
"vuid": "VUID-vkCmdPushDescriptorSetKHR-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdPushDescriptorSetKHR-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
},
{
"vuid": "VUID-vkCmdPushDescriptorSetKHR-descriptorWriteCount-arraylength",
"text": " <code>descriptorWriteCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkCmdPushDescriptorSetKHR-commonparent",
"text": " Both of <code>commandBuffer</code>, and <code>layout</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
]
},
"vkCmdPushDescriptorSetWithTemplateKHR": {
"(VK_KHR_push_descriptor)+(VK_VERSION_1_1,VK_KHR_descriptor_update_template)": [
{
"vuid": "VUID-vkCmdPushDescriptorSetWithTemplateKHR-commandBuffer-00366",
"text": " The pipelineBindPoint specified during the creation of the descriptor update template <strong class=\"purple\">must</strong> be supported by the <code>commandBuffer</code>&#8217;s parent <code>VkCommandPool</code>&#8217;s queue family"
},
{
"vuid": "VUID-vkCmdPushDescriptorSetWithTemplateKHR-pData-01686",
"text": " <code>pData</code> <strong class=\"purple\">must</strong> be a valid pointer to a memory that contains one or more valid instances of <a href=\"#VkDescriptorImageInfo\">VkDescriptorImageInfo</a>, <a href=\"#VkDescriptorBufferInfo\">VkDescriptorBufferInfo</a>, or <a href=\"#VkBufferView\">VkBufferView</a> in a layout defined by <code>descriptorUpdateTemplate</code> when it was created with <a href=\"#vkCreateDescriptorUpdateTemplateKHR\">vkCreateDescriptorUpdateTemplateKHR</a>"
},
{
"vuid": "VUID-vkCmdPushDescriptorSetWithTemplateKHR-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdPushDescriptorSetWithTemplateKHR-descriptorUpdateTemplate-parameter",
"text": " <code>descriptorUpdateTemplate</code> <strong class=\"purple\">must</strong> be a valid <code>VkDescriptorUpdateTemplate</code> handle"
},
{
"vuid": "VUID-vkCmdPushDescriptorSetWithTemplateKHR-layout-parameter",
"text": " <code>layout</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipelineLayout</code> handle"
},
{
"vuid": "VUID-vkCmdPushDescriptorSetWithTemplateKHR-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdPushDescriptorSetWithTemplateKHR-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
},
{
"vuid": "VUID-vkCmdPushDescriptorSetWithTemplateKHR-commonparent",
"text": " Each of <code>commandBuffer</code>, <code>descriptorUpdateTemplate</code>, and <code>layout</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
]
},
"vkCmdPushConstants": {
"core": [
{
"vuid": "VUID-vkCmdPushConstants-offset-01795",
"text": " For each byte in the range specified by <code>offset</code> and <code>size</code> and for each shader stage in <code>stageFlags</code>, there <strong class=\"purple\">must</strong> be a push constant range in <code>layout</code> that includes that byte and that stage"
},
{
"vuid": "VUID-vkCmdPushConstants-offset-01796",
"text": " For each byte in the range specified by <code>offset</code> and <code>size</code> and for each push constant range that overlaps that byte, <code>stageFlags</code> <strong class=\"purple\">must</strong> include all stages in that push constant range&#8217;s <a href=\"#VkPushConstantRange\">VkPushConstantRange</a>::<code>stageFlags</code>"
},
{
"vuid": "VUID-vkCmdPushConstants-offset-00368",
"text": " <code>offset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-vkCmdPushConstants-size-00369",
"text": " <code>size</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-vkCmdPushConstants-offset-00370",
"text": " <code>offset</code> <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceLimits</code>::<code>maxPushConstantsSize</code>"
},
{
"vuid": "VUID-vkCmdPushConstants-size-00371",
"text": " <code>size</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxPushConstantsSize</code> minus <code>offset</code>"
},
{
"vuid": "VUID-vkCmdPushConstants-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdPushConstants-layout-parameter",
"text": " <code>layout</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipelineLayout</code> handle"
},
{
"vuid": "VUID-vkCmdPushConstants-stageFlags-parameter",
"text": " <code>stageFlags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkShaderStageFlagBits\">VkShaderStageFlagBits</a> values"
},
{
"vuid": "VUID-vkCmdPushConstants-stageFlags-requiredbitmask",
"text": " <code>stageFlags</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-vkCmdPushConstants-pValues-parameter",
"text": " <code>pValues</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>size</code> bytes"
},
{
"vuid": "VUID-vkCmdPushConstants-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdPushConstants-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
},
{
"vuid": "VUID-vkCmdPushConstants-size-arraylength",
"text": " <code>size</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkCmdPushConstants-commonparent",
"text": " Both of <code>commandBuffer</code>, and <code>layout</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
]
},
"vkCreateQueryPool": {
"core": [
{
"vuid": "VUID-vkCreateQueryPool-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkCreateQueryPool-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkQueryPoolCreateInfo</code> structure"
},
{
"vuid": "VUID-vkCreateQueryPool-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateQueryPool-pQueryPool-parameter",
"text": " <code>pQueryPool</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkQueryPool</code> handle"
}
]
},
"VkQueryPoolCreateInfo": {
"core": [
{
"vuid": "VUID-VkQueryPoolCreateInfo-queryType-00791",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-pipelineStatisticsQuery,pipeline statistics queries&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>queryType</code> <strong class=\"purple\">must</strong> not be <code>VK_QUERY_TYPE_PIPELINE_STATISTICS</code>"
},
{
"vuid": "VUID-VkQueryPoolCreateInfo-queryType-00792",
"text": " If <code>queryType</code> is <code>VK_QUERY_TYPE_PIPELINE_STATISTICS</code>, <code>pipelineStatistics</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkQueryPipelineStatisticFlagBits\">VkQueryPipelineStatisticFlagBits</a> values"
},
{
"vuid": "VUID-VkQueryPoolCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkQueryPoolCreateInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkQueryPoolCreateInfo-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkQueryPoolCreateInfo-queryType-parameter",
"text": " <code>queryType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkQueryType\">VkQueryType</a> value"
}
]
},
"vkDestroyQueryPool": {
"core": [
{
"vuid": "VUID-vkDestroyQueryPool-queryPool-00793",
"text": " All submitted commands that refer to <code>queryPool</code> <strong class=\"purple\">must</strong> have completed execution"
},
{
"vuid": "VUID-vkDestroyQueryPool-queryPool-00794",
"text": " If <code>VkAllocationCallbacks</code> were provided when <code>queryPool</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
},
{
"vuid": "VUID-vkDestroyQueryPool-queryPool-00795",
"text": " If no <code>VkAllocationCallbacks</code> were provided when <code>queryPool</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-vkDestroyQueryPool-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkDestroyQueryPool-queryPool-parameter",
"text": " If <code>queryPool</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>queryPool</code> <strong class=\"purple\">must</strong> be a valid <code>VkQueryPool</code> handle"
},
{
"vuid": "VUID-vkDestroyQueryPool-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkDestroyQueryPool-queryPool-parent",
"text": " If <code>queryPool</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkCmdResetQueryPool": {
"core": [
{
"vuid": "VUID-vkCmdResetQueryPool-firstQuery-00796",
"text": " <code>firstQuery</code> <strong class=\"purple\">must</strong> be less than the number of queries in <code>queryPool</code>"
},
{
"vuid": "VUID-vkCmdResetQueryPool-firstQuery-00797",
"text": " The sum of <code>firstQuery</code> and <code>queryCount</code> <strong class=\"purple\">must</strong> be less than or equal to the number of queries in <code>queryPool</code>"
},
{
"vuid": "VUID-vkCmdResetQueryPool-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdResetQueryPool-queryPool-parameter",
"text": " <code>queryPool</code> <strong class=\"purple\">must</strong> be a valid <code>VkQueryPool</code> handle"
},
{
"vuid": "VUID-vkCmdResetQueryPool-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdResetQueryPool-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
},
{
"vuid": "VUID-vkCmdResetQueryPool-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
},
{
"vuid": "VUID-vkCmdResetQueryPool-commonparent",
"text": " Both of <code>commandBuffer</code>, and <code>queryPool</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
]
},
"vkCmdBeginQuery": {
"core": [
{
"vuid": "VUID-vkCmdBeginQuery-queryPool-01922",
"text": " <code>queryPool</code> <strong class=\"purple\">must</strong> have been created with a <code>queryType</code> that differs from that of any queries that are &amp;amp;lt;&amp;amp;lt;queries-operation-active,active&amp;amp;gt;&amp;amp;gt; within <code>commandBuffer</code>"
},
{
"vuid": "VUID-vkCmdBeginQuery-None-00807",
"text": " All queries used by the command <strong class=\"purple\">must</strong> be unavailable"
},
{
"vuid": "VUID-vkCmdBeginQuery-queryType-00800",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-occlusionQueryPrecise,precise occlusion queries&amp;amp;gt;&amp;amp;gt; feature is not enabled, or the <code>queryType</code> used to create <code>queryPool</code> was not <code>VK_QUERY_TYPE_OCCLUSION</code>, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_QUERY_CONTROL_PRECISE_BIT</code>"
},
{
"vuid": "VUID-vkCmdBeginQuery-query-00802",
"text": " <code>query</code> <strong class=\"purple\">must</strong> be less than the number of queries in <code>queryPool</code>"
},
{
"vuid": "VUID-vkCmdBeginQuery-queryType-00803",
"text": " If the <code>queryType</code> used to create <code>queryPool</code> was <code>VK_QUERY_TYPE_OCCLUSION</code>, the <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdBeginQuery-queryType-00804",
"text": " If the <code>queryType</code> used to create <code>queryPool</code> was <code>VK_QUERY_TYPE_PIPELINE_STATISTICS</code> and any of the <code>pipelineStatistics</code> indicate graphics operations, the <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdBeginQuery-queryType-00805",
"text": " If the <code>queryType</code> used to create <code>queryPool</code> was <code>VK_QUERY_TYPE_PIPELINE_STATISTICS</code> and any of the <code>pipelineStatistics</code> indicate compute operations, the <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support compute operations"
},
{
"vuid": "VUID-vkCmdBeginQuery-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdBeginQuery-queryPool-parameter",
"text": " <code>queryPool</code> <strong class=\"purple\">must</strong> be a valid <code>VkQueryPool</code> handle"
},
{
"vuid": "VUID-vkCmdBeginQuery-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkQueryControlFlagBits\">VkQueryControlFlagBits</a> values"
},
{
"vuid": "VUID-vkCmdBeginQuery-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdBeginQuery-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
},
{
"vuid": "VUID-vkCmdBeginQuery-commonparent",
"text": " Both of <code>commandBuffer</code>, and <code>queryPool</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdBeginQuery-commandBuffer-01885",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> not be a protected command buffer"
}
],
"(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-vkCmdBeginQuery-query-00808",
"text": " If <code>vkCmdBeginQuery</code> is called within a render pass instance, the sum of <code>query</code> and the number of bits set in the current subpass&#8217;s view mask <strong class=\"purple\">must</strong> be less than or equal to the number of queries in <code>queryPool</code>"
}
]
},
"vkCmdEndQuery": {
"core": [
{
"vuid": "VUID-vkCmdEndQuery-None-01923",
"text": " All queries used by the command <strong class=\"purple\">must</strong> be &amp;amp;lt;&amp;amp;lt;queries-operation-active,active&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdEndQuery-query-00810",
"text": " <code>query</code> <strong class=\"purple\">must</strong> be less than the number of queries in <code>queryPool</code>"
},
{
"vuid": "VUID-vkCmdEndQuery-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdEndQuery-queryPool-parameter",
"text": " <code>queryPool</code> <strong class=\"purple\">must</strong> be a valid <code>VkQueryPool</code> handle"
},
{
"vuid": "VUID-vkCmdEndQuery-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdEndQuery-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
},
{
"vuid": "VUID-vkCmdEndQuery-commonparent",
"text": " Both of <code>commandBuffer</code>, and <code>queryPool</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdEndQuery-commandBuffer-01886",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> not be a protected command buffer"
}
],
"(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-vkCmdEndQuery-query-00812",
"text": " If <code>vkCmdEndQuery</code> is called within a render pass instance, the sum of <code>query</code> and the number of bits set in the current subpass&#8217;s view mask <strong class=\"purple\">must</strong> be less than or equal to the number of queries in <code>queryPool</code>"
}
]
},
"vkGetQueryPoolResults": {
"core": [
{
"vuid": "VUID-vkGetQueryPoolResults-firstQuery-00813",
"text": " <code>firstQuery</code> <strong class=\"purple\">must</strong> be less than the number of queries in <code>queryPool</code>"
},
{
"vuid": "VUID-vkGetQueryPoolResults-flags-00814",
"text": " If <code>VK_QUERY_RESULT_64_BIT</code> is not set in <code>flags</code> then <code>pData</code> and <code>stride</code> <strong class=\"purple\">must</strong> be multiples of <code>4</code>"
},
{
"vuid": "VUID-vkGetQueryPoolResults-flags-00815",
"text": " If <code>VK_QUERY_RESULT_64_BIT</code> is set in <code>flags</code> then <code>pData</code> and <code>stride</code> <strong class=\"purple\">must</strong> be multiples of <code>8</code>"
},
{
"vuid": "VUID-vkGetQueryPoolResults-firstQuery-00816",
"text": " The sum of <code>firstQuery</code> and <code>queryCount</code> <strong class=\"purple\">must</strong> be less than or equal to the number of queries in <code>queryPool</code>"
},
{
"vuid": "VUID-vkGetQueryPoolResults-dataSize-00817",
"text": " <code>dataSize</code> <strong class=\"purple\">must</strong> be large enough to contain the result of each query, as described &amp;amp;lt;&amp;amp;lt;queries-operation-memorylayout,here&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkGetQueryPoolResults-queryType-00818",
"text": " If the <code>queryType</code> used to create <code>queryPool</code> was <code>VK_QUERY_TYPE_TIMESTAMP</code>, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_QUERY_RESULT_PARTIAL_BIT</code>"
},
{
"vuid": "VUID-vkGetQueryPoolResults-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkGetQueryPoolResults-queryPool-parameter",
"text": " <code>queryPool</code> <strong class=\"purple\">must</strong> be a valid <code>VkQueryPool</code> handle"
},
{
"vuid": "VUID-vkGetQueryPoolResults-pData-parameter",
"text": " <code>pData</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>dataSize</code> bytes"
},
{
"vuid": "VUID-vkGetQueryPoolResults-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkQueryResultFlagBits\">VkQueryResultFlagBits</a> values"
},
{
"vuid": "VUID-vkGetQueryPoolResults-dataSize-arraylength",
"text": " <code>dataSize</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkGetQueryPoolResults-queryPool-parent",
"text": " <code>queryPool</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkCmdCopyQueryPoolResults": {
"core": [
{
"vuid": "VUID-vkCmdCopyQueryPoolResults-dstOffset-00819",
"text": " <code>dstOffset</code> <strong class=\"purple\">must</strong> be less than the size of <code>dstBuffer</code>"
},
{
"vuid": "VUID-vkCmdCopyQueryPoolResults-firstQuery-00820",
"text": " <code>firstQuery</code> <strong class=\"purple\">must</strong> be less than the number of queries in <code>queryPool</code>"
},
{
"vuid": "VUID-vkCmdCopyQueryPoolResults-firstQuery-00821",
"text": " The sum of <code>firstQuery</code> and <code>queryCount</code> <strong class=\"purple\">must</strong> be less than or equal to the number of queries in <code>queryPool</code>"
},
{
"vuid": "VUID-vkCmdCopyQueryPoolResults-flags-00822",
"text": " If <code>VK_QUERY_RESULT_64_BIT</code> is not set in <code>flags</code> then <code>dstOffset</code> and <code>stride</code> <strong class=\"purple\">must</strong> be multiples of <code>4</code>"
},
{
"vuid": "VUID-vkCmdCopyQueryPoolResults-flags-00823",
"text": " If <code>VK_QUERY_RESULT_64_BIT</code> is set in <code>flags</code> then <code>dstOffset</code> and <code>stride</code> <strong class=\"purple\">must</strong> be multiples of <code>8</code>"
},
{
"vuid": "VUID-vkCmdCopyQueryPoolResults-dstBuffer-00824",
"text": " <code>dstBuffer</code> <strong class=\"purple\">must</strong> have enough storage, from <code>dstOffset</code>, to contain the result of each query, as described &amp;amp;lt;&amp;amp;lt;queries-operation-memorylayout,here&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdCopyQueryPoolResults-dstBuffer-00825",
"text": " <code>dstBuffer</code> <strong class=\"purple\">must</strong> have been created with <code>VK_BUFFER_USAGE_TRANSFER_DST_BIT</code> usage flag"
},
{
"vuid": "VUID-vkCmdCopyQueryPoolResults-dstBuffer-00826",
"text": " If <code>dstBuffer</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
},
{
"vuid": "VUID-vkCmdCopyQueryPoolResults-queryType-00827",
"text": " If the <code>queryType</code> used to create <code>queryPool</code> was <code>VK_QUERY_TYPE_TIMESTAMP</code>, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_QUERY_RESULT_PARTIAL_BIT</code>"
},
{
"vuid": "VUID-vkCmdCopyQueryPoolResults-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdCopyQueryPoolResults-queryPool-parameter",
"text": " <code>queryPool</code> <strong class=\"purple\">must</strong> be a valid <code>VkQueryPool</code> handle"
},
{
"vuid": "VUID-vkCmdCopyQueryPoolResults-dstBuffer-parameter",
"text": " <code>dstBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdCopyQueryPoolResults-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkQueryResultFlagBits\">VkQueryResultFlagBits</a> values"
},
{
"vuid": "VUID-vkCmdCopyQueryPoolResults-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdCopyQueryPoolResults-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
},
{
"vuid": "VUID-vkCmdCopyQueryPoolResults-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
},
{
"vuid": "VUID-vkCmdCopyQueryPoolResults-commonparent",
"text": " Each of <code>commandBuffer</code>, <code>dstBuffer</code>, and <code>queryPool</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
]
},
"vkCmdWriteTimestamp": {
"core": [
{
"vuid": "VUID-vkCmdWriteTimestamp-queryPool-01416",
"text": " <code>queryPool</code> <strong class=\"purple\">must</strong> have been created with a <code>queryType</code> of <code>VK_QUERY_TYPE_TIMESTAMP</code>"
},
{
"vuid": "VUID-vkCmdWriteTimestamp-queryPool-00828",
"text": " The query identified by <code>queryPool</code> and <code>query</code> <strong class=\"purple\">must</strong> be <em>unavailable</em>"
},
{
"vuid": "VUID-vkCmdWriteTimestamp-timestampValidBits-00829",
"text": " The command pool&#8217;s queue family <strong class=\"purple\">must</strong> support a non-zero <code>timestampValidBits</code>"
},
{
"vuid": "VUID-vkCmdWriteTimestamp-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdWriteTimestamp-pipelineStage-parameter",
"text": " <code>pipelineStage</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipelineStageFlagBits\">VkPipelineStageFlagBits</a> value"
},
{
"vuid": "VUID-vkCmdWriteTimestamp-queryPool-parameter",
"text": " <code>queryPool</code> <strong class=\"purple\">must</strong> be a valid <code>VkQueryPool</code> handle"
},
{
"vuid": "VUID-vkCmdWriteTimestamp-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdWriteTimestamp-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support transfer, graphics, or compute operations"
},
{
"vuid": "VUID-vkCmdWriteTimestamp-commonparent",
"text": " Both of <code>commandBuffer</code>, and <code>queryPool</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-vkCmdWriteTimestamp-None-00830",
"text": " All queries used by the command <strong class=\"purple\">must</strong> be unavailable"
},
{
"vuid": "VUID-vkCmdWriteTimestamp-query-00831",
"text": " If <code>vkCmdWriteTimestamp</code> is called within a render pass instance, the sum of <code>query</code> and the number of bits set in the current subpass&#8217;s view mask <strong class=\"purple\">must</strong> be less than or equal to the number of queries in <code>queryPool</code>"
}
]
},
"vkCmdClearColorImage": {
"!(VK_ANDROID_external_memory_android_hardware_buffer)+(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> or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> for linearly or optimally tiled images, respectively"
}
],
"(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-vkCmdClearColorImage-image-01935",
"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 <a href=\"#VkAndroidHardwareBufferFormatPropertiesANDROID\">VkAndroidHardwareBufferFormatPropertiesANDROID</a>::<code>formatFeatures</code> returned by <a href=\"#vkGetAndroidHardwareBufferPropertiesANDROID\">vkGetAndroidHardwareBufferPropertiesANDROID</a> for external format images, or by <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>linearTilingFeatures</code> or <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>optimalTilingFeatures</code> returned by <a href=\"#vkGetPhysicalDeviceFormatProperties\">vkGetPhysicalDeviceFormatProperties</a> for non-external format linearly or optimally tiled images, respectively"
}
],
"core": [
{
"vuid": "VUID-vkCmdClearColorImage-image-00002",
"text": " <code>image</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_TRANSFER_DST_BIT</code> usage flag"
},
{
"vuid": "VUID-vkCmdClearColorImage-image-00003",
"text": " If <code>image</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
},
{
"vuid": "VUID-vkCmdClearColorImage-imageLayout-00004",
"text": " <code>imageLayout</code> <strong class=\"purple\">must</strong> specify the layout of the image subresource ranges of <code>image</code> specified in <code>pRanges</code> at the time this command is executed on a <code>VkDevice</code>"
},
{
"vuid": "VUID-vkCmdClearColorImage-baseMipLevel-01470",
"text": " The <a href=\"#VkImageSubresourceRange\">VkImageSubresourceRange</a>::<code>baseMipLevel</code> members of the elements of the <code>pRanges</code> array <strong class=\"purple\">must</strong> each be less than the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
},
{
"vuid": "VUID-vkCmdClearColorImage-pRanges-01692",
"text": " For each <a href=\"#VkImageSubresourceRange\">VkImageSubresourceRange</a> element of <code>pRanges</code>, if the <code>levelCount</code> member is not <code>VK_REMAINING_MIP_LEVELS</code>, then <span class=\"eq\"><code>baseMipLevel</code> &#43; <code>levelCount</code></span> <strong class=\"purple\">must</strong> be less than the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
},
{
"vuid": "VUID-vkCmdClearColorImage-baseArrayLayer-01472",
"text": " The <a href=\"#VkImageSubresourceRange\">VkImageSubresourceRange</a>::<code>baseArrayLayer</code> members of the elements of the <code>pRanges</code> array <strong class=\"purple\">must</strong> each be less than the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
},
{
"vuid": "VUID-vkCmdClearColorImage-pRanges-01693",
"text": " For each <a href=\"#VkImageSubresourceRange\">VkImageSubresourceRange</a> element of <code>pRanges</code>, if the <code>layerCount</code> member is not <code>VK_REMAINING_ARRAY_LAYERS</code>, then <span class=\"eq\"><code>baseArrayLayer</code> &#43; <code>layerCount</code></span> <strong class=\"purple\">must</strong> be less than the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
},
{
"vuid": "VUID-vkCmdClearColorImage-image-00007",
"text": " <code>image</code> <strong class=\"purple\">must</strong> not have a compressed or depth/stencil format"
},
{
"vuid": "VUID-vkCmdClearColorImage-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdClearColorImage-image-parameter",
"text": " <code>image</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
},
{
"vuid": "VUID-vkCmdClearColorImage-imageLayout-parameter",
"text": " <code>imageLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
},
{
"vuid": "VUID-vkCmdClearColorImage-pColor-parameter",
"text": " <code>pColor</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkClearColorValue</code> union"
},
{
"vuid": "VUID-vkCmdClearColorImage-pRanges-parameter",
"text": " <code>pRanges</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>rangeCount</code> valid <code>VkImageSubresourceRange</code> structures"
},
{
"vuid": "VUID-vkCmdClearColorImage-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdClearColorImage-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
},
{
"vuid": "VUID-vkCmdClearColorImage-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
},
{
"vuid": "VUID-vkCmdClearColorImage-rangeCount-arraylength",
"text": " <code>rangeCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkCmdClearColorImage-commonparent",
"text": " Both of <code>commandBuffer</code>, and <code>image</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-vkCmdClearColorImage-image-01545",
"text": " <code>image</code> <strong class=\"purple\">must</strong> not use a format listed in &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion&amp;amp;gt;&amp;amp;gt;"
}
],
"!(VK_KHR_shared_presentable_image)": [
{
"vuid": "VUID-vkCmdClearColorImage-imageLayout-00005",
"text": " <code>imageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_GENERAL</code>"
}
],
"(VK_KHR_shared_presentable_image)": [
{
"vuid": "VUID-vkCmdClearColorImage-imageLayout-01394",
"text": " <code>imageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_GENERAL</code>, or <code>VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdClearColorImage-commandBuffer-01805",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, then <code>image</code> <strong class=\"purple\">must</strong> not be a protected image"
},
{
"vuid": "VUID-vkCmdClearColorImage-commandBuffer-01806",
"text": " If <code>commandBuffer</code> is a protected command buffer, then <code>image</code> <strong class=\"purple\">must</strong> not be an unprotected image"
}
]
},
"vkCmdClearDepthStencilImage": {
"!(VK_ANDROID_external_memory_android_hardware_buffer)+(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> or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> for linearly or optimally tiled images, respectively"
}
],
"(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-vkCmdClearDepthStencilImage-image-01936",
"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 <a href=\"#VkAndroidHardwareBufferFormatPropertiesANDROID\">VkAndroidHardwareBufferFormatPropertiesANDROID</a>::<code>formatFeatures</code> returned by <a href=\"#vkGetAndroidHardwareBufferPropertiesANDROID\">vkGetAndroidHardwareBufferPropertiesANDROID</a> for external format images, or by <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>linearTilingFeatures</code> or <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>optimalTilingFeatures</code> returned by <a href=\"#vkGetPhysicalDeviceFormatProperties\">vkGetPhysicalDeviceFormatProperties</a> for non-external format linearly or optimally tiled images, respectively"
}
],
"core": [
{
"vuid": "VUID-vkCmdClearDepthStencilImage-image-00009",
"text": " <code>image</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_TRANSFER_DST_BIT</code> usage flag"
},
{
"vuid": "VUID-vkCmdClearDepthStencilImage-image-00010",
"text": " If <code>image</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
},
{
"vuid": "VUID-vkCmdClearDepthStencilImage-imageLayout-00011",
"text": " <code>imageLayout</code> <strong class=\"purple\">must</strong> specify the layout of the image subresource ranges of <code>image</code> specified in <code>pRanges</code> at the time this command is executed on a <code>VkDevice</code>"
},
{
"vuid": "VUID-vkCmdClearDepthStencilImage-imageLayout-00012",
"text": " <code>imageLayout</code> <strong class=\"purple\">must</strong> be either of <code>VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_GENERAL</code>"
},
{
"vuid": "VUID-vkCmdClearDepthStencilImage-baseMipLevel-01474",
"text": " The <a href=\"#VkImageSubresourceRange\">VkImageSubresourceRange</a>::<code>baseMipLevel</code> members of the elements of the <code>pRanges</code> array <strong class=\"purple\">must</strong> each be less than the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
},
{
"vuid": "VUID-vkCmdClearDepthStencilImage-pRanges-01694",
"text": " For each <a href=\"#VkImageSubresourceRange\">VkImageSubresourceRange</a> element of <code>pRanges</code>, if the <code>levelCount</code> member is not <code>VK_REMAINING_MIP_LEVELS</code>, then <span class=\"eq\"><code>baseMipLevel</code> &#43; <code>levelCount</code></span> <strong class=\"purple\">must</strong> be less than the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
},
{
"vuid": "VUID-vkCmdClearDepthStencilImage-baseArrayLayer-01476",
"text": " The <a href=\"#VkImageSubresourceRange\">VkImageSubresourceRange</a>::<code>baseArrayLayer</code> members of the elements of the <code>pRanges</code> array <strong class=\"purple\">must</strong> each be less than the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
},
{
"vuid": "VUID-vkCmdClearDepthStencilImage-pRanges-01695",
"text": " For each <a href=\"#VkImageSubresourceRange\">VkImageSubresourceRange</a> element of <code>pRanges</code>, if the <code>layerCount</code> member is not <code>VK_REMAINING_ARRAY_LAYERS</code>, then <span class=\"eq\"><code>baseArrayLayer</code> &#43; <code>layerCount</code></span> <strong class=\"purple\">must</strong> be less than the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
},
{
"vuid": "VUID-vkCmdClearDepthStencilImage-image-00014",
"text": " <code>image</code> <strong class=\"purple\">must</strong> have a depth/stencil format"
},
{
"vuid": "VUID-vkCmdClearDepthStencilImage-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdClearDepthStencilImage-image-parameter",
"text": " <code>image</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
},
{
"vuid": "VUID-vkCmdClearDepthStencilImage-imageLayout-parameter",
"text": " <code>imageLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
},
{
"vuid": "VUID-vkCmdClearDepthStencilImage-pDepthStencil-parameter",
"text": " <code>pDepthStencil</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkClearDepthStencilValue</code> structure"
},
{
"vuid": "VUID-vkCmdClearDepthStencilImage-pRanges-parameter",
"text": " <code>pRanges</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>rangeCount</code> valid <code>VkImageSubresourceRange</code> structures"
},
{
"vuid": "VUID-vkCmdClearDepthStencilImage-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdClearDepthStencilImage-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdClearDepthStencilImage-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
},
{
"vuid": "VUID-vkCmdClearDepthStencilImage-rangeCount-arraylength",
"text": " <code>rangeCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkCmdClearDepthStencilImage-commonparent",
"text": " Both of <code>commandBuffer</code>, and <code>image</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdClearDepthStencilImage-commandBuffer-01807",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, then <code>image</code> <strong class=\"purple\">must</strong> not be a protected image"
},
{
"vuid": "VUID-vkCmdClearDepthStencilImage-commandBuffer-01808",
"text": " If <code>commandBuffer</code> is a protected command buffer, then <code>image</code> <strong class=\"purple\">must</strong> not be an unprotected image"
}
]
},
"vkCmdClearAttachments": {
"core": [
{
"vuid": "VUID-vkCmdClearAttachments-aspectMask-00015",
"text": " If the <code>aspectMask</code> member of any element of <code>pAttachments</code> contains <code>VK_IMAGE_ASPECT_COLOR_BIT</code>, the <code>colorAttachment</code> member of that element <strong class=\"purple\">must</strong> refer to a valid color attachment in the current subpass"
},
{
"vuid": "VUID-vkCmdClearAttachments-pRects-00016",
"text": " The rectangular region specified by each element of <code>pRects</code> <strong class=\"purple\">must</strong> be contained within the render area of the current render pass instance"
},
{
"vuid": "VUID-vkCmdClearAttachments-pRects-00017",
"text": " The layers specified by each element of <code>pRects</code> <strong class=\"purple\">must</strong> be contained within every attachment that <code>pAttachments</code> refers to"
},
{
"vuid": "VUID-vkCmdClearAttachments-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;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdClearAttachments-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdClearAttachments-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
},
{
"vuid": "VUID-vkCmdClearAttachments-attachmentCount-arraylength",
"text": " <code>attachmentCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkCmdClearAttachments-rectCount-arraylength",
"text": " <code>rectCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-vkCmdClearAttachments-baseArrayLayer-00018",
"text": " If the render pass instance this is recorded in uses multiview, then <code>baseArrayLayer</code> <strong class=\"purple\">must</strong> be zero and <code>layerCount</code> <strong class=\"purple\">must</strong> be one."
}
]
},
"VkClearAttachment": {
"core": [
{
"vuid": "VUID-VkClearAttachment-aspectMask-00019",
"text": " If <code>aspectMask</code> includes <code>VK_IMAGE_ASPECT_COLOR_BIT</code>, it <strong class=\"purple\">must</strong> not include <code>VK_IMAGE_ASPECT_DEPTH_BIT</code> or <code>VK_IMAGE_ASPECT_STENCIL_BIT</code>"
},
{
"vuid": "VUID-VkClearAttachment-aspectMask-00020",
"text": " <code>aspectMask</code> <strong class=\"purple\">must</strong> not include <code>VK_IMAGE_ASPECT_METADATA_BIT</code>"
},
{
"vuid": "VUID-VkClearAttachment-clearValue-00021",
"text": " <code>clearValue</code> <strong class=\"purple\">must</strong> be a valid <code>VkClearValue</code> union"
},
{
"vuid": "VUID-VkClearAttachment-aspectMask-parameter",
"text": " <code>aspectMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageAspectFlagBits\">VkImageAspectFlagBits</a> values"
},
{
"vuid": "VUID-VkClearAttachment-aspectMask-requiredbitmask",
"text": " <code>aspectMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-VkClearAttachment-commandBuffer-01809",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, then the attachment to be cleared <strong class=\"purple\">must</strong> not be a protected image."
},
{
"vuid": "VUID-VkClearAttachment-commandBuffer-01810",
"text": " If <code>commandBuffer</code> is a protected command buffer, then the attachment to be cleared <strong class=\"purple\">must</strong> not be an unprotected image."
}
]
},
"VkClearDepthStencilValue": {
"(VK_EXT_depth_range_unrestricted)": [
{
"vuid": "VUID-VkClearDepthStencilValue-depth-00022",
"text": " Unless the <code><a href=\"#VK_EXT_depth_range_unrestricted\">VK_EXT_depth_range_unrestricted</a></code> extension is enabled <code>depth</code> <strong class=\"purple\">must</strong> be between <code>0.0</code> and <code>1.0</code>, inclusive"
}
],
"!(VK_EXT_depth_range_unrestricted)": [
{
"vuid": "VUID-VkClearDepthStencilValue-depth-00022",
"text": " <code>depth</code> <strong class=\"purple\">must</strong> be between <code>0.0</code> and <code>1.0</code>, inclusive"
}
]
},
"VkClearValue": {
"core": [
{
"vuid": "VUID-VkClearValue-depthStencil-00023",
"text": " <code>depthStencil</code> <strong class=\"purple\">must</strong> be a valid <code>VkClearDepthStencilValue</code> structure"
}
]
},
"vkCmdFillBuffer": {
"core": [
{
"vuid": "VUID-vkCmdFillBuffer-dstOffset-00024",
"text": " <code>dstOffset</code> <strong class=\"purple\">must</strong> be less than the size of <code>dstBuffer</code>"
},
{
"vuid": "VUID-vkCmdFillBuffer-dstOffset-00025",
"text": " <code>dstOffset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-vkCmdFillBuffer-size-00026",
"text": " If <code>size</code> is not equal to <code>VK_WHOLE_SIZE</code>, <code>size</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkCmdFillBuffer-size-00027",
"text": " If <code>size</code> is not equal to <code>VK_WHOLE_SIZE</code>, <code>size</code> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>dstBuffer</code> minus <code>dstOffset</code>"
},
{
"vuid": "VUID-vkCmdFillBuffer-size-00028",
"text": " If <code>size</code> is not equal to <code>VK_WHOLE_SIZE</code>, <code>size</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-vkCmdFillBuffer-dstBuffer-00029",
"text": " <code>dstBuffer</code> <strong class=\"purple\">must</strong> have been created with <code>VK_BUFFER_USAGE_TRANSFER_DST_BIT</code> usage flag"
},
{
"vuid": "VUID-vkCmdFillBuffer-dstBuffer-00031",
"text": " If <code>dstBuffer</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
},
{
"vuid": "VUID-vkCmdFillBuffer-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdFillBuffer-dstBuffer-parameter",
"text": " <code>dstBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdFillBuffer-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdFillBuffer-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support transfer, graphics or compute operations"
},
{
"vuid": "VUID-vkCmdFillBuffer-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
},
{
"vuid": "VUID-vkCmdFillBuffer-commonparent",
"text": " Both of <code>commandBuffer</code>, and <code>dstBuffer</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
],
"!(VK_VERSION_1_1,VK_KHR_maintenance1)": [
{
"vuid": "VUID-vkCmdFillBuffer-commandBuffer-00030",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics or compute operations"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdFillBuffer-commandBuffer-01811",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, then <code>dstBuffer</code> <strong class=\"purple\">must</strong> not be a protected buffer"
},
{
"vuid": "VUID-vkCmdFillBuffer-commandBuffer-01812",
"text": " If <code>commandBuffer</code> is a protected command buffer, then <code>dstBuffer</code> <strong class=\"purple\">must</strong> not be an unprotected buffer"
}
]
},
"vkCmdUpdateBuffer": {
"core": [
{
"vuid": "VUID-vkCmdUpdateBuffer-dstOffset-00032",
"text": " <code>dstOffset</code> <strong class=\"purple\">must</strong> be less than the size of <code>dstBuffer</code>"
},
{
"vuid": "VUID-vkCmdUpdateBuffer-dataSize-00033",
"text": " <code>dataSize</code> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>dstBuffer</code> minus <code>dstOffset</code>"
},
{
"vuid": "VUID-vkCmdUpdateBuffer-dstBuffer-00034",
"text": " <code>dstBuffer</code> <strong class=\"purple\">must</strong> have been created with <code>VK_BUFFER_USAGE_TRANSFER_DST_BIT</code> usage flag"
},
{
"vuid": "VUID-vkCmdUpdateBuffer-dstBuffer-00035",
"text": " If <code>dstBuffer</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
},
{
"vuid": "VUID-vkCmdUpdateBuffer-dstOffset-00036",
"text": " <code>dstOffset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-vkCmdUpdateBuffer-dataSize-00037",
"text": " <code>dataSize</code> <strong class=\"purple\">must</strong> be less than or equal to <code>65536</code>"
},
{
"vuid": "VUID-vkCmdUpdateBuffer-dataSize-00038",
"text": " <code>dataSize</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-vkCmdUpdateBuffer-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdUpdateBuffer-dstBuffer-parameter",
"text": " <code>dstBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdUpdateBuffer-pData-parameter",
"text": " <code>pData</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>dataSize</code> bytes"
},
{
"vuid": "VUID-vkCmdUpdateBuffer-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdUpdateBuffer-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support transfer, graphics, or compute operations"
},
{
"vuid": "VUID-vkCmdUpdateBuffer-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
},
{
"vuid": "VUID-vkCmdUpdateBuffer-dataSize-arraylength",
"text": " <code>dataSize</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkCmdUpdateBuffer-commonparent",
"text": " Both of <code>commandBuffer</code>, and <code>dstBuffer</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdUpdateBuffer-commandBuffer-01813",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, then <code>dstBuffer</code> <strong class=\"purple\">must</strong> not be a protected buffer"
},
{
"vuid": "VUID-vkCmdUpdateBuffer-commandBuffer-01814",
"text": " If <code>commandBuffer</code> is a protected command buffer, then <code>dstBuffer</code> <strong class=\"purple\">must</strong> not be an unprotected buffer"
}
]
},
"vkCmdCopyBuffer": {
"core": [
{
"vuid": "VUID-vkCmdCopyBuffer-size-00112",
"text": " The <code>size</code> member of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkCmdCopyBuffer-srcOffset-00113",
"text": " The <code>srcOffset</code> member of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than the size of <code>srcBuffer</code>"
},
{
"vuid": "VUID-vkCmdCopyBuffer-dstOffset-00114",
"text": " The <code>dstOffset</code> member of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than the size of <code>dstBuffer</code>"
},
{
"vuid": "VUID-vkCmdCopyBuffer-size-00115",
"text": " The <code>size</code> member of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>srcBuffer</code> minus <code>srcOffset</code>"
},
{
"vuid": "VUID-vkCmdCopyBuffer-size-00116",
"text": " The <code>size</code> member of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>dstBuffer</code> minus <code>dstOffset</code>"
},
{
"vuid": "VUID-vkCmdCopyBuffer-pRegions-00117",
"text": " The union of the source regions, and the union of the destination regions, specified by the elements of <code>pRegions</code>, <strong class=\"purple\">must</strong> not overlap in memory"
},
{
"vuid": "VUID-vkCmdCopyBuffer-srcBuffer-00118",
"text": " <code>srcBuffer</code> <strong class=\"purple\">must</strong> have been created with <code>VK_BUFFER_USAGE_TRANSFER_SRC_BIT</code> usage flag"
},
{
"vuid": "VUID-vkCmdCopyBuffer-srcBuffer-00119",
"text": " If <code>srcBuffer</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
},
{
"vuid": "VUID-vkCmdCopyBuffer-dstBuffer-00120",
"text": " <code>dstBuffer</code> <strong class=\"purple\">must</strong> have been created with <code>VK_BUFFER_USAGE_TRANSFER_DST_BIT</code> usage flag"
},
{
"vuid": "VUID-vkCmdCopyBuffer-dstBuffer-00121",
"text": " If <code>dstBuffer</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
},
{
"vuid": "VUID-vkCmdCopyBuffer-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdCopyBuffer-srcBuffer-parameter",
"text": " <code>srcBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdCopyBuffer-dstBuffer-parameter",
"text": " <code>dstBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdCopyBuffer-pRegions-parameter",
"text": " <code>pRegions</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>regionCount</code> <code>VkBufferCopy</code> structures"
},
{
"vuid": "VUID-vkCmdCopyBuffer-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdCopyBuffer-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support transfer, graphics, or compute operations"
},
{
"vuid": "VUID-vkCmdCopyBuffer-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
},
{
"vuid": "VUID-vkCmdCopyBuffer-regionCount-arraylength",
"text": " <code>regionCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkCmdCopyBuffer-commonparent",
"text": " Each of <code>commandBuffer</code>, <code>dstBuffer</code>, and <code>srcBuffer</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdCopyBuffer-commandBuffer-01822",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, then <code>srcBuffer</code> <strong class=\"purple\">must</strong> not be a protected buffer"
},
{
"vuid": "VUID-vkCmdCopyBuffer-commandBuffer-01823",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, then <code>dstBuffer</code> <strong class=\"purple\">must</strong> not be a protected buffer"
},
{
"vuid": "VUID-vkCmdCopyBuffer-commandBuffer-01824",
"text": " If <code>commandBuffer</code> is a protected command buffer, then <code>dstBuffer</code> <strong class=\"purple\">must</strong> not be an unprotected buffer"
}
]
},
"vkCmdCopyImage": {
"core": [
{
"vuid": "VUID-vkCmdCopyImage-pRegions-00122",
"text": " The source region specified by each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be a region that is contained within <code>srcImage</code>"
},
{
"vuid": "VUID-vkCmdCopyImage-pRegions-00123",
"text": " The destination region specified by each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be a region that is contained within <code>dstImage</code>"
},
{
"vuid": "VUID-vkCmdCopyImage-pRegions-00124",
"text": " The union of all source regions, and the union of all destination regions, specified by the elements of <code>pRegions</code>, <strong class=\"purple\">must</strong> not overlap in memory"
},
{
"vuid": "VUID-vkCmdCopyImage-srcImage-00126",
"text": " <code>srcImage</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_TRANSFER_SRC_BIT</code> usage flag"
},
{
"vuid": "VUID-vkCmdCopyImage-srcImageLayout-00128",
"text": " <code>srcImageLayout</code> <strong class=\"purple\">must</strong> specify the layout of the image subresources of <code>srcImage</code> specified in <code>pRegions</code> at the time this command is executed on a <code>VkDevice</code>"
},
{
"vuid": "VUID-vkCmdCopyImage-dstImage-00131",
"text": " <code>dstImage</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_TRANSFER_DST_BIT</code> usage flag"
},
{
"vuid": "VUID-vkCmdCopyImage-dstImageLayout-00133",
"text": " <code>dstImageLayout</code> <strong class=\"purple\">must</strong> specify the layout of the image subresources of <code>dstImage</code> specified in <code>pRegions</code> at the time this command is executed on a <code>VkDevice</code>"
},
{
"vuid": "VUID-vkCmdCopyImage-srcImage-00136",
"text": " The sample count of <code>srcImage</code> and <code>dstImage</code> <strong class=\"purple\">must</strong> match"
},
{
"vuid": "VUID-vkCmdCopyImage-srcSubresource-01696",
"text": " The <code>srcSubresource.mipLevel</code> member of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>srcImage</code> was created"
},
{
"vuid": "VUID-vkCmdCopyImage-dstSubresource-01697",
"text": " The <code>dstSubresource.mipLevel</code> member of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>dstImage</code> was created"
},
{
"vuid": "VUID-vkCmdCopyImage-srcSubresource-01698",
"text": " The <span class=\"eq\"><code>srcSubresource.baseArrayLayer</code> &#43; <code>srcSubresource.layerCount</code></span> of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than or equal to the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>srcImage</code> was created"
},
{
"vuid": "VUID-vkCmdCopyImage-dstSubresource-01699",
"text": " The <span class=\"eq\"><code>dstSubresource.baseArrayLayer</code> &#43; <code>dstSubresource.layerCount</code></span> of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than or equal to the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>dstImage</code> was created"
},
{
"vuid": "VUID-vkCmdCopyImage-srcOffset-01783",
"text": " The <code>srcOffset</code> and <code>extent</code> members of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> respect the image transfer granularity requirements of <code>commandBuffer</code>&#8217;s command pool&#8217;s queue family, as described in <a href=\"#VkQueueFamilyProperties\">VkQueueFamilyProperties</a>"
},
{
"vuid": "VUID-vkCmdCopyImage-dstOffset-01784",
"text": " The <code>dstOffset</code> and <code>extent</code> members of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> respect the image transfer granularity requirements of <code>commandBuffer</code>&#8217;s command pool&#8217;s queue family, as described in <a href=\"#VkQueueFamilyProperties\">VkQueueFamilyProperties</a>"
},
{
"vuid": "VUID-vkCmdCopyImage-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdCopyImage-srcImage-parameter",
"text": " <code>srcImage</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
},
{
"vuid": "VUID-vkCmdCopyImage-srcImageLayout-parameter",
"text": " <code>srcImageLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
},
{
"vuid": "VUID-vkCmdCopyImage-dstImage-parameter",
"text": " <code>dstImage</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
},
{
"vuid": "VUID-vkCmdCopyImage-dstImageLayout-parameter",
"text": " <code>dstImageLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
},
{
"vuid": "VUID-vkCmdCopyImage-pRegions-parameter",
"text": " <code>pRegions</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>regionCount</code> valid <code>VkImageCopy</code> structures"
},
{
"vuid": "VUID-vkCmdCopyImage-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdCopyImage-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support transfer, graphics, or compute operations"
},
{
"vuid": "VUID-vkCmdCopyImage-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
},
{
"vuid": "VUID-vkCmdCopyImage-regionCount-arraylength",
"text": " <code>regionCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkCmdCopyImage-commonparent",
"text": " Each of <code>commandBuffer</code>, <code>dstImage</code>, and <code>srcImage</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
],
"!(VK_ANDROID_external_memory_android_hardware_buffer)+(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> or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> for linearly or optimally tiled images, respectively"
},
{
"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> or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> for linearly or optimally tiled images, respectively"
}
],
"(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-vkCmdCopyImage-srcImage-01938",
"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 <a href=\"#VkAndroidHardwareBufferFormatPropertiesANDROID\">VkAndroidHardwareBufferFormatPropertiesANDROID</a>::<code>formatFeatures</code> returned by <a href=\"#vkGetAndroidHardwareBufferPropertiesANDROID\">vkGetAndroidHardwareBufferPropertiesANDROID</a> for external format images, or by <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>linearTilingFeatures</code> or <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>optimalTilingFeatures</code> returned by <a href=\"#vkGetPhysicalDeviceFormatProperties\">vkGetPhysicalDeviceFormatProperties</a> for non-external format linearly or optimally tiled images, respectively"
},
{
"vuid": "VUID-vkCmdCopyImage-dstImage-01939",
"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 <a href=\"#VkAndroidHardwareBufferFormatPropertiesANDROID\">VkAndroidHardwareBufferFormatPropertiesANDROID</a>::<code>formatFeatures</code> returned by <a href=\"#vkGetAndroidHardwareBufferPropertiesANDROID\">vkGetAndroidHardwareBufferPropertiesANDROID</a> for external format images, or by <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>linearTilingFeatures</code> or <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>optimalTilingFeatures</code> returned by <a href=\"#vkGetPhysicalDeviceFormatProperties\">vkGetPhysicalDeviceFormatProperties</a> for non-external format linearly or optimally tiled images, respectively"
}
],
"!(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-vkCmdCopyImage-srcImage-00127",
"text": " If <code>srcImage</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
},
{
"vuid": "VUID-vkCmdCopyImage-dstImage-00132",
"text": " If <code>dstImage</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
},
{
"vuid": "VUID-vkCmdCopyImage-srcImage-00135",
"text": " The <a href=\"#VkFormat\">VkFormat</a> of each of <code>srcImage</code> and <code>dstImage</code> <strong class=\"purple\">must</strong> be compatible, as defined &amp;amp;lt;&amp;amp;lt;copies-images-format-compatibility, below&amp;amp;gt;&amp;amp;gt;"
}
],
"(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-vkCmdCopyImage-srcImage-01546",
"text": " If <code>srcImage</code> is non-sparse then the image or <em>disjoint</em> plane to be copied <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
},
{
"vuid": "VUID-vkCmdCopyImage-dstImage-01547",
"text": " If <code>dstImage</code> is non-sparse then the image or <em>disjoint</em> plane that is the destination of the copy <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
},
{
"vuid": "VUID-vkCmdCopyImage-srcImage-01548",
"text": " If the <a href=\"#VkFormat\">VkFormat</a> of each of <code>srcImage</code> and <code>dstImage</code> is not a &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,<em>multi-planar format</em>&amp;amp;gt;&amp;amp;gt;, the <a href=\"#VkFormat\">VkFormat</a> of each of <code>srcImage</code> and <code>dstImage</code> <strong class=\"purple\">must</strong> be compatible, as defined &amp;amp;lt;&amp;amp;lt;copies-images-format-compatibility, below&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdCopyImage-None-01549",
"text": " In a copy to or from a plane of a &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar image&amp;amp;gt;&amp;amp;gt;, the <a href=\"#VkFormat\">VkFormat</a> of the image and plane <strong class=\"purple\">must</strong> be compatible according to &amp;amp;lt;&amp;amp;lt;features-formats-compatible-planes,the description of compatible planes&amp;amp;gt;&amp;amp;gt; for the plane being copied"
},
{
"vuid": "VUID-vkCmdCopyImage-aspectMask-01550",
"text": " When a copy is performed to or from an image with a &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar format&amp;amp;gt;&amp;amp;gt;, the <code>aspectMask</code> of the <code>srcSubresource</code> and/or <code>dstSubresource</code> that refers to the multi-planar image <strong class=\"purple\">must</strong> be <code>VK_IMAGE_ASPECT_PLANE_0_BIT</code>, <code>VK_IMAGE_ASPECT_PLANE_1_BIT</code>, or <code>VK_IMAGE_ASPECT_PLANE_2_BIT</code> (with <code>VK_IMAGE_ASPECT_PLANE_2_BIT</code> valid only for a <a href=\"#VkFormat\">VkFormat</a> with three planes)"
}
],
"!(VK_KHR_shared_presentable_image)": [
{
"vuid": "VUID-vkCmdCopyImage-srcImageLayout-00129",
"text": " <code>srcImageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_GENERAL</code>"
},
{
"vuid": "VUID-vkCmdCopyImage-dstImageLayout-00134",
"text": " <code>dstImageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_GENERAL</code>"
}
],
"(VK_KHR_shared_presentable_image)": [
{
"vuid": "VUID-vkCmdCopyImage-srcImageLayout-01917",
"text": " <code>srcImageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_GENERAL</code>, or <code>VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR</code>"
},
{
"vuid": "VUID-vkCmdCopyImage-dstImageLayout-01395",
"text": " <code>dstImageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_GENERAL</code>, or <code>VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdCopyImage-commandBuffer-01825",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, then <code>srcImage</code> <strong class=\"purple\">must</strong> not be a protected image"
},
{
"vuid": "VUID-vkCmdCopyImage-commandBuffer-01826",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, then <code>dstImage</code> <strong class=\"purple\">must</strong> not be a protected image"
},
{
"vuid": "VUID-vkCmdCopyImage-commandBuffer-01827",
"text": " If <code>commandBuffer</code> is a protected command buffer, then <code>dstImage</code> <strong class=\"purple\">must</strong> not be an unprotected image"
}
]
},
"VkImageCopy": {
"!(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-VkImageCopy-aspectMask-00137",
"text": " The <code>aspectMask</code> member of <code>srcSubresource</code> and <code>dstSubresource</code> <strong class=\"purple\">must</strong> match"
},
{
"vuid": "VUID-VkImageCopy-srcOffset-00157",
"text": " If the calling command&#8217;s <code>srcImage</code> is a compressed image, all members of <code>srcOffset</code> <strong class=\"purple\">must</strong> be a multiple of the corresponding dimensions of the compressed texel block"
},
{
"vuid": "VUID-VkImageCopy-extent-00158",
"text": " If the calling command&#8217;s <code>srcImage</code> is a compressed image, <code>extent.width</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block width or <span class=\"eq\">(<code>extent.width</code> &#43; <code>srcOffset.x</code>)</span> <strong class=\"purple\">must</strong> equal the source image subresource width"
},
{
"vuid": "VUID-VkImageCopy-extent-00159",
"text": " If the calling command&#8217;s <code>srcImage</code> is a compressed image, <code>extent.height</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block height or <span class=\"eq\">(<code>extent.height</code> &#43; <code>srcOffset.y</code>)</span> <strong class=\"purple\">must</strong> equal the source image subresource height"
},
{
"vuid": "VUID-VkImageCopy-extent-00160",
"text": " If the calling command&#8217;s <code>srcImage</code> is a compressed image, <code>extent.depth</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block depth or <span class=\"eq\">(<code>extent.depth</code> &#43; <code>srcOffset.z</code>)</span> <strong class=\"purple\">must</strong> equal the source image subresource depth"
},
{
"vuid": "VUID-VkImageCopy-dstOffset-00162",
"text": " If the calling command&#8217;s <code>dstImage</code> is a compressed format image, all members of <code>dstOffset</code> <strong class=\"purple\">must</strong> be a multiple of the corresponding dimensions of the compressed texel block"
},
{
"vuid": "VUID-VkImageCopy-extent-00163",
"text": " If the calling command&#8217;s <code>dstImage</code> is a compressed format image, <code>extent.width</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block width or <span class=\"eq\">(<code>extent.width</code> &#43; <code>dstOffset.x</code>)</span> <strong class=\"purple\">must</strong> equal the destination image subresource width"
},
{
"vuid": "VUID-VkImageCopy-extent-00164",
"text": " If the calling command&#8217;s <code>dstImage</code> is a compressed format image, <code>extent.height</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block height or <span class=\"eq\">(<code>extent.height</code> &#43; <code>dstOffset.y</code>)</span> <strong class=\"purple\">must</strong> equal the destination image subresource height"
},
{
"vuid": "VUID-VkImageCopy-extent-00165",
"text": " If the calling command&#8217;s <code>dstImage</code> is a compressed format image, <code>extent.depth</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block depth or <span class=\"eq\">(<code>extent.depth</code> &#43; <code>dstOffset.z</code>)</span> <strong class=\"purple\">must</strong> equal the destination image subresource depth"
}
],
"(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-VkImageCopy-srcImage-01551",
"text": " If neither the calling command&#8217;s <code>srcImage</code> nor the calling command&#8217;s <code>dstImage</code> has a &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion, multi-planar image format&amp;amp;gt;&amp;amp;gt; then the <code>aspectMask</code> member of <code>srcSubresource</code> and <code>dstSubresource</code> <strong class=\"purple\">must</strong> match"
},
{
"vuid": "VUID-VkImageCopy-srcImage-01552",
"text": " If the calling command&#8217;s <code>srcImage</code> has a <a href=\"#VkFormat\">VkFormat</a> with &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,two planes&amp;amp;gt;&amp;amp;gt; then the <code>srcSubresource</code> <code>aspectMask</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_ASPECT_PLANE_0_BIT</code> or <code>VK_IMAGE_ASPECT_PLANE_1_BIT</code>"
},
{
"vuid": "VUID-VkImageCopy-srcImage-01553",
"text": " If the calling command&#8217;s <code>srcImage</code> has a <a href=\"#VkFormat\">VkFormat</a> with &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,three planes&amp;amp;gt;&amp;amp;gt; then the <code>srcSubresource</code> <code>aspectMask</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_ASPECT_PLANE_0_BIT</code>, <code>VK_IMAGE_ASPECT_PLANE_1_BIT</code>, or <code>VK_IMAGE_ASPECT_PLANE_2_BIT</code>"
},
{
"vuid": "VUID-VkImageCopy-dstImage-01554",
"text": " If the calling command&#8217;s <code>dstImage</code> has a <a href=\"#VkFormat\">VkFormat</a> with &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,two planes&amp;amp;gt;&amp;amp;gt; then the <code>dstSubresource</code> <code>aspectMask</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_ASPECT_PLANE_0_BIT</code> or <code>VK_IMAGE_ASPECT_PLANE_1_BIT</code>"
},
{
"vuid": "VUID-VkImageCopy-dstImage-01555",
"text": " If the calling command&#8217;s <code>dstImage</code> has a <a href=\"#VkFormat\">VkFormat</a> with &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,three planes&amp;amp;gt;&amp;amp;gt; then the <code>dstSubresource</code> <code>aspectMask</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_ASPECT_PLANE_0_BIT</code>, <code>VK_IMAGE_ASPECT_PLANE_1_BIT</code>, or <code>VK_IMAGE_ASPECT_PLANE_2_BIT</code>"
},
{
"vuid": "VUID-VkImageCopy-srcImage-01556",
"text": " If the calling command&#8217;s <code>srcImage</code> has a &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar image format&amp;amp;gt;&amp;amp;gt; and the <code>dstImage</code> does not have a multi-planar image format, the <code>dstSubresource</code> <code>aspectMask</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_ASPECT_COLOR_BIT</code>"
},
{
"vuid": "VUID-VkImageCopy-dstImage-01557",
"text": " If the calling command&#8217;s <code>dstImage</code> has a &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar image format&amp;amp;gt;&amp;amp;gt; and the <code>srcImage</code> does not have a multi-planar image format, the <code>srcSubresource</code> <code>aspectMask</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_ASPECT_COLOR_BIT</code>"
},
{
"vuid": "VUID-VkImageCopy-srcImage-01727",
"text": " If the calling command&#8217;s <code>srcImage</code> is a compressed image, or a <em>single-plane</em>, &#8220;<code>_422</code>&#8221; image format, all members of <code>srcOffset</code> <strong class=\"purple\">must</strong> be a multiple of the corresponding dimensions of the compressed texel block"
},
{
"vuid": "VUID-VkImageCopy-srcImage-01728",
"text": " If the calling command&#8217;s <code>srcImage</code> is a compressed image, or a <em>single-plane</em>, &#8220;<code>_422</code>&#8221; image format, <code>extent.width</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block width or <span class=\"eq\">(<code>extent.width</code> &#43; <code>srcOffset.x</code>)</span> <strong class=\"purple\">must</strong> equal the source image subresource width"
},
{
"vuid": "VUID-VkImageCopy-srcImage-01729",
"text": " If the calling command&#8217;s <code>srcImage</code> is a compressed image, or a <em>single-plane</em>, &#8220;<code>_422</code>&#8221; image format, <code>extent.height</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block height or <span class=\"eq\">(<code>extent.height</code> &#43; <code>srcOffset.y</code>)</span> <strong class=\"purple\">must</strong> equal the source image subresource height"
},
{
"vuid": "VUID-VkImageCopy-srcImage-01730",
"text": " If the calling command&#8217;s <code>srcImage</code> is a compressed image, or a <em>single-plane</em>, &#8220;<code>_422</code>&#8221; image format, <code>extent.depth</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block depth or <span class=\"eq\">(<code>extent.depth</code> &#43; <code>srcOffset.z</code>)</span> <strong class=\"purple\">must</strong> equal the source image subresource depth"
},
{
"vuid": "VUID-VkImageCopy-dstImage-01731",
"text": " If the calling command&#8217;s <code>dstImage</code> is a compressed format image, or a <em>single-plane</em>, &#8220;<code>_422</code>&#8221; image format, all members of <code>dstOffset</code> <strong class=\"purple\">must</strong> be a multiple of the corresponding dimensions of the compressed texel block"
},
{
"vuid": "VUID-VkImageCopy-dstImage-01732",
"text": " If the calling command&#8217;s <code>dstImage</code> is a compressed format image, or a <em>single-plane</em>, &#8220;<code>_422</code>&#8221; image format, <code>extent.width</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block width or <span class=\"eq\">(<code>extent.width</code> &#43; <code>dstOffset.x</code>)</span> <strong class=\"purple\">must</strong> equal the destination image subresource width"
},
{
"vuid": "VUID-VkImageCopy-dstImage-01733",
"text": " If the calling command&#8217;s <code>dstImage</code> is a compressed format image, or a <em>single-plane</em>, &#8220;<code>_422</code>&#8221; image format, <code>extent.height</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block height or <span class=\"eq\">(<code>extent.height</code> &#43; <code>dstOffset.y</code>)</span> <strong class=\"purple\">must</strong> equal the destination image subresource height"
},
{
"vuid": "VUID-VkImageCopy-dstImage-01734",
"text": " If the calling command&#8217;s <code>dstImage</code> is a compressed format image, or a <em>single-plane</em>, &#8220;<code>_422</code>&#8221; image format, <code>extent.depth</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block depth or <span class=\"eq\">(<code>extent.depth</code> &#43; <code>dstOffset.z</code>)</span> <strong class=\"purple\">must</strong> equal the destination image subresource depth"
}
],
"!(VK_VERSION_1_1,VK_KHR_maintenance1)": [
{
"vuid": "VUID-VkImageCopy-layerCount-00138",
"text": " The <code>layerCount</code> member of <code>srcSubresource</code> and <code>dstSubresource</code> <strong class=\"purple\">must</strong> match"
},
{
"vuid": "VUID-VkImageCopy-srcImage-00139",
"text": " If either of the calling command&#8217;s <code>srcImage</code> or <code>dstImage</code> parameters are of <a href=\"#VkImageType\">VkImageType</a> <code>VK_IMAGE_TYPE_3D</code>, the <code>baseArrayLayer</code> and <code>layerCount</code> members of both <code>srcSubresource</code> and <code>dstSubresource</code> <strong class=\"purple\">must</strong> be <code>0</code> and <code>1</code>, respectively"
},
{
"vuid": "VUID-VkImageCopy-srcImage-01789",
"text": " If the calling command&#8217;s <code>srcImage</code> or <code>dstImage</code> is of type <code>VK_IMAGE_TYPE_2D</code>, then <code>extent.depth</code> <strong class=\"purple\">must</strong> be <code>1</code>."
}
],
"(VK_VERSION_1_1,VK_KHR_maintenance1)": [
{
"vuid": "VUID-VkImageCopy-extent-00140",
"text": " The number of slices of the <code>extent</code> (for 3D) or layers of the <code>srcSubresource</code> (for non-3D) <strong class=\"purple\">must</strong> match the number of slices of the <code>extent</code> (for 3D) or layers of the <code>dstSubresource</code> (for non-3D)"
},
{
"vuid": "VUID-VkImageCopy-srcImage-00141",
"text": " If either of the calling command&#8217;s <code>srcImage</code> or <code>dstImage</code> parameters are of <a href=\"#VkImageType\">VkImageType</a> <code>VK_IMAGE_TYPE_3D</code>, the <code>baseArrayLayer</code> and <code>layerCount</code> members of the corresponding subresource <strong class=\"purple\">must</strong> be <code>0</code> and <code>1</code>, respectively"
},
{
"vuid": "VUID-VkImageCopy-srcImage-01790",
"text": " If both <code>srcImage</code> and <code>dstImage</code> are of type <code>VK_IMAGE_TYPE_2D</code> then then <code>extent.depth</code> <strong class=\"purple\">must</strong> be <code>1</code>."
},
{
"vuid": "VUID-VkImageCopy-srcImage-01791",
"text": " If the calling command&#8217;s <code>srcImage</code> is of type <code>VK_IMAGE_TYPE_2D</code>, and the <code>dstImage</code> is of type <code>VK_IMAGE_TYPE_3D</code>, then <code>extent.depth</code> <strong class=\"purple\">must</strong> equal to the <code>layerCount</code> member of <code>srcSubresource</code>."
},
{
"vuid": "VUID-VkImageCopy-dstImage-01792",
"text": " If the calling command&#8217;s <code>dstImage</code> is of type <code>VK_IMAGE_TYPE_2D</code>, and the <code>srcImage</code> is of type <code>VK_IMAGE_TYPE_3D</code>, then <code>extent.depth</code> <strong class=\"purple\">must</strong> equal to the <code>layerCount</code> member of <code>dstSubresource</code>."
}
],
"core": [
{
"vuid": "VUID-VkImageCopy-aspectMask-00142",
"text": " The <code>aspectMask</code> member of <code>srcSubresource</code> <strong class=\"purple\">must</strong> specify aspects present in the calling command&#8217;s <code>srcImage</code>"
},
{
"vuid": "VUID-VkImageCopy-aspectMask-00143",
"text": " The <code>aspectMask</code> member of <code>dstSubresource</code> <strong class=\"purple\">must</strong> specify aspects present in the calling command&#8217;s <code>dstImage</code>"
},
{
"vuid": "VUID-VkImageCopy-srcOffset-00144",
"text": " <code>srcOffset.x</code> and <span class=\"eq\">(<code>extent.width</code> &#43; <code>srcOffset.x</code>)</span> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the source image subresource width"
},
{
"vuid": "VUID-VkImageCopy-srcOffset-00145",
"text": " <code>srcOffset.y</code> and <span class=\"eq\">(<code>extent.height</code> &#43; <code>srcOffset.y</code>)</span> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the source image subresource height"
},
{
"vuid": "VUID-VkImageCopy-srcImage-00146",
"text": " If the calling command&#8217;s <code>srcImage</code> is of type <code>VK_IMAGE_TYPE_1D</code>, then <code>srcOffset.y</code> <strong class=\"purple\">must</strong> be <code>0</code> and <code>extent.height</code> <strong class=\"purple\">must</strong> be <code>1</code>."
},
{
"vuid": "VUID-VkImageCopy-srcOffset-00147",
"text": " <code>srcOffset.z</code> and <span class=\"eq\">(<code>extent.depth</code> &#43; <code>srcOffset.z</code>)</span> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the source image subresource depth"
},
{
"vuid": "VUID-VkImageCopy-srcImage-01785",
"text": " If the calling command&#8217;s <code>srcImage</code> is of type <code>VK_IMAGE_TYPE_1D</code>, then <code>srcOffset.z</code> <strong class=\"purple\">must</strong> be <code>0</code> and <code>extent.depth</code> <strong class=\"purple\">must</strong> be <code>1</code>."
},
{
"vuid": "VUID-VkImageCopy-dstImage-01786",
"text": " If the calling command&#8217;s <code>dstImage</code> is of type <code>VK_IMAGE_TYPE_1D</code>, then <code>dstOffset.z</code> <strong class=\"purple\">must</strong> be <code>0</code> and <code>extent.depth</code> <strong class=\"purple\">must</strong> be <code>1</code>."
},
{
"vuid": "VUID-VkImageCopy-srcImage-01787",
"text": " If the calling command&#8217;s <code>srcImage</code> is of type <code>VK_IMAGE_TYPE_2D</code>, then <code>srcOffset.z</code> <strong class=\"purple\">must</strong> be <code>0</code>."
},
{
"vuid": "VUID-VkImageCopy-dstImage-01788",
"text": " If the calling command&#8217;s <code>dstImage</code> is of type <code>VK_IMAGE_TYPE_2D</code>, then <code>dstOffset.z</code> <strong class=\"purple\">must</strong> be <code>0</code>."
},
{
"vuid": "VUID-VkImageCopy-dstOffset-00150",
"text": " <code>dstOffset.x</code> and <span class=\"eq\">(<code>extent.width</code> &#43; <code>dstOffset.x</code>)</span> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the destination image subresource width"
},
{
"vuid": "VUID-VkImageCopy-dstOffset-00151",
"text": " <code>dstOffset.y</code> and <span class=\"eq\">(<code>extent.height</code> &#43; <code>dstOffset.y</code>)</span> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the destination image subresource height"
},
{
"vuid": "VUID-VkImageCopy-dstImage-00152",
"text": " If the calling command&#8217;s <code>dstImage</code> is of type <code>VK_IMAGE_TYPE_1D</code>, then <code>dstOffset.y</code> <strong class=\"purple\">must</strong> be <code>0</code> and <code>extent.height</code> <strong class=\"purple\">must</strong> be <code>1</code>."
},
{
"vuid": "VUID-VkImageCopy-dstOffset-00153",
"text": " <code>dstOffset.z</code> and <span class=\"eq\">(<code>extent.depth</code> &#43; <code>dstOffset.z</code>)</span> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the destination image subresource depth"
},
{
"vuid": "VUID-VkImageCopy-srcSubresource-parameter",
"text": " <code>srcSubresource</code> <strong class=\"purple\">must</strong> be a valid <code>VkImageSubresourceLayers</code> structure"
},
{
"vuid": "VUID-VkImageCopy-dstSubresource-parameter",
"text": " <code>dstSubresource</code> <strong class=\"purple\">must</strong> be a valid <code>VkImageSubresourceLayers</code> structure"
}
]
},
"VkImageSubresourceLayers": {
"core": [
{
"vuid": "VUID-VkImageSubresourceLayers-aspectMask-00167",
"text": " If <code>aspectMask</code> contains <code>VK_IMAGE_ASPECT_COLOR_BIT</code>, it <strong class=\"purple\">must</strong> not contain either of <code>VK_IMAGE_ASPECT_DEPTH_BIT</code> or <code>VK_IMAGE_ASPECT_STENCIL_BIT</code>"
},
{
"vuid": "VUID-VkImageSubresourceLayers-aspectMask-00168",
"text": " <code>aspectMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_ASPECT_METADATA_BIT</code>"
},
{
"vuid": "VUID-VkImageSubresourceLayers-layerCount-01700",
"text": " <code>layerCount</code> <strong class=\"purple\">must</strong> be greater than 0"
},
{
"vuid": "VUID-VkImageSubresourceLayers-aspectMask-parameter",
"text": " <code>aspectMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageAspectFlagBits\">VkImageAspectFlagBits</a> values"
},
{
"vuid": "VUID-VkImageSubresourceLayers-aspectMask-requiredbitmask",
"text": " <code>aspectMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
}
]
},
"vkCmdCopyBufferToImage": {
"core": [
{
"vuid": "VUID-vkCmdCopyBufferToImage-pRegions-00171",
"text": " <code>srcBuffer</code> <strong class=\"purple\">must</strong> be large enough to contain all buffer locations that are accessed according to &amp;amp;lt;&amp;amp;lt;copies-buffers-images-addressing,Buffer and Image Addressing&amp;amp;gt;&amp;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> &#43; <code>imageSubresource.layerCount</code></span> of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than or equal to the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>dstImage</code> was created"
},
{
"vuid": "VUID-vkCmdCopyBufferToImage-imageOffset-01793",
"text": " The <code>imageOffset</code> and <code>imageExtent</code> members of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> respect the image transfer granularity requirements of <code>commandBuffer</code>&#8217;s command pool&#8217;s queue family, as described in <a href=\"#VkQueueFamilyProperties\">VkQueueFamilyProperties</a>"
},
{
"vuid": "VUID-vkCmdCopyBufferToImage-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdCopyBufferToImage-srcBuffer-parameter",
"text": " <code>srcBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdCopyBufferToImage-dstImage-parameter",
"text": " <code>dstImage</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
},
{
"vuid": "VUID-vkCmdCopyBufferToImage-dstImageLayout-parameter",
"text": " <code>dstImageLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
},
{
"vuid": "VUID-vkCmdCopyBufferToImage-pRegions-parameter",
"text": " <code>pRegions</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>regionCount</code> valid <code>VkBufferImageCopy</code> structures"
},
{
"vuid": "VUID-vkCmdCopyBufferToImage-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdCopyBufferToImage-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support transfer, graphics, or compute operations"
},
{
"vuid": "VUID-vkCmdCopyBufferToImage-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
},
{
"vuid": "VUID-vkCmdCopyBufferToImage-regionCount-arraylength",
"text": " <code>regionCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkCmdCopyBufferToImage-commonparent",
"text": " Each of <code>commandBuffer</code>, <code>dstImage</code>, and <code>srcBuffer</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
],
"!(VK_ANDROID_external_memory_android_hardware_buffer)+(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> or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> for linearly or optimally tiled images, respectively"
}
],
"(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-vkCmdCopyBufferToImage-dstImage-01940",
"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 <a href=\"#VkAndroidHardwareBufferFormatPropertiesANDROID\">VkAndroidHardwareBufferFormatPropertiesANDROID</a>::<code>formatFeatures</code> returned by <a href=\"#vkGetAndroidHardwareBufferPropertiesANDROID\">vkGetAndroidHardwareBufferPropertiesANDROID</a> for external format images, or by <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>linearTilingFeatures</code> or <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>optimalTilingFeatures</code> returned by <a href=\"#vkGetPhysicalDeviceFormatProperties\">vkGetPhysicalDeviceFormatProperties</a> for non-external format linearly or optimally tiled images, respectively"
}
],
"!(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;amp;lt;&amp;amp;lt;copies-buffers-images-addressing,Buffer and Image Addressing&amp;amp;gt;&amp;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> &#43; <code>imageSubresource.layerCount</code></span> of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than or equal to the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>srcImage</code> was created"
},
{
"vuid": "VUID-vkCmdCopyImageToBuffer-imageOffset-01794",
"text": " The <code>imageOffset</code> and <code>imageExtent</code> members of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> respect the image transfer granularity requirements of <code>commandBuffer</code>&#8217;s command pool&#8217;s queue family, as described in <a href=\"#VkQueueFamilyProperties\">VkQueueFamilyProperties</a>"
},
{
"vuid": "VUID-vkCmdCopyImageToBuffer-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdCopyImageToBuffer-srcImage-parameter",
"text": " <code>srcImage</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
},
{
"vuid": "VUID-vkCmdCopyImageToBuffer-srcImageLayout-parameter",
"text": " <code>srcImageLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
},
{
"vuid": "VUID-vkCmdCopyImageToBuffer-dstBuffer-parameter",
"text": " <code>dstBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdCopyImageToBuffer-pRegions-parameter",
"text": " <code>pRegions</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>regionCount</code> valid <code>VkBufferImageCopy</code> structures"
},
{
"vuid": "VUID-vkCmdCopyImageToBuffer-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdCopyImageToBuffer-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support transfer, graphics, or compute operations"
},
{
"vuid": "VUID-vkCmdCopyImageToBuffer-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
},
{
"vuid": "VUID-vkCmdCopyImageToBuffer-regionCount-arraylength",
"text": " <code>regionCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkCmdCopyImageToBuffer-commonparent",
"text": " Each of <code>commandBuffer</code>, <code>dstBuffer</code>, and <code>srcImage</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
],
"!(VK_ANDROID_external_memory_android_hardware_buffer)+(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> or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> for linearly or optimally tiled images, respectively"
}
],
"(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-vkCmdCopyImageToBuffer-srcImage-01941",
"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 <a href=\"#VkAndroidHardwareBufferFormatPropertiesANDROID\">VkAndroidHardwareBufferFormatPropertiesANDROID</a>::<code>formatFeatures</code> returned by <a href=\"#vkGetAndroidHardwareBufferPropertiesANDROID\">vkGetAndroidHardwareBufferPropertiesANDROID</a> for external format images, or by <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>linearTilingFeatures</code> or <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>optimalTilingFeatures</code> returned by <a href=\"#vkGetPhysicalDeviceFormatProperties\">vkGetPhysicalDeviceFormatProperties</a> for non-external format linearly or optimally tiled images, respectively"
}
],
"!(VK_KHR_shared_presentable_image)": [
{
"vuid": "VUID-vkCmdCopyImageToBuffer-srcImageLayout-00190",
"text": " <code>srcImageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_GENERAL</code>"
}
],
"(VK_KHR_shared_presentable_image)": [
{
"vuid": "VUID-vkCmdCopyImageToBuffer-srcImageLayout-01397",
"text": " <code>srcImageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR</code>, <code>VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_GENERAL</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdCopyImageToBuffer-commandBuffer-01831",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, then <code>srcImage</code> <strong class=\"purple\">must</strong> not be a protected image"
},
{
"vuid": "VUID-vkCmdCopyImageToBuffer-commandBuffer-01832",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, then <code>dstBuffer</code> <strong class=\"purple\">must</strong> not be a protected buffer"
},
{
"vuid": "VUID-vkCmdCopyImageToBuffer-commandBuffer-01833",
"text": " If <code>commandBuffer</code> is a protected command buffer, then <code>dstBuffer</code> <strong class=\"purple\">must</strong> not be an unprotected buffer"
}
]
},
"VkBufferImageCopy": {
"!(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-VkBufferImageCopy-bufferOffset-00193",
"text": " If the calling command&#8217;s <code>VkImage</code> parameter&#8217;s format is not a depth/stencil format, then <code>bufferOffset</code> <strong class=\"purple\">must</strong> be a multiple of the format&#8217;s element size"
},
{
"vuid": "VUID-VkBufferImageCopy-bufferRowLength-00203",
"text": " If the calling command&#8217;s <code>VkImage</code> parameter is a compressed image, <code>bufferRowLength</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block width"
},
{
"vuid": "VUID-VkBufferImageCopy-bufferImageHeight-00204",
"text": " If the calling command&#8217;s <code>VkImage</code> parameter is a compressed image, <code>bufferImageHeight</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block height"
},
{
"vuid": "VUID-VkBufferImageCopy-imageOffset-00205",
"text": " If the calling command&#8217;s <code>VkImage</code> parameter is a compressed image, all members of <code>imageOffset</code> <strong class=\"purple\">must</strong> be a multiple of the corresponding dimensions of the compressed texel block"
},
{
"vuid": "VUID-VkBufferImageCopy-bufferOffset-00206",
"text": " If the calling command&#8217;s <code>VkImage</code> parameter is a compressed image, <code>bufferOffset</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block size in bytes"
},
{
"vuid": "VUID-VkBufferImageCopy-imageExtent-00207",
"text": " If the calling command&#8217;s <code>VkImage</code> parameter is a compressed image, <code>imageExtent.width</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block width or <span class=\"eq\">(<code>imageExtent.width</code> &#43; <code>imageOffset.x</code>)</span> <strong class=\"purple\">must</strong> equal the image subresource width"
},
{
"vuid": "VUID-VkBufferImageCopy-imageExtent-00208",
"text": " If the calling command&#8217;s <code>VkImage</code> parameter is a compressed image, <code>imageExtent.height</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block height or <span class=\"eq\">(<code>imageExtent.height</code> &#43; <code>imageOffset.y</code>)</span> <strong class=\"purple\">must</strong> equal the image subresource height"
},
{
"vuid": "VUID-VkBufferImageCopy-imageExtent-00209",
"text": " If the calling command&#8217;s <code>VkImage</code> parameter is a compressed image, <code>imageExtent.depth</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block depth or <span class=\"eq\">(<code>imageExtent.depth</code> &#43; <code>imageOffset.z</code>)</span> <strong class=\"purple\">must</strong> equal the image subresource depth"
}
],
"(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-VkBufferImageCopy-bufferOffset-01558",
"text": " If the calling command&#8217;s <code>VkImage</code> parameter&#8217;s format is not a depth/stencil format or a &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar format&amp;amp;gt;&amp;amp;gt;, then <code>bufferOffset</code> <strong class=\"purple\">must</strong> be a multiple of the format&#8217;s element size"
},
{
"vuid": "VUID-VkBufferImageCopy-bufferOffset-01559",
"text": " If the calling command&#8217;s <code>VkImage</code> parameter&#8217;s format is a &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar format&amp;amp;gt;&amp;amp;gt;, then <code>bufferOffset</code> <strong class=\"purple\">must</strong> be a multiple of the element size of the compatible format for the format and the <code>aspectMask</code> of the <code>imageSubresource</code> as defined in &amp;amp;lt;&amp;amp;lt;features-formats-compatible-planes&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-VkBufferImageCopy-None-01735",
"text": " If the calling command&#8217;s <code>VkImage</code> parameter is a compressed image, or a <em>single-plane</em>, &#8220;<code>_422</code>&#8221; image format, <code>bufferRowLength</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block width"
},
{
"vuid": "VUID-VkBufferImageCopy-None-01736",
"text": " If the calling command&#8217;s <code>VkImage</code> parameter is a compressed image, or a <em>single-plane</em>, &#8220;<code>_422</code>&#8221; image format, <code>bufferImageHeight</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block height"
},
{
"vuid": "VUID-VkBufferImageCopy-None-01737",
"text": " If the calling command&#8217;s <code>VkImage</code> parameter is a compressed image, or a <em>single-plane</em>, &#8220;<code>_422</code>&#8221; image format, all members of <code>imageOffset</code> <strong class=\"purple\">must</strong> be a multiple of the corresponding dimensions of the compressed texel block"
},
{
"vuid": "VUID-VkBufferImageCopy-None-01738",
"text": " If the calling command&#8217;s <code>VkImage</code> parameter is a compressed image, or a <em>single-plane</em>, &#8220;<code>_422</code>&#8221; image format, <code>bufferOffset</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block size in bytes"
},
{
"vuid": "VUID-VkBufferImageCopy-None-01739",
"text": " If the calling command&#8217;s <code>VkImage</code> parameter is a compressed image, or a <em>single-plane</em>, &#8220;<code>_422</code>&#8221; image format, <code>imageExtent.width</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block width or <span class=\"eq\">(<code>imageExtent.width</code> &#43; <code>imageOffset.x</code>)</span> <strong class=\"purple\">must</strong> equal the image subresource width"
},
{
"vuid": "VUID-VkBufferImageCopy-None-01740",
"text": " If the calling command&#8217;s <code>VkImage</code> parameter is a compressed image, or a <em>single-plane</em>, &#8220;<code>_422</code>&#8221; image format, <code>imageExtent.height</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block height or <span class=\"eq\">(<code>imageExtent.height</code> &#43; <code>imageOffset.y</code>)</span> <strong class=\"purple\">must</strong> equal the image subresource height"
},
{
"vuid": "VUID-VkBufferImageCopy-None-01741",
"text": " If the calling command&#8217;s <code>VkImage</code> parameter is a compressed image, or a <em>single-plane</em>, &#8220;<code>_422</code>&#8221; image format, <code>imageExtent.depth</code> <strong class=\"purple\">must</strong> be a multiple of the compressed texel block depth or <span class=\"eq\">(<code>imageExtent.depth</code> &#43; <code>imageOffset.z</code>)</span> <strong class=\"purple\">must</strong> equal the image subresource depth"
},
{
"vuid": "VUID-VkBufferImageCopy-aspectMask-01560",
"text": " If the calling command&#8217;s <code>VkImage</code> parameter&#8217;s format is a &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion,multi-planar format&amp;amp;gt;&amp;amp;gt;, then the <code>aspectMask</code> member of <code>imageSubresource</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_ASPECT_PLANE_0_BIT</code>, <code>VK_IMAGE_ASPECT_PLANE_1_BIT</code>, or <code>VK_IMAGE_ASPECT_PLANE_2_BIT</code> (with <code>VK_IMAGE_ASPECT_PLANE_2_BIT</code> valid only for image formats with three planes)"
}
],
"core": [
{
"vuid": "VUID-VkBufferImageCopy-bufferOffset-00194",
"text": " <code>bufferOffset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-VkBufferImageCopy-bufferRowLength-00195",
"text": " <code>bufferRowLength</code> <strong class=\"purple\">must</strong> be <code>0</code>, or greater than or equal to the <code>width</code> member of <code>imageExtent</code>"
},
{
"vuid": "VUID-VkBufferImageCopy-bufferImageHeight-00196",
"text": " <code>bufferImageHeight</code> <strong class=\"purple\">must</strong> be <code>0</code>, or greater than or equal to the <code>height</code> member of <code>imageExtent</code>"
},
{
"vuid": "VUID-VkBufferImageCopy-imageOffset-00197",
"text": " <code>imageOffset.x</code> and <span class=\"eq\">(<code>imageExtent.width</code> &#43; <code>imageOffset.x</code>)</span> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the image subresource width"
},
{
"vuid": "VUID-VkBufferImageCopy-imageOffset-00198",
"text": " <code>imageOffset.y</code> and <span class=\"eq\">(imageExtent.height &#43; <code>imageOffset.y</code>)</span> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the image subresource height"
},
{
"vuid": "VUID-VkBufferImageCopy-srcImage-00199",
"text": " If the calling command&#8217;s <code>srcImage</code> (<a href=\"#vkCmdCopyImageToBuffer\">vkCmdCopyImageToBuffer</a>) or <code>dstImage</code> (<a href=\"#vkCmdCopyBufferToImage\">vkCmdCopyBufferToImage</a>) is of type <code>VK_IMAGE_TYPE_1D</code>, then <code>imageOffset.y</code> <strong class=\"purple\">must</strong> be <code>0</code> and <code>imageExtent.height</code> <strong class=\"purple\">must</strong> be <code>1</code>."
},
{
"vuid": "VUID-VkBufferImageCopy-imageOffset-00200",
"text": " <code>imageOffset.z</code> and <span class=\"eq\">(imageExtent.depth &#43; <code>imageOffset.z</code>)</span> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the image subresource depth"
},
{
"vuid": "VUID-VkBufferImageCopy-srcImage-00201",
"text": " If the calling command&#8217;s <code>srcImage</code> (<a href=\"#vkCmdCopyImageToBuffer\">vkCmdCopyImageToBuffer</a>) or <code>dstImage</code> (<a href=\"#vkCmdCopyBufferToImage\">vkCmdCopyBufferToImage</a>) is of type <code>VK_IMAGE_TYPE_1D</code> or <code>VK_IMAGE_TYPE_2D</code>, then <code>imageOffset.z</code> <strong class=\"purple\">must</strong> be <code>0</code> and <code>imageExtent.depth</code> <strong class=\"purple\">must</strong> be <code>1</code>"
},
{
"vuid": "VUID-VkBufferImageCopy-aspectMask-00211",
"text": " The <code>aspectMask</code> member of <code>imageSubresource</code> <strong class=\"purple\">must</strong> specify aspects present in the calling command&#8217;s <code>VkImage</code> parameter"
},
{
"vuid": "VUID-VkBufferImageCopy-aspectMask-00212",
"text": " The <code>aspectMask</code> member of <code>imageSubresource</code> <strong class=\"purple\">must</strong> only have a single bit set"
},
{
"vuid": "VUID-VkBufferImageCopy-baseArrayLayer-00213",
"text": " If the calling command&#8217;s <code>VkImage</code> parameter is of <a href=\"#VkImageType\">VkImageType</a> <code>VK_IMAGE_TYPE_3D</code>, the <code>baseArrayLayer</code> and <code>layerCount</code> members of <code>imageSubresource</code> <strong class=\"purple\">must</strong> be <code>0</code> and <code>1</code>, respectively"
},
{
"vuid": "VUID-VkBufferImageCopy-None-00214",
"text": " When copying to the depth aspect of an image subresource, the data in the source buffer <strong class=\"purple\">must</strong> be in the range <span class=\"eq\">[0,1]</span>"
},
{
"vuid": "VUID-VkBufferImageCopy-imageSubresource-parameter",
"text": " <code>imageSubresource</code> <strong class=\"purple\">must</strong> be a valid <code>VkImageSubresourceLayers</code> structure"
}
]
},
"vkCmdBlitImage": {
"core": [
{
"vuid": "VUID-vkCmdBlitImage-pRegions-00215",
"text": " The source region specified by each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be a region that is contained within <code>srcImage</code>"
},
{
"vuid": "VUID-vkCmdBlitImage-pRegions-00216",
"text": " The destination region specified by each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be a region that is contained within <code>dstImage</code>"
},
{
"vuid": "VUID-vkCmdBlitImage-pRegions-00217",
"text": " The union of all destination regions, specified by the elements of <code>pRegions</code>, <strong class=\"purple\">must</strong> not overlap in memory with any texel that <strong class=\"purple\">may</strong> be sampled during the blit operation"
},
{
"vuid": "VUID-vkCmdBlitImage-srcImage-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-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-srcSubresource-01705",
"text": " The <code>srcSubresource.mipLevel</code> member of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>srcImage</code> was created"
},
{
"vuid": "VUID-vkCmdBlitImage-dstSubresource-01706",
"text": " The <code>dstSubresource.mipLevel</code> member of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>dstImage</code> was created"
},
{
"vuid": "VUID-vkCmdBlitImage-srcSubresource-01707",
"text": " The <span class=\"eq\"><code>srcSubresource.baseArrayLayer</code> &#43; <code>srcSubresource.layerCount</code></span> of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than or equal to the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>srcImage</code> was created"
},
{
"vuid": "VUID-vkCmdBlitImage-dstSubresource-01708",
"text": " The <span class=\"eq\"><code>dstSubresource.baseArrayLayer</code> &#43; <code>dstSubresource.layerCount</code></span> of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than or equal to the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>dstImage</code> was created"
},
{
"vuid": "VUID-vkCmdBlitImage-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdBlitImage-srcImage-parameter",
"text": " <code>srcImage</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
},
{
"vuid": "VUID-vkCmdBlitImage-srcImageLayout-parameter",
"text": " <code>srcImageLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
},
{
"vuid": "VUID-vkCmdBlitImage-dstImage-parameter",
"text": " <code>dstImage</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
},
{
"vuid": "VUID-vkCmdBlitImage-dstImageLayout-parameter",
"text": " <code>dstImageLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
},
{
"vuid": "VUID-vkCmdBlitImage-pRegions-parameter",
"text": " <code>pRegions</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>regionCount</code> valid <code>VkImageBlit</code> structures"
},
{
"vuid": "VUID-vkCmdBlitImage-filter-parameter",
"text": " <code>filter</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFilter\">VkFilter</a> value"
},
{
"vuid": "VUID-vkCmdBlitImage-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdBlitImage-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdBlitImage-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
},
{
"vuid": "VUID-vkCmdBlitImage-regionCount-arraylength",
"text": " <code>regionCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkCmdBlitImage-commonparent",
"text": " Each of <code>commandBuffer</code>, <code>dstImage</code>, and <code>srcImage</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
],
"!(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"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> or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> for linearly or optimally tiled images, respectively"
},
{
"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> or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> for linearly or optimally tiled images, respectively"
},
{
"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> or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> for linearly or optimally tiled images, respectively"
}
],
"(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-vkCmdBlitImage-srcImage-01942",
"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 <a href=\"#VkAndroidHardwareBufferFormatPropertiesANDROID\">VkAndroidHardwareBufferFormatPropertiesANDROID</a>::<code>formatFeatures</code> returned by <a href=\"#vkGetAndroidHardwareBufferPropertiesANDROID\">vkGetAndroidHardwareBufferPropertiesANDROID</a> for external format images, or by <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>linearTilingFeatures</code> or <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>optimalTilingFeatures</code> returned by <a href=\"#vkGetPhysicalDeviceFormatProperties\">vkGetPhysicalDeviceFormatProperties</a> for non-external format linearly or optimally tiled images, respectively"
},
{
"vuid": "VUID-vkCmdBlitImage-dstImage-01943",
"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 <a href=\"#VkAndroidHardwareBufferFormatPropertiesANDROID\">VkAndroidHardwareBufferFormatPropertiesANDROID</a>::<code>formatFeatures</code> returned by <a href=\"#vkGetAndroidHardwareBufferPropertiesANDROID\">vkGetAndroidHardwareBufferPropertiesANDROID</a> for external format images, or by <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>linearTilingFeatures</code> or <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>optimalTilingFeatures</code> returned by <a href=\"#vkGetPhysicalDeviceFormatProperties\">vkGetPhysicalDeviceFormatProperties</a> for non-external format linearly or optimally tiled images, respectively"
},
{
"vuid": "VUID-vkCmdBlitImage-filter-01944",
"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 <a href=\"#VkAndroidHardwareBufferFormatPropertiesANDROID\">VkAndroidHardwareBufferFormatPropertiesANDROID</a>::<code>formatFeatures</code> returned by <a href=\"#vkGetAndroidHardwareBufferPropertiesANDROID\">vkGetAndroidHardwareBufferPropertiesANDROID</a> for external format images, or by <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>linearTilingFeatures</code> or <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>optimalTilingFeatures</code> returned by <a href=\"#vkGetPhysicalDeviceFormatProperties\">vkGetPhysicalDeviceFormatProperties</a> for non-external format linearly or optimally tiled images, respectively"
}
],
"(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-vkCmdBlitImage-srcImage-01561",
"text": " <code>srcImage</code> <strong class=\"purple\">must</strong> not use a format listed in &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdBlitImage-dstImage-01562",
"text": " <code>dstImage</code> <strong class=\"purple\">must</strong> not use a format listed in &amp;amp;lt;&amp;amp;lt;features-formats-requiring-sampler-ycbcr-conversion&amp;amp;gt;&amp;amp;gt;"
}
],
"!(VK_KHR_shared_presentable_image)": [
{
"vuid": "VUID-vkCmdBlitImage-srcImageLayout-00222",
"text": " <code>srcImageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_GENERAL</code>"
},
{
"vuid": "VUID-vkCmdBlitImage-dstImageLayout-00227",
"text": " <code>dstImageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_GENERAL</code>"
}
],
"(VK_KHR_shared_presentable_image)": [
{
"vuid": "VUID-vkCmdBlitImage-srcImageLayout-01398",
"text": " <code>srcImageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR</code>, <code>VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_GENERAL</code>"
},
{
"vuid": "VUID-vkCmdBlitImage-dstImageLayout-01399",
"text": " <code>dstImageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR</code>, <code>VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_GENERAL</code>"
}
],
"(VK_IMG_filter_cubic)+!(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"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> or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> for linearly or optimally tiled images, respectively"
}
],
"(VK_IMG_filter_cubic)+(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-vkCmdBlitImage-filter-01945",
"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 <a href=\"#VkAndroidHardwareBufferFormatPropertiesANDROID\">VkAndroidHardwareBufferFormatPropertiesANDROID</a>::<code>formatFeatures</code> returned by<a href=\"#vkGetAndroidHardwareBufferPropertiesANDROID\">vkGetAndroidHardwareBufferPropertiesANDROID</a> for external format images, or by <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>linearTilingFeatures</code> or <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>optimalTilingFeatures</code> returned by <a href=\"#vkGetPhysicalDeviceFormatProperties\">vkGetPhysicalDeviceFormatProperties</a> for non-external format linearly or optimally tiled images, respectively"
}
],
"(VK_IMG_filter_cubic)": [
{
"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_2D</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdBlitImage-commandBuffer-01834",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, then <code>srcImage</code> <strong class=\"purple\">must</strong> not be a protected image"
},
{
"vuid": "VUID-vkCmdBlitImage-commandBuffer-01835",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, then <code>dstImage</code> <strong class=\"purple\">must</strong> not be a protected image"
},
{
"vuid": "VUID-vkCmdBlitImage-commandBuffer-01836",
"text": " If <code>commandBuffer</code> is a protected command buffer, then <code>dstImage</code> <strong class=\"purple\">must</strong> not be an unprotected image"
}
]
},
"VkImageBlit": {
"core": [
{
"vuid": "VUID-VkImageBlit-aspectMask-00238",
"text": " The <code>aspectMask</code> member of <code>srcSubresource</code> and <code>dstSubresource</code> <strong class=\"purple\">must</strong> match"
},
{
"vuid": "VUID-VkImageBlit-layerCount-00239",
"text": " The <code>layerCount</code> member of <code>srcSubresource</code> and <code>dstSubresource</code> <strong class=\"purple\">must</strong> match"
},
{
"vuid": "VUID-VkImageBlit-srcImage-00240",
"text": " If either of the calling command&#8217;s <code>srcImage</code> or <code>dstImage</code> parameters are of <a href=\"#VkImageType\">VkImageType</a> <code>VK_IMAGE_TYPE_3D</code>, the <code>baseArrayLayer</code> and <code>layerCount</code> members of both <code>srcSubresource</code> and <code>dstSubresource</code> <strong class=\"purple\">must</strong> be <code>0</code> and <code>1</code>, respectively"
},
{
"vuid": "VUID-VkImageBlit-aspectMask-00241",
"text": " The <code>aspectMask</code> member of <code>srcSubresource</code> <strong class=\"purple\">must</strong> specify aspects present in the calling command&#8217;s <code>srcImage</code>"
},
{
"vuid": "VUID-VkImageBlit-aspectMask-00242",
"text": " The <code>aspectMask</code> member of <code>dstSubresource</code> <strong class=\"purple\">must</strong> specify aspects present in the calling command&#8217;s <code>dstImage</code>"
},
{
"vuid": "VUID-VkImageBlit-srcOffset-00243",
"text": " <code>srcOffset</code>[0].<code>x</code> and <code>srcOffset</code>[1].<code>x</code> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the source image subresource width"
},
{
"vuid": "VUID-VkImageBlit-srcOffset-00244",
"text": " <code>srcOffset</code>[0].<code>y</code> and <code>srcOffset</code>[1].<code>y</code> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the source image subresource height"
},
{
"vuid": "VUID-VkImageBlit-srcImage-00245",
"text": " If the calling command&#8217;s <code>srcImage</code> is of type <code>VK_IMAGE_TYPE_1D</code>, then <code>srcOffset</code>[0].y <strong class=\"purple\">must</strong> be <code>0</code> and <code>srcOffset</code>[1].y <strong class=\"purple\">must</strong> be <code>1</code>."
},
{
"vuid": "VUID-VkImageBlit-srcOffset-00246",
"text": " <code>srcOffset</code>[0].<code>z</code> and <code>srcOffset</code>[1].<code>z</code> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the source image subresource depth"
},
{
"vuid": "VUID-VkImageBlit-srcImage-00247",
"text": " If the calling command&#8217;s <code>srcImage</code> is of type <code>VK_IMAGE_TYPE_1D</code> or <code>VK_IMAGE_TYPE_2D</code>, then <code>srcOffset</code>[0].z <strong class=\"purple\">must</strong> be <code>0</code> and <code>srcOffset</code>[1].z <strong class=\"purple\">must</strong> be <code>1</code>."
},
{
"vuid": "VUID-VkImageBlit-dstOffset-00248",
"text": " <code>dstOffset</code>[0].<code>x</code> and <code>dstOffset</code>[1].<code>x</code> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the destination image subresource width"
},
{
"vuid": "VUID-VkImageBlit-dstOffset-00249",
"text": " <code>dstOffset</code>[0].<code>y</code> and <code>dstOffset</code>[1].<code>y</code> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the destination image subresource height"
},
{
"vuid": "VUID-VkImageBlit-dstImage-00250",
"text": " If the calling command&#8217;s <code>dstImage</code> is of type <code>VK_IMAGE_TYPE_1D</code>, then <code>dstOffset</code>[0].y <strong class=\"purple\">must</strong> be <code>0</code> and <code>dstOffset</code>[1].y <strong class=\"purple\">must</strong> be <code>1</code>."
},
{
"vuid": "VUID-VkImageBlit-dstOffset-00251",
"text": " <code>dstOffset</code>[0].<code>z</code> and <code>dstOffset</code>[1].<code>z</code> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the destination image subresource depth"
},
{
"vuid": "VUID-VkImageBlit-dstImage-00252",
"text": " If the calling command&#8217;s <code>dstImage</code> is of type <code>VK_IMAGE_TYPE_1D</code> or <code>VK_IMAGE_TYPE_2D</code>, then <code>dstOffset</code>[0].z <strong class=\"purple\">must</strong> be <code>0</code> and <code>dstOffset</code>[1].z <strong class=\"purple\">must</strong> be <code>1</code>."
},
{
"vuid": "VUID-VkImageBlit-srcSubresource-parameter",
"text": " <code>srcSubresource</code> <strong class=\"purple\">must</strong> be a valid <code>VkImageSubresourceLayers</code> structure"
},
{
"vuid": "VUID-VkImageBlit-dstSubresource-parameter",
"text": " <code>dstSubresource</code> <strong class=\"purple\">must</strong> be a valid <code>VkImageSubresourceLayers</code> structure"
}
]
},
"vkCmdResolveImage": {
"core": [
{
"vuid": "VUID-vkCmdResolveImage-pRegions-00253",
"text": " The source region specified by each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be a region that is contained within <code>srcImage</code>"
},
{
"vuid": "VUID-vkCmdResolveImage-pRegions-00254",
"text": " The destination region specified by each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be a region that is contained within <code>dstImage</code>"
},
{
"vuid": "VUID-vkCmdResolveImage-pRegions-00255",
"text": " The union of all source regions, and the union of all destination regions, specified by the elements of <code>pRegions</code>, <strong class=\"purple\">must</strong> not overlap in memory"
},
{
"vuid": "VUID-vkCmdResolveImage-srcImage-00256",
"text": " If <code>srcImage</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
},
{
"vuid": "VUID-vkCmdResolveImage-srcImage-00257",
"text": " <code>srcImage</code> <strong class=\"purple\">must</strong> have a sample count equal to any valid sample count value other than <code>VK_SAMPLE_COUNT_1_BIT</code>"
},
{
"vuid": "VUID-vkCmdResolveImage-dstImage-00258",
"text": " If <code>dstImage</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
},
{
"vuid": "VUID-vkCmdResolveImage-dstImage-00259",
"text": " <code>dstImage</code> <strong class=\"purple\">must</strong> have a sample count equal to <code>VK_SAMPLE_COUNT_1_BIT</code>"
},
{
"vuid": "VUID-vkCmdResolveImage-srcImageLayout-00260",
"text": " <code>srcImageLayout</code> <strong class=\"purple\">must</strong> specify the layout of the image subresources of <code>srcImage</code> specified in <code>pRegions</code> at the time this command is executed on a <code>VkDevice</code>"
},
{
"vuid": "VUID-vkCmdResolveImage-dstImageLayout-00262",
"text": " <code>dstImageLayout</code> <strong class=\"purple\">must</strong> specify the layout of the image subresources of <code>dstImage</code> specified in <code>pRegions</code> at the time this command is executed on a <code>VkDevice</code>"
},
{
"vuid": "VUID-vkCmdResolveImage-dstImage-00264",
"text": " If <code>dstImage</code> was created with <code>tiling</code> equal to <code>VK_IMAGE_TILING_LINEAR</code>, <code>dstImage</code> <strong class=\"purple\">must</strong> have been created with a <code>format</code> that supports being a color attachment, as specified by the <code>VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT</code> flag in <code>VkFormatProperties</code>::<code>linearTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code>"
},
{
"vuid": "VUID-vkCmdResolveImage-dstImage-00265",
"text": " If <code>dstImage</code> was created with <code>tiling</code> equal to <code>VK_IMAGE_TILING_OPTIMAL</code>, <code>dstImage</code> <strong class=\"purple\">must</strong> have been created with a <code>format</code> that supports being a color attachment, as specified by the <code>VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT</code> flag in <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code>"
},
{
"vuid": "VUID-vkCmdResolveImage-srcImage-01386",
"text": " <code>srcImage</code> and <code>dstImage</code> <strong class=\"purple\">must</strong> have been created with the same image format"
},
{
"vuid": "VUID-vkCmdResolveImage-srcSubresource-01709",
"text": " The <code>srcSubresource.mipLevel</code> member of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>srcImage</code> was created"
},
{
"vuid": "VUID-vkCmdResolveImage-dstSubresource-01710",
"text": " The <code>dstSubresource.mipLevel</code> member of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>dstImage</code> was created"
},
{
"vuid": "VUID-vkCmdResolveImage-srcSubresource-01711",
"text": " The <span class=\"eq\"><code>srcSubresource.baseArrayLayer</code> &#43; <code>srcSubresource.layerCount</code></span> of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than or equal to the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>srcImage</code> was created"
},
{
"vuid": "VUID-vkCmdResolveImage-dstSubresource-01712",
"text": " The <span class=\"eq\"><code>dstSubresource.baseArrayLayer</code> &#43; <code>dstSubresource.layerCount</code></span> of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than or equal to the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>dstImage</code> was created"
},
{
"vuid": "VUID-vkCmdResolveImage-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdResolveImage-srcImage-parameter",
"text": " <code>srcImage</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
},
{
"vuid": "VUID-vkCmdResolveImage-srcImageLayout-parameter",
"text": " <code>srcImageLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
},
{
"vuid": "VUID-vkCmdResolveImage-dstImage-parameter",
"text": " <code>dstImage</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
},
{
"vuid": "VUID-vkCmdResolveImage-dstImageLayout-parameter",
"text": " <code>dstImageLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
},
{
"vuid": "VUID-vkCmdResolveImage-pRegions-parameter",
"text": " <code>pRegions</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>regionCount</code> valid <code>VkImageResolve</code> structures"
},
{
"vuid": "VUID-vkCmdResolveImage-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdResolveImage-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdResolveImage-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
},
{
"vuid": "VUID-vkCmdResolveImage-regionCount-arraylength",
"text": " <code>regionCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkCmdResolveImage-commonparent",
"text": " Each of <code>commandBuffer</code>, <code>dstImage</code>, and <code>srcImage</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
],
"!(VK_KHR_shared_presentable_image)": [
{
"vuid": "VUID-vkCmdResolveImage-srcImageLayout-00261",
"text": " <code>srcImageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_GENERAL</code>"
},
{
"vuid": "VUID-vkCmdResolveImage-dstImageLayout-00263",
"text": " <code>dstImageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_GENERAL</code>"
}
],
"(VK_KHR_shared_presentable_image)": [
{
"vuid": "VUID-vkCmdResolveImage-srcImageLayout-01400",
"text": " <code>srcImageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR</code>, <code>VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_GENERAL</code>"
},
{
"vuid": "VUID-vkCmdResolveImage-dstImageLayout-01401",
"text": " <code>dstImageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR</code>, <code>VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_GENERAL</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdResolveImage-commandBuffer-01837",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, then <code>srcImage</code> <strong class=\"purple\">must</strong> not be a protected image"
},
{
"vuid": "VUID-vkCmdResolveImage-commandBuffer-01838",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, then <code>dstImage</code> <strong class=\"purple\">must</strong> not be a protected image"
},
{
"vuid": "VUID-vkCmdResolveImage-commandBuffer-01839",
"text": " If <code>commandBuffer</code> is a protected command buffer, then <code>dstImage</code> <strong class=\"purple\">must</strong> not be an unprotected image"
}
]
},
"VkImageResolve": {
"core": [
{
"vuid": "VUID-VkImageResolve-aspectMask-00266",
"text": " The <code>aspectMask</code> member of <code>srcSubresource</code> and <code>dstSubresource</code> <strong class=\"purple\">must</strong> only contain <code>VK_IMAGE_ASPECT_COLOR_BIT</code>"
},
{
"vuid": "VUID-VkImageResolve-layerCount-00267",
"text": " The <code>layerCount</code> member of <code>srcSubresource</code> and <code>dstSubresource</code> <strong class=\"purple\">must</strong> match"
},
{
"vuid": "VUID-VkImageResolve-srcImage-00268",
"text": " If either of the calling command&#8217;s <code>srcImage</code> or <code>dstImage</code> parameters are of <a href=\"#VkImageType\">VkImageType</a> <code>VK_IMAGE_TYPE_3D</code>, the <code>baseArrayLayer</code> and <code>layerCount</code> members of both <code>srcSubresource</code> and <code>dstSubresource</code> <strong class=\"purple\">must</strong> be <code>0</code> and <code>1</code>, respectively"
},
{
"vuid": "VUID-VkImageResolve-srcOffset-00269",
"text": " <code>srcOffset.x</code> and <span class=\"eq\">(<code>extent.width</code> &#43; <code>srcOffset.x</code>)</span> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the source image subresource width"
},
{
"vuid": "VUID-VkImageResolve-srcOffset-00270",
"text": " <code>srcOffset.y</code> and <span class=\"eq\">(<code>extent.height</code> &#43; <code>srcOffset.y</code>)</span> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the source image subresource height"
},
{
"vuid": "VUID-VkImageResolve-srcImage-00271",
"text": " If the calling command&#8217;s <code>srcImage</code> is of type <code>VK_IMAGE_TYPE_1D</code>, then <code>srcOffset.y</code> <strong class=\"purple\">must</strong> be <code>0</code> and <code>extent.height</code> <strong class=\"purple\">must</strong> be <code>1</code>."
},
{
"vuid": "VUID-VkImageResolve-srcOffset-00272",
"text": " <code>srcOffset.z</code> and <span class=\"eq\">(<code>extent.depth</code> &#43; <code>srcOffset.z</code>)</span> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the source image subresource depth"
},
{
"vuid": "VUID-VkImageResolve-srcImage-00273",
"text": " If the calling command&#8217;s <code>srcImage</code> is of type <code>VK_IMAGE_TYPE_1D</code> or <code>VK_IMAGE_TYPE_2D</code>, then <code>srcOffset.z</code> <strong class=\"purple\">must</strong> be <code>0</code> and <code>extent.depth</code> <strong class=\"purple\">must</strong> be <code>1</code>."
},
{
"vuid": "VUID-VkImageResolve-dstOffset-00274",
"text": " <code>dstOffset.x</code> and <span class=\"eq\">(<code>extent.width</code> &#43; <code>dstOffset.x</code>)</span> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the destination image subresource width"
},
{
"vuid": "VUID-VkImageResolve-dstOffset-00275",
"text": " <code>dstOffset.y</code> and <span class=\"eq\">(<code>extent.height</code> &#43; <code>dstOffset.y</code>)</span> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the destination image subresource height"
},
{
"vuid": "VUID-VkImageResolve-dstImage-00276",
"text": " If the calling command&#8217;s <code>dstImage</code> is of type <code>VK_IMAGE_TYPE_1D</code>, then <code>dstOffset.y</code> <strong class=\"purple\">must</strong> be <code>0</code> and <code>extent.height</code> <strong class=\"purple\">must</strong> be <code>1</code>."
},
{
"vuid": "VUID-VkImageResolve-dstOffset-00277",
"text": " <code>dstOffset.z</code> and <span class=\"eq\">(<code>extent.depth</code> &#43; <code>dstOffset.z</code>)</span> <strong class=\"purple\">must</strong> both be greater than or equal to <code>0</code> and less than or equal to the destination image subresource depth"
},
{
"vuid": "VUID-VkImageResolve-dstImage-00278",
"text": " If the calling command&#8217;s <code>dstImage</code> is of type <code>VK_IMAGE_TYPE_1D</code> or <code>VK_IMAGE_TYPE_2D</code>, then <code>dstOffset.z</code> <strong class=\"purple\">must</strong> be <code>0</code> and <code>extent.depth</code> <strong class=\"purple\">must</strong> be <code>1</code>."
},
{
"vuid": "VUID-VkImageResolve-srcSubresource-parameter",
"text": " <code>srcSubresource</code> <strong class=\"purple\">must</strong> be a valid <code>VkImageSubresourceLayers</code> structure"
},
{
"vuid": "VUID-VkImageResolve-dstSubresource-parameter",
"text": " <code>dstSubresource</code> <strong class=\"purple\">must</strong> be a valid <code>VkImageSubresourceLayers</code> structure"
}
]
},
"vkCmdWriteBufferMarkerAMD": {
"(VK_AMD_buffer_marker)": [
{
"vuid": "VUID-vkCmdWriteBufferMarkerAMD-dstOffset-01798",
"text": " <code>dstOffset</code> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>dstBuffer</code> minus <code>4</code>."
},
{
"vuid": "VUID-vkCmdWriteBufferMarkerAMD-dstBuffer-01799",
"text": " <code>dstBuffer</code> <strong class=\"purple\">must</strong> have been created with <code>VK_BUFFER_USAGE_TRANSFER_DST_BIT</code> usage flag"
},
{
"vuid": "VUID-vkCmdWriteBufferMarkerAMD-dstBuffer-01800",
"text": " If <code>dstBuffer</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
},
{
"vuid": "VUID-vkCmdWriteBufferMarkerAMD-dstOffset-01801",
"text": " <code>dstOffset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-vkCmdWriteBufferMarkerAMD-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdWriteBufferMarkerAMD-pipelineStage-parameter",
"text": " <code>pipelineStage</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipelineStageFlagBits\">VkPipelineStageFlagBits</a> value"
},
{
"vuid": "VUID-vkCmdWriteBufferMarkerAMD-dstBuffer-parameter",
"text": " <code>dstBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdWriteBufferMarkerAMD-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdWriteBufferMarkerAMD-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support transfer, graphics, or compute operations"
},
{
"vuid": "VUID-vkCmdWriteBufferMarkerAMD-commonparent",
"text": " Both of <code>commandBuffer</code>, and <code>dstBuffer</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
]
},
"VkPipelineInputAssemblyStateCreateInfo": {
"core": [
{
"vuid": "VUID-VkPipelineInputAssemblyStateCreateInfo-topology-00428",
"text": " If <code>topology</code> is <code>VK_PRIMITIVE_TOPOLOGY_POINT_LIST</code>, <code>VK_PRIMITIVE_TOPOLOGY_LINE_LIST</code>, <code>VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST</code>, <code>VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY</code>, <code>VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY</code> or <code>VK_PRIMITIVE_TOPOLOGY_PATCH_LIST</code>, <code>primitiveRestartEnable</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
},
{
"vuid": "VUID-VkPipelineInputAssemblyStateCreateInfo-topology-00429",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-geometryShader,geometry shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>topology</code> <strong class=\"purple\">must</strong> not be any of <code>VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY</code>, <code>VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY</code>, <code>VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY</code> or <code>VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY</code>"
},
{
"vuid": "VUID-VkPipelineInputAssemblyStateCreateInfo-topology-00430",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-tessellationShader,tessellation shaders&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>topology</code> <strong class=\"purple\">must</strong> not be <code>VK_PRIMITIVE_TOPOLOGY_PATCH_LIST</code>"
},
{
"vuid": "VUID-VkPipelineInputAssemblyStateCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkPipelineInputAssemblyStateCreateInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkPipelineInputAssemblyStateCreateInfo-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkPipelineInputAssemblyStateCreateInfo-topology-parameter",
"text": " <code>topology</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPrimitiveTopology\">VkPrimitiveTopology</a> value"
}
]
},
"vkCmdBindIndexBuffer": {
"core": [
{
"vuid": "VUID-vkCmdBindIndexBuffer-offset-00431",
"text": " <code>offset</code> <strong class=\"purple\">must</strong> be less than the size of <code>buffer</code>"
},
{
"vuid": "VUID-vkCmdBindIndexBuffer-offset-00432",
"text": " The sum of <code>offset</code> and the address of the range of <code>VkDeviceMemory</code> object that is backing <code>buffer</code>, <strong class=\"purple\">must</strong> be a multiple of the type indicated by <code>indexType</code>"
},
{
"vuid": "VUID-vkCmdBindIndexBuffer-buffer-00433",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> have been created with the <code>VK_BUFFER_USAGE_INDEX_BUFFER_BIT</code> flag"
},
{
"vuid": "VUID-vkCmdBindIndexBuffer-buffer-00434",
"text": " If <code>buffer</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
},
{
"vuid": "VUID-vkCmdBindIndexBuffer-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdBindIndexBuffer-buffer-parameter",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdBindIndexBuffer-indexType-parameter",
"text": " <code>indexType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkIndexType\">VkIndexType</a> value"
},
{
"vuid": "VUID-vkCmdBindIndexBuffer-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdBindIndexBuffer-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdBindIndexBuffer-commonparent",
"text": " Both of <code>buffer</code>, and <code>commandBuffer</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
]
},
"vkCmdDraw": {
"core": [
{
"vuid": "VUID-vkCmdDraw-renderPass-00435",
"text": " The current render pass <strong class=\"purple\">must</strong> be &amp;amp;lt;&amp;amp;lt;renderpass-compatibility,compatible&amp;amp;gt;&amp;amp;gt; with the <code>renderPass</code> member of the <code>VkGraphicsPipelineCreateInfo</code> structure specified when creating the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>."
},
{
"vuid": "VUID-vkCmdDraw-subpass-00436",
"text": " The subpass index of the current render pass <strong class=\"purple\">must</strong> be equal to the <code>subpass</code> member of the <code>VkGraphicsPipelineCreateInfo</code> structure specified when creating the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>."
},
{
"vuid": "VUID-vkCmdDraw-None-00437",
"text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, with a <code>VkPipelineLayout</code> that is compatible for set <em>n</em>, with the <code>VkPipelineLayout</code> used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDraw-None-00438",
"text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, a push constant value <strong class=\"purple\">must</strong> have been set for <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, with a <code>VkPipelineLayout</code> that is compatible for push constants, with the <code>VkPipelineLayout</code> used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDraw-None-00439",
"text": " Descriptors in each bound descriptor set, specified via <code>vkCmdBindDescriptorSets</code>, <strong class=\"purple\">must</strong> be valid if they are statically used by the bound <code>VkPipeline</code> object, specified via <code>vkCmdBindPipeline</code>"
},
{
"vuid": "VUID-vkCmdDraw-None-00440",
"text": " All vertex input bindings accessed via vertex input variables declared in the vertex shader entry point&#8217;s interface <strong class=\"purple\">must</strong> have valid buffers bound"
},
{
"vuid": "VUID-vkCmdDraw-None-00441",
"text": " For a given vertex buffer binding, any attribute data fetched <strong class=\"purple\">must</strong> be entirely contained within the corresponding vertex buffer binding, as described in &amp;amp;lt;&amp;amp;lt;fxvertex-input&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDraw-None-00442",
"text": " A valid graphics pipeline <strong class=\"purple\">must</strong> be bound to the current command buffer with <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>"
},
{
"vuid": "VUID-vkCmdDraw-None-00443",
"text": " If the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> requires any dynamic state, that state <strong class=\"purple\">must</strong> have been set on the current command buffer"
},
{
"vuid": "VUID-vkCmdDraw-None-00444",
"text": " Every input attachment used by the current subpass <strong class=\"purple\">must</strong> be bound to the pipeline via a descriptor set"
},
{
"vuid": "VUID-vkCmdDraw-None-00445",
"text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used to sample from any <code>VkImage</code> with a <code>VkImageView</code> of the type <code>VK_IMAGE_VIEW_TYPE_3D</code>, <code>VK_IMAGE_VIEW_TYPE_CUBE</code>, <code>VK_IMAGE_VIEW_TYPE_1D_ARRAY</code>, <code>VK_IMAGE_VIEW_TYPE_2D_ARRAY</code> or <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code>, in any shader stage"
},
{
"vuid": "VUID-vkCmdDraw-None-00446",
"text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used with any of the SPIR-V <code>OpImageSample*</code> or <code>OpImageSparseSample*</code> instructions with <code>ImplicitLod</code>, <code>Dref</code> or <code>Proj</code> in their name, in any shader stage"
},
{
"vuid": "VUID-vkCmdDraw-None-00447",
"text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used with any of the SPIR-V <code>OpImageSample*</code> or <code>OpImageSparseSample*</code> instructions that includes a LOD bias or any offset values, in any shader stage"
},
{
"vuid": "VUID-vkCmdDraw-None-00448",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
},
{
"vuid": "VUID-vkCmdDraw-None-00449",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
},
{
"vuid": "VUID-vkCmdDraw-None-01499",
"text": " Image subresources used as attachments in the current render pass <strong class=\"purple\">must</strong> not be accessed in any way other than as an attachment by this command."
},
{
"vuid": "VUID-vkCmdDraw-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdDraw-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDraw-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdDraw-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
}
],
"!(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"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> or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> for linearly or optimally tiled images, respectively"
}
],
"(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-vkCmdDraw-formatFeatures-01953",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> 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 <a href=\"#VkAndroidHardwareBufferFormatPropertiesANDROID\">VkAndroidHardwareBufferFormatPropertiesANDROID</a>::<code>formatFeatures</code> returned by <a href=\"#vkGetAndroidHardwareBufferPropertiesANDROID\">vkGetAndroidHardwareBufferPropertiesANDROID</a> for external format images, or by <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>linearTilingFeatures</code> or <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>optimalTilingFeatures</code> returned by <a href=\"#vkGetPhysicalDeviceFormatProperties\">vkGetPhysicalDeviceFormatProperties</a> for non-external format linearly or optimally tiled images, respectively"
}
],
"(VK_IMG_filter_cubic)+!(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"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> or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> for linearly or optimally tiled images, respectively"
}
],
"(VK_IMG_filter_cubic)+(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-vkCmdDraw-formatFeatures-01954",
"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 <a href=\"#VkAndroidHardwareBufferFormatPropertiesANDROID\">VkAndroidHardwareBufferFormatPropertiesANDROID</a>::<code>formatFeatures</code> returned by <a href=\"#vkGetAndroidHardwareBufferPropertiesANDROID\">vkGetAndroidHardwareBufferPropertiesANDROID</a> for external format images, or by <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>linearTilingFeatures</code> or <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>optimalTilingFeatures</code> returned by <a href=\"#vkGetPhysicalDeviceFormatProperties\">vkGetPhysicalDeviceFormatProperties</a> for non-external format linearly or optimally tiled images, respectively"
}
],
"(VK_IMG_filter_cubic)": [
{
"vuid": "VUID-vkCmdDraw-None-00452",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_IMG</code> as a result of this command <strong class=\"purple\">must</strong> not have a <a href=\"#VkImageViewType\">VkImageViewType</a> of <code>VK_IMAGE_VIEW_TYPE_3D</code>, <code>VK_IMAGE_VIEW_TYPE_CUBE</code>, or <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-vkCmdDraw-maxMultiviewInstanceIndex-00453",
"text": " If the draw is recorded in a render pass instance with multiview enabled, the maximum instance index <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkPhysicalDeviceMultiviewProperties\">VkPhysicalDeviceMultiviewProperties</a>::<code>maxMultiviewInstanceIndex</code>."
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdDraw-commandBuffer-01850",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, and any pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> reads from or writes to any image or buffer, that image or buffer <strong class=\"purple\">must</strong> not be a protected image or protected buffer."
},
{
"vuid": "VUID-vkCmdDraw-commandBuffer-01851",
"text": " If <code>commandBuffer</code> is a protected command buffer, and any pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> writes to any image or buffer, that image or buffer <strong class=\"purple\">must</strong> not be an unprotected image or unprotected buffer."
},
{
"vuid": "VUID-vkCmdDraw-commandBuffer-01852",
"text": " If <code>commandBuffer</code> is a protected command buffer, and any pipeline stage other than the framebuffer-space pipeline stages in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> reads from or writes to any image or buffer, the image or buffer <strong class=\"purple\">must</strong> not be a protected image or protected buffer."
}
],
"(VK_EXT_sample_locations)": [
{
"vuid": "VUID-vkCmdDraw-sampleLocationsEnable-01512",
"text": " If the bound graphics pipeline was created with <a href=\"#VkPipelineSampleLocationsStateCreateInfoEXT\">VkPipelineSampleLocationsStateCreateInfoEXT</a>::<code>sampleLocationsEnable</code> set to <code>VK_TRUE</code> and the current subpass has a depth/stencil attachment, then that attachment <strong class=\"purple\">must</strong> have been created with the <code>VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT</code> bit set"
}
]
},
"vkCmdDrawIndexed": {
"core": [
{
"vuid": "VUID-vkCmdDrawIndexed-renderPass-00454",
"text": " The current render pass <strong class=\"purple\">must</strong> be &amp;amp;lt;&amp;amp;lt;renderpass-compatibility,compatible&amp;amp;gt;&amp;amp;gt; with the <code>renderPass</code> member of the <code>VkGraphicsPipelineCreateInfo</code> structure specified when creating the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>."
},
{
"vuid": "VUID-vkCmdDrawIndexed-subpass-00455",
"text": " The subpass index of the current render pass <strong class=\"purple\">must</strong> be equal to the <code>subpass</code> member of the <code>VkGraphicsPipelineCreateInfo</code> structure specified when creating the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>."
},
{
"vuid": "VUID-vkCmdDrawIndexed-None-00456",
"text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, with a <code>VkPipelineLayout</code> that is compatible for set <em>n</em>, with the <code>VkPipelineLayout</code> used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDrawIndexed-None-00457",
"text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, a push constant value <strong class=\"purple\">must</strong> have been set for <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, with a <code>VkPipelineLayout</code> that is compatible for push constants, with the <code>VkPipelineLayout</code> used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDrawIndexed-None-00458",
"text": " Descriptors in each bound descriptor set, specified via <code>vkCmdBindDescriptorSets</code>, <strong class=\"purple\">must</strong> be valid if they are statically used by the bound <code>VkPipeline</code> object, specified via <code>vkCmdBindPipeline</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexed-None-00459",
"text": " All vertex input bindings accessed via vertex input variables declared in the vertex shader entry point&#8217;s interface <strong class=\"purple\">must</strong> have valid buffers bound"
},
{
"vuid": "VUID-vkCmdDrawIndexed-None-00460",
"text": " For a given vertex buffer binding, any attribute data fetched <strong class=\"purple\">must</strong> be entirely contained within the corresponding vertex buffer binding, as described in &amp;amp;lt;&amp;amp;lt;fxvertex-input&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDrawIndexed-None-00461",
"text": " A valid graphics pipeline <strong class=\"purple\">must</strong> be bound to the current command buffer with <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexed-None-00462",
"text": " If the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> requires any dynamic state, that state <strong class=\"purple\">must</strong> have been set on the current command buffer"
},
{
"vuid": "VUID-vkCmdDrawIndexed-indexSize-00463",
"text": " <span class=\"eq\">(<code>indexSize</code> * (<code>firstIndex</code> &#43; <code>indexCount</code>) &#43; <code>offset</code>)</span> <strong class=\"purple\">must</strong> be less than or equal to the size of the bound index buffer, with indexSize being based on the type specified by <code>indexType</code>, where the index buffer, <code>indexType</code>, and <code>offset</code> are specified via <code>vkCmdBindIndexBuffer</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexed-None-00464",
"text": " Every input attachment used by the current subpass <strong class=\"purple\">must</strong> be bound to the pipeline via a descriptor set"
},
{
"vuid": "VUID-vkCmdDrawIndexed-None-00465",
"text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used to sample from any <code>VkImage</code> with a <code>VkImageView</code> of the type <code>VK_IMAGE_VIEW_TYPE_3D</code>, <code>VK_IMAGE_VIEW_TYPE_CUBE</code>, <code>VK_IMAGE_VIEW_TYPE_1D_ARRAY</code>, <code>VK_IMAGE_VIEW_TYPE_2D_ARRAY</code> or <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code>, in any shader stage"
},
{
"vuid": "VUID-vkCmdDrawIndexed-None-00466",
"text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used with any of the SPIR-V <code>OpImageSample*</code> or <code>OpImageSparseSample*</code> instructions with <code>ImplicitLod</code>, <code>Dref</code> or <code>Proj</code> in their name, in any shader stage"
},
{
"vuid": "VUID-vkCmdDrawIndexed-None-00467",
"text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used with any of the SPIR-V <code>OpImageSample*</code> or <code>OpImageSparseSample*</code> instructions that includes a LOD bias or any offset values, in any shader stage"
},
{
"vuid": "VUID-vkCmdDrawIndexed-None-00468",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
},
{
"vuid": "VUID-vkCmdDrawIndexed-None-00469",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
},
{
"vuid": "VUID-vkCmdDrawIndexed-None-01500",
"text": " Image subresources used as attachments in the current render pass <strong class=\"purple\">must</strong> not be accessed in any way other than as an attachment by this command."
},
{
"vuid": "VUID-vkCmdDrawIndexed-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdDrawIndexed-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDrawIndexed-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdDrawIndexed-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
}
],
"!(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"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> or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> for linearly or optimally tiled images, respectively"
}
],
"(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-vkCmdDrawIndexed-formatFeatures-01955",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> 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 <a href=\"#VkAndroidHardwareBufferFormatPropertiesANDROID\">VkAndroidHardwareBufferFormatPropertiesANDROID</a>::<code>formatFeatures</code> returned by <a href=\"#vkGetAndroidHardwareBufferPropertiesANDROID\">vkGetAndroidHardwareBufferPropertiesANDROID</a> for external format images, or by <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>linearTilingFeatures</code> or <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>optimalTilingFeatures</code> returned by <a href=\"#vkGetPhysicalDeviceFormatProperties\">vkGetPhysicalDeviceFormatProperties</a> for non-external format linearly or optimally tiled images, respectively"
}
],
"(VK_IMG_filter_cubic)+!(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"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> or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> for linearly or optimally tiled images, respectively"
}
],
"(VK_IMG_filter_cubic)+(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-vkCmdDrawIndexed-formatFeatures-01956",
"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 <a href=\"#VkAndroidHardwareBufferFormatPropertiesANDROID\">VkAndroidHardwareBufferFormatPropertiesANDROID</a>::<code>formatFeatures</code> returned by <a href=\"#vkGetAndroidHardwareBufferPropertiesANDROID\">vkGetAndroidHardwareBufferPropertiesANDROID</a> for external format images, or by <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>linearTilingFeatures</code> or <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>optimalTilingFeatures</code> returned by <a href=\"#vkGetPhysicalDeviceFormatProperties\">vkGetPhysicalDeviceFormatProperties</a> for non-external format linearly or optimally tiled images, respectively"
}
],
"(VK_IMG_filter_cubic)": [
{
"vuid": "VUID-vkCmdDrawIndexed-None-00472",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_IMG</code> as a result of this command <strong class=\"purple\">must</strong> not have a <a href=\"#VkImageViewType\">VkImageViewType</a> of <code>VK_IMAGE_VIEW_TYPE_3D</code>, <code>VK_IMAGE_VIEW_TYPE_CUBE</code>, or <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-vkCmdDrawIndexed-maxMultiviewInstanceIndex-00473",
"text": " If the draw is recorded in a render pass instance with multiview enabled, the maximum instance index <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkPhysicalDeviceMultiviewProperties\">VkPhysicalDeviceMultiviewProperties</a>::<code>maxMultiviewInstanceIndex</code>."
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdDrawIndexed-commandBuffer-01853",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, and any pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> reads from or writes to any image or buffer, that image or buffer <strong class=\"purple\">must</strong> not be a protected image or protected buffer."
},
{
"vuid": "VUID-vkCmdDrawIndexed-commandBuffer-01854",
"text": " If <code>commandBuffer</code> is a protected command buffer, and any pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> writes to any image or buffer, that image or buffer <strong class=\"purple\">must</strong> not be an unprotected image or unprotected buffer."
},
{
"vuid": "VUID-vkCmdDrawIndexed-commandBuffer-01855",
"text": " If <code>commandBuffer</code> is a protected command buffer, and any pipeline stage other than the framebuffer-space pipeline stages in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> reads from or writes to any image or buffer, the image or buffer <strong class=\"purple\">must</strong> not be a protected image or protected buffer."
}
],
"(VK_EXT_sample_locations)": [
{
"vuid": "VUID-vkCmdDrawIndexed-sampleLocationsEnable-01513",
"text": " If the bound graphics pipeline was created with <a href=\"#VkPipelineSampleLocationsStateCreateInfoEXT\">VkPipelineSampleLocationsStateCreateInfoEXT</a>::<code>sampleLocationsEnable</code> set to <code>VK_TRUE</code> and the current subpass has a depth/stencil attachment, then that attachment <strong class=\"purple\">must</strong> have been created with the <code>VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT</code> bit set"
}
]
},
"vkCmdDrawIndirect": {
"core": [
{
"vuid": "VUID-vkCmdDrawIndirect-buffer-00474",
"text": " If <code>buffer</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
},
{
"vuid": "VUID-vkCmdDrawIndirect-buffer-01660",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> have been created with the <code>VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT</code> bit set"
},
{
"vuid": "VUID-vkCmdDrawIndirect-offset-00475",
"text": " <code>offset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirect-drawCount-00476",
"text": " If <code>drawCount</code> is greater than <code>1</code>, <code>stride</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code> and <strong class=\"purple\">must</strong> be greater than or equal to <code>sizeof</code>(<code>VkDrawIndirectCommand</code>)"
},
{
"vuid": "VUID-vkCmdDrawIndirect-drawCount-00477",
"text": " If the <a href=\"#features-features-multiDrawIndirect\">multi-draw indirect</a> feature is not enabled, <code>drawCount</code> <strong class=\"purple\">must</strong> be <code>0</code> or <code>1</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirect-firstInstance-00478",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-drawIndirectFirstInstance,drawIndirectFirstInstance&amp;amp;gt;&amp;amp;gt; feature is not enabled, all the <code>firstInstance</code> members of the <code>VkDrawIndirectCommand</code> structures accessed by this command <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirect-renderPass-00479",
"text": " The current render pass <strong class=\"purple\">must</strong> be &amp;amp;lt;&amp;amp;lt;renderpass-compatibility,compatible&amp;amp;gt;&amp;amp;gt; with the <code>renderPass</code> member of the <code>VkGraphicsPipelineCreateInfo</code> structure specified when creating the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>."
},
{
"vuid": "VUID-vkCmdDrawIndirect-subpass-00480",
"text": " The subpass index of the current render pass <strong class=\"purple\">must</strong> be equal to the <code>subpass</code> member of the <code>VkGraphicsPipelineCreateInfo</code> structure specified when creating the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>."
},
{
"vuid": "VUID-vkCmdDrawIndirect-None-00481",
"text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, with a <code>VkPipelineLayout</code> that is compatible for set <em>n</em>, with the <code>VkPipelineLayout</code> used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDrawIndirect-None-00482",
"text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, a push constant value <strong class=\"purple\">must</strong> have been set for <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, with a <code>VkPipelineLayout</code> that is compatible for push constants, with the <code>VkPipelineLayout</code> used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDrawIndirect-None-00483",
"text": " Descriptors in each bound descriptor set, specified via <code>vkCmdBindDescriptorSets</code>, <strong class=\"purple\">must</strong> be valid if they are statically used by the bound <code>VkPipeline</code> object, specified via <code>vkCmdBindPipeline</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirect-None-00484",
"text": " All vertex input bindings accessed via vertex input variables declared in the vertex shader entry point&#8217;s interface <strong class=\"purple\">must</strong> have valid buffers bound"
},
{
"vuid": "VUID-vkCmdDrawIndirect-None-00485",
"text": " A valid graphics pipeline <strong class=\"purple\">must</strong> be bound to the current command buffer with <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirect-None-00486",
"text": " If the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> requires any dynamic state, that state <strong class=\"purple\">must</strong> have been set on the current command buffer"
},
{
"vuid": "VUID-vkCmdDrawIndirect-drawCount-00487",
"text": " If <code>drawCount</code> is equal to <code>1</code>, <span class=\"eq\">(<code>offset</code> &#43; <code>sizeof</code>(<a href=\"#VkDrawIndirectCommand\">VkDrawIndirectCommand</a>))</span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirect-drawCount-00488",
"text": " If <code>drawCount</code> is greater than <code>1</code>, <span class=\"eq\">(<code>stride</code> {times} (<code>drawCount</code> - 1) &#43; <code>offset</code> &#43; <code>sizeof</code>(<a href=\"#VkDrawIndirectCommand\">VkDrawIndirectCommand</a>))</span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirect-drawCount-00489",
"text": " <code>drawCount</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxDrawIndirectCount</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirect-None-00490",
"text": " Every input attachment used by the current subpass <strong class=\"purple\">must</strong> be bound to the pipeline via a descriptor set"
},
{
"vuid": "VUID-vkCmdDrawIndirect-None-00491",
"text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used to sample from any <code>VkImage</code> with a <code>VkImageView</code> of the type <code>VK_IMAGE_VIEW_TYPE_3D</code>, <code>VK_IMAGE_VIEW_TYPE_CUBE</code>, <code>VK_IMAGE_VIEW_TYPE_1D_ARRAY</code>, <code>VK_IMAGE_VIEW_TYPE_2D_ARRAY</code> or <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code>, in any shader stage"
},
{
"vuid": "VUID-vkCmdDrawIndirect-None-00492",
"text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used with any of the SPIR-V <code>OpImageSample*</code> or <code>OpImageSparseSample*</code> instructions with <code>ImplicitLod</code>, <code>Dref</code> or <code>Proj</code> in their name, in any shader stage"
},
{
"vuid": "VUID-vkCmdDrawIndirect-None-00493",
"text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used with any of the SPIR-V <code>OpImageSample*</code> or <code>OpImageSparseSample*</code> instructions that includes a LOD bias or any offset values, in any shader stage"
},
{
"vuid": "VUID-vkCmdDrawIndirect-None-00494",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
},
{
"vuid": "VUID-vkCmdDrawIndirect-None-00495",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
},
{
"vuid": "VUID-vkCmdDrawIndirect-None-01501",
"text": " Image subresources used as attachments in the current render pass <strong class=\"purple\">must</strong> not be accessed in any way other than as an attachment by this command."
},
{
"vuid": "VUID-vkCmdDrawIndirect-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdDrawIndirect-buffer-parameter",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdDrawIndirect-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDrawIndirect-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdDrawIndirect-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
},
{
"vuid": "VUID-vkCmdDrawIndirect-commonparent",
"text": " Both of <code>buffer</code>, and <code>commandBuffer</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
],
"!(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"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> or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> for linearly or optimally tiled images, respectively"
}
],
"(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-vkCmdDrawIndirect-formatFeatures-01957",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> 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 <a href=\"#VkAndroidHardwareBufferFormatPropertiesANDROID\">VkAndroidHardwareBufferFormatPropertiesANDROID</a>::<code>formatFeatures</code> returned by <a href=\"#vkGetAndroidHardwareBufferPropertiesANDROID\">vkGetAndroidHardwareBufferPropertiesANDROID</a> for external format images, or by <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>linearTilingFeatures</code> or <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>optimalTilingFeatures</code> returned by <a href=\"#vkGetPhysicalDeviceFormatProperties\">vkGetPhysicalDeviceFormatProperties</a> for non-external format linearly or optimally tiled images, respectively"
}
],
"(VK_IMG_filter_cubic)+!(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"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> or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> for linearly or optimally tiled images, respectively"
}
],
"(VK_IMG_filter_cubic)+(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-vkCmdDrawIndirect-formatFeatures-01958",
"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 <a href=\"#VkAndroidHardwareBufferFormatPropertiesANDROID\">VkAndroidHardwareBufferFormatPropertiesANDROID</a>::<code>formatFeatures</code> returned by <a href=\"#vkGetAndroidHardwareBufferPropertiesANDROID\">vkGetAndroidHardwareBufferPropertiesANDROID</a> for external format images, or by <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>linearTilingFeatures</code> or <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>optimalTilingFeatures</code> returned by <a href=\"#vkGetPhysicalDeviceFormatProperties\">vkGetPhysicalDeviceFormatProperties</a> for non-external format linearly or optimally tiled images, respectively"
}
],
"(VK_IMG_filter_cubic)": [
{
"vuid": "VUID-vkCmdDrawIndirect-None-00498",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_IMG</code> as a result of this command <strong class=\"purple\">must</strong> not have a <a href=\"#VkImageViewType\">VkImageViewType</a> of <code>VK_IMAGE_VIEW_TYPE_3D</code>, <code>VK_IMAGE_VIEW_TYPE_CUBE</code>, or <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-vkCmdDrawIndirect-maxMultiviewInstanceIndex-00499",
"text": " If the draw is recorded in a render pass instance with multiview enabled, the maximum instance index <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkPhysicalDeviceMultiviewProperties\">VkPhysicalDeviceMultiviewProperties</a>::<code>maxMultiviewInstanceIndex</code>."
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdDrawIndirect-commandBuffer-01856",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, and any pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> reads from or writes to any image or buffer, that image or buffer <strong class=\"purple\">must</strong> not be a protected image or protected buffer."
},
{
"vuid": "VUID-vkCmdDrawIndirect-commandBuffer-01857",
"text": " If <code>commandBuffer</code> is a protected command buffer, and any pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> writes to any image or buffer, that image or buffer <strong class=\"purple\">must</strong> not be an unprotected image or unprotected buffer."
},
{
"vuid": "VUID-vkCmdDrawIndirect-commandBuffer-01858",
"text": " If <code>commandBuffer</code> is a protected command buffer, and any pipeline stage other than the framebuffer-space pipeline stages in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> reads from or writes to any image or buffer, the image or buffer <strong class=\"purple\">must</strong> not be a protected image or protected buffer."
}
],
"(VK_EXT_sample_locations)": [
{
"vuid": "VUID-vkCmdDrawIndirect-sampleLocationsEnable-01514",
"text": " If the bound graphics pipeline was created with <a href=\"#VkPipelineSampleLocationsStateCreateInfoEXT\">VkPipelineSampleLocationsStateCreateInfoEXT</a>::<code>sampleLocationsEnable</code> set to <code>VK_TRUE</code> and the current subpass has a depth/stencil attachment, then that attachment <strong class=\"purple\">must</strong> have been created with the <code>VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT</code> bit set"
}
]
},
"VkDrawIndirectCommand": {
"core": [
{
"vuid": "VUID-VkDrawIndirectCommand-None-00500",
"text": " For a given vertex buffer binding, any attribute data fetched <strong class=\"purple\">must</strong> be entirely contained within the corresponding vertex buffer binding, as described in &amp;amp;lt;&amp;amp;lt;fxvertex-input&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-VkDrawIndirectCommand-firstInstance-00501",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-drawIndirectFirstInstance,drawIndirectFirstInstance&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>firstInstance</code> <strong class=\"purple\">must</strong> be <code>0</code>"
}
]
},
"vkCmdDrawIndirectCountKHR": {
"(VK_KHR_draw_indirect_count)": [
{
"vuid": "VUID-vkCmdDrawIndirectCountKHR-buffer-03104",
"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-vkCmdDrawIndirectCountKHR-buffer-03105",
"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-vkCmdDrawIndirectCountKHR-countBuffer-03106",
"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-vkCmdDrawIndirectCountKHR-countBuffer-03107",
"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-vkCmdDrawIndirectCountKHR-offset-03108",
"text": " <code>offset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountKHR-countBufferOffset-03109",
"text": " <code>countBufferOffset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountKHR-stride-03110",
"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 sizeof(<code>VkDrawIndirectCommand</code>)"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountKHR-maxDrawCount-03111",
"text": " If <code>maxDrawCount</code> is greater than or equal to <code>1</code>, <span class=\"eq\">(<code>stride</code> {times} (<code>maxDrawCount</code> - 1) &#43; <code>offset</code> &#43; sizeof(<code>VkDrawIndirectCommand</code>))</span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountKHR-firstInstance-03112",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-drawIndirectFirstInstance,drawIndirectFirstInstance&amp;amp;gt;&amp;amp;gt; feature is not enabled, all the <code>firstInstance</code> members of the <code>VkDrawIndirectCommand</code> structures accessed by this command <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountKHR-renderPass-03113",
"text": " The current render pass <strong class=\"purple\">must</strong> be &amp;amp;lt;&amp;amp;lt;renderpass-compatibility,compatible&amp;amp;gt;&amp;amp;gt; with the <code>renderPass</code> member of the <code>VkGraphicsPipelineCreateInfo</code> structure specified when creating the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>."
},
{
"vuid": "VUID-vkCmdDrawIndirectCountKHR-subpass-03114",
"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-vkCmdDrawIndirectCountKHR-None-03115",
"text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, with a <code>VkPipelineLayout</code> that is compatible for set <em>n</em>, with the <code>VkPipelineLayout</code> used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountKHR-None-03116",
"text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, a push constant value <strong class=\"purple\">must</strong> have been set for <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, with a <code>VkPipelineLayout</code> that is compatible for push constants, with the <code>VkPipelineLayout</code> used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountKHR-None-03117",
"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-vkCmdDrawIndirectCountKHR-None-03118",
"text": " All vertex input bindings accessed via vertex input variables declared in the vertex shader entry point&#8217;s interface <strong class=\"purple\">must</strong> have valid buffers bound"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountKHR-None-03119",
"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-vkCmdDrawIndirectCountKHR-None-03120",
"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-vkCmdDrawIndirectCountKHR-countBuffer-03121",
"text": " If the count stored in <code>countBuffer</code> is equal to <code>1</code>, <span class=\"eq\">(<code>offset</code> &#43; sizeof(<code>VkDrawIndirectCommand</code>))</span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountKHR-countBuffer-03122",
"text": " If the count stored in <code>countBuffer</code> is greater than <code>1</code>, <span class=\"eq\">(<code>stride</code> {times} (<code>drawCount</code> - 1) &#43; <code>offset</code> &#43; sizeof(<code>VkDrawIndirectCommand</code>))</span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountKHR-countBuffer-03123",
"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-vkCmdDrawIndirectCountKHR-None-03124",
"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-vkCmdDrawIndirectCountKHR-None-03125",
"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-vkCmdDrawIndirectCountKHR-None-03126",
"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-vkCmdDrawIndirectCountKHR-None-03127",
"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-vkCmdDrawIndirectCountKHR-None-03128",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountKHR-None-03129",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountKHR-linearTilingFeatures-03130",
"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-vkCmdDrawIndirectCountKHR-None-03131",
"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-vkCmdDrawIndirectCountKHR-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountKHR-buffer-parameter",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountKHR-countBuffer-parameter",
"text": " <code>countBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountKHR-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountKHR-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountKHR-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountKHR-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_KHR_draw_indirect_count)+(VK_IMG_filter_cubic)": [
{
"vuid": "VUID-vkCmdDrawIndirectCountKHR-linearTilingFeatures-03169",
"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-vkCmdDrawIndirectCountKHR-None-03170",
"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_KHR_draw_indirect_count)+(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-vkCmdDrawIndirectCountKHR-maxMultiviewInstanceIndex-03132",
"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_KHR_draw_indirect_count)+(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdDrawIndirectCountKHR-commandBuffer-03133",
"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-vkCmdDrawIndirectCountKHR-commandBuffer-03134",
"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-vkCmdDrawIndirectCountKHR-commandBuffer-03135",
"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_KHR_draw_indirect_count)+(VK_EXT_sample_locations)": [
{
"vuid": "VUID-vkCmdDrawIndirectCountKHR-sampleLocationsEnable-03171",
"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"
}
]
},
"vkCmdDrawIndirectCountAMD": {
"(VK_AMD_draw_indirect_count)": [
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-buffer-01661",
"text": " If <code>buffer</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-buffer-01662",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> have been created with the <code>VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT</code> bit set"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-countBuffer-01663",
"text": " If <code>countBuffer</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-countBuffer-01664",
"text": " <code>countBuffer</code> <strong class=\"purple\">must</strong> have been created with the <code>VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT</code> bit set"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-offset-00502",
"text": " <code>offset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-countBufferOffset-00503",
"text": " <code>countBufferOffset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-stride-00504",
"text": " <code>stride</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code> and <strong class=\"purple\">must</strong> be greater than or equal to <code>sizeof</code>(<code>VkDrawIndirectCommand</code>)"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-maxDrawCount-00505",
"text": " If <code>maxDrawCount</code> is greater than or equal to <code>1</code>, <span class=\"eq\">(<code>stride</code> {times} (<code>maxDrawCount</code> - 1) &#43; <code>offset</code> &#43; <code>sizeof</code>(<code>VkDrawIndirectCommand</code>))</span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-firstInstance-00506",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-drawIndirectFirstInstance,drawIndirectFirstInstance&amp;amp;gt;&amp;amp;gt; feature is not enabled, all the <code>firstInstance</code> members of the <code>VkDrawIndirectCommand</code> structures accessed by this command <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-renderPass-00507",
"text": " The current render pass <strong class=\"purple\">must</strong> be &amp;amp;lt;&amp;amp;lt;renderpass-compatibility,compatible&amp;amp;gt;&amp;amp;gt; with the <code>renderPass</code> member of the <code>VkGraphicsPipelineCreateInfo</code> structure specified when creating the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>."
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-subpass-00508",
"text": " The subpass index of the current render pass <strong class=\"purple\">must</strong> be equal to the <code>subpass</code> member of the <code>VkGraphicsPipelineCreateInfo</code> structure specified when creating the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>."
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-None-00509",
"text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, with a <code>VkPipelineLayout</code> that is compatible for set <em>n</em>, with the <code>VkPipelineLayout</code> used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-None-00510",
"text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, a push constant value <strong class=\"purple\">must</strong> have been set for <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, with a <code>VkPipelineLayout</code> that is compatible for push constants, with the <code>VkPipelineLayout</code> used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-None-00511",
"text": " Descriptors in each bound descriptor set, specified via <code>vkCmdBindDescriptorSets</code>, <strong class=\"purple\">must</strong> be valid if they are statically used by the bound <code>VkPipeline</code> object, specified via <code>vkCmdBindPipeline</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-None-00512",
"text": " All vertex input bindings accessed via vertex input variables declared in the vertex shader entry point&#8217;s interface <strong class=\"purple\">must</strong> have valid buffers bound"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-None-00513",
"text": " A valid graphics pipeline <strong class=\"purple\">must</strong> be bound to the current command buffer with <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-None-00514",
"text": " If the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> requires any dynamic state, that state <strong class=\"purple\">must</strong> have been set on the current command buffer"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-countBuffer-00515",
"text": " If the count stored in <code>countBuffer</code> is equal to <code>1</code>, <span class=\"eq\">(<code>offset</code> &#43; <code>sizeof</code>(<code>VkDrawIndirectCommand</code>))</span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-countBuffer-00516",
"text": " If the count stored in <code>countBuffer</code> is greater than <code>1</code>, <span class=\"eq\">(<code>stride</code> {times} (<code>drawCount</code> - 1) &#43; <code>offset</code> &#43; <code>sizeof</code>(<code>VkDrawIndirectCommand</code>))</span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-countBuffer-00517",
"text": " The count stored in <code>countBuffer</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxDrawIndirectCount</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-None-00518",
"text": " Every input attachment used by the current subpass <strong class=\"purple\">must</strong> be bound to the pipeline via a descriptor set"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-None-00519",
"text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used to sample from any <code>VkImage</code> with a <code>VkImageView</code> of the type <code>VK_IMAGE_VIEW_TYPE_3D</code>, <code>VK_IMAGE_VIEW_TYPE_CUBE</code>, <code>VK_IMAGE_VIEW_TYPE_1D_ARRAY</code>, <code>VK_IMAGE_VIEW_TYPE_2D_ARRAY</code> or <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code>, in any shader stage"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-None-00520",
"text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used with any of the SPIR-V <code>OpImageSample*</code> or <code>OpImageSparseSample*</code> instructions with <code>ImplicitLod</code>, <code>Dref</code> or <code>Proj</code> in their name, in any shader stage"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-None-00521",
"text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used with any of the SPIR-V <code>OpImageSample*</code> or <code>OpImageSparseSample*</code> instructions that includes a LOD bias or any offset values, in any shader stage"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-None-00522",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-None-00523",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-None-01502",
"text": " Image subresources used as attachments in the current render pass <strong class=\"purple\">must</strong> not be accessed in any way other than as an attachment by this command."
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-buffer-parameter",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-countBuffer-parameter",
"text": " <code>countBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-commonparent",
"text": " Each of <code>buffer</code>, <code>commandBuffer</code>, and <code>countBuffer</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
],
"(VK_AMD_draw_indirect_count)+!(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"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> or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> for linearly or optimally tiled images, respectively"
}
],
"(VK_AMD_draw_indirect_count)+(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-formatFeatures-01959",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> 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 <a href=\"#VkAndroidHardwareBufferFormatPropertiesANDROID\">VkAndroidHardwareBufferFormatPropertiesANDROID</a>::<code>formatFeatures</code> returned by <a href=\"#vkGetAndroidHardwareBufferPropertiesANDROID\">vkGetAndroidHardwareBufferPropertiesANDROID</a> for external format images, or by <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>linearTilingFeatures</code> or <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>optimalTilingFeatures</code> returned by <a href=\"#vkGetPhysicalDeviceFormatProperties\">vkGetPhysicalDeviceFormatProperties</a> for non-external format linearly or optimally tiled images, respectively"
}
],
"(VK_AMD_draw_indirect_count)+(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-maxMultiviewInstanceIndex-00525",
"text": " If the draw is recorded in a render pass instance with multiview enabled, the maximum instance index <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkPhysicalDeviceMultiviewProperties\">VkPhysicalDeviceMultiviewProperties</a>::<code>maxMultiviewInstanceIndex</code>."
}
],
"(VK_AMD_draw_indirect_count)+(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-commandBuffer-01859",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, and any pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> reads from or writes to any image or buffer, that image or buffer <strong class=\"purple\">must</strong> not be a protected image or protected buffer."
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-commandBuffer-01860",
"text": " If <code>commandBuffer</code> is a protected command buffer, and any pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> writes to any image or buffer, that image or buffer <strong class=\"purple\">must</strong> not be an unprotected image or unprotected buffer."
},
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-commandBuffer-01861",
"text": " If <code>commandBuffer</code> is a protected command buffer, and any pipeline stage other than the framebuffer-space pipeline stages in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> reads from or writes to any image or buffer, the image or buffer <strong class=\"purple\">must</strong> not be a protected image or protected buffer."
}
],
"(VK_AMD_draw_indirect_count)+(VK_EXT_sample_locations)": [
{
"vuid": "VUID-vkCmdDrawIndirectCountAMD-sampleLocationsEnable-01515",
"text": " If the bound graphics pipeline was created with <a href=\"#VkPipelineSampleLocationsStateCreateInfoEXT\">VkPipelineSampleLocationsStateCreateInfoEXT</a>::<code>sampleLocationsEnable</code> set to <code>VK_TRUE</code> and the current subpass has a depth/stencil attachment, then that attachment <strong class=\"purple\">must</strong> have been created with the <code>VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT</code> bit set"
}
]
},
"vkCmdDrawIndexedIndirect": {
"core": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-buffer-00526",
"text": " If <code>buffer</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-buffer-01665",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> have been created with the <code>VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT</code> bit set"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-offset-00527",
"text": " <code>offset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-drawCount-00528",
"text": " If <code>drawCount</code> is greater than <code>1</code>, <code>stride</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code> and <strong class=\"purple\">must</strong> be greater than or equal to <code>sizeof</code>(<code>VkDrawIndexedIndirectCommand</code>)"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-drawCount-00529",
"text": " If the <a href=\"#features-features-multiDrawIndirect\">multi-draw indirect</a> feature is not enabled, <code>drawCount</code> <strong class=\"purple\">must</strong> be <code>0</code> or <code>1</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-firstInstance-00530",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-drawIndirectFirstInstance,drawIndirectFirstInstance&amp;amp;gt;&amp;amp;gt; feature is not enabled, all the <code>firstInstance</code> members of the <code>VkDrawIndexedIndirectCommand</code> structures accessed by this command <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-renderPass-00531",
"text": " The current render pass <strong class=\"purple\">must</strong> be &amp;amp;lt;&amp;amp;lt;renderpass-compatibility,compatible&amp;amp;gt;&amp;amp;gt; with the <code>renderPass</code> member of the <code>VkGraphicsPipelineCreateInfo</code> structure specified when creating the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>."
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-subpass-00532",
"text": " The subpass index of the current render pass <strong class=\"purple\">must</strong> be equal to the <code>subpass</code> member of the <code>VkGraphicsPipelineCreateInfo</code> structure specified when creating the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>."
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-None-00533",
"text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, with a <code>VkPipelineLayout</code> that is compatible for set <em>n</em>, with the <code>VkPipelineLayout</code> used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-None-00534",
"text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, a push constant value <strong class=\"purple\">must</strong> have been set for <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, with a <code>VkPipelineLayout</code> that is compatible for push constants, with the <code>VkPipelineLayout</code> used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-None-00535",
"text": " Descriptors in each bound descriptor set, specified via <code>vkCmdBindDescriptorSets</code>, <strong class=\"purple\">must</strong> be valid if they are statically used by the bound <code>VkPipeline</code> object, specified via <code>vkCmdBindPipeline</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-None-00536",
"text": " All vertex input bindings accessed via vertex input variables declared in the vertex shader entry point&#8217;s interface <strong class=\"purple\">must</strong> have valid buffers bound"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-None-00537",
"text": " A valid graphics pipeline <strong class=\"purple\">must</strong> be bound to the current command buffer with <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-None-00538",
"text": " If the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> requires any dynamic state, that state <strong class=\"purple\">must</strong> have been set on the current command buffer"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-drawCount-00539",
"text": " If <code>drawCount</code> is equal to <code>1</code>, <span class=\"eq\">(<code>offset</code> &#43; <code>sizeof</code>(<code>VkDrawIndexedIndirectCommand</code>))</span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-drawCount-00540",
"text": " If <code>drawCount</code> is greater than <code>1</code>, <span class=\"eq\">(<code>stride</code> {times} (<code>drawCount</code> - 1) &#43; <code>offset</code> &#43; <code>sizeof</code>(<code>VkDrawIndexedIndirectCommand</code>))</span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-drawCount-00541",
"text": " <code>drawCount</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxDrawIndirectCount</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-None-00542",
"text": " Every input attachment used by the current subpass <strong class=\"purple\">must</strong> be bound to the pipeline via a descriptor set"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-None-00543",
"text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used to sample from any <code>VkImage</code> with a <code>VkImageView</code> of the type <code>VK_IMAGE_VIEW_TYPE_3D</code>, <code>VK_IMAGE_VIEW_TYPE_CUBE</code>, <code>VK_IMAGE_VIEW_TYPE_1D_ARRAY</code>, <code>VK_IMAGE_VIEW_TYPE_2D_ARRAY</code> or <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code>, in any shader stage"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-None-00544",
"text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used with any of the SPIR-V <code>OpImageSample*</code> or <code>OpImageSparseSample*</code> instructions with <code>ImplicitLod</code>, <code>Dref</code> or <code>Proj</code> in their name, in any shader stage"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-None-00545",
"text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used with any of the SPIR-V <code>OpImageSample*</code> or <code>OpImageSparseSample*</code> instructions that includes a LOD bias or any offset values, in any shader stage"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-None-00546",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-None-00547",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-None-01503",
"text": " Image subresources used as attachments in the current render pass <strong class=\"purple\">must</strong> not be accessed in any way other than as an attachment by this command."
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-buffer-parameter",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-commonparent",
"text": " Both of <code>buffer</code>, and <code>commandBuffer</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
],
"!(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"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> or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> for linearly or optimally tiled images, respectively"
}
],
"(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-formatFeatures-01960",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> 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 <a href=\"#VkAndroidHardwareBufferFormatPropertiesANDROID\">VkAndroidHardwareBufferFormatPropertiesANDROID</a>::<code>formatFeatures</code> returned by <a href=\"#vkGetAndroidHardwareBufferPropertiesANDROID\">vkGetAndroidHardwareBufferPropertiesANDROID</a> for external format images, or by <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>linearTilingFeatures</code> or <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>optimalTilingFeatures</code> returned by <a href=\"#vkGetPhysicalDeviceFormatProperties\">vkGetPhysicalDeviceFormatProperties</a> for non-external format linearly or optimally tiled images, respectively"
}
],
"(VK_IMG_filter_cubic)+!(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"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> or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> for linearly or optimally tiled images, respectively"
}
],
"(VK_IMG_filter_cubic)+(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-formatFeatures-01961",
"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 <a href=\"#VkAndroidHardwareBufferFormatPropertiesANDROID\">VkAndroidHardwareBufferFormatPropertiesANDROID</a>::<code>formatFeatures</code> returned by <a href=\"#vkGetAndroidHardwareBufferPropertiesANDROID\">vkGetAndroidHardwareBufferPropertiesANDROID</a> for external format images, or by <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>linearTilingFeatures</code> or <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>optimalTilingFeatures</code> returned by <a href=\"#vkGetPhysicalDeviceFormatProperties\">vkGetPhysicalDeviceFormatProperties</a> for non-external format linearly or optimally tiled images, respectively"
}
],
"(VK_IMG_filter_cubic)": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-None-00550",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_IMG</code> as a result of this command <strong class=\"purple\">must</strong> not have a <a href=\"#VkImageViewType\">VkImageViewType</a> of <code>VK_IMAGE_VIEW_TYPE_3D</code>, <code>VK_IMAGE_VIEW_TYPE_CUBE</code>, or <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-maxMultiviewInstanceIndex-00551",
"text": " If the draw is recorded in a render pass instance with multiview enabled, the maximum instance index <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkPhysicalDeviceMultiviewProperties\">VkPhysicalDeviceMultiviewProperties</a>::<code>maxMultiviewInstanceIndex</code>."
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-commandBuffer-01862",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, and any pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> reads from or writes to any image or buffer, that image or buffer <strong class=\"purple\">must</strong> not be a protected image or protected buffer."
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-commandBuffer-01863",
"text": " If <code>commandBuffer</code> is a protected command buffer, and any pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> writes to any image or buffer, that image or buffer <strong class=\"purple\">must</strong> not be an unprotected image or unprotected buffer."
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-commandBuffer-01864",
"text": " If <code>commandBuffer</code> is a protected command buffer, and any pipeline stage other than the framebuffer-space pipeline stages in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> reads from or writes to any image or buffer, the image or buffer <strong class=\"purple\">must</strong> not be a protected image or protected buffer."
}
],
"(VK_EXT_sample_locations)": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-sampleLocationsEnable-01516",
"text": " If the bound graphics pipeline was created with <a href=\"#VkPipelineSampleLocationsStateCreateInfoEXT\">VkPipelineSampleLocationsStateCreateInfoEXT</a>::<code>sampleLocationsEnable</code> set to <code>VK_TRUE</code> and the current subpass has a depth/stencil attachment, then that attachment <strong class=\"purple\">must</strong> have been created with the <code>VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT</code> bit set"
}
]
},
"VkDrawIndexedIndirectCommand": {
"core": [
{
"vuid": "VUID-VkDrawIndexedIndirectCommand-None-00552",
"text": " For a given vertex buffer binding, any attribute data fetched <strong class=\"purple\">must</strong> be entirely contained within the corresponding vertex buffer binding, as described in &amp;amp;lt;&amp;amp;lt;fxvertex-input&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-VkDrawIndexedIndirectCommand-indexSize-00553",
"text": " <span class=\"eq\">(<code>indexSize</code> * (<code>firstIndex</code> &#43; <code>indexCount</code>) &#43; <code>offset</code>)</span> <strong class=\"purple\">must</strong> be less than or equal to the size of the bound index buffer, with <code>indexSize</code> being based on the type specified by <code>indexType</code>, where the index buffer, <code>indexType</code>, and <code>offset</code> are specified via <code>vkCmdBindIndexBuffer</code>"
},
{
"vuid": "VUID-VkDrawIndexedIndirectCommand-firstInstance-00554",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-drawIndirectFirstInstance,drawIndirectFirstInstance&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>firstInstance</code> <strong class=\"purple\">must</strong> be <code>0</code>"
}
]
},
"vkCmdDrawIndexedIndirectCountKHR": {
"(VK_KHR_draw_indirect_count)": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountKHR-buffer-03136",
"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-vkCmdDrawIndexedIndirectCountKHR-buffer-03137",
"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-vkCmdDrawIndexedIndirectCountKHR-countBuffer-03138",
"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-vkCmdDrawIndexedIndirectCountKHR-countBuffer-03139",
"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-vkCmdDrawIndexedIndirectCountKHR-offset-03140",
"text": " <code>offset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountKHR-countBufferOffset-03141",
"text": " <code>countBufferOffset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountKHR-stride-03142",
"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 sizeof(<code>VkDrawIndexedIndirectCommand</code>)"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountKHR-maxDrawCount-03143",
"text": " If <code>maxDrawCount</code> is greater than or equal to <code>1</code>, <span class=\"eq\">(<code>stride</code> {times} (<code>maxDrawCount</code> - 1) &#43; <code>offset</code> &#43; sizeof(<code>VkDrawIndexedIndirectCommand</code>))</span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountKHR-firstInstance-03144",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-drawIndirectFirstInstance,drawIndirectFirstInstance&amp;amp;gt;&amp;amp;gt; feature is not enabled, all the <code>firstInstance</code> members of the <code>VkDrawIndexedIndirectCommand</code> structures accessed by this command <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountKHR-renderPass-03145",
"text": " The current render pass <strong class=\"purple\">must</strong> be &amp;amp;lt;&amp;amp;lt;renderpass-compatibility,compatible&amp;amp;gt;&amp;amp;gt; with the <code>renderPass</code> member of the <code>VkGraphicsPipelineCreateInfo</code> structure specified when creating the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>."
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountKHR-subpass-03146",
"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-vkCmdDrawIndexedIndirectCountKHR-None-03147",
"text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, with a <code>VkPipelineLayout</code> that is compatible for set <em>n</em>, with the <code>VkPipelineLayout</code> used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountKHR-None-03148",
"text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, a push constant value <strong class=\"purple\">must</strong> have been set for <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, with a <code>VkPipelineLayout</code> that is compatible for push constants, with the <code>VkPipelineLayout</code> used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountKHR-None-03149",
"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-vkCmdDrawIndexedIndirectCountKHR-None-03150",
"text": " All vertex input bindings accessed via vertex input variables declared in the vertex shader entry point&#8217;s interface <strong class=\"purple\">must</strong> have valid buffers bound"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountKHR-None-03151",
"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-vkCmdDrawIndexedIndirectCountKHR-None-03152",
"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-vkCmdDrawIndexedIndirectCountKHR-countBuffer-03153",
"text": " If count stored in <code>countBuffer</code> is equal to <code>1</code>, <span class=\"eq\">(<code>offset</code> &#43; sizeof(<code>VkDrawIndexedIndirectCommand</code>))</span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountKHR-countBuffer-03154",
"text": " If count stored in <code>countBuffer</code> is greater than <code>1</code>, <span class=\"eq\">(<code>stride</code> {times} (<code>drawCount</code> - 1) &#43; <code>offset</code> &#43; sizeof(<code>VkDrawIndexedIndirectCommand</code>))</span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountKHR-drawCount-03155",
"text": " <code>drawCount</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxDrawIndirectCount</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountKHR-None-03156",
"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-vkCmdDrawIndexedIndirectCountKHR-None-03157",
"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-vkCmdDrawIndexedIndirectCountKHR-None-03158",
"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-vkCmdDrawIndexedIndirectCountKHR-None-03159",
"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-vkCmdDrawIndexedIndirectCountKHR-None-03160",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountKHR-None-03161",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountKHR-linearTilingFeatures-03162",
"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-vkCmdDrawIndexedIndirectCountKHR-None-03163",
"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-vkCmdDrawIndexedIndirectCountKHR-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountKHR-buffer-parameter",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountKHR-countBuffer-parameter",
"text": " <code>countBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountKHR-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountKHR-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountKHR-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountKHR-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_KHR_draw_indirect_count)+(VK_IMG_filter_cubic)": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountKHR-linearTilingFeatures-03172",
"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-vkCmdDrawIndexedIndirectCountKHR-None-03173",
"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_KHR_draw_indirect_count)+(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountKHR-maxMultiviewInstanceIndex-03164",
"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_KHR_draw_indirect_count)+(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountKHR-commandBuffer-03165",
"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-vkCmdDrawIndexedIndirectCountKHR-commandBuffer-03166",
"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-vkCmdDrawIndexedIndirectCountKHR-commandBuffer-03167",
"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_KHR_draw_indirect_count)+(VK_EXT_sample_locations)": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountKHR-sampleLocationsEnable-03174",
"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"
}
]
},
"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>VkDrawIndexedIndirectCommand</code>)"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-maxDrawCount-00558",
"text": " If <code>maxDrawCount</code> is greater than or equal to <code>1</code>, <span class=\"eq\">(<code>stride</code> {times} (<code>maxDrawCount</code> - 1) &#43; <code>offset</code> &#43; <code>sizeof</code>(<code>VkDrawIndexedIndirectCommand</code>))</span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-firstInstance-00559",
"text": " If the <a href=\"#features-features-drawIndirectFirstInstance\">drawIndirectFirstInstance</a> feature is not enabled, all the <code>firstInstance</code> members of the <code>VkDrawIndexedIndirectCommand</code> structures accessed by this command <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-renderPass-00560",
"text": " The current render pass <strong class=\"purple\">must</strong> be &amp;amp;lt;&amp;amp;lt;renderpass-compatibility,compatible&amp;amp;gt;&amp;amp;gt; with the <code>renderPass</code> member of the <code>VkGraphicsPipelineCreateInfo</code> structure specified when creating the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>."
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-subpass-00561",
"text": " The subpass index of the current render pass <strong class=\"purple\">must</strong> be equal to the <code>subpass</code> member of the <code>VkGraphicsPipelineCreateInfo</code> structure specified when creating the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>."
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-None-00562",
"text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, with a <code>VkPipelineLayout</code> that is compatible for set <em>n</em>, with the <code>VkPipelineLayout</code> used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-None-00563",
"text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, a push constant value <strong class=\"purple\">must</strong> have been set for <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>, with a <code>VkPipelineLayout</code> that is compatible for push constants, with the <code>VkPipelineLayout</code> used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-None-00564",
"text": " Descriptors in each bound descriptor set, specified via <code>vkCmdBindDescriptorSets</code>, <strong class=\"purple\">must</strong> be valid if they are statically used by the bound <code>VkPipeline</code> object, specified via <code>vkCmdBindPipeline</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-None-00565",
"text": " All vertex input bindings accessed via vertex input variables declared in the vertex shader entry point&#8217;s interface <strong class=\"purple\">must</strong> have valid buffers bound"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-None-00566",
"text": " A valid graphics pipeline <strong class=\"purple\">must</strong> be bound to the current command buffer with <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-None-00567",
"text": " If the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> requires any dynamic state, that state <strong class=\"purple\">must</strong> have been set on the current command buffer"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-countBuffer-00568",
"text": " If count stored in <code>countBuffer</code> is equal to <code>1</code>, <span class=\"eq\">(<code>offset</code> &#43; <code>sizeof</code>(<code>VkDrawIndexedIndirectCommand</code>))</span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-countBuffer-00569",
"text": " If count stored in <code>countBuffer</code> is greater than <code>1</code>, <span class=\"eq\">(<code>stride</code> {times} (<code>drawCount</code> - 1) &#43; <code>offset</code> &#43; <code>sizeof</code>(<code>VkDrawIndexedIndirectCommand</code>))</span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-drawCount-00570",
"text": " <code>drawCount</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxDrawIndirectCount</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-None-00571",
"text": " Every input attachment used by the current subpass <strong class=\"purple\">must</strong> be bound to the pipeline via a descriptor set"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-None-00572",
"text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used to sample from any <code>VkImage</code> with a <code>VkImageView</code> of the type <code>VK_IMAGE_VIEW_TYPE_3D</code>, <code>VK_IMAGE_VIEW_TYPE_CUBE</code>, <code>VK_IMAGE_VIEW_TYPE_1D_ARRAY</code>, <code>VK_IMAGE_VIEW_TYPE_2D_ARRAY</code> or <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code>, in any shader stage"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-None-00573",
"text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used with any of the SPIR-V <code>OpImageSample*</code> or <code>OpImageSparseSample*</code> instructions with <code>ImplicitLod</code>, <code>Dref</code> or <code>Proj</code> in their name, in any shader stage"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-None-00574",
"text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used with any of the SPIR-V <code>OpImageSample*</code> or <code>OpImageSparseSample*</code> instructions that includes a LOD bias or any offset values, in any shader stage"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-None-00575",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-None-00576",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-None-01504",
"text": " Image subresources used as attachments in the current render pass <strong class=\"purple\">must</strong> not be accessed in any way other than as an attachment by this command."
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-buffer-parameter",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-countBuffer-parameter",
"text": " <code>countBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-commonparent",
"text": " Each of <code>buffer</code>, <code>commandBuffer</code>, and <code>countBuffer</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
],
"(VK_AMD_draw_indirect_count)+!(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"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> or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> for linearly or optimally tiled images, respectively"
}
],
"(VK_AMD_draw_indirect_count)+(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-formatFeatures-01962",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> 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 <a href=\"#VkAndroidHardwareBufferFormatPropertiesANDROID\">VkAndroidHardwareBufferFormatPropertiesANDROID</a>::<code>formatFeatures</code> returned by <a href=\"#vkGetAndroidHardwareBufferPropertiesANDROID\">vkGetAndroidHardwareBufferPropertiesANDROID</a> for external format images, or by <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>linearTilingFeatures</code> or <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>optimalTilingFeatures</code> returned by <a href=\"#vkGetPhysicalDeviceFormatProperties\">vkGetPhysicalDeviceFormatProperties</a> for non-external format linearly or optimally tiled images, respectively"
}
],
"(VK_AMD_draw_indirect_count)+(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-maxMultiviewInstanceIndex-00578",
"text": " If the draw is recorded in a render pass instance with multiview enabled, the maximum instance index <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkPhysicalDeviceMultiviewProperties\">VkPhysicalDeviceMultiviewProperties</a>::<code>maxMultiviewInstanceIndex</code>."
}
],
"(VK_AMD_draw_indirect_count)+(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-commandBuffer-01865",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, and any pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> reads from or writes to any image or buffer, that image or buffer <strong class=\"purple\">must</strong> not be a protected image or protected buffer."
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-commandBuffer-01866",
"text": " If <code>commandBuffer</code> is a protected command buffer, and any pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> writes to any image or buffer, that image or buffer <strong class=\"purple\">must</strong> not be an unprotected image or unprotected buffer."
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-commandBuffer-01867",
"text": " If <code>commandBuffer</code> is a protected command buffer, and any pipeline stage other than the framebuffer-space pipeline stages in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code> reads from or writes to any image or buffer, the image or buffer <strong class=\"purple\">must</strong> not be a protected image or protected buffer."
}
],
"(VK_AMD_draw_indirect_count)+(VK_EXT_sample_locations)": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCountAMD-sampleLocationsEnable-01517",
"text": " If the bound graphics pipeline was created with <a href=\"#VkPipelineSampleLocationsStateCreateInfoEXT\">VkPipelineSampleLocationsStateCreateInfoEXT</a>::<code>sampleLocationsEnable</code> set to <code>VK_TRUE</code> and the current subpass has a depth/stencil attachment, then that attachment <strong class=\"purple\">must</strong> have been created with the <code>VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT</code> bit set"
}
]
},
"VkPipelineVertexInputStateCreateInfo": {
"core": [
{
"vuid": "VUID-VkPipelineVertexInputStateCreateInfo-vertexBindingDescriptionCount-00613",
"text": " <code>vertexBindingDescriptionCount</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxVertexInputBindings</code>"
},
{
"vuid": "VUID-VkPipelineVertexInputStateCreateInfo-vertexAttributeDescriptionCount-00614",
"text": " <code>vertexAttributeDescriptionCount</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxVertexInputAttributes</code>"
},
{
"vuid": "VUID-VkPipelineVertexInputStateCreateInfo-binding-00615",
"text": " For every <code>binding</code> specified by each element of <code>pVertexAttributeDescriptions</code>, a <code>VkVertexInputBindingDescription</code> <strong class=\"purple\">must</strong> exist in <code>pVertexBindingDescriptions</code> with the same value of <code>binding</code>"
},
{
"vuid": "VUID-VkPipelineVertexInputStateCreateInfo-pVertexBindingDescriptions-00616",
"text": " All elements of <code>pVertexBindingDescriptions</code> <strong class=\"purple\">must</strong> describe distinct binding numbers"
},
{
"vuid": "VUID-VkPipelineVertexInputStateCreateInfo-pVertexAttributeDescriptions-00617",
"text": " All elements of <code>pVertexAttributeDescriptions</code> <strong class=\"purple\">must</strong> describe distinct attribute locations"
},
{
"vuid": "VUID-VkPipelineVertexInputStateCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkPipelineVertexInputStateCreateInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkPipelineVertexInputDivisorStateCreateInfoEXT\">VkPipelineVertexInputDivisorStateCreateInfoEXT</a>"
},
{
"vuid": "VUID-VkPipelineVertexInputStateCreateInfo-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkPipelineVertexInputStateCreateInfo-pVertexBindingDescriptions-parameter",
"text": " If <code>vertexBindingDescriptionCount</code> is not <code>0</code>, <code>pVertexBindingDescriptions</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>vertexBindingDescriptionCount</code> valid <code>VkVertexInputBindingDescription</code> structures"
},
{
"vuid": "VUID-VkPipelineVertexInputStateCreateInfo-pVertexAttributeDescriptions-parameter",
"text": " If <code>vertexAttributeDescriptionCount</code> is not <code>0</code>, <code>pVertexAttributeDescriptions</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>vertexAttributeDescriptionCount</code> valid <code>VkVertexInputAttributeDescription</code> structures"
}
]
},
"VkVertexInputBindingDescription": {
"core": [
{
"vuid": "VUID-VkVertexInputBindingDescription-binding-00618",
"text": " <code>binding</code> <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceLimits</code>::<code>maxVertexInputBindings</code>"
},
{
"vuid": "VUID-VkVertexInputBindingDescription-stride-00619",
"text": " <code>stride</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxVertexInputBindingStride</code>"
},
{
"vuid": "VUID-VkVertexInputBindingDescription-inputRate-parameter",
"text": " <code>inputRate</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkVertexInputRate\">VkVertexInputRate</a> value"
}
]
},
"VkVertexInputAttributeDescription": {
"core": [
{
"vuid": "VUID-VkVertexInputAttributeDescription-location-00620",
"text": " <code>location</code> <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceLimits</code>::<code>maxVertexInputAttributes</code>"
},
{
"vuid": "VUID-VkVertexInputAttributeDescription-binding-00621",
"text": " <code>binding</code> <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceLimits</code>::<code>maxVertexInputBindings</code>"
},
{
"vuid": "VUID-VkVertexInputAttributeDescription-offset-00622",
"text": " <code>offset</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxVertexInputAttributeOffset</code>"
},
{
"vuid": "VUID-VkVertexInputAttributeDescription-format-00623",
"text": " <code>format</code> <strong class=\"purple\">must</strong> be allowed as a vertex buffer format, as specified by the <code>VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT</code> flag in <code>VkFormatProperties</code>::<code>bufferFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code>"
},
{
"vuid": "VUID-VkVertexInputAttributeDescription-format-parameter",
"text": " <code>format</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFormat\">VkFormat</a> value"
}
]
},
"vkCmdBindVertexBuffers": {
"core": [
{
"vuid": "VUID-vkCmdBindVertexBuffers-firstBinding-00624",
"text": " <code>firstBinding</code> <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceLimits</code>::<code>maxVertexInputBindings</code>"
},
{
"vuid": "VUID-vkCmdBindVertexBuffers-firstBinding-00625",
"text": " The sum of <code>firstBinding</code> and <code>bindingCount</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxVertexInputBindings</code>"
},
{
"vuid": "VUID-vkCmdBindVertexBuffers-pOffsets-00626",
"text": " All elements of <code>pOffsets</code> <strong class=\"purple\">must</strong> be less than the size of the corresponding element in <code>pBuffers</code>"
},
{
"vuid": "VUID-vkCmdBindVertexBuffers-pBuffers-00627",
"text": " All elements of <code>pBuffers</code> <strong class=\"purple\">must</strong> have been created with the <code>VK_BUFFER_USAGE_VERTEX_BUFFER_BIT</code> flag"
},
{
"vuid": "VUID-vkCmdBindVertexBuffers-pBuffers-00628",
"text": " Each element of <code>pBuffers</code> that is non-sparse <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
},
{
"vuid": "VUID-vkCmdBindVertexBuffers-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdBindVertexBuffers-pBuffers-parameter",
"text": " <code>pBuffers</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>bindingCount</code> valid <code>VkBuffer</code> handles"
},
{
"vuid": "VUID-vkCmdBindVertexBuffers-pOffsets-parameter",
"text": " <code>pOffsets</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>bindingCount</code> <code>VkDeviceSize</code> values"
},
{
"vuid": "VUID-vkCmdBindVertexBuffers-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdBindVertexBuffers-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdBindVertexBuffers-bindingCount-arraylength",
"text": " <code>bindingCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkCmdBindVertexBuffers-commonparent",
"text": " Both of <code>commandBuffer</code>, and the elements of <code>pBuffers</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
]
},
"VkPipelineVertexInputDivisorStateCreateInfoEXT": {
"(VK_EXT_vertex_attribute_divisor)": [
{
"vuid": "VUID-VkPipelineVertexInputDivisorStateCreateInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT</code>"
},
{
"vuid": "VUID-VkPipelineVertexInputDivisorStateCreateInfoEXT-pVertexBindingDivisors-parameter",
"text": " <code>pVertexBindingDivisors</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>vertexBindingDivisorCount</code> <code>VkVertexInputBindingDivisorDescriptionEXT</code> structures"
},
{
"vuid": "VUID-VkPipelineVertexInputDivisorStateCreateInfoEXT-vertexBindingDivisorCount-arraylength",
"text": " <code>vertexBindingDivisorCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"VkVertexInputBindingDivisorDescriptionEXT": {
"(VK_EXT_vertex_attribute_divisor)": [
{
"vuid": "VUID-VkVertexInputBindingDivisorDescriptionEXT-binding-01869",
"text": " <code>binding</code> <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceLimits</code>::<code>maxVertexInputBindings</code>"
},
{
"vuid": "VUID-VkVertexInputBindingDivisorDescriptionEXT-divisor-01870",
"text": " <code>divisor</code> <strong class=\"purple\">must</strong> be a value between <code>0</code> and <code>VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT</code>::<code>maxVertexAttribDivisor</code>, inclusive."
},
{
"vuid": "VUID-VkVertexInputBindingDivisorDescriptionEXT-inputRate-01871",
"text": " <a href=\"#VkVertexInputBindingDescription\">VkVertexInputBindingDescription</a>::<code>inputRate</code> <strong class=\"purple\">must</strong> be of type <code>VK_VERTEX_INPUT_RATE_INSTANCE</code> for this <code>binding</code>."
}
]
},
"VkPipelineTessellationStateCreateInfo": {
"core": [
{
"vuid": "VUID-VkPipelineTessellationStateCreateInfo-patchControlPoints-01214",
"text": " <code>patchControlPoints</code> <strong class=\"purple\">must</strong> be greater than zero and less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxTessellationPatchSize</code>"
},
{
"vuid": "VUID-VkPipelineTessellationStateCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkPipelineTessellationStateCreateInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkPipelineTessellationDomainOriginStateCreateInfo\">VkPipelineTessellationDomainOriginStateCreateInfo</a>"
},
{
"vuid": "VUID-VkPipelineTessellationStateCreateInfo-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
}
]
},
"VkPipelineTessellationDomainOriginStateCreateInfo": {
"(VK_VERSION_1_1,VK_KHR_maintenance2)": [
{
"vuid": "VUID-VkPipelineTessellationDomainOriginStateCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkPipelineTessellationDomainOriginStateCreateInfo-domainOrigin-parameter",
"text": " <code>domainOrigin</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkTessellationDomainOrigin\">VkTessellationDomainOrigin</a> value"
}
]
},
"VkPipelineViewportSwizzleStateCreateInfoNV": {
"(VK_NV_viewport_swizzle)": [
{
"vuid": "VUID-VkPipelineViewportSwizzleStateCreateInfoNV-viewportCount-01215",
"text": " <code>viewportCount</code> <strong class=\"purple\">must</strong> match the <code>viewportCount</code> set in <code>VkPipelineViewportStateCreateInfo</code>"
},
{
"vuid": "VUID-VkPipelineViewportSwizzleStateCreateInfoNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV</code>"
},
{
"vuid": "VUID-VkPipelineViewportSwizzleStateCreateInfoNV-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkPipelineViewportSwizzleStateCreateInfoNV-viewportCount-arraylength",
"text": " <code>viewportCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"VkViewportSwizzleNV": {
"(VK_NV_viewport_swizzle)": [
{
"vuid": "VUID-VkViewportSwizzleNV-x-parameter",
"text": " <code>x</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkViewportCoordinateSwizzleNV\">VkViewportCoordinateSwizzleNV</a> value"
},
{
"vuid": "VUID-VkViewportSwizzleNV-y-parameter",
"text": " <code>y</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkViewportCoordinateSwizzleNV\">VkViewportCoordinateSwizzleNV</a> value"
},
{
"vuid": "VUID-VkViewportSwizzleNV-z-parameter",
"text": " <code>z</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkViewportCoordinateSwizzleNV\">VkViewportCoordinateSwizzleNV</a> value"
},
{
"vuid": "VUID-VkViewportSwizzleNV-w-parameter",
"text": " <code>w</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkViewportCoordinateSwizzleNV\">VkViewportCoordinateSwizzleNV</a> value"
}
]
},
"VkPipelineViewportWScalingStateCreateInfoNV": {
"(VK_NV_clip_space_w_scaling)": [
{
"vuid": "VUID-VkPipelineViewportWScalingStateCreateInfoNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV</code>"
},
{
"vuid": "VUID-VkPipelineViewportWScalingStateCreateInfoNV-viewportCount-arraylength",
"text": " <code>viewportCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"vkCmdSetViewportWScalingNV": {
"(VK_NV_clip_space_w_scaling)": [
{
"vuid": "VUID-vkCmdSetViewportWScalingNV-None-01322",
"text": " The bound graphics pipeline <strong class=\"purple\">must</strong> have been created with the <code>VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV</code> dynamic state enabled"
},
{
"vuid": "VUID-vkCmdSetViewportWScalingNV-firstViewport-01323",
"text": " <code>firstViewport</code> <strong class=\"purple\">must</strong> be less than <a href=\"#VkPhysicalDeviceLimits\">VkPhysicalDeviceLimits</a>::<code>maxViewports</code>"
},
{
"vuid": "VUID-vkCmdSetViewportWScalingNV-firstViewport-01324",
"text": " The sum of <code>firstViewport</code> and <code>viewportCount</code> <strong class=\"purple\">must</strong> be between <code>1</code> and <a href=\"#VkPhysicalDeviceLimits\">VkPhysicalDeviceLimits</a>::<code>maxViewports</code>, inclusive"
},
{
"vuid": "VUID-vkCmdSetViewportWScalingNV-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdSetViewportWScalingNV-pViewportWScalings-parameter",
"text": " <code>pViewportWScalings</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>viewportCount</code> <code>VkViewportWScalingNV</code> structures"
},
{
"vuid": "VUID-vkCmdSetViewportWScalingNV-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdSetViewportWScalingNV-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdSetViewportWScalingNV-viewportCount-arraylength",
"text": " <code>viewportCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"VkPipelineViewportStateCreateInfo": {
"core": [
{
"vuid": "VUID-VkPipelineViewportStateCreateInfo-viewportCount-01216",
"text": " If the <a href=\"#features-features-multiViewport\">multiple viewports</a> feature is not enabled, <code>viewportCount</code> <strong class=\"purple\">must</strong> be <code>1</code>"
},
{
"vuid": "VUID-VkPipelineViewportStateCreateInfo-scissorCount-01217",
"text": " If the <a href=\"#features-features-multiViewport\">multiple viewports</a> feature is not enabled, <code>scissorCount</code> <strong class=\"purple\">must</strong> be <code>1</code>"
},
{
"vuid": "VUID-VkPipelineViewportStateCreateInfo-viewportCount-01218",
"text": " <code>viewportCount</code> <strong class=\"purple\">must</strong> be between <code>1</code> and <code>VkPhysicalDeviceLimits</code>::<code>maxViewports</code>, inclusive"
},
{
"vuid": "VUID-VkPipelineViewportStateCreateInfo-scissorCount-01219",
"text": " <code>scissorCount</code> <strong class=\"purple\">must</strong> be between <code>1</code> and <code>VkPhysicalDeviceLimits</code>::<code>maxViewports</code>, inclusive"
},
{
"vuid": "VUID-VkPipelineViewportStateCreateInfo-scissorCount-01220",
"text": " <code>scissorCount</code> and <code>viewportCount</code> <strong class=\"purple\">must</strong> be identical"
},
{
"vuid": "VUID-VkPipelineViewportStateCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkPipelineViewportStateCreateInfo-pNext-pNext",
"text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkPipelineViewportSwizzleStateCreateInfoNV\">VkPipelineViewportSwizzleStateCreateInfoNV</a> or <a href=\"#VkPipelineViewportWScalingStateCreateInfoNV\">VkPipelineViewportWScalingStateCreateInfoNV</a>"
},
{
"vuid": "VUID-VkPipelineViewportStateCreateInfo-sType-unique",
"text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkPipelineViewportStateCreateInfo-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkPipelineViewportStateCreateInfo-viewportCount-arraylength",
"text": " <code>viewportCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-VkPipelineViewportStateCreateInfo-scissorCount-arraylength",
"text": " <code>scissorCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
],
"(VK_NV_clip_space_w_scaling)": [
{
"vuid": "VUID-VkPipelineViewportStateCreateInfo-viewportWScalingEnable-01726",
"text": " If the <code>viewportWScalingEnable</code> member of a <a href=\"#VkPipelineViewportWScalingStateCreateInfoNV\">VkPipelineViewportWScalingStateCreateInfoNV</a> structure chained to the <code>pNext</code> chain is <code>VK_TRUE</code>, the <code>viewportCount</code> member of the <a href=\"#VkPipelineViewportWScalingStateCreateInfoNV\">VkPipelineViewportWScalingStateCreateInfoNV</a> structure <strong class=\"purple\">must</strong> be equal to <code>viewportCount</code>"
}
]
},
"vkCmdSetViewport": {
"core": [
{
"vuid": "VUID-vkCmdSetViewport-None-01221",
"text": " The bound graphics pipeline <strong class=\"purple\">must</strong> have been created with the <code>VK_DYNAMIC_STATE_VIEWPORT</code> dynamic state enabled"
},
{
"vuid": "VUID-vkCmdSetViewport-firstViewport-01222",
"text": " <code>firstViewport</code> <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceLimits</code>::<code>maxViewports</code>"
},
{
"vuid": "VUID-vkCmdSetViewport-firstViewport-01223",
"text": " The sum of <code>firstViewport</code> and <code>viewportCount</code> <strong class=\"purple\">must</strong> be between <code>1</code> and <code>VkPhysicalDeviceLimits</code>::<code>maxViewports</code>, inclusive"
},
{
"vuid": "VUID-vkCmdSetViewport-firstViewport-01224",
"text": " If the <a href=\"#features-features-multiViewport\">multiple viewports</a> feature is not enabled, <code>firstViewport</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-vkCmdSetViewport-viewportCount-01225",
"text": " If the <a href=\"#features-features-multiViewport\">multiple viewports</a> feature is not enabled, <code>viewportCount</code> <strong class=\"purple\">must</strong> be <code>1</code>"
},
{
"vuid": "VUID-vkCmdSetViewport-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdSetViewport-pViewports-parameter",
"text": " <code>pViewports</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>viewportCount</code> <code>VkViewport</code> structures"
},
{
"vuid": "VUID-vkCmdSetViewport-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdSetViewport-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdSetViewport-viewportCount-arraylength",
"text": " <code>viewportCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"VkViewport": {
"core": [
{
"vuid": "VUID-VkViewport-width-01770",
"text": " <code>width</code> <strong class=\"purple\">must</strong> be greater than <code>0.0</code>"
},
{
"vuid": "VUID-VkViewport-width-01771",
"text": " <code>width</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxViewportDimensions</code>[0]"
},
{
"vuid": "VUID-VkViewport-height-01773",
"text": " The absolute value of <code>height</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxViewportDimensions</code>[1]"
},
{
"vuid": "VUID-VkViewport-x-01774",
"text": " <code>x</code> <strong class=\"purple\">must</strong> be greater than or equal to <code>viewportBoundsRange</code>[0]"
},
{
"vuid": "VUID-VkViewport-x-01232",
"text": " <span class=\"eq\">(<code>x</code> &#43; <code>width</code>)</span> <strong class=\"purple\">must</strong> be less than or equal to <code>viewportBoundsRange</code>[1]"
},
{
"vuid": "VUID-VkViewport-y-01775",
"text": " <code>y</code> <strong class=\"purple\">must</strong> be greater than or equal to <code>viewportBoundsRange</code>[0]"
},
{
"vuid": "VUID-VkViewport-y-01233",
"text": " <span class=\"eq\">(<code>y</code> &#43; <code>height</code>)</span> <strong class=\"purple\">must</strong> be less than or equal to <code>viewportBoundsRange</code>[1]"
}
],
"!(VK_VERSION_1_1,VK_KHR_maintenance1,VK_AMD_negative_viewport_height)": [
{
"vuid": "VUID-VkViewport-height-01772",
"text": " <code>height</code> <strong class=\"purple\">must</strong> be greater than <code>0.0</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_maintenance1,VK_AMD_negative_viewport_height)": [
{
"vuid": "VUID-VkViewport-y-01776",
"text": " <code>y</code> <strong class=\"purple\">must</strong> be less than or equal to <code>viewportBoundsRange</code>[1]"
},
{
"vuid": "VUID-VkViewport-y-01777",
"text": " <span class=\"eq\">(<code>y</code> &#43; <code>height</code>)</span> <strong class=\"purple\">must</strong> be greater than or equal to <code>viewportBoundsRange</code>[0]"
}
],
"(VK_EXT_depth_range_unrestricted)": [
{
"vuid": "VUID-VkViewport-minDepth-01234",
"text": " Unless <code><a href=\"#VK_EXT_depth_range_unrestricted\">VK_EXT_depth_range_unrestricted</a></code> extension is enabled <code>minDepth</code> <strong class=\"purple\">must</strong> be between <code>0.0</code> and <code>1.0</code>, inclusive"
},
{
"vuid": "VUID-VkViewport-maxDepth-01235",
"text": " Unless <code><a href=\"#VK_EXT_depth_range_unrestricted\">VK_EXT_depth_range_unrestricted</a></code> extension is enabled <code>maxDepth</code> <strong class=\"purple\">must</strong> be between <code>0.0</code> and <code>1.0</code>, inclusive"
}
],
"!(VK_EXT_depth_range_unrestricted)": [
{
"vuid": "VUID-VkViewport-minDepth-01234",
"text": " <code>minDepth</code> <strong class=\"purple\">must</strong> be between <code>0.0</code> and <code>1.0</code>, inclusive"
},
{
"vuid": "VUID-VkViewport-maxDepth-01235",
"text": " <code>maxDepth</code> <strong class=\"purple\">must</strong> be between <code>0.0</code> and <code>1.0</code>, inclusive"
}
]
},
"VkPipelineRasterizationStateCreateInfo": {
"core": [
{
"vuid": "VUID-VkPipelineRasterizationStateCreateInfo-depthClampEnable-00782",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-depthClamp,depth clamping&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>depthClampEnable</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
},
{
"vuid": "VUID-VkPipelineRasterizationStateCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkPipelineRasterizationStateCreateInfo-pNext-pNext",
"text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkPipelineRasterizationConservativeStateCreateInfoEXT\">VkPipelineRasterizationConservativeStateCreateInfoEXT</a> or <a href=\"#VkPipelineRasterizationStateRasterizationOrderAMD\">VkPipelineRasterizationStateRasterizationOrderAMD</a>"
},
{
"vuid": "VUID-VkPipelineRasterizationStateCreateInfo-sType-unique",
"text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkPipelineRasterizationStateCreateInfo-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkPipelineRasterizationStateCreateInfo-polygonMode-parameter",
"text": " <code>polygonMode</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPolygonMode\">VkPolygonMode</a> value"
},
{
"vuid": "VUID-VkPipelineRasterizationStateCreateInfo-cullMode-parameter",
"text": " <code>cullMode</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkCullModeFlagBits\">VkCullModeFlagBits</a> values"
},
{
"vuid": "VUID-VkPipelineRasterizationStateCreateInfo-frontFace-parameter",
"text": " <code>frontFace</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFrontFace\">VkFrontFace</a> value"
}
],
"!(VK_NV_fill_rectangle)": [
{
"vuid": "VUID-VkPipelineRasterizationStateCreateInfo-polygonMode-01413",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-fillModeNonSolid,non-solid fill modes&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>polygonMode</code> <strong class=\"purple\">must</strong> be <code>VK_POLYGON_MODE_FILL</code>"
}
],
"(VK_NV_fill_rectangle)": [
{
"vuid": "VUID-VkPipelineRasterizationStateCreateInfo-polygonMode-01507",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-fillModeNonSolid,non-solid fill modes&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>polygonMode</code> <strong class=\"purple\">must</strong> be <code>VK_POLYGON_MODE_FILL</code> or <code>VK_POLYGON_MODE_FILL_RECTANGLE_NV</code>"
},
{
"vuid": "VUID-VkPipelineRasterizationStateCreateInfo-polygonMode-01414",
"text": " If the <code><a href=\"#VK_NV_fill_rectangle\">VK_NV_fill_rectangle</a></code> extension is not enabled, <code>polygonMode</code> <strong class=\"purple\">must</strong> not be <code>VK_POLYGON_MODE_FILL_RECTANGLE_NV</code>"
}
]
},
"VkPipelineMultisampleStateCreateInfo": {
"core": [
{
"vuid": "VUID-VkPipelineMultisampleStateCreateInfo-sampleShadingEnable-00784",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-sampleRateShading,sample rate shading&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>sampleShadingEnable</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
},
{
"vuid": "VUID-VkPipelineMultisampleStateCreateInfo-alphaToOneEnable-00785",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-alphaToOne,alpha to one&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>alphaToOneEnable</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
},
{
"vuid": "VUID-VkPipelineMultisampleStateCreateInfo-minSampleShading-00786",
"text": " <code>minSampleShading</code> <strong class=\"purple\">must</strong> be in the range <span class=\"eq\">[0,1]</span>"
},
{
"vuid": "VUID-VkPipelineMultisampleStateCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkPipelineMultisampleStateCreateInfo-pNext-pNext",
"text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkPipelineCoverageModulationStateCreateInfoNV\">VkPipelineCoverageModulationStateCreateInfoNV</a>, <a href=\"#VkPipelineCoverageToColorStateCreateInfoNV\">VkPipelineCoverageToColorStateCreateInfoNV</a>, or <a href=\"#VkPipelineSampleLocationsStateCreateInfoEXT\">VkPipelineSampleLocationsStateCreateInfoEXT</a>"
},
{
"vuid": "VUID-VkPipelineMultisampleStateCreateInfo-sType-unique",
"text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkPipelineMultisampleStateCreateInfo-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkPipelineMultisampleStateCreateInfo-rasterizationSamples-parameter",
"text": " <code>rasterizationSamples</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSampleCountFlagBits\">VkSampleCountFlagBits</a> value"
},
{
"vuid": "VUID-VkPipelineMultisampleStateCreateInfo-pSampleMask-parameter",
"text": " If <code>pSampleMask</code> is not <code>NULL</code>, <code>pSampleMask</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of \\(\\lceil{\\mathit{rasterizationSamples} \\over 32}\\rceil\\) <code>VkSampleMask</code> values"
}
],
"(VK_NV_framebuffer_mixed_samples)": [
{
"vuid": "VUID-VkPipelineMultisampleStateCreateInfo-rasterizationSamples-01415",
"text": " If the subpass has any color attachments and <code>rasterizationSamples</code> is greater than the number of color samples, then <code>sampleShadingEnable</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
}
]
},
"VkPipelineRasterizationStateRasterizationOrderAMD": {
"(VK_AMD_rasterization_order)": [
{
"vuid": "VUID-VkPipelineRasterizationStateRasterizationOrderAMD-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD</code>"
},
{
"vuid": "VUID-VkPipelineRasterizationStateRasterizationOrderAMD-rasterizationOrder-parameter",
"text": " <code>rasterizationOrder</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkRasterizationOrderAMD\">VkRasterizationOrderAMD</a> value"
}
]
},
"VkPipelineSampleLocationsStateCreateInfoEXT": {
"(VK_EXT_sample_locations)": [
{
"vuid": "VUID-VkPipelineSampleLocationsStateCreateInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT</code>"
},
{
"vuid": "VUID-VkPipelineSampleLocationsStateCreateInfoEXT-sampleLocationsInfo-parameter",
"text": " <code>sampleLocationsInfo</code> <strong class=\"purple\">must</strong> be a valid <code>VkSampleLocationsInfoEXT</code> structure"
}
]
},
"VkSampleLocationsInfoEXT": {
"(VK_EXT_sample_locations)": [
{
"vuid": "VUID-VkSampleLocationsInfoEXT-sampleLocationsPerPixel-01526",
"text": " <code>sampleLocationsPerPixel</code> <strong class=\"purple\">must</strong> be a bit value that is set in <a href=\"#VkPhysicalDeviceSampleLocationsPropertiesEXT\">VkPhysicalDeviceSampleLocationsPropertiesEXT</a>::<code>sampleLocationSampleCounts</code>"
},
{
"vuid": "VUID-VkSampleLocationsInfoEXT-sampleLocationsCount-01527",
"text": " <code>sampleLocationsCount</code> <strong class=\"purple\">must</strong> equal <span class=\"eq\"><code>sampleLocationsPerPixel</code> {times} <code>sampleLocationGridSize.width</code> {times} <code>sampleLocationGridSize.height</code></span>"
},
{
"vuid": "VUID-VkSampleLocationsInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT</code>"
},
{
"vuid": "VUID-VkSampleLocationsInfoEXT-sampleLocationsPerPixel-parameter",
"text": " <code>sampleLocationsPerPixel</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSampleCountFlagBits\">VkSampleCountFlagBits</a> value"
},
{
"vuid": "VUID-VkSampleLocationsInfoEXT-pSampleLocations-parameter",
"text": " <code>pSampleLocations</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>sampleLocationsCount</code> <code>VkSampleLocationEXT</code> structures"
},
{
"vuid": "VUID-VkSampleLocationsInfoEXT-sampleLocationsCount-arraylength",
"text": " <code>sampleLocationsCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"vkCmdSetSampleLocationsEXT": {
"(VK_EXT_sample_locations)": [
{
"vuid": "VUID-vkCmdSetSampleLocationsEXT-None-01528",
"text": " The bound graphics pipeline <strong class=\"purple\">must</strong> have been created with the <code>VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT</code> dynamic state enabled"
},
{
"vuid": "VUID-vkCmdSetSampleLocationsEXT-sampleLocationsPerPixel-01529",
"text": " The <code>sampleLocationsPerPixel</code> member of <code>pSampleLocationsInfo</code> <strong class=\"purple\">must</strong> equal the <code>rasterizationSamples</code> member of the <a href=\"#VkPipelineMultisampleStateCreateInfo\">VkPipelineMultisampleStateCreateInfo</a> structure the bound graphics pipeline has been created with"
},
{
"vuid": "VUID-vkCmdSetSampleLocationsEXT-variableSampleLocations-01530",
"text": " If <a href=\"#VkPhysicalDeviceSampleLocationsPropertiesEXT\">VkPhysicalDeviceSampleLocationsPropertiesEXT</a>::<code>variableSampleLocations</code> is <code>VK_FALSE</code> then the current render pass <strong class=\"purple\">must</strong> have been begun by specifying a <a href=\"#VkRenderPassSampleLocationsBeginInfoEXT\">VkRenderPassSampleLocationsBeginInfoEXT</a> structure whose <code>pPostSubpassSampleLocations</code> member contains an element with a <code>subpassIndex</code> matching the current subpass index and the <code>sampleLocationsInfo</code> member of that element <strong class=\"purple\">must</strong> match the sample locations state pointed to by <code>pSampleLocationsInfo</code>"
},
{
"vuid": "VUID-vkCmdSetSampleLocationsEXT-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdSetSampleLocationsEXT-pSampleLocationsInfo-parameter",
"text": " <code>pSampleLocationsInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkSampleLocationsInfoEXT</code> structure"
},
{
"vuid": "VUID-vkCmdSetSampleLocationsEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdSetSampleLocationsEXT-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
}
]
},
"vkCmdSetLineWidth": {
"core": [
{
"vuid": "VUID-vkCmdSetLineWidth-None-00787",
"text": " The bound graphics pipeline <strong class=\"purple\">must</strong> have been created with the <code>VK_DYNAMIC_STATE_LINE_WIDTH</code> dynamic state enabled"
},
{
"vuid": "VUID-vkCmdSetLineWidth-lineWidth-00788",
"text": " If the <a href=\"#features-features-wideLines\">wide lines</a> feature is not enabled, <code>lineWidth</code> <strong class=\"purple\">must</strong> be <code>1.0</code>"
},
{
"vuid": "VUID-vkCmdSetLineWidth-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdSetLineWidth-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdSetLineWidth-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
}
]
},
"vkCmdSetDepthBias": {
"core": [
{
"vuid": "VUID-vkCmdSetDepthBias-None-00789",
"text": " The bound graphics pipeline <strong class=\"purple\">must</strong> have been created with the <code>VK_DYNAMIC_STATE_DEPTH_BIAS</code> dynamic state enabled"
},
{
"vuid": "VUID-vkCmdSetDepthBias-depthBiasClamp-00790",
"text": " If the <a href=\"#features-features-depthBiasClamp\">depth bias clamping</a> feature is not enabled, <code>depthBiasClamp</code> <strong class=\"purple\">must</strong> be <code>0.0</code>"
},
{
"vuid": "VUID-vkCmdSetDepthBias-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdSetDepthBias-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdSetDepthBias-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
}
]
},
"VkPipelineRasterizationConservativeStateCreateInfoEXT": {
"(VK_EXT_conservative_rasterization)": [
{
"vuid": "VUID-VkPipelineRasterizationConservativeStateCreateInfoEXT-extraPrimitiveOverestimationSize-01769",
"text": " <code>extraPrimitiveOverestimationSize</code> <strong class=\"purple\">must</strong> be in the range of <code>0.0</code> to <code>VkPhysicalDeviceConservativeRasterizationPropertiesEXT</code>::<code>maxExtraPrimitiveOverestimationSize</code> inclusive"
},
{
"vuid": "VUID-VkPipelineRasterizationConservativeStateCreateInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT</code>"
},
{
"vuid": "VUID-VkPipelineRasterizationConservativeStateCreateInfoEXT-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkPipelineRasterizationConservativeStateCreateInfoEXT-conservativeRasterizationMode-parameter",
"text": " <code>conservativeRasterizationMode</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkConservativeRasterizationModeEXT\">VkConservativeRasterizationModeEXT</a> value"
}
]
},
"VkPipelineDiscardRectangleStateCreateInfoEXT": {
"(VK_EXT_discard_rectangles)": [
{
"vuid": "VUID-VkPipelineDiscardRectangleStateCreateInfoEXT-discardRectangleCount-00582",
"text": " <code>discardRectangleCount</code> <strong class=\"purple\">must</strong> be between <code>0</code> and <code>VkPhysicalDeviceDiscardRectanglePropertiesEXT</code>::<code>maxDiscardRectangles</code>, inclusive"
},
{
"vuid": "VUID-VkPipelineDiscardRectangleStateCreateInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT</code>"
},
{
"vuid": "VUID-VkPipelineDiscardRectangleStateCreateInfoEXT-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkPipelineDiscardRectangleStateCreateInfoEXT-discardRectangleMode-parameter",
"text": " <code>discardRectangleMode</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDiscardRectangleModeEXT\">VkDiscardRectangleModeEXT</a> value"
}
]
},
"vkCmdSetDiscardRectangleEXT": {
"(VK_EXT_discard_rectangles)": [
{
"vuid": "VUID-vkCmdSetDiscardRectangleEXT-None-00583",
"text": " The bound graphics pipeline <strong class=\"purple\">must</strong> have been created with the <code>VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT</code> dynamic state enabled"
},
{
"vuid": "VUID-vkCmdSetDiscardRectangleEXT-firstDiscardRectangle-00585",
"text": " The sum of <code>firstDiscardRectangle</code> and <code>discardRectangleCount</code> <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkPhysicalDeviceDiscardRectanglePropertiesEXT\">VkPhysicalDeviceDiscardRectanglePropertiesEXT</a>::<code>maxDiscardRectangles</code>"
},
{
"vuid": "VUID-vkCmdSetDiscardRectangleEXT-x-00587",
"text": " The <code>x</code> and <code>y</code> member of <code>offset</code> in each <a href=\"#VkRect2D\">VkRect2D</a> element of <code>pDiscardRectangles</code> <strong class=\"purple\">must</strong> be greater than or equal to <code>0</code>"
},
{
"vuid": "VUID-vkCmdSetDiscardRectangleEXT-offset-00588",
"text": " Evaluation of <span class=\"eq\">(<code>offset.x</code> &#43; <code>extent.width</code>)</span> in each <a href=\"#VkRect2D\">VkRect2D</a> element of <code>pDiscardRectangles</code> <strong class=\"purple\">must</strong> not cause a signed integer addition overflow"
},
{
"vuid": "VUID-vkCmdSetDiscardRectangleEXT-offset-00589",
"text": " Evaluation of <span class=\"eq\">(<code>offset.y</code> &#43; <code>extent.height</code>)</span> in each <a href=\"#VkRect2D\">VkRect2D</a> element of <code>pDiscardRectangles</code> <strong class=\"purple\">must</strong> not cause a signed integer addition overflow"
},
{
"vuid": "VUID-vkCmdSetDiscardRectangleEXT-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdSetDiscardRectangleEXT-pDiscardRectangles-parameter",
"text": " <code>pDiscardRectangles</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>discardRectangleCount</code> <code>VkRect2D</code> structures"
},
{
"vuid": "VUID-vkCmdSetDiscardRectangleEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdSetDiscardRectangleEXT-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdSetDiscardRectangleEXT-discardRectangleCount-arraylength",
"text": " <code>discardRectangleCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"vkCmdSetScissor": {
"core": [
{
"vuid": "VUID-vkCmdSetScissor-None-00590",
"text": " The bound graphics pipeline <strong class=\"purple\">must</strong> have been created with the <code>VK_DYNAMIC_STATE_SCISSOR</code> dynamic state enabled"
},
{
"vuid": "VUID-vkCmdSetScissor-firstScissor-00591",
"text": " <code>firstScissor</code> <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceLimits</code>::<code>maxViewports</code>"
},
{
"vuid": "VUID-vkCmdSetScissor-firstScissor-00592",
"text": " The sum of <code>firstScissor</code> and <code>scissorCount</code> <strong class=\"purple\">must</strong> be between <code>1</code> and <code>VkPhysicalDeviceLimits</code>::<code>maxViewports</code>, inclusive"
},
{
"vuid": "VUID-vkCmdSetScissor-firstScissor-00593",
"text": " If the <a href=\"#features-features-multiViewport\">multiple viewports</a> feature is not enabled, <code>firstScissor</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-vkCmdSetScissor-scissorCount-00594",
"text": " If the <a href=\"#features-features-multiViewport\">multiple viewports</a> feature is not enabled, <code>scissorCount</code> <strong class=\"purple\">must</strong> be <code>1</code>"
},
{
"vuid": "VUID-vkCmdSetScissor-x-00595",
"text": " The <code>x</code> and <code>y</code> members of <code>offset</code> <strong class=\"purple\">must</strong> be greater than or equal to <code>0</code>"
},
{
"vuid": "VUID-vkCmdSetScissor-offset-00596",
"text": " Evaluation of <span class=\"eq\">(<code>offset.x</code> &#43; <code>extent.width</code>)</span> <strong class=\"purple\">must</strong> not cause a signed integer addition overflow"
},
{
"vuid": "VUID-vkCmdSetScissor-offset-00597",
"text": " Evaluation of <span class=\"eq\">(<code>offset.y</code> &#43; <code>extent.height</code>)</span> <strong class=\"purple\">must</strong> not cause a signed integer addition overflow"
},
{
"vuid": "VUID-vkCmdSetScissor-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdSetScissor-pScissors-parameter",
"text": " <code>pScissors</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>scissorCount</code> <code>VkRect2D</code> structures"
},
{
"vuid": "VUID-vkCmdSetScissor-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdSetScissor-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdSetScissor-scissorCount-arraylength",
"text": " <code>scissorCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"VkPipelineDepthStencilStateCreateInfo": {
"core": [
{
"vuid": "VUID-VkPipelineDepthStencilStateCreateInfo-depthBoundsTestEnable-00598",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-depthBounds,depth bounds testing&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>depthBoundsTestEnable</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
},
{
"vuid": "VUID-VkPipelineDepthStencilStateCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkPipelineDepthStencilStateCreateInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkPipelineDepthStencilStateCreateInfo-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkPipelineDepthStencilStateCreateInfo-depthCompareOp-parameter",
"text": " <code>depthCompareOp</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCompareOp\">VkCompareOp</a> value"
},
{
"vuid": "VUID-VkPipelineDepthStencilStateCreateInfo-front-parameter",
"text": " <code>front</code> <strong class=\"purple\">must</strong> be a valid <code>VkStencilOpState</code> structure"
},
{
"vuid": "VUID-VkPipelineDepthStencilStateCreateInfo-back-parameter",
"text": " <code>back</code> <strong class=\"purple\">must</strong> be a valid <code>VkStencilOpState</code> structure"
}
]
},
"vkCmdSetDepthBounds": {
"core": [
{
"vuid": "VUID-vkCmdSetDepthBounds-None-00599",
"text": " The bound graphics pipeline <strong class=\"purple\">must</strong> have been created with the <code>VK_DYNAMIC_STATE_DEPTH_BOUNDS</code> dynamic state enabled"
},
{
"vuid": "VUID-vkCmdSetDepthBounds-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdSetDepthBounds-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdSetDepthBounds-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
}
],
"(VK_EXT_depth_range_unrestricted)": [
{
"vuid": "VUID-vkCmdSetDepthBounds-minDepthBounds-00600",
"text": " Unless the <code><a href=\"#VK_EXT_depth_range_unrestricted\">VK_EXT_depth_range_unrestricted</a></code> extension is enabled <code>minDepthBounds</code> <strong class=\"purple\">must</strong> be between <code>0.0</code> and <code>1.0</code>, inclusive"
},
{
"vuid": "VUID-vkCmdSetDepthBounds-maxDepthBounds-00601",
"text": " Unless the <code><a href=\"#VK_EXT_depth_range_unrestricted\">VK_EXT_depth_range_unrestricted</a></code> extension is enabled <code>maxDepthBounds</code> <strong class=\"purple\">must</strong> be between <code>0.0</code> and <code>1.0</code>, inclusive"
}
],
"!(VK_EXT_depth_range_unrestricted)": [
{
"vuid": "VUID-vkCmdSetDepthBounds-minDepthBounds-00600",
"text": " <code>minDepthBounds</code> <strong class=\"purple\">must</strong> be between <code>0.0</code> and <code>1.0</code>, inclusive"
},
{
"vuid": "VUID-vkCmdSetDepthBounds-maxDepthBounds-00601",
"text": " <code>maxDepthBounds</code> <strong class=\"purple\">must</strong> be between <code>0.0</code> and <code>1.0</code>, inclusive"
}
]
},
"VkStencilOpState": {
"core": [
{
"vuid": "VUID-VkStencilOpState-failOp-parameter",
"text": " <code>failOp</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkStencilOp\">VkStencilOp</a> value"
},
{
"vuid": "VUID-VkStencilOpState-passOp-parameter",
"text": " <code>passOp</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkStencilOp\">VkStencilOp</a> value"
},
{
"vuid": "VUID-VkStencilOpState-depthFailOp-parameter",
"text": " <code>depthFailOp</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkStencilOp\">VkStencilOp</a> value"
},
{
"vuid": "VUID-VkStencilOpState-compareOp-parameter",
"text": " <code>compareOp</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCompareOp\">VkCompareOp</a> value"
}
]
},
"vkCmdSetStencilCompareMask": {
"core": [
{
"vuid": "VUID-vkCmdSetStencilCompareMask-None-00602",
"text": " The bound graphics pipeline <strong class=\"purple\">must</strong> have been created with the <code>VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK</code> dynamic state enabled"
},
{
"vuid": "VUID-vkCmdSetStencilCompareMask-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdSetStencilCompareMask-faceMask-parameter",
"text": " <code>faceMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkStencilFaceFlagBits\">VkStencilFaceFlagBits</a> values"
},
{
"vuid": "VUID-vkCmdSetStencilCompareMask-faceMask-requiredbitmask",
"text": " <code>faceMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-vkCmdSetStencilCompareMask-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdSetStencilCompareMask-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
}
]
},
"vkCmdSetStencilWriteMask": {
"core": [
{
"vuid": "VUID-vkCmdSetStencilWriteMask-None-00603",
"text": " The bound graphics pipeline <strong class=\"purple\">must</strong> have been created with the <code>VK_DYNAMIC_STATE_STENCIL_WRITE_MASK</code> dynamic state enabled"
},
{
"vuid": "VUID-vkCmdSetStencilWriteMask-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdSetStencilWriteMask-faceMask-parameter",
"text": " <code>faceMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkStencilFaceFlagBits\">VkStencilFaceFlagBits</a> values"
},
{
"vuid": "VUID-vkCmdSetStencilWriteMask-faceMask-requiredbitmask",
"text": " <code>faceMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-vkCmdSetStencilWriteMask-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdSetStencilWriteMask-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
}
]
},
"vkCmdSetStencilReference": {
"core": [
{
"vuid": "VUID-vkCmdSetStencilReference-None-00604",
"text": " The bound graphics pipeline <strong class=\"purple\">must</strong> have been created with the <code>VK_DYNAMIC_STATE_STENCIL_REFERENCE</code> dynamic state enabled"
},
{
"vuid": "VUID-vkCmdSetStencilReference-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdSetStencilReference-faceMask-parameter",
"text": " <code>faceMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkStencilFaceFlagBits\">VkStencilFaceFlagBits</a> values"
},
{
"vuid": "VUID-vkCmdSetStencilReference-faceMask-requiredbitmask",
"text": " <code>faceMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-vkCmdSetStencilReference-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdSetStencilReference-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
}
]
},
"VkPipelineCoverageToColorStateCreateInfoNV": {
"(VK_NV_fragment_coverage_to_color)": [
{
"vuid": "VUID-VkPipelineCoverageToColorStateCreateInfoNV-coverageToColorEnable-01404",
"text": " If <code>coverageToColorEnable</code> is <code>VK_TRUE</code>, then the render pass subpass indicated by <a href=\"#VkGraphicsPipelineCreateInfo\">VkGraphicsPipelineCreateInfo</a>::<code>renderPass</code> and <a href=\"#VkGraphicsPipelineCreateInfo\">VkGraphicsPipelineCreateInfo</a>::<code>subpass</code> <strong class=\"purple\">must</strong> have a color attachment at the location selected by <code>coverageToColorLocation</code>, with a <a href=\"#VkFormat\">VkFormat</a> of <code>VK_FORMAT_R8_UINT</code>, <code>VK_FORMAT_R8_SINT</code>, <code>VK_FORMAT_R16_UINT</code>, <code>VK_FORMAT_R16_SINT</code>, <code>VK_FORMAT_R32_UINT</code>, or <code>VK_FORMAT_R32_SINT</code>"
},
{
"vuid": "VUID-VkPipelineCoverageToColorStateCreateInfoNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV</code>"
},
{
"vuid": "VUID-VkPipelineCoverageToColorStateCreateInfoNV-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
}
]
},
"VkPipelineCoverageModulationStateCreateInfoNV": {
"(VK_NV_framebuffer_mixed_samples)": [
{
"vuid": "VUID-VkPipelineCoverageModulationStateCreateInfoNV-coverageModulationTableEnable-01405",
"text": " If <code>coverageModulationTableEnable</code> is <code>VK_TRUE</code>, <code>coverageModulationTableCount</code> <strong class=\"purple\">must</strong> be equal to the number of rasterization samples divided by the number of color samples in the subpass."
},
{
"vuid": "VUID-VkPipelineCoverageModulationStateCreateInfoNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV</code>"
},
{
"vuid": "VUID-VkPipelineCoverageModulationStateCreateInfoNV-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkPipelineCoverageModulationStateCreateInfoNV-coverageModulationMode-parameter",
"text": " <code>coverageModulationMode</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCoverageModulationModeNV\">VkCoverageModulationModeNV</a> value"
},
{
"vuid": "VUID-VkPipelineCoverageModulationStateCreateInfoNV-coverageModulationTableCount-arraylength",
"text": " <code>coverageModulationTableCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"VkPipelineColorBlendStateCreateInfo": {
"core": [
{
"vuid": "VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-independentBlend,independent blending&amp;amp;gt;&amp;amp;gt; feature is not enabled, all elements of <code>pAttachments</code> <strong class=\"purple\">must</strong> be identical"
},
{
"vuid": "VUID-VkPipelineColorBlendStateCreateInfo-logicOpEnable-00606",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-logicOp,logic operations&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>logicOpEnable</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
},
{
"vuid": "VUID-VkPipelineColorBlendStateCreateInfo-logicOpEnable-00607",
"text": " If <code>logicOpEnable</code> is <code>VK_TRUE</code>, <code>logicOp</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkLogicOp\">VkLogicOp</a> value"
},
{
"vuid": "VUID-VkPipelineColorBlendStateCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkPipelineColorBlendStateCreateInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkPipelineColorBlendAdvancedStateCreateInfoEXT\">VkPipelineColorBlendAdvancedStateCreateInfoEXT</a>"
},
{
"vuid": "VUID-VkPipelineColorBlendStateCreateInfo-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-parameter",
"text": " If <code>attachmentCount</code> is not <code>0</code>, <code>pAttachments</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>attachmentCount</code> valid <code>VkPipelineColorBlendAttachmentState</code> structures"
}
]
},
"VkPipelineColorBlendAttachmentState": {
"core": [
{
"vuid": "VUID-VkPipelineColorBlendAttachmentState-srcColorBlendFactor-00608",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-dualSrcBlend,dual source blending&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>srcColorBlendFactor</code> <strong class=\"purple\">must</strong> not be <code>VK_BLEND_FACTOR_SRC1_COLOR</code>, <code>VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR</code>, <code>VK_BLEND_FACTOR_SRC1_ALPHA</code>, or <code>VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA</code>"
},
{
"vuid": "VUID-VkPipelineColorBlendAttachmentState-dstColorBlendFactor-00609",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-dualSrcBlend,dual source blending&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>dstColorBlendFactor</code> <strong class=\"purple\">must</strong> not be <code>VK_BLEND_FACTOR_SRC1_COLOR</code>, <code>VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR</code>, <code>VK_BLEND_FACTOR_SRC1_ALPHA</code>, or <code>VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA</code>"
},
{
"vuid": "VUID-VkPipelineColorBlendAttachmentState-srcAlphaBlendFactor-00610",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-dualSrcBlend,dual source blending&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>srcAlphaBlendFactor</code> <strong class=\"purple\">must</strong> not be <code>VK_BLEND_FACTOR_SRC1_COLOR</code>, <code>VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR</code>, <code>VK_BLEND_FACTOR_SRC1_ALPHA</code>, or <code>VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA</code>"
},
{
"vuid": "VUID-VkPipelineColorBlendAttachmentState-dstAlphaBlendFactor-00611",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-dualSrcBlend,dual source blending&amp;amp;gt;&amp;amp;gt; feature is not enabled, <code>dstAlphaBlendFactor</code> <strong class=\"purple\">must</strong> not be <code>VK_BLEND_FACTOR_SRC1_COLOR</code>, <code>VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR</code>, <code>VK_BLEND_FACTOR_SRC1_ALPHA</code>, or <code>VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA</code>"
},
{
"vuid": "VUID-VkPipelineColorBlendAttachmentState-srcColorBlendFactor-parameter",
"text": " <code>srcColorBlendFactor</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBlendFactor\">VkBlendFactor</a> value"
},
{
"vuid": "VUID-VkPipelineColorBlendAttachmentState-dstColorBlendFactor-parameter",
"text": " <code>dstColorBlendFactor</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBlendFactor\">VkBlendFactor</a> value"
},
{
"vuid": "VUID-VkPipelineColorBlendAttachmentState-colorBlendOp-parameter",
"text": " <code>colorBlendOp</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBlendOp\">VkBlendOp</a> value"
},
{
"vuid": "VUID-VkPipelineColorBlendAttachmentState-srcAlphaBlendFactor-parameter",
"text": " <code>srcAlphaBlendFactor</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBlendFactor\">VkBlendFactor</a> value"
},
{
"vuid": "VUID-VkPipelineColorBlendAttachmentState-dstAlphaBlendFactor-parameter",
"text": " <code>dstAlphaBlendFactor</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBlendFactor\">VkBlendFactor</a> value"
},
{
"vuid": "VUID-VkPipelineColorBlendAttachmentState-alphaBlendOp-parameter",
"text": " <code>alphaBlendOp</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBlendOp\">VkBlendOp</a> value"
},
{
"vuid": "VUID-VkPipelineColorBlendAttachmentState-colorWriteMask-parameter",
"text": " <code>colorWriteMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkColorComponentFlagBits\">VkColorComponentFlagBits</a> values"
}
],
"(VK_EXT_blend_operation_advanced)": [
{
"vuid": "VUID-VkPipelineColorBlendAttachmentState-colorBlendOp-01406",
"text": " If either of <code>colorBlendOp</code> or <code>alphaBlendOp</code> is an &amp;amp;lt;&amp;amp;lt;framebuffer-blend-advanced,advanced blend operation&amp;amp;gt;&amp;amp;gt;, then <code>colorBlendOp</code> <strong class=\"purple\">must</strong> equal <code>alphaBlendOp</code>"
},
{
"vuid": "VUID-VkPipelineColorBlendAttachmentState-advancedBlendIndependentBlend-01407",
"text": " If <a href=\"#VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT\">VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT</a>::<code>advancedBlendIndependentBlend</code> is <code>VK_FALSE</code> and <code>colorBlendOp</code> is an &amp;amp;lt;&amp;amp;lt;framebuffer-blend-advanced,advanced blend operation&amp;amp;gt;&amp;amp;gt;, then <code>colorBlendOp</code> <strong class=\"purple\">must</strong> be the same for all attachments."
},
{
"vuid": "VUID-VkPipelineColorBlendAttachmentState-advancedBlendIndependentBlend-01408",
"text": " If <a href=\"#VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT\">VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT</a>::<code>advancedBlendIndependentBlend</code> is <code>VK_FALSE</code> and <code>alphaBlendOp</code> is an &amp;amp;lt;&amp;amp;lt;framebuffer-blend-advanced,advanced blend operation&amp;amp;gt;&amp;amp;gt;, then <code>alphaBlendOp</code> <strong class=\"purple\">must</strong> be the same for all attachments."
},
{
"vuid": "VUID-VkPipelineColorBlendAttachmentState-advancedBlendAllOperations-01409",
"text": " If <a href=\"#VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT\">VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT</a>::<code>advancedBlendAllOperations</code> is <code>VK_FALSE</code>, then <code>colorBlendOp</code> <strong class=\"purple\">must</strong> not be <code>VK_BLEND_OP_ZERO_EXT</code>, <code>VK_BLEND_OP_SRC_EXT</code>, <code>VK_BLEND_OP_DST_EXT</code>, <code>VK_BLEND_OP_SRC_OVER_EXT</code>, <code>VK_BLEND_OP_DST_OVER_EXT</code>, <code>VK_BLEND_OP_SRC_IN_EXT</code>, <code>VK_BLEND_OP_DST_IN_EXT</code>, <code>VK_BLEND_OP_SRC_OUT_EXT</code>, <code>VK_BLEND_OP_DST_OUT_EXT</code>, <code>VK_BLEND_OP_SRC_ATOP_EXT</code>, <code>VK_BLEND_OP_DST_ATOP_EXT</code>, <code>VK_BLEND_OP_XOR_EXT</code>, <code>VK_BLEND_OP_INVERT_EXT</code>, <code>VK_BLEND_OP_INVERT_RGB_EXT</code>, <code>VK_BLEND_OP_LINEARDODGE_EXT</code>, <code>VK_BLEND_OP_LINEARBURN_EXT</code>, <code>VK_BLEND_OP_VIVIDLIGHT_EXT</code>, <code>VK_BLEND_OP_LINEARLIGHT_EXT</code>, <code>VK_BLEND_OP_PINLIGHT_EXT</code>, <code>VK_BLEND_OP_HARDMIX_EXT</code>, <code>VK_BLEND_OP_PLUS_EXT</code>, <code>VK_BLEND_OP_PLUS_CLAMPED_EXT</code>, <code>VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT</code>, <code>VK_BLEND_OP_PLUS_DARKER_EXT</code>, <code>VK_BLEND_OP_MINUS_EXT</code>, <code>VK_BLEND_OP_MINUS_CLAMPED_EXT</code>, <code>VK_BLEND_OP_CONTRAST_EXT</code>, <code>VK_BLEND_OP_INVERT_OVG_EXT</code>, <code>VK_BLEND_OP_RED_EXT</code>, <code>VK_BLEND_OP_GREEN_EXT</code>, or <code>VK_BLEND_OP_BLUE_EXT</code>"
},
{
"vuid": "VUID-VkPipelineColorBlendAttachmentState-colorBlendOp-01410",
"text": " If <code>colorBlendOp</code> or <code>alphaBlendOp</code> is an &amp;amp;lt;&amp;amp;lt;framebuffer-blend-advanced,advanced blend operation&amp;amp;gt;&amp;amp;gt;, then <a href=\"#VkSubpassDescription\">VkSubpassDescription</a>::<code>colorAttachmentCount</code> of the subpass this pipeline is compiled against <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT\">VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT</a>::advancedBlendMaxColorAttachments"
}
]
},
"vkCmdSetBlendConstants": {
"core": [
{
"vuid": "VUID-vkCmdSetBlendConstants-None-00612",
"text": " The bound graphics pipeline <strong class=\"purple\">must</strong> have been created with the <code>VK_DYNAMIC_STATE_BLEND_CONSTANTS</code> dynamic state enabled"
},
{
"vuid": "VUID-vkCmdSetBlendConstants-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdSetBlendConstants-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdSetBlendConstants-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
}
]
},
"VkPipelineColorBlendAdvancedStateCreateInfoEXT": {
"(VK_EXT_blend_operation_advanced)": [
{
"vuid": "VUID-VkPipelineColorBlendAdvancedStateCreateInfoEXT-srcPremultiplied-01424",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-limits-advancedBlendNonPremultipliedSrcColor,non-premultiplied source color&amp;amp;gt;&amp;amp;gt; property is not supported, <code>srcPremultiplied</code> <strong class=\"purple\">must</strong> be <code>VK_TRUE</code>"
},
{
"vuid": "VUID-VkPipelineColorBlendAdvancedStateCreateInfoEXT-dstPremultiplied-01425",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-limits-advancedBlendNonPremultipliedDstColor,non-premultiplied destination color&amp;amp;gt;&amp;amp;gt; property is not supported, <code>dstPremultiplied</code> <strong class=\"purple\">must</strong> be <code>VK_TRUE</code>"
},
{
"vuid": "VUID-VkPipelineColorBlendAdvancedStateCreateInfoEXT-blendOverlap-01426",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-limits-advancedBlendCorrelatedOverlap,correlated overlap&amp;amp;gt;&amp;amp;gt; property is not supported, <code>blendOverlap</code> <strong class=\"purple\">must</strong> be <code>VK_BLEND_OVERLAP_UNCORRELATED_EXT</code>"
},
{
"vuid": "VUID-VkPipelineColorBlendAdvancedStateCreateInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT</code>"
},
{
"vuid": "VUID-VkPipelineColorBlendAdvancedStateCreateInfoEXT-blendOverlap-parameter",
"text": " <code>blendOverlap</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBlendOverlapEXT\">VkBlendOverlapEXT</a> value"
}
]
},
"vkCmdDispatch": {
"core": [
{
"vuid": "VUID-vkCmdDispatch-groupCountX-00386",
"text": " <code>groupCountX</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxComputeWorkGroupCount</code>[0]"
},
{
"vuid": "VUID-vkCmdDispatch-groupCountY-00387",
"text": " <code>groupCountY</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxComputeWorkGroupCount</code>[1]"
},
{
"vuid": "VUID-vkCmdDispatch-groupCountZ-00388",
"text": " <code>groupCountZ</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxComputeWorkGroupCount</code>[2]"
},
{
"vuid": "VUID-vkCmdDispatch-None-00389",
"text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_COMPUTE</code>, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at <code>VK_PIPELINE_BIND_POINT_COMPUTE</code>, with a <code>VkPipelineLayout</code> that is compatible for set <em>n</em>, with the <code>VkPipelineLayout</code> used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDispatch-None-00390",
"text": " Descriptors in each bound descriptor set, specified via <code>vkCmdBindDescriptorSets</code>, <strong class=\"purple\">must</strong> be valid if they are statically used by the bound <code>VkPipeline</code> object, specified via <code>vkCmdBindPipeline</code>"
},
{
"vuid": "VUID-vkCmdDispatch-None-00391",
"text": " A valid compute pipeline <strong class=\"purple\">must</strong> be bound to the current command buffer with <code>VK_PIPELINE_BIND_POINT_COMPUTE</code>"
},
{
"vuid": "VUID-vkCmdDispatch-None-00392",
"text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_COMPUTE</code>, a push constant value <strong class=\"purple\">must</strong> have been set for <code>VK_PIPELINE_BIND_POINT_COMPUTE</code>, with a <code>VkPipelineLayout</code> that is compatible for push constants with the one used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDispatch-None-00393",
"text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_COMPUTE</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used to sample from any <code>VkImage</code> with a <code>VkImageView</code> of the type <code>VK_IMAGE_VIEW_TYPE_3D</code>, <code>VK_IMAGE_VIEW_TYPE_CUBE</code>, <code>VK_IMAGE_VIEW_TYPE_1D_ARRAY</code>, <code>VK_IMAGE_VIEW_TYPE_2D_ARRAY</code> or <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code>, in any shader stage"
},
{
"vuid": "VUID-vkCmdDispatch-None-00394",
"text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_COMPUTE</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used with any of the SPIR-V <code>OpImageSample*</code> or <code>OpImageSparseSample*</code> instructions with <code>ImplicitLod</code>, <code>Dref</code> or <code>Proj</code> in their name, in any shader stage"
},
{
"vuid": "VUID-vkCmdDispatch-None-00395",
"text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_COMPUTE</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used with any of the SPIR-V <code>OpImageSample*</code> or <code>OpImageSparseSample*</code> instructions that includes a LOD bias or any offset values, in any shader stage"
},
{
"vuid": "VUID-vkCmdDispatch-None-00396",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_COMPUTE</code> accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
},
{
"vuid": "VUID-vkCmdDispatch-None-00397",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_COMPUTE</code> accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
},
{
"vuid": "VUID-vkCmdDispatch-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdDispatch-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDispatch-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support compute operations"
},
{
"vuid": "VUID-vkCmdDispatch-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
}
],
"!(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"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> or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> for linearly or optimally tiled images, respectively"
}
],
"(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-vkCmdDispatch-formatFeatures-01949",
"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 <a href=\"#VkAndroidHardwareBufferFormatPropertiesANDROID\">VkAndroidHardwareBufferFormatPropertiesANDROID</a>::<code>formatFeatures</code> returned by <a href=\"#vkGetAndroidHardwareBufferPropertiesANDROID\">vkGetAndroidHardwareBufferPropertiesANDROID</a> for external format images, or by <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>linearTilingFeatures</code> or <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>optimalTilingFeatures</code> returned by <a href=\"#vkGetPhysicalDeviceFormatProperties\">vkGetPhysicalDeviceFormatProperties</a> for non-external format linearly or optimally tiled images, respectively"
}
],
"(VK_IMG_filter_cubic)+!(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"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> or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> for linearly or optimally tiled images, respectively"
}
],
"(VK_IMG_filter_cubic)+(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-vkCmdDispatch-formatFeatures-01950",
"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 <a href=\"#VkAndroidHardwareBufferFormatPropertiesANDROID\">VkAndroidHardwareBufferFormatPropertiesANDROID</a>::<code>formatFeatures</code> returned by <a href=\"#vkGetAndroidHardwareBufferPropertiesANDROID\">vkGetAndroidHardwareBufferPropertiesANDROID</a> for external format images, or by <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>linearTilingFeatures</code> or <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>optimalTilingFeatures</code> returned by <a href=\"#vkGetPhysicalDeviceFormatProperties\">vkGetPhysicalDeviceFormatProperties</a> for non-external format linearly or optimally tiled images, respectively"
}
],
"(VK_IMG_filter_cubic)": [
{
"vuid": "VUID-vkCmdDispatch-None-00400",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_IMG</code> as a result of this command <strong class=\"purple\">must</strong> not have a <a href=\"#VkImageViewType\">VkImageViewType</a> of <code>VK_IMAGE_VIEW_TYPE_3D</code>, <code>VK_IMAGE_VIEW_TYPE_CUBE</code>, or <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdDispatch-commandBuffer-01844",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, and any pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_COMPUTE</code> reads from or writes to any image or buffer, that image or buffer <strong class=\"purple\">must</strong> not be a protected image or protected buffer."
},
{
"vuid": "VUID-vkCmdDispatch-commandBuffer-01845",
"text": " If <code>commandBuffer</code> is a protected command buffer, and any pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_POINT_COMPUTE</code> writes to any image or buffer, that image or buffer <strong class=\"purple\">must</strong> not be an unprotected image or unprotected buffer."
},
{
"vuid": "VUID-vkCmdDispatch-commandBuffer-01846",
"text": " If <code>commandBuffer</code> is a protected command buffer, and any pipeline stage other than the compute pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_POINT_COMPUTE</code> reads from any image or buffer, the image or buffer <strong class=\"purple\">must</strong> not be a protected image or protected buffer."
}
]
},
"vkCmdDispatchIndirect": {
"core": [
{
"vuid": "VUID-vkCmdDispatchIndirect-buffer-00401",
"text": " If <code>buffer</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
},
{
"vuid": "VUID-vkCmdDispatchIndirect-None-00402",
"text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_COMPUTE</code>, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at <code>VK_PIPELINE_BIND_POINT_COMPUTE</code>, with a <code>VkPipelineLayout</code> that is compatible for set <em>n</em>, with the <code>VkPipelineLayout</code> used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDispatchIndirect-None-00403",
"text": " Descriptors in each bound descriptor set, specified via <code>vkCmdBindDescriptorSets</code>, <strong class=\"purple\">must</strong> be valid if they are statically used by the bound <code>VkPipeline</code> object, specified via <code>vkCmdBindPipeline</code>"
},
{
"vuid": "VUID-vkCmdDispatchIndirect-None-00404",
"text": " A valid compute pipeline <strong class=\"purple\">must</strong> be bound to the current command buffer with <code>VK_PIPELINE_BIND_POINT_COMPUTE</code>"
},
{
"vuid": "VUID-vkCmdDispatchIndirect-buffer-00405",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> have been created with the <code>VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT</code> bit set"
},
{
"vuid": "VUID-vkCmdDispatchIndirect-offset-00406",
"text": " <code>offset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-vkCmdDispatchIndirect-offset-00407",
"text": " The sum of <code>offset</code> and the size of <code>VkDispatchIndirectCommand</code> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
},
{
"vuid": "VUID-vkCmdDispatchIndirect-None-00408",
"text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_COMPUTE</code>, a push constant value <strong class=\"purple\">must</strong> have been set for <code>VK_PIPELINE_BIND_POINT_COMPUTE</code>, with a <code>VkPipelineLayout</code> that is compatible for push constants with the one used to create the current <code>VkPipeline</code>, as described in &amp;amp;lt;&amp;amp;lt;descriptorsets-compatibility&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDispatchIndirect-None-00409",
"text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_COMPUTE</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used to sample from any <code>VkImage</code> with a <code>VkImageView</code> of the type <code>VK_IMAGE_VIEW_TYPE_3D</code>, <code>VK_IMAGE_VIEW_TYPE_CUBE</code>, <code>VK_IMAGE_VIEW_TYPE_1D_ARRAY</code>, <code>VK_IMAGE_VIEW_TYPE_2D_ARRAY</code> or <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code>, in any shader stage"
},
{
"vuid": "VUID-vkCmdDispatchIndirect-None-00410",
"text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_COMPUTE</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used with any of the SPIR-V <code>OpImageSample*</code> or <code>OpImageSparseSample*</code> instructions with <code>ImplicitLod</code>, <code>Dref</code> or <code>Proj</code> in their name, in any shader stage"
},
{
"vuid": "VUID-vkCmdDispatchIndirect-None-00411",
"text": " If any <code>VkSampler</code> object that is accessed from a shader by the <code>VkPipeline</code> bound to <code>VK_PIPELINE_BIND_POINT_COMPUTE</code> uses unnormalized coordinates, it <strong class=\"purple\">must</strong> not be used with any of the SPIR-V <code>OpImageSample*</code> or <code>OpImageSparseSample*</code> instructions that includes a LOD bias or any offset values, in any shader stage"
},
{
"vuid": "VUID-vkCmdDispatchIndirect-None-00412",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_COMPUTE</code> accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
},
{
"vuid": "VUID-vkCmdDispatchIndirect-None-00413",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-robustBufferAccess,robust buffer access&amp;amp;gt;&amp;amp;gt; feature is not enabled, and any shader stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_COMPUTE</code> accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of that buffer specified in the bound descriptor set"
},
{
"vuid": "VUID-vkCmdDispatchIndirect-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdDispatchIndirect-buffer-parameter",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdDispatchIndirect-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDispatchIndirect-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support compute operations"
},
{
"vuid": "VUID-vkCmdDispatchIndirect-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
},
{
"vuid": "VUID-vkCmdDispatchIndirect-commonparent",
"text": " Both of <code>buffer</code>, and <code>commandBuffer</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
],
"!(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"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> or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> for linearly or optimally tiled images, respectively"
}
],
"(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-vkCmdDispatchIndirect-formatFeatures-01951",
"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 <a href=\"#VkAndroidHardwareBufferFormatPropertiesANDROID\">VkAndroidHardwareBufferFormatPropertiesANDROID</a>::<code>formatFeatures</code> returned by <a href=\"#vkGetAndroidHardwareBufferPropertiesANDROID\">vkGetAndroidHardwareBufferPropertiesANDROID</a> for external format images, or by <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>linearTilingFeatures</code> or <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>optimalTilingFeatures</code> returned by <a href=\"#vkGetPhysicalDeviceFormatProperties\">vkGetPhysicalDeviceFormatProperties</a> for non-external format linearly or optimally tiled images, respectively"
}
],
"(VK_IMG_filter_cubic)+!(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"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> or <code>VkFormatProperties</code>::<code>optimalTilingFeatures</code> returned by <code>vkGetPhysicalDeviceFormatProperties</code> for linearly or optimally tiled images, respectively"
}
],
"(VK_IMG_filter_cubic)+(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-vkCmdDispatchIndirect-formatFeatures-01952",
"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 <a href=\"#VkAndroidHardwareBufferFormatPropertiesANDROID\">VkAndroidHardwareBufferFormatPropertiesANDROID</a>::<code>formatFeatures</code> returned by <a href=\"#vkGetAndroidHardwareBufferPropertiesANDROID\">vkGetAndroidHardwareBufferPropertiesANDROID</a> for external format images, or by <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>linearTilingFeatures</code> or <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>optimalTilingFeatures</code> returned by <a href=\"#vkGetPhysicalDeviceFormatProperties\">vkGetPhysicalDeviceFormatProperties</a> for non-external format linearly or optimally tiled images, respectively"
}
],
"(VK_IMG_filter_cubic)": [
{
"vuid": "VUID-vkCmdDispatchIndirect-None-00416",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_IMG</code> as a result of this command <strong class=\"purple\">must</strong> not have a <a href=\"#VkImageViewType\">VkImageViewType</a> of <code>VK_IMAGE_VIEW_TYPE_3D</code>, <code>VK_IMAGE_VIEW_TYPE_CUBE</code>, or <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdDispatchIndirect-commandBuffer-01847",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, and any pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_BIND_POINT_COMPUTE</code> reads from or writes to any image or buffer, that image or buffer <strong class=\"purple\">must</strong> not be a protected image or protected buffer."
},
{
"vuid": "VUID-vkCmdDispatchIndirect-commandBuffer-01848",
"text": " If <code>commandBuffer</code> is a protected command buffer, and any pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_POINT_COMPUTE</code> writes to any image or buffer, that image or buffer <strong class=\"purple\">must</strong> not be an unprotected image or unprotected buffer."
},
{
"vuid": "VUID-vkCmdDispatchIndirect-commandBuffer-01849",
"text": " If <code>commandBuffer</code> is a protected command buffer, and any pipeline stage other than the compute pipeline stage in the <code>VkPipeline</code> object bound to <code>VK_PIPELINE_POINT_COMPUTE</code> reads from any image or buffer, the image or buffer <strong class=\"purple\">must</strong> not be a protected image or protected buffer."
}
]
},
"VkDispatchIndirectCommand": {
"core": [
{
"vuid": "VUID-VkDispatchIndirectCommand-x-00417",
"text": " <code>x</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxComputeWorkGroupCount</code>[0]"
},
{
"vuid": "VUID-VkDispatchIndirectCommand-y-00418",
"text": " <code>y</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxComputeWorkGroupCount</code>[1]"
},
{
"vuid": "VUID-VkDispatchIndirectCommand-z-00419",
"text": " <code>z</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxComputeWorkGroupCount</code>[2]"
}
]
},
"vkCmdDispatchBase": {
"(VK_VERSION_1_1,VK_KHR_device_group)": [
{
"vuid": "VUID-vkCmdDispatchBase-None-00420",
"text": " All valid usage rules from <a href=\"#vkCmdDispatch\">vkCmdDispatch</a> apply"
},
{
"vuid": "VUID-vkCmdDispatchBase-baseGroupX-00421",
"text": " <code>baseGroupX</code> <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceLimits</code>::<code>maxComputeWorkGroupCount</code>[0]"
},
{
"vuid": "VUID-vkCmdDispatchBase-baseGroupX-00422",
"text": " <code>baseGroupX</code> <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceLimits</code>::<code>maxComputeWorkGroupCount</code>[1]"
},
{
"vuid": "VUID-vkCmdDispatchBase-baseGroupZ-00423",
"text": " <code>baseGroupZ</code> <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceLimits</code>::<code>maxComputeWorkGroupCount</code>[2]"
},
{
"vuid": "VUID-vkCmdDispatchBase-groupCountX-00424",
"text": " <code>groupCountX</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxComputeWorkGroupCount</code>[0] minus <code>baseGroupX</code>"
},
{
"vuid": "VUID-vkCmdDispatchBase-groupCountY-00425",
"text": " <code>groupCountY</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxComputeWorkGroupCount</code>[1] minus <code>baseGroupY</code>"
},
{
"vuid": "VUID-vkCmdDispatchBase-groupCountZ-00426",
"text": " <code>groupCountZ</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxComputeWorkGroupCount</code>[2] minus <code>baseGroupZ</code>"
},
{
"vuid": "VUID-vkCmdDispatchBase-baseGroupX-00427",
"text": " If any of <code>baseGroupX</code>, <code>baseGroupY</code>, or <code>baseGroupZ</code> are not zero, then the bound compute pipeline <strong class=\"purple\">must</strong> have been created with the <code>VK_PIPELINE_CREATE_DISPATCH_BASE</code> flag."
},
{
"vuid": "VUID-vkCmdDispatchBase-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdDispatchBase-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDispatchBase-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support compute operations"
},
{
"vuid": "VUID-vkCmdDispatchBase-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
}
]
},
"vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX": {
"(VK_NVX_device_generated_commands)": [
{
"vuid": "VUID-vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX-pFeatures-parameter",
"text": " <code>pFeatures</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkDeviceGeneratedCommandsFeaturesNVX</code> structure"
},
{
"vuid": "VUID-vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX-pLimits-parameter",
"text": " <code>pLimits</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkDeviceGeneratedCommandsLimitsNVX</code> structure"
}
]
},
"VkDeviceGeneratedCommandsFeaturesNVX": {
"(VK_NVX_device_generated_commands)": [
{
"vuid": "VUID-VkDeviceGeneratedCommandsFeaturesNVX-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVX</code>"
},
{
"vuid": "VUID-VkDeviceGeneratedCommandsFeaturesNVX-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
},
"VkDeviceGeneratedCommandsLimitsNVX": {
"(VK_NVX_device_generated_commands)": [
{
"vuid": "VUID-VkDeviceGeneratedCommandsLimitsNVX-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVX</code>"
},
{
"vuid": "VUID-VkDeviceGeneratedCommandsLimitsNVX-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
},
"vkCreateObjectTableNVX": {
"(VK_NVX_device_generated_commands)": [
{
"vuid": "VUID-vkCreateObjectTableNVX-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkCreateObjectTableNVX-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkObjectTableCreateInfoNVX</code> structure"
},
{
"vuid": "VUID-vkCreateObjectTableNVX-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateObjectTableNVX-pObjectTable-parameter",
"text": " <code>pObjectTable</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkObjectTableNVX</code> handle"
}
]
},
"VkObjectTableCreateInfoNVX": {
"(VK_NVX_device_generated_commands)": [
{
"vuid": "VUID-VkObjectTableCreateInfoNVX-computeBindingPointSupport-01355",
"text": " If the <code>VkDeviceGeneratedCommandsFeaturesNVX</code>::<code>computeBindingPointSupport</code> feature is not enabled, <code>pObjectEntryUsageFlags</code> <strong class=\"purple\">must</strong> not contain <code>VK_OBJECT_ENTRY_USAGE_COMPUTE_BIT_NVX</code>"
},
{
"vuid": "VUID-VkObjectTableCreateInfoNVX-pObjectEntryCounts-01356",
"text": " Any value within <code>pObjectEntryCounts</code> <strong class=\"purple\">must</strong> not exceed <code>VkDeviceGeneratedCommandsLimitsNVX</code>::<code>maxObjectEntryCounts</code>"
},
{
"vuid": "VUID-VkObjectTableCreateInfoNVX-maxUniformBuffersPerDescriptor-01357",
"text": " <code>maxUniformBuffersPerDescriptor</code> <strong class=\"purple\">must</strong> be within the limits supported by the device."
},
{
"vuid": "VUID-VkObjectTableCreateInfoNVX-maxStorageBuffersPerDescriptor-01358",
"text": " <code>maxStorageBuffersPerDescriptor</code> <strong class=\"purple\">must</strong> be within the limits supported by the device."
},
{
"vuid": "VUID-VkObjectTableCreateInfoNVX-maxStorageImagesPerDescriptor-01359",
"text": " <code>maxStorageImagesPerDescriptor</code> <strong class=\"purple\">must</strong> be within the limits supported by the device."
},
{
"vuid": "VUID-VkObjectTableCreateInfoNVX-maxSampledImagesPerDescriptor-01360",
"text": " <code>maxSampledImagesPerDescriptor</code> <strong class=\"purple\">must</strong> be within the limits supported by the device."
},
{
"vuid": "VUID-VkObjectTableCreateInfoNVX-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX</code>"
},
{
"vuid": "VUID-VkObjectTableCreateInfoNVX-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkObjectTableCreateInfoNVX-pObjectEntryTypes-parameter",
"text": " <code>pObjectEntryTypes</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>objectCount</code> valid <a href=\"#VkObjectEntryTypeNVX\">VkObjectEntryTypeNVX</a> values"
},
{
"vuid": "VUID-VkObjectTableCreateInfoNVX-pObjectEntryCounts-parameter",
"text": " <code>pObjectEntryCounts</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>objectCount</code> <code>uint32_t</code> values"
},
{
"vuid": "VUID-VkObjectTableCreateInfoNVX-pObjectEntryUsageFlags-parameter",
"text": " <code>pObjectEntryUsageFlags</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>objectCount</code> valid combinations of <a href=\"#VkObjectEntryUsageFlagBitsNVX\">VkObjectEntryUsageFlagBitsNVX</a> values"
},
{
"vuid": "VUID-VkObjectTableCreateInfoNVX-pObjectEntryUsageFlags-requiredbitmask",
"text": " Each element of <code>pObjectEntryUsageFlags</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-VkObjectTableCreateInfoNVX-objectCount-arraylength",
"text": " <code>objectCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"vkDestroyObjectTableNVX": {
"(VK_NVX_device_generated_commands)": [
{
"vuid": "VUID-vkDestroyObjectTableNVX-objectTable-01361",
"text": " All submitted commands that refer to <code>objectTable</code> <strong class=\"purple\">must</strong> have completed execution."
},
{
"vuid": "VUID-vkDestroyObjectTableNVX-objectTable-01362",
"text": " If <code>VkAllocationCallbacks</code> were provided when <code>objectTable</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here."
},
{
"vuid": "VUID-vkDestroyObjectTableNVX-objectTable-01363",
"text": " If no <code>VkAllocationCallbacks</code> were provided when <code>objectTable</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>."
},
{
"vuid": "VUID-vkDestroyObjectTableNVX-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkDestroyObjectTableNVX-objectTable-parameter",
"text": " <code>objectTable</code> <strong class=\"purple\">must</strong> be a valid <code>VkObjectTableNVX</code> handle"
},
{
"vuid": "VUID-vkDestroyObjectTableNVX-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkDestroyObjectTableNVX-objectTable-parent",
"text": " <code>objectTable</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkRegisterObjectsNVX": {
"(VK_NVX_device_generated_commands)": [
{
"vuid": "VUID-vkRegisterObjectsNVX-pObjectTableEntry-01364",
"text": " The contents of <code>pObjectTableEntry</code> <strong class=\"purple\">must</strong> yield plausible bindings supported by the device."
},
{
"vuid": "VUID-vkRegisterObjectsNVX-pObjectIndices-01365",
"text": " At any <code>pObjectIndices</code> there <strong class=\"purple\">must</strong> not be a registered resource already."
},
{
"vuid": "VUID-vkRegisterObjectsNVX-pObjectIndices-01366",
"text": " Any value inside <code>pObjectIndices</code> <strong class=\"purple\">must</strong> be below the appropriate <code>VkObjectTableCreateInfoNVX</code>::<code>pObjectEntryCounts</code> limits provided at <code>objectTable</code> creation time."
},
{
"vuid": "VUID-vkRegisterObjectsNVX-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkRegisterObjectsNVX-objectTable-parameter",
"text": " <code>objectTable</code> <strong class=\"purple\">must</strong> be a valid <code>VkObjectTableNVX</code> handle"
},
{
"vuid": "VUID-vkRegisterObjectsNVX-ppObjectTableEntries-parameter",
"text": " <code>ppObjectTableEntries</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>objectCount</code> valid <code>VkObjectTableEntryNVX</code> structures"
},
{
"vuid": "VUID-vkRegisterObjectsNVX-pObjectIndices-parameter",
"text": " <code>pObjectIndices</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>objectCount</code> <code>uint32_t</code> values"
},
{
"vuid": "VUID-vkRegisterObjectsNVX-objectCount-arraylength",
"text": " <code>objectCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkRegisterObjectsNVX-objectTable-parent",
"text": " <code>objectTable</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"VkObjectTableEntryNVX": {
"(VK_NVX_device_generated_commands)": [
{
"vuid": "VUID-VkObjectTableEntryNVX-computeBindingPointSupport-01367",
"text": " If the <code>VkDeviceGeneratedCommandsFeaturesNVX</code>::<code>computeBindingPointSupport</code> feature is not enabled, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_OBJECT_ENTRY_USAGE_COMPUTE_BIT_NVX</code>"
},
{
"vuid": "VUID-VkObjectTableEntryNVX-type-parameter",
"text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkObjectEntryTypeNVX\">VkObjectEntryTypeNVX</a> value"
},
{
"vuid": "VUID-VkObjectTableEntryNVX-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkObjectEntryUsageFlagBitsNVX\">VkObjectEntryUsageFlagBitsNVX</a> values"
},
{
"vuid": "VUID-VkObjectTableEntryNVX-flags-requiredbitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
}
]
},
"VkObjectTablePipelineEntryNVX": {
"(VK_NVX_device_generated_commands)": [
{
"vuid": "VUID-VkObjectTablePipelineEntryNVX-type-01368",
"text": " <code>type</code> <strong class=\"purple\">must</strong> be <code>VK_OBJECT_ENTRY_TYPE_PIPELINE_NVX</code>"
},
{
"vuid": "VUID-VkObjectTablePipelineEntryNVX-type-parameter",
"text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkObjectEntryTypeNVX\">VkObjectEntryTypeNVX</a> value"
},
{
"vuid": "VUID-VkObjectTablePipelineEntryNVX-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkObjectEntryUsageFlagBitsNVX\">VkObjectEntryUsageFlagBitsNVX</a> values"
},
{
"vuid": "VUID-VkObjectTablePipelineEntryNVX-flags-requiredbitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-VkObjectTablePipelineEntryNVX-pipeline-parameter",
"text": " <code>pipeline</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipeline</code> handle"
}
]
},
"VkObjectTableDescriptorSetEntryNVX": {
"(VK_NVX_device_generated_commands)": [
{
"vuid": "VUID-VkObjectTableDescriptorSetEntryNVX-type-01369",
"text": " <code>type</code> <strong class=\"purple\">must</strong> be <code>VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX</code>"
},
{
"vuid": "VUID-VkObjectTableDescriptorSetEntryNVX-type-parameter",
"text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkObjectEntryTypeNVX\">VkObjectEntryTypeNVX</a> value"
},
{
"vuid": "VUID-VkObjectTableDescriptorSetEntryNVX-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkObjectEntryUsageFlagBitsNVX\">VkObjectEntryUsageFlagBitsNVX</a> values"
},
{
"vuid": "VUID-VkObjectTableDescriptorSetEntryNVX-flags-requiredbitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-VkObjectTableDescriptorSetEntryNVX-pipelineLayout-parameter",
"text": " <code>pipelineLayout</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipelineLayout</code> handle"
},
{
"vuid": "VUID-VkObjectTableDescriptorSetEntryNVX-descriptorSet-parameter",
"text": " <code>descriptorSet</code> <strong class=\"purple\">must</strong> be a valid <code>VkDescriptorSet</code> handle"
},
{
"vuid": "VUID-VkObjectTableDescriptorSetEntryNVX-commonparent",
"text": " Both of <code>descriptorSet</code>, and <code>pipelineLayout</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
]
},
"VkObjectTableVertexBufferEntryNVX": {
"(VK_NVX_device_generated_commands)": [
{
"vuid": "VUID-VkObjectTableVertexBufferEntryNVX-type-01370",
"text": " <code>type</code> <strong class=\"purple\">must</strong> be <code>VK_OBJECT_ENTRY_TYPE_VERTEX_BUFFER_NVX</code>"
},
{
"vuid": "VUID-VkObjectTableVertexBufferEntryNVX-type-parameter",
"text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkObjectEntryTypeNVX\">VkObjectEntryTypeNVX</a> value"
},
{
"vuid": "VUID-VkObjectTableVertexBufferEntryNVX-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkObjectEntryUsageFlagBitsNVX\">VkObjectEntryUsageFlagBitsNVX</a> values"
},
{
"vuid": "VUID-VkObjectTableVertexBufferEntryNVX-flags-requiredbitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-VkObjectTableVertexBufferEntryNVX-buffer-parameter",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
}
]
},
"VkObjectTableIndexBufferEntryNVX": {
"(VK_NVX_device_generated_commands)": [
{
"vuid": "VUID-VkObjectTableIndexBufferEntryNVX-type-01371",
"text": " <code>type</code> <strong class=\"purple\">must</strong> be <code>VK_OBJECT_ENTRY_TYPE_INDEX_BUFFER_NVX</code>"
},
{
"vuid": "VUID-VkObjectTableIndexBufferEntryNVX-type-parameter",
"text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkObjectEntryTypeNVX\">VkObjectEntryTypeNVX</a> value"
},
{
"vuid": "VUID-VkObjectTableIndexBufferEntryNVX-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkObjectEntryUsageFlagBitsNVX\">VkObjectEntryUsageFlagBitsNVX</a> values"
},
{
"vuid": "VUID-VkObjectTableIndexBufferEntryNVX-flags-requiredbitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-VkObjectTableIndexBufferEntryNVX-buffer-parameter",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
},
{
"vuid": "VUID-VkObjectTableIndexBufferEntryNVX-indexType-parameter",
"text": " <code>indexType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkIndexType\">VkIndexType</a> value"
}
]
},
"VkObjectTablePushConstantEntryNVX": {
"(VK_NVX_device_generated_commands)": [
{
"vuid": "VUID-VkObjectTablePushConstantEntryNVX-type-01372",
"text": " <code>type</code> <strong class=\"purple\">must</strong> be <code>VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX</code>"
},
{
"vuid": "VUID-VkObjectTablePushConstantEntryNVX-type-parameter",
"text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkObjectEntryTypeNVX\">VkObjectEntryTypeNVX</a> value"
},
{
"vuid": "VUID-VkObjectTablePushConstantEntryNVX-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkObjectEntryUsageFlagBitsNVX\">VkObjectEntryUsageFlagBitsNVX</a> values"
},
{
"vuid": "VUID-VkObjectTablePushConstantEntryNVX-flags-requiredbitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-VkObjectTablePushConstantEntryNVX-pipelineLayout-parameter",
"text": " <code>pipelineLayout</code> <strong class=\"purple\">must</strong> be a valid <code>VkPipelineLayout</code> handle"
},
{
"vuid": "VUID-VkObjectTablePushConstantEntryNVX-stageFlags-parameter",
"text": " <code>stageFlags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkShaderStageFlagBits\">VkShaderStageFlagBits</a> values"
},
{
"vuid": "VUID-VkObjectTablePushConstantEntryNVX-stageFlags-requiredbitmask",
"text": " <code>stageFlags</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
}
]
},
"vkUnregisterObjectsNVX": {
"(VK_NVX_device_generated_commands)": [
{
"vuid": "VUID-vkUnregisterObjectsNVX-pObjectIndices-01373",
"text": " At any <code>pObjectIndices</code> there <strong class=\"purple\">must</strong> be a registered resource already."
},
{
"vuid": "VUID-vkUnregisterObjectsNVX-pObjectEntryTypes-01374",
"text": " The <code>pObjectEntryTypes</code> of the resource at <code>pObjectIndices</code> <strong class=\"purple\">must</strong> match."
},
{
"vuid": "VUID-vkUnregisterObjectsNVX-None-01375",
"text": " All operations on the device using the registered resource <strong class=\"purple\">must</strong> have been completed."
},
{
"vuid": "VUID-vkUnregisterObjectsNVX-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkUnregisterObjectsNVX-objectTable-parameter",
"text": " <code>objectTable</code> <strong class=\"purple\">must</strong> be a valid <code>VkObjectTableNVX</code> handle"
},
{
"vuid": "VUID-vkUnregisterObjectsNVX-pObjectEntryTypes-parameter",
"text": " <code>pObjectEntryTypes</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>objectCount</code> valid <a href=\"#VkObjectEntryTypeNVX\">VkObjectEntryTypeNVX</a> values"
},
{
"vuid": "VUID-vkUnregisterObjectsNVX-pObjectIndices-parameter",
"text": " <code>pObjectIndices</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>objectCount</code> <code>uint32_t</code> values"
},
{
"vuid": "VUID-vkUnregisterObjectsNVX-objectCount-arraylength",
"text": " <code>objectCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkUnregisterObjectsNVX-objectTable-parent",
"text": " <code>objectTable</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"VkIndirectCommandsLayoutTokenNVX": {
"(VK_NVX_device_generated_commands)": [
{
"vuid": "VUID-VkIndirectCommandsLayoutTokenNVX-bindingUnit-01342",
"text": " <code>bindingUnit</code> <strong class=\"purple\">must</strong> stay within device supported limits for the appropriate commands."
},
{
"vuid": "VUID-VkIndirectCommandsLayoutTokenNVX-dynamicCount-01343",
"text": " <code>dynamicCount</code> <strong class=\"purple\">must</strong> stay within device supported limits for the appropriate commands."
},
{
"vuid": "VUID-VkIndirectCommandsLayoutTokenNVX-divisor-01344",
"text": " <code>divisor</code> <strong class=\"purple\">must</strong> be greater than <code>0</code> and a power of two."
},
{
"vuid": "VUID-VkIndirectCommandsLayoutTokenNVX-tokenType-parameter",
"text": " <code>tokenType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkIndirectCommandsTokenTypeNVX\">VkIndirectCommandsTokenTypeNVX</a> value"
}
]
},
"VkIndirectCommandsTokenNVX": {
"(VK_NVX_device_generated_commands)": [
{
"vuid": "VUID-VkIndirectCommandsTokenNVX-buffer-01345",
"text": " The <code>buffer</code>&#8217;s usage flag <strong class=\"purple\">must</strong> have the <code>VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT</code> bit set."
},
{
"vuid": "VUID-VkIndirectCommandsTokenNVX-offset-01346",
"text": " The <code>offset</code> <strong class=\"purple\">must</strong> be aligned to <code>VkDeviceGeneratedCommandsLimitsNVX</code>::<code>minCommandsTokenBufferOffsetAlignment</code>."
},
{
"vuid": "VUID-VkIndirectCommandsTokenNVX-tokenType-parameter",
"text": " <code>tokenType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkIndirectCommandsTokenTypeNVX\">VkIndirectCommandsTokenTypeNVX</a> value"
},
{
"vuid": "VUID-VkIndirectCommandsTokenNVX-buffer-parameter",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
}
]
},
"vkCreateIndirectCommandsLayoutNVX": {
"(VK_NVX_device_generated_commands)": [
{
"vuid": "VUID-vkCreateIndirectCommandsLayoutNVX-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkCreateIndirectCommandsLayoutNVX-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkIndirectCommandsLayoutCreateInfoNVX</code> structure"
},
{
"vuid": "VUID-vkCreateIndirectCommandsLayoutNVX-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateIndirectCommandsLayoutNVX-pIndirectCommandsLayout-parameter",
"text": " <code>pIndirectCommandsLayout</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkIndirectCommandsLayoutNVX</code> handle"
}
]
},
"VkIndirectCommandsLayoutCreateInfoNVX": {
"(VK_NVX_device_generated_commands)": [
{
"vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNVX-tokenCount-01347",
"text": " <code>tokenCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code> and below <code>VkDeviceGeneratedCommandsLimitsNVX</code>::<code>maxIndirectCommandsLayoutTokenCount</code>"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNVX-computeBindingPointSupport-01348",
"text": " If the <code>VkDeviceGeneratedCommandsFeaturesNVX</code>::<code>computeBindingPointSupport</code> feature is not enabled, then <code>pipelineBindPoint</code> <strong class=\"purple\">must</strong> not be <code>VK_PIPELINE_BIND_POINT_COMPUTE</code>"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNVX-pTokens-01349",
"text": " If <code>pTokens</code> contains an entry of <code>VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX</code> it <strong class=\"purple\">must</strong> be the first element of the array and there <strong class=\"purple\">must</strong> be only a single element of such token type."
},
{
"vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNVX-pTokens-01350",
"text": " All state binding tokens in <code>pTokens</code> <strong class=\"purple\">must</strong> occur prior work provoking tokens (<code>VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX</code>, <code>VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NVX</code>, <code>VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX</code>)."
},
{
"vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNVX-pTokens-01351",
"text": " The content of <code>pTokens</code> <strong class=\"purple\">must</strong> include one single work provoking token that is compatible with the <code>pipelineBindPoint</code>."
},
{
"vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNVX-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX</code>"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNVX-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNVX-pipelineBindPoint-parameter",
"text": " <code>pipelineBindPoint</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipelineBindPoint\">VkPipelineBindPoint</a> value"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNVX-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkIndirectCommandsLayoutUsageFlagBitsNVX\">VkIndirectCommandsLayoutUsageFlagBitsNVX</a> values"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNVX-flags-requiredbitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNVX-pTokens-parameter",
"text": " <code>pTokens</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>tokenCount</code> valid <code>VkIndirectCommandsLayoutTokenNVX</code> structures"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNVX-tokenCount-arraylength",
"text": " <code>tokenCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"vkDestroyIndirectCommandsLayoutNVX": {
"(VK_NVX_device_generated_commands)": [
{
"vuid": "VUID-vkDestroyIndirectCommandsLayoutNVX-indirectCommandsLayout-01352",
"text": " All submitted commands that refer to <code>indirectCommandsLayout</code> <strong class=\"purple\">must</strong> have completed execution"
},
{
"vuid": "VUID-vkDestroyIndirectCommandsLayoutNVX-objectTable-01353",
"text": " If <code>VkAllocationCallbacks</code> were provided when <code>objectTable</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
},
{
"vuid": "VUID-vkDestroyIndirectCommandsLayoutNVX-objectTable-01354",
"text": " If no <code>VkAllocationCallbacks</code> were provided when <code>objectTable</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-vkDestroyIndirectCommandsLayoutNVX-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkDestroyIndirectCommandsLayoutNVX-indirectCommandsLayout-parameter",
"text": " <code>indirectCommandsLayout</code> <strong class=\"purple\">must</strong> be a valid <code>VkIndirectCommandsLayoutNVX</code> handle"
},
{
"vuid": "VUID-vkDestroyIndirectCommandsLayoutNVX-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkDestroyIndirectCommandsLayoutNVX-indirectCommandsLayout-parent",
"text": " <code>indirectCommandsLayout</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkCmdReserveSpaceForCommandsNVX": {
"(VK_NVX_device_generated_commands)": [
{
"vuid": "VUID-vkCmdReserveSpaceForCommandsNVX-commandBuffer-01329",
"text": " The provided <code>commandBuffer</code> <strong class=\"purple\">must</strong> not have had a prior space reservation since its creation or the last reset."
},
{
"vuid": "VUID-vkCmdReserveSpaceForCommandsNVX-commandBuffer-01330",
"text": " The state of the <code>commandBuffer</code> <strong class=\"purple\">must</strong> be legal to execute all commands within the sequence provided by the <code>indirectCommandsLayout</code> member of <code>pProcessCommandsInfo</code>."
},
{
"vuid": "VUID-vkCmdReserveSpaceForCommandsNVX-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdReserveSpaceForCommandsNVX-pReserveSpaceInfo-parameter",
"text": " <code>pReserveSpaceInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkCmdReserveSpaceForCommandsInfoNVX</code> structure"
},
{
"vuid": "VUID-vkCmdReserveSpaceForCommandsNVX-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdReserveSpaceForCommandsNVX-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
},
{
"vuid": "VUID-vkCmdReserveSpaceForCommandsNVX-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
},
{
"vuid": "VUID-vkCmdReserveSpaceForCommandsNVX-bufferlevel",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a secondary <code>VkCommandBuffer</code>"
}
]
},
"VkCmdReserveSpaceForCommandsInfoNVX": {
"(VK_NVX_device_generated_commands)": [
{
"vuid": "VUID-VkCmdReserveSpaceForCommandsInfoNVX-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVX</code>"
},
{
"vuid": "VUID-VkCmdReserveSpaceForCommandsInfoNVX-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkCmdReserveSpaceForCommandsInfoNVX-objectTable-parameter",
"text": " <code>objectTable</code> <strong class=\"purple\">must</strong> be a valid <code>VkObjectTableNVX</code> handle"
},
{
"vuid": "VUID-VkCmdReserveSpaceForCommandsInfoNVX-indirectCommandsLayout-parameter",
"text": " <code>indirectCommandsLayout</code> <strong class=\"purple\">must</strong> be a valid <code>VkIndirectCommandsLayoutNVX</code> handle"
},
{
"vuid": "VUID-VkCmdReserveSpaceForCommandsInfoNVX-commonparent",
"text": " Both of <code>indirectCommandsLayout</code>, and <code>objectTable</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
]
},
"vkCmdProcessCommandsNVX": {
"(VK_NVX_device_generated_commands)": [
{
"vuid": "VUID-vkCmdProcessCommandsNVX-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdProcessCommandsNVX-pProcessCommandsInfo-parameter",
"text": " <code>pProcessCommandsInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkCmdProcessCommandsInfoNVX</code> structure"
},
{
"vuid": "VUID-vkCmdProcessCommandsNVX-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdProcessCommandsNVX-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
},
{
"vuid": "VUID-vkCmdProcessCommandsNVX-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
}
]
},
"VkCmdProcessCommandsInfoNVX": {
"(VK_NVX_device_generated_commands)": [
{
"vuid": "VUID-VkCmdProcessCommandsInfoNVX-objectTable-01331",
"text": " The provided <code>objectTable</code> <strong class=\"purple\">must</strong> include all objects referenced by the generation process."
},
{
"vuid": "VUID-VkCmdProcessCommandsInfoNVX-indirectCommandsTokenCount-01332",
"text": " <code>indirectCommandsTokenCount</code> <strong class=\"purple\">must</strong> match the <code>indirectCommandsLayout</code>&#8217;s <code>tokenCount</code>."
},
{
"vuid": "VUID-VkCmdProcessCommandsInfoNVX-tokenType-01333",
"text": " The <code>tokenType</code> member of each entry in the <code>pIndirectCommandsTokens</code> array <strong class=\"purple\">must</strong> match the values used at creation time of <code>indirectCommandsLayout</code>"
},
{
"vuid": "VUID-VkCmdProcessCommandsInfoNVX-targetCommandBuffer-01334",
"text": " If <code>targetCommandBuffer</code> is provided, it <strong class=\"purple\">must</strong> have reserved command space."
},
{
"vuid": "VUID-VkCmdProcessCommandsInfoNVX-targetCommandBuffer-01335",
"text": " If <code>targetCommandBuffer</code> is provided, the <code>objectTable</code> <strong class=\"purple\">must</strong> match the reservation&#8217;s objectTable and <strong class=\"purple\">must</strong> have had all referenced objects registered at reservation time."
},
{
"vuid": "VUID-VkCmdProcessCommandsInfoNVX-targetCommandBuffer-01336",
"text": " If <code>targetCommandBuffer</code> is provided, the <code>indirectCommandsLayout</code> <strong class=\"purple\">must</strong> match the reservation&#8217;s indirectCommandsLayout."
},
{
"vuid": "VUID-VkCmdProcessCommandsInfoNVX-targetCommandBuffer-01337",
"text": " If <code>targetCommandBuffer</code> is provided, the <code>maxSequencesCount</code> <strong class=\"purple\">must</strong> not exceed the reservation&#8217;s maxSequencesCount."
},
{
"vuid": "VUID-VkCmdProcessCommandsInfoNVX-sequencesCountBuffer-01338",
"text": " If <code>sequencesCountBuffer</code> is used, its usage flag <strong class=\"purple\">must</strong> have <code>VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT</code> bit set."
},
{
"vuid": "VUID-VkCmdProcessCommandsInfoNVX-sequencesCountBuffer-01339",
"text": " If <code>sequencesCountBuffer</code> is used, <code>sequencesCountOffset</code> <strong class=\"purple\">must</strong> be aligned to <code>VkDeviceGeneratedCommandsLimitsNVX</code>::<code>minSequenceCountBufferOffsetAlignment</code>."
},
{
"vuid": "VUID-VkCmdProcessCommandsInfoNVX-sequencesIndexBuffer-01340",
"text": " If <code>sequencesIndexBuffer</code> is used, its usage flag <strong class=\"purple\">must</strong> have <code>VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT</code> bit set."
},
{
"vuid": "VUID-VkCmdProcessCommandsInfoNVX-sequencesIndexBuffer-01341",
"text": " If <code>sequencesIndexBuffer</code> is used, <code>sequencesIndexOffset</code> <strong class=\"purple\">must</strong> be aligned to <code>VkDeviceGeneratedCommandsLimitsNVX</code>::<code>minSequenceIndexBufferOffsetAlignment</code>."
},
{
"vuid": "VUID-VkCmdProcessCommandsInfoNVX-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVX</code>"
},
{
"vuid": "VUID-VkCmdProcessCommandsInfoNVX-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkCmdProcessCommandsInfoNVX-objectTable-parameter",
"text": " <code>objectTable</code> <strong class=\"purple\">must</strong> be a valid <code>VkObjectTableNVX</code> handle"
},
{
"vuid": "VUID-VkCmdProcessCommandsInfoNVX-indirectCommandsLayout-parameter",
"text": " <code>indirectCommandsLayout</code> <strong class=\"purple\">must</strong> be a valid <code>VkIndirectCommandsLayoutNVX</code> handle"
},
{
"vuid": "VUID-VkCmdProcessCommandsInfoNVX-pIndirectCommandsTokens-parameter",
"text": " <code>pIndirectCommandsTokens</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>indirectCommandsTokenCount</code> valid <code>VkIndirectCommandsTokenNVX</code> structures"
},
{
"vuid": "VUID-VkCmdProcessCommandsInfoNVX-targetCommandBuffer-parameter",
"text": " If <code>targetCommandBuffer</code> is not <code>NULL</code>, <code>targetCommandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-VkCmdProcessCommandsInfoNVX-sequencesCountBuffer-parameter",
"text": " If <code>sequencesCountBuffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>sequencesCountBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
},
{
"vuid": "VUID-VkCmdProcessCommandsInfoNVX-sequencesIndexBuffer-parameter",
"text": " If <code>sequencesIndexBuffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>sequencesIndexBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
},
{
"vuid": "VUID-VkCmdProcessCommandsInfoNVX-indirectCommandsTokenCount-arraylength",
"text": " <code>indirectCommandsTokenCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-VkCmdProcessCommandsInfoNVX-commonparent",
"text": " Each of <code>indirectCommandsLayout</code>, <code>objectTable</code>, <code>sequencesCountBuffer</code>, <code>sequencesIndexBuffer</code>, and <code>targetCommandBuffer</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
]
},
"vkGetPhysicalDeviceSparseImageFormatProperties": {
"core": [
{
"vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties-samples-01094",
"text": " <code>samples</code> <strong class=\"purple\">must</strong> be a bit value that is set in <code>VkImageFormatProperties</code>::<code>sampleCounts</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties</code> with <code>format</code>, <code>type</code>, <code>tiling</code>, and <code>usage</code> equal to those in this command and <code>flags</code> equal to the value that is set in <code>VkImageCreateInfo</code>::<code>flags</code> when the image is created"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties-format-parameter",
"text": " <code>format</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFormat\">VkFormat</a> value"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties-type-parameter",
"text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageType\">VkImageType</a> value"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties-samples-parameter",
"text": " <code>samples</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSampleCountFlagBits\">VkSampleCountFlagBits</a> value"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties-usage-parameter",
"text": " <code>usage</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageUsageFlagBits\">VkImageUsageFlagBits</a> values"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties-usage-requiredbitmask",
"text": " <code>usage</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties-tiling-parameter",
"text": " <code>tiling</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageTiling\">VkImageTiling</a> value"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties-pPropertyCount-parameter",
"text": " <code>pPropertyCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties-pProperties-parameter",
"text": " If the value referenced by <code>pPropertyCount</code> is not <code>0</code>, and <code>pProperties</code> is not <code>NULL</code>, <code>pProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pPropertyCount</code> <code>VkSparseImageFormatProperties</code> structures"
}
]
},
"vkGetPhysicalDeviceSparseImageFormatProperties2": {
"(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
{
"vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties2-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties2-pFormatInfo-parameter",
"text": " <code>pFormatInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPhysicalDeviceSparseImageFormatInfo2</code> structure"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties2-pPropertyCount-parameter",
"text": " <code>pPropertyCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties2-pProperties-parameter",
"text": " If the value referenced by <code>pPropertyCount</code> is not <code>0</code>, and <code>pProperties</code> is not <code>NULL</code>, <code>pProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pPropertyCount</code> <code>VkSparseImageFormatProperties2</code> structures"
}
]
},
"VkPhysicalDeviceSparseImageFormatInfo2": {
"(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
{
"vuid": "VUID-VkPhysicalDeviceSparseImageFormatInfo2-samples-01095",
"text": " <code>samples</code> <strong class=\"purple\">must</strong> be a bit value that is set in <code>VkImageFormatProperties</code>::<code>sampleCounts</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties</code> with <code>format</code>, <code>type</code>, <code>tiling</code>, and <code>usage</code> equal to those in this command and <code>flags</code> equal to the value that is set in <code>VkImageCreateInfo</code>::<code>flags</code> when the image is created"
},
{
"vuid": "VUID-VkPhysicalDeviceSparseImageFormatInfo2-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2</code>"
},
{
"vuid": "VUID-VkPhysicalDeviceSparseImageFormatInfo2-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkPhysicalDeviceSparseImageFormatInfo2-format-parameter",
"text": " <code>format</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFormat\">VkFormat</a> value"
},
{
"vuid": "VUID-VkPhysicalDeviceSparseImageFormatInfo2-type-parameter",
"text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageType\">VkImageType</a> value"
},
{
"vuid": "VUID-VkPhysicalDeviceSparseImageFormatInfo2-samples-parameter",
"text": " <code>samples</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSampleCountFlagBits\">VkSampleCountFlagBits</a> value"
},
{
"vuid": "VUID-VkPhysicalDeviceSparseImageFormatInfo2-usage-parameter",
"text": " <code>usage</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageUsageFlagBits\">VkImageUsageFlagBits</a> values"
},
{
"vuid": "VUID-VkPhysicalDeviceSparseImageFormatInfo2-usage-requiredbitmask",
"text": " <code>usage</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-VkPhysicalDeviceSparseImageFormatInfo2-tiling-parameter",
"text": " <code>tiling</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageTiling\">VkImageTiling</a> value"
}
]
},
"VkSparseImageFormatProperties2": {
"(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
{
"vuid": "VUID-VkSparseImageFormatProperties2-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2</code>"
},
{
"vuid": "VUID-VkSparseImageFormatProperties2-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
},
"vkGetImageSparseMemoryRequirements": {
"core": [
{
"vuid": "VUID-vkGetImageSparseMemoryRequirements-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkGetImageSparseMemoryRequirements-image-parameter",
"text": " <code>image</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
},
{
"vuid": "VUID-vkGetImageSparseMemoryRequirements-pSparseMemoryRequirementCount-parameter",
"text": " <code>pSparseMemoryRequirementCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
},
{
"vuid": "VUID-vkGetImageSparseMemoryRequirements-pSparseMemoryRequirements-parameter",
"text": " If the value referenced by <code>pSparseMemoryRequirementCount</code> is not <code>0</code>, and <code>pSparseMemoryRequirements</code> is not <code>NULL</code>, <code>pSparseMemoryRequirements</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pSparseMemoryRequirementCount</code> <code>VkSparseImageMemoryRequirements</code> structures"
},
{
"vuid": "VUID-vkGetImageSparseMemoryRequirements-image-parent",
"text": " <code>image</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkGetImageSparseMemoryRequirements2": {
"(VK_VERSION_1_1,VK_KHR_get_memory_requirements2)": [
{
"vuid": "VUID-vkGetImageSparseMemoryRequirements2-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkGetImageSparseMemoryRequirements2-pInfo-parameter",
"text": " <code>pInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkImageSparseMemoryRequirementsInfo2</code> structure"
},
{
"vuid": "VUID-vkGetImageSparseMemoryRequirements2-pSparseMemoryRequirementCount-parameter",
"text": " <code>pSparseMemoryRequirementCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
},
{
"vuid": "VUID-vkGetImageSparseMemoryRequirements2-pSparseMemoryRequirements-parameter",
"text": " If the value referenced by <code>pSparseMemoryRequirementCount</code> is not <code>0</code>, and <code>pSparseMemoryRequirements</code> is not <code>NULL</code>, <code>pSparseMemoryRequirements</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pSparseMemoryRequirementCount</code> <code>VkSparseImageMemoryRequirements2</code> structures"
}
]
},
"VkImageSparseMemoryRequirementsInfo2": {
"(VK_VERSION_1_1,VK_KHR_get_memory_requirements2)": [
{
"vuid": "VUID-VkImageSparseMemoryRequirementsInfo2-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2</code>"
},
{
"vuid": "VUID-VkImageSparseMemoryRequirementsInfo2-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkImageSparseMemoryRequirementsInfo2-image-parameter",
"text": " <code>image</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
}
]
},
"VkSparseImageMemoryRequirements2": {
"(VK_VERSION_1_1,VK_KHR_get_memory_requirements2)": [
{
"vuid": "VUID-VkSparseImageMemoryRequirements2-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2</code>"
},
{
"vuid": "VUID-VkSparseImageMemoryRequirements2-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
},
"VkSparseMemoryBind": {
"core": [
{
"vuid": "VUID-VkSparseMemoryBind-memory-01096",
"text": " If <code>memory</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>memory</code> and <code>memoryOffset</code> <strong class=\"purple\">must</strong> match the memory requirements of the resource, as described in section &amp;amp;lt;&amp;amp;lt;resources-association&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-VkSparseMemoryBind-memory-01097",
"text": " If <code>memory</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>memory</code> <strong class=\"purple\">must</strong> not have been created with a memory type that reports <code>VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT</code> bit set"
},
{
"vuid": "VUID-VkSparseMemoryBind-size-01098",
"text": " <code>size</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-VkSparseMemoryBind-resourceOffset-01099",
"text": " <code>resourceOffset</code> <strong class=\"purple\">must</strong> be less than the size of the resource"
},
{
"vuid": "VUID-VkSparseMemoryBind-size-01100",
"text": " <code>size</code> <strong class=\"purple\">must</strong> be less than or equal to the size of the resource minus <code>resourceOffset</code>"
},
{
"vuid": "VUID-VkSparseMemoryBind-memoryOffset-01101",
"text": " <code>memoryOffset</code> <strong class=\"purple\">must</strong> be less than the size of <code>memory</code>"
},
{
"vuid": "VUID-VkSparseMemoryBind-size-01102",
"text": " <code>size</code> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>memory</code> minus <code>memoryOffset</code>"
},
{
"vuid": "VUID-VkSparseMemoryBind-memory-parameter",
"text": " If <code>memory</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>memory</code> <strong class=\"purple\">must</strong> be a valid <code>VkDeviceMemory</code> handle"
},
{
"vuid": "VUID-VkSparseMemoryBind-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkSparseMemoryBindFlagBits\">VkSparseMemoryBindFlagBits</a> values"
}
]
},
"VkSparseBufferMemoryBindInfo": {
"core": [
{
"vuid": "VUID-VkSparseBufferMemoryBindInfo-buffer-parameter",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle"
},
{
"vuid": "VUID-VkSparseBufferMemoryBindInfo-pBinds-parameter",
"text": " <code>pBinds</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>bindCount</code> valid <code>VkSparseMemoryBind</code> structures"
},
{
"vuid": "VUID-VkSparseBufferMemoryBindInfo-bindCount-arraylength",
"text": " <code>bindCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"VkSparseImageOpaqueMemoryBindInfo": {
"core": [
{
"vuid": "VUID-VkSparseImageOpaqueMemoryBindInfo-pBinds-01103",
"text": " If the <code>flags</code> member of any element of <code>pBinds</code> contains <code>VK_SPARSE_MEMORY_BIND_METADATA_BIT</code>, the binding range defined <strong class=\"purple\">must</strong> be within the mip tail region of the metadata aspect of <code>image</code>"
},
{
"vuid": "VUID-VkSparseImageOpaqueMemoryBindInfo-image-parameter",
"text": " <code>image</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
},
{
"vuid": "VUID-VkSparseImageOpaqueMemoryBindInfo-pBinds-parameter",
"text": " <code>pBinds</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>bindCount</code> valid <code>VkSparseMemoryBind</code> structures"
},
{
"vuid": "VUID-VkSparseImageOpaqueMemoryBindInfo-bindCount-arraylength",
"text": " <code>bindCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"VkSparseImageMemoryBindInfo": {
"core": [
{
"vuid": "VUID-VkSparseImageMemoryBindInfo-subresource-01722",
"text": " The <code>subresource.mipLevel</code> member of each element of <code>pBinds</code> <strong class=\"purple\">must</strong> be less than the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
},
{
"vuid": "VUID-VkSparseImageMemoryBindInfo-subresource-01723",
"text": " The <code>subresource.arrayLayer</code> member of each element of <code>pBinds</code> <strong class=\"purple\">must</strong> be less than the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created"
},
{
"vuid": "VUID-VkSparseImageMemoryBindInfo-image-parameter",
"text": " <code>image</code> <strong class=\"purple\">must</strong> be a valid <code>VkImage</code> handle"
},
{
"vuid": "VUID-VkSparseImageMemoryBindInfo-pBinds-parameter",
"text": " <code>pBinds</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>bindCount</code> valid <code>VkSparseImageMemoryBind</code> structures"
},
{
"vuid": "VUID-VkSparseImageMemoryBindInfo-bindCount-arraylength",
"text": " <code>bindCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"VkSparseImageMemoryBind": {
"core": [
{
"vuid": "VUID-VkSparseImageMemoryBind-memory-01104",
"text": " If the &amp;amp;lt;&amp;amp;lt;features-features-sparseResidencyAliased,sparse aliased residency&amp;amp;gt;&amp;amp;gt; feature is not enabled, and if any other resources are bound to ranges of <code>memory</code>, the range of <code>memory</code> being bound <strong class=\"purple\">must</strong> not overlap with those bound ranges"
},
{
"vuid": "VUID-VkSparseImageMemoryBind-memory-01105",
"text": " <code>memory</code> and <code>memoryOffset</code> <strong class=\"purple\">must</strong> match the memory requirements of the calling command&#8217;s <code>image</code>, as described in section &amp;amp;lt;&amp;amp;lt;resources-association&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-VkSparseImageMemoryBind-subresource-01106",
"text": " <code>subresource</code> <strong class=\"purple\">must</strong> be a valid image subresource for <code>image</code> (see &amp;amp;lt;&amp;amp;lt;resources-image-views&amp;amp;gt;&amp;amp;gt;)"
},
{
"vuid": "VUID-VkSparseImageMemoryBind-offset-01107",
"text": " <code>offset.x</code> <strong class=\"purple\">must</strong> be a multiple of the sparse image block width (<code>VkSparseImageFormatProperties</code>::<code>imageGranularity.width</code>) of the image"
},
{
"vuid": "VUID-VkSparseImageMemoryBind-extent-01108",
"text": " <code>extent.width</code> <strong class=\"purple\">must</strong> either be a multiple of the sparse image block width of the image, or else <span class=\"eq\">(<code>extent.width</code> &#43; <code>offset.x</code>)</span> <strong class=\"purple\">must</strong> equal the width of the image subresource"
},
{
"vuid": "VUID-VkSparseImageMemoryBind-offset-01109",
"text": " <code>offset.y</code> <strong class=\"purple\">must</strong> be a multiple of the sparse image block height (<code>VkSparseImageFormatProperties</code>::<code>imageGranularity.height</code>) of the image"
},
{
"vuid": "VUID-VkSparseImageMemoryBind-extent-01110",
"text": " <code>extent.height</code> <strong class=\"purple\">must</strong> either be a multiple of the sparse image block height of the image, or else <span class=\"eq\">(<code>extent.height</code> &#43; <code>offset.y</code>)</span> <strong class=\"purple\">must</strong> equal the height of the image subresource"
},
{
"vuid": "VUID-VkSparseImageMemoryBind-offset-01111",
"text": " <code>offset.z</code> <strong class=\"purple\">must</strong> be a multiple of the sparse image block depth (<code>VkSparseImageFormatProperties</code>::<code>imageGranularity.depth</code>) of the image"
},
{
"vuid": "VUID-VkSparseImageMemoryBind-extent-01112",
"text": " <code>extent.depth</code> <strong class=\"purple\">must</strong> either be a multiple of the sparse image block depth of the image, or else <span class=\"eq\">(<code>extent.depth</code> &#43; <code>offset.z</code>)</span> <strong class=\"purple\">must</strong> equal the depth of the image subresource"
},
{
"vuid": "VUID-VkSparseImageMemoryBind-subresource-parameter",
"text": " <code>subresource</code> <strong class=\"purple\">must</strong> be a valid <code>VkImageSubresource</code> structure"
},
{
"vuid": "VUID-VkSparseImageMemoryBind-memory-parameter",
"text": " If <code>memory</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>memory</code> <strong class=\"purple\">must</strong> be a valid <code>VkDeviceMemory</code> handle"
},
{
"vuid": "VUID-VkSparseImageMemoryBind-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkSparseMemoryBindFlagBits\">VkSparseMemoryBindFlagBits</a> values"
}
]
},
"vkQueueBindSparse": {
"core": [
{
"vuid": "VUID-vkQueueBindSparse-fence-01113",
"text": " If <code>fence</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>fence</code> <strong class=\"purple\">must</strong> be unsignaled"
},
{
"vuid": "VUID-vkQueueBindSparse-fence-01114",
"text": " If <code>fence</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>fence</code> <strong class=\"purple\">must</strong> not be associated with any other queue command that has not yet completed execution on that queue"
},
{
"vuid": "VUID-vkQueueBindSparse-pSignalSemaphores-01115",
"text": " Each element of the <code>pSignalSemaphores</code> member of each element of <code>pBindInfo</code> <strong class=\"purple\">must</strong> be unsignaled when the semaphore signal operation it defines is executed on the device"
},
{
"vuid": "VUID-vkQueueBindSparse-pWaitSemaphores-01116",
"text": " When a semaphore unsignal operation defined by any element of the <code>pWaitSemaphores</code> member of any element of <code>pBindInfo</code> executes on <code>queue</code>, no other queue <strong class=\"purple\">must</strong> be waiting on the same semaphore."
},
{
"vuid": "VUID-vkQueueBindSparse-pWaitSemaphores-01117",
"text": " All elements of the <code>pWaitSemaphores</code> member of all elements of <code>pBindInfo</code> <strong class=\"purple\">must</strong> be semaphores that are signaled, or have &amp;amp;lt;&amp;amp;lt;synchronization-semaphores-signaling, semaphore signal operations&amp;amp;gt;&amp;amp;gt; previously submitted for execution."
},
{
"vuid": "VUID-vkQueueBindSparse-queue-parameter",
"text": " <code>queue</code> <strong class=\"purple\">must</strong> be a valid <code>VkQueue</code> handle"
},
{
"vuid": "VUID-vkQueueBindSparse-pBindInfo-parameter",
"text": " If <code>bindInfoCount</code> is not <code>0</code>, <code>pBindInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>bindInfoCount</code> valid <code>VkBindSparseInfo</code> structures"
},
{
"vuid": "VUID-vkQueueBindSparse-fence-parameter",
"text": " If <code>fence</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>fence</code> <strong class=\"purple\">must</strong> be a valid <code>VkFence</code> handle"
},
{
"vuid": "VUID-vkQueueBindSparse-queuetype",
"text": " The <code>queue</code> <strong class=\"purple\">must</strong> support sparse binding operations"
},
{
"vuid": "VUID-vkQueueBindSparse-commonparent",
"text": " Both of <code>fence</code>, and <code>queue</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
]
},
"VkBindSparseInfo": {
"core": [
{
"vuid": "VUID-VkBindSparseInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_BIND_SPARSE_INFO</code>"
},
{
"vuid": "VUID-VkBindSparseInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkDeviceGroupBindSparseInfo\">VkDeviceGroupBindSparseInfo</a>"
},
{
"vuid": "VUID-VkBindSparseInfo-pWaitSemaphores-parameter",
"text": " If <code>waitSemaphoreCount</code> is not <code>0</code>, <code>pWaitSemaphores</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>waitSemaphoreCount</code> valid <code>VkSemaphore</code> handles"
},
{
"vuid": "VUID-VkBindSparseInfo-pBufferBinds-parameter",
"text": " If <code>bufferBindCount</code> is not <code>0</code>, <code>pBufferBinds</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>bufferBindCount</code> valid <code>VkSparseBufferMemoryBindInfo</code> structures"
},
{
"vuid": "VUID-VkBindSparseInfo-pImageOpaqueBinds-parameter",
"text": " If <code>imageOpaqueBindCount</code> is not <code>0</code>, <code>pImageOpaqueBinds</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>imageOpaqueBindCount</code> valid <code>VkSparseImageOpaqueMemoryBindInfo</code> structures"
},
{
"vuid": "VUID-VkBindSparseInfo-pImageBinds-parameter",
"text": " If <code>imageBindCount</code> is not <code>0</code>, <code>pImageBinds</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>imageBindCount</code> valid <code>VkSparseImageMemoryBindInfo</code> structures"
},
{
"vuid": "VUID-VkBindSparseInfo-pSignalSemaphores-parameter",
"text": " If <code>signalSemaphoreCount</code> is not <code>0</code>, <code>pSignalSemaphores</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>signalSemaphoreCount</code> valid <code>VkSemaphore</code> handles"
},
{
"vuid": "VUID-VkBindSparseInfo-commonparent",
"text": " Both of the elements of <code>pSignalSemaphores</code>, and the elements of <code>pWaitSemaphores</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkDevice</code>"
}
]
},
"VkDeviceGroupBindSparseInfo": {
"(VK_VERSION_1_1,VK_KHR_device_group)": [
{
"vuid": "VUID-VkDeviceGroupBindSparseInfo-resourceDeviceIndex-01118",
"text": " <code>resourceDeviceIndex</code> and <code>memoryDeviceIndex</code> <strong class=\"purple\">must</strong> both be valid device indices."
},
{
"vuid": "VUID-VkDeviceGroupBindSparseInfo-memoryDeviceIndex-01119",
"text": " Each memory allocation bound in this batch <strong class=\"purple\">must</strong> have allocated an instance for <code>memoryDeviceIndex</code>."
},
{
"vuid": "VUID-VkDeviceGroupBindSparseInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO</code>"
}
]
},
"vkCreateAndroidSurfaceKHR": {
"(VK_KHR_surface)+(VK_KHR_android_surface)": [
{
"vuid": "VUID-vkCreateAndroidSurfaceKHR-instance-parameter",
"text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
},
{
"vuid": "VUID-vkCreateAndroidSurfaceKHR-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAndroidSurfaceCreateInfoKHR</code> structure"
},
{
"vuid": "VUID-vkCreateAndroidSurfaceKHR-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateAndroidSurfaceKHR-pSurface-parameter",
"text": " <code>pSurface</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSurfaceKHR</code> handle"
}
]
},
"VkAndroidSurfaceCreateInfoKHR": {
"(VK_KHR_surface)+(VK_KHR_android_surface)": [
{
"vuid": "VUID-VkAndroidSurfaceCreateInfoKHR-window-01248",
"text": " <code>window</code> <strong class=\"purple\">must</strong> point to a valid Android <code>ANativeWindow</code>."
},
{
"vuid": "VUID-VkAndroidSurfaceCreateInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR</code>"
},
{
"vuid": "VUID-VkAndroidSurfaceCreateInfoKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkAndroidSurfaceCreateInfoKHR-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
}
]
},
"vkCreateMirSurfaceKHR": {
"(VK_KHR_surface)+(VK_KHR_mir_surface)": [
{
"vuid": "VUID-vkCreateMirSurfaceKHR-instance-parameter",
"text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
},
{
"vuid": "VUID-vkCreateMirSurfaceKHR-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkMirSurfaceCreateInfoKHR</code> structure"
},
{
"vuid": "VUID-vkCreateMirSurfaceKHR-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateMirSurfaceKHR-pSurface-parameter",
"text": " <code>pSurface</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSurfaceKHR</code> handle"
}
]
},
"VkMirSurfaceCreateInfoKHR": {
"(VK_KHR_surface)+(VK_KHR_mir_surface)": [
{
"vuid": "VUID-VkMirSurfaceCreateInfoKHR-connection-01263",
"text": " <code>connection</code> <strong class=\"purple\">must</strong> point to a valid <code>MirConnection</code>."
},
{
"vuid": "VUID-VkMirSurfaceCreateInfoKHR-surface-01264",
"text": " <code>surface</code> <strong class=\"purple\">must</strong> point to a valid <code>MirSurface</code>."
},
{
"vuid": "VUID-VkMirSurfaceCreateInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR</code>"
},
{
"vuid": "VUID-VkMirSurfaceCreateInfoKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkMirSurfaceCreateInfoKHR-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
}
]
},
"vkCreateWaylandSurfaceKHR": {
"(VK_KHR_surface)+(VK_KHR_wayland_surface)": [
{
"vuid": "VUID-vkCreateWaylandSurfaceKHR-instance-parameter",
"text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
},
{
"vuid": "VUID-vkCreateWaylandSurfaceKHR-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkWaylandSurfaceCreateInfoKHR</code> structure"
},
{
"vuid": "VUID-vkCreateWaylandSurfaceKHR-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateWaylandSurfaceKHR-pSurface-parameter",
"text": " <code>pSurface</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSurfaceKHR</code> handle"
}
]
},
"VkWaylandSurfaceCreateInfoKHR": {
"(VK_KHR_surface)+(VK_KHR_wayland_surface)": [
{
"vuid": "VUID-VkWaylandSurfaceCreateInfoKHR-display-01304",
"text": " <code>display</code> <strong class=\"purple\">must</strong> point to a valid Wayland <code>wl_display</code>."
},
{
"vuid": "VUID-VkWaylandSurfaceCreateInfoKHR-surface-01305",
"text": " <code>surface</code> <strong class=\"purple\">must</strong> point to a valid Wayland <code>wl_surface</code>."
},
{
"vuid": "VUID-VkWaylandSurfaceCreateInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR</code>"
},
{
"vuid": "VUID-VkWaylandSurfaceCreateInfoKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkWaylandSurfaceCreateInfoKHR-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
}
]
},
"vkCreateWin32SurfaceKHR": {
"(VK_KHR_surface)+(VK_KHR_win32_surface)": [
{
"vuid": "VUID-vkCreateWin32SurfaceKHR-instance-parameter",
"text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
},
{
"vuid": "VUID-vkCreateWin32SurfaceKHR-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkWin32SurfaceCreateInfoKHR</code> structure"
},
{
"vuid": "VUID-vkCreateWin32SurfaceKHR-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateWin32SurfaceKHR-pSurface-parameter",
"text": " <code>pSurface</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSurfaceKHR</code> handle"
}
]
},
"VkWin32SurfaceCreateInfoKHR": {
"(VK_KHR_surface)+(VK_KHR_win32_surface)": [
{
"vuid": "VUID-VkWin32SurfaceCreateInfoKHR-hinstance-01307",
"text": " <code>hinstance</code> <strong class=\"purple\">must</strong> be a valid Win32 <code>HINSTANCE</code>."
},
{
"vuid": "VUID-VkWin32SurfaceCreateInfoKHR-hwnd-01308",
"text": " <code>hwnd</code> <strong class=\"purple\">must</strong> be a valid Win32 <code>HWND</code>."
},
{
"vuid": "VUID-VkWin32SurfaceCreateInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR</code>"
},
{
"vuid": "VUID-VkWin32SurfaceCreateInfoKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkWin32SurfaceCreateInfoKHR-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
}
]
},
"vkCreateXcbSurfaceKHR": {
"(VK_KHR_surface)+(VK_KHR_xcb_surface)": [
{
"vuid": "VUID-vkCreateXcbSurfaceKHR-instance-parameter",
"text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
},
{
"vuid": "VUID-vkCreateXcbSurfaceKHR-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkXcbSurfaceCreateInfoKHR</code> structure"
},
{
"vuid": "VUID-vkCreateXcbSurfaceKHR-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateXcbSurfaceKHR-pSurface-parameter",
"text": " <code>pSurface</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSurfaceKHR</code> handle"
}
]
},
"VkXcbSurfaceCreateInfoKHR": {
"(VK_KHR_surface)+(VK_KHR_xcb_surface)": [
{
"vuid": "VUID-VkXcbSurfaceCreateInfoKHR-connection-01310",
"text": " <code>connection</code> <strong class=\"purple\">must</strong> point to a valid X11 <code>xcb_connection_t</code>."
},
{
"vuid": "VUID-VkXcbSurfaceCreateInfoKHR-window-01311",
"text": " <code>window</code> <strong class=\"purple\">must</strong> be a valid X11 <code>xcb_window_t</code>."
},
{
"vuid": "VUID-VkXcbSurfaceCreateInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR</code>"
},
{
"vuid": "VUID-VkXcbSurfaceCreateInfoKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkXcbSurfaceCreateInfoKHR-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
}
]
},
"vkCreateXlibSurfaceKHR": {
"(VK_KHR_surface)+(VK_KHR_xlib_surface)": [
{
"vuid": "VUID-vkCreateXlibSurfaceKHR-instance-parameter",
"text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
},
{
"vuid": "VUID-vkCreateXlibSurfaceKHR-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkXlibSurfaceCreateInfoKHR</code> structure"
},
{
"vuid": "VUID-vkCreateXlibSurfaceKHR-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateXlibSurfaceKHR-pSurface-parameter",
"text": " <code>pSurface</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSurfaceKHR</code> handle"
}
]
},
"VkXlibSurfaceCreateInfoKHR": {
"(VK_KHR_surface)+(VK_KHR_xlib_surface)": [
{
"vuid": "VUID-VkXlibSurfaceCreateInfoKHR-dpy-01313",
"text": " <code>dpy</code> <strong class=\"purple\">must</strong> point to a valid Xlib <code>Display</code>."
},
{
"vuid": "VUID-VkXlibSurfaceCreateInfoKHR-window-01314",
"text": " <code>window</code> <strong class=\"purple\">must</strong> be a valid Xlib <code>Window</code>."
},
{
"vuid": "VUID-VkXlibSurfaceCreateInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR</code>"
},
{
"vuid": "VUID-VkXlibSurfaceCreateInfoKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkXlibSurfaceCreateInfoKHR-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
}
]
},
"vkCreateIOSSurfaceMVK": {
"(VK_KHR_surface)+(VK_MVK_ios_surface)": [
{
"vuid": "VUID-vkCreateIOSSurfaceMVK-instance-parameter",
"text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
},
{
"vuid": "VUID-vkCreateIOSSurfaceMVK-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkIOSSurfaceCreateInfoMVK</code> structure"
},
{
"vuid": "VUID-vkCreateIOSSurfaceMVK-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateIOSSurfaceMVK-pSurface-parameter",
"text": " <code>pSurface</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSurfaceKHR</code> handle"
}
]
},
"VkIOSSurfaceCreateInfoMVK": {
"(VK_KHR_surface)+(VK_MVK_ios_surface)": [
{
"vuid": "VUID-VkIOSSurfaceCreateInfoMVK-pView-01316",
"text": " <code>pView</code> <strong class=\"purple\">must</strong> be a valid <code>UIView</code> and <strong class=\"purple\">must</strong> be backed by a <code>CALayer</code> instance of type <code>CAMetalLayer</code>."
},
{
"vuid": "VUID-VkIOSSurfaceCreateInfoMVK-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK</code>"
},
{
"vuid": "VUID-VkIOSSurfaceCreateInfoMVK-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkIOSSurfaceCreateInfoMVK-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
}
]
},
"vkCreateMacOSSurfaceMVK": {
"(VK_KHR_surface)+(VK_MVK_macos_surface)": [
{
"vuid": "VUID-vkCreateMacOSSurfaceMVK-instance-parameter",
"text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
},
{
"vuid": "VUID-vkCreateMacOSSurfaceMVK-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkMacOSSurfaceCreateInfoMVK</code> structure"
},
{
"vuid": "VUID-vkCreateMacOSSurfaceMVK-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateMacOSSurfaceMVK-pSurface-parameter",
"text": " <code>pSurface</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSurfaceKHR</code> handle"
}
]
},
"VkMacOSSurfaceCreateInfoMVK": {
"(VK_KHR_surface)+(VK_MVK_macos_surface)": [
{
"vuid": "VUID-VkMacOSSurfaceCreateInfoMVK-pView-01317",
"text": " <code>pView</code> <strong class=\"purple\">must</strong> be a valid <code>NSView</code> and <strong class=\"purple\">must</strong> be backed by a <code>CALayer</code> instance of type <code>CAMetalLayer</code>."
},
{
"vuid": "VUID-VkMacOSSurfaceCreateInfoMVK-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK</code>"
},
{
"vuid": "VUID-VkMacOSSurfaceCreateInfoMVK-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkMacOSSurfaceCreateInfoMVK-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
}
]
},
"vkCreateViSurfaceNN": {
"(VK_KHR_surface)+(VK_NN_vi_surface)": [
{
"vuid": "VUID-vkCreateViSurfaceNN-instance-parameter",
"text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
},
{
"vuid": "VUID-vkCreateViSurfaceNN-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkViSurfaceCreateInfoNN</code> structure"
},
{
"vuid": "VUID-vkCreateViSurfaceNN-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateViSurfaceNN-pSurface-parameter",
"text": " <code>pSurface</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSurfaceKHR</code> handle"
}
]
},
"VkViSurfaceCreateInfoNN": {
"(VK_KHR_surface)+(VK_NN_vi_surface)": [
{
"vuid": "VUID-VkViSurfaceCreateInfoNN-window-01318",
"text": " <code>window</code> <strong class=\"purple\">must</strong> be a valid <code>nn</code>::<code>vi</code>::<code>NativeWindowHandle</code>"
},
{
"vuid": "VUID-VkViSurfaceCreateInfoNN-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN</code>"
},
{
"vuid": "VUID-VkViSurfaceCreateInfoNN-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkViSurfaceCreateInfoNN-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
}
]
},
"vkDestroySurfaceKHR": {
"(VK_KHR_surface)": [
{
"vuid": "VUID-vkDestroySurfaceKHR-surface-01266",
"text": " All <code>VkSwapchainKHR</code> objects created for <code>surface</code> <strong class=\"purple\">must</strong> have been destroyed prior to destroying <code>surface</code>"
},
{
"vuid": "VUID-vkDestroySurfaceKHR-surface-01267",
"text": " If <code>VkAllocationCallbacks</code> were provided when <code>surface</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
},
{
"vuid": "VUID-vkDestroySurfaceKHR-surface-01268",
"text": " If no <code>VkAllocationCallbacks</code> were provided when <code>surface</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-vkDestroySurfaceKHR-instance-parameter",
"text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
},
{
"vuid": "VUID-vkDestroySurfaceKHR-surface-parameter",
"text": " If <code>surface</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>surface</code> <strong class=\"purple\">must</strong> be a valid <code>VkSurfaceKHR</code> handle"
},
{
"vuid": "VUID-vkDestroySurfaceKHR-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkDestroySurfaceKHR-surface-parent",
"text": " If <code>surface</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>instance</code>"
}
]
},
"vkGetPhysicalDeviceDisplayPropertiesKHR": {
"(VK_KHR_surface)+(VK_KHR_display)": [
{
"vuid": "VUID-vkGetPhysicalDeviceDisplayPropertiesKHR-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceDisplayPropertiesKHR-pPropertyCount-parameter",
"text": " <code>pPropertyCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
},
{
"vuid": "VUID-vkGetPhysicalDeviceDisplayPropertiesKHR-pProperties-parameter",
"text": " If the value referenced by <code>pPropertyCount</code> is not <code>0</code>, and <code>pProperties</code> is not <code>NULL</code>, <code>pProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pPropertyCount</code> <code>VkDisplayPropertiesKHR</code> structures"
}
]
},
"vkGetPhysicalDeviceDisplayProperties2KHR": {
"(VK_KHR_surface)+(VK_KHR_display)+(VK_KHR_get_display_properties2)": [
{
"vuid": "VUID-vkGetPhysicalDeviceDisplayProperties2KHR-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceDisplayProperties2KHR-pPropertyCount-parameter",
"text": " <code>pPropertyCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
},
{
"vuid": "VUID-vkGetPhysicalDeviceDisplayProperties2KHR-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>VkDisplayProperties2KHR</code> structures"
}
]
},
"VkDisplayProperties2KHR": {
"(VK_KHR_surface)+(VK_KHR_display)+(VK_KHR_get_display_properties2)": [
{
"vuid": "VUID-VkDisplayProperties2KHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR</code>"
},
{
"vuid": "VUID-VkDisplayProperties2KHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
},
"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"
}
]
},
"vkGetPhysicalDeviceDisplayPlaneProperties2KHR": {
"(VK_KHR_surface)+(VK_KHR_display)+(VK_KHR_get_display_properties2)": [
{
"vuid": "VUID-vkGetPhysicalDeviceDisplayPlaneProperties2KHR-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceDisplayPlaneProperties2KHR-pPropertyCount-parameter",
"text": " <code>pPropertyCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
},
{
"vuid": "VUID-vkGetPhysicalDeviceDisplayPlaneProperties2KHR-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>VkDisplayPlaneProperties2KHR</code> structures"
}
]
},
"VkDisplayPlaneProperties2KHR": {
"(VK_KHR_surface)+(VK_KHR_display)+(VK_KHR_get_display_properties2)": [
{
"vuid": "VUID-VkDisplayPlaneProperties2KHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR</code>"
},
{
"vuid": "VUID-VkDisplayPlaneProperties2KHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
},
"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"
}
]
},
"vkGetDisplayModeProperties2KHR": {
"(VK_KHR_surface)+(VK_KHR_display)+(VK_KHR_get_display_properties2)": [
{
"vuid": "VUID-vkGetDisplayModeProperties2KHR-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetDisplayModeProperties2KHR-display-parameter",
"text": " <code>display</code> <strong class=\"purple\">must</strong> be a valid <code>VkDisplayKHR</code> handle"
},
{
"vuid": "VUID-vkGetDisplayModeProperties2KHR-pPropertyCount-parameter",
"text": " <code>pPropertyCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
},
{
"vuid": "VUID-vkGetDisplayModeProperties2KHR-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>VkDisplayModeProperties2KHR</code> structures"
}
]
},
"VkDisplayModeProperties2KHR": {
"(VK_KHR_surface)+(VK_KHR_display)+(VK_KHR_get_display_properties2)": [
{
"vuid": "VUID-VkDisplayModeProperties2KHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR</code>"
},
{
"vuid": "VUID-VkDisplayModeProperties2KHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
},
"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"
}
]
},
"vkGetDisplayPlaneCapabilities2KHR": {
"(VK_KHR_surface)+(VK_KHR_display)+(VK_KHR_get_display_properties2)": [
{
"vuid": "VUID-vkGetDisplayPlaneCapabilities2KHR-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetDisplayPlaneCapabilities2KHR-pDisplayPlaneInfo-parameter",
"text": " <code>pDisplayPlaneInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDisplayPlaneInfo2KHR</code> structure"
},
{
"vuid": "VUID-vkGetDisplayPlaneCapabilities2KHR-pCapabilities-parameter",
"text": " <code>pCapabilities</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkDisplayPlaneCapabilities2KHR</code> structure"
}
]
},
"VkDisplayPlaneInfo2KHR": {
"(VK_KHR_surface)+(VK_KHR_display)+(VK_KHR_get_display_properties2)": [
{
"vuid": "VUID-VkDisplayPlaneInfo2KHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR</code>"
},
{
"vuid": "VUID-VkDisplayPlaneInfo2KHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkDisplayPlaneInfo2KHR-mode-parameter",
"text": " <code>mode</code> <strong class=\"purple\">must</strong> be a valid <code>VkDisplayModeKHR</code> handle"
}
]
},
"VkDisplayPlaneCapabilities2KHR": {
"(VK_KHR_surface)+(VK_KHR_display)+(VK_KHR_get_display_properties2)": [
{
"vuid": "VUID-VkDisplayPlaneCapabilities2KHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR</code>"
},
{
"vuid": "VUID-VkDisplayPlaneCapabilities2KHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
},
"vkDisplayPowerControlEXT": {
"(VK_KHR_surface)+(VK_KHR_display)+(VK_EXT_display_control)": [
{
"vuid": "VUID-vkDisplayPowerControlEXT-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkDisplayPowerControlEXT-display-parameter",
"text": " <code>display</code> <strong class=\"purple\">must</strong> be a valid <code>VkDisplayKHR</code> handle"
},
{
"vuid": "VUID-vkDisplayPowerControlEXT-pDisplayPowerInfo-parameter",
"text": " <code>pDisplayPowerInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDisplayPowerInfoEXT</code> structure"
}
]
},
"VkDisplayPowerInfoEXT": {
"(VK_KHR_surface)+(VK_KHR_display)+(VK_EXT_display_control)": [
{
"vuid": "VUID-VkDisplayPowerInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT</code>"
},
{
"vuid": "VUID-VkDisplayPowerInfoEXT-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkDisplayPowerInfoEXT-powerState-parameter",
"text": " <code>powerState</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDisplayPowerStateEXT\">VkDisplayPowerStateEXT</a> value"
}
]
},
"vkCreateDisplayPlaneSurfaceKHR": {
"(VK_KHR_surface)+(VK_KHR_display)": [
{
"vuid": "VUID-vkCreateDisplayPlaneSurfaceKHR-instance-parameter",
"text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
},
{
"vuid": "VUID-vkCreateDisplayPlaneSurfaceKHR-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDisplaySurfaceCreateInfoKHR</code> structure"
},
{
"vuid": "VUID-vkCreateDisplayPlaneSurfaceKHR-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateDisplayPlaneSurfaceKHR-pSurface-parameter",
"text": " <code>pSurface</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSurfaceKHR</code> handle"
}
]
},
"VkDisplaySurfaceCreateInfoKHR": {
"(VK_KHR_surface)+(VK_KHR_display)": [
{
"vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-planeIndex-01252",
"text": " <code>planeIndex</code> <strong class=\"purple\">must</strong> be less than the number of display planes supported by the device as determined by calling <code>vkGetPhysicalDeviceDisplayPlanePropertiesKHR</code>"
},
{
"vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-planeReorderPossible-01253",
"text": " If the <code>planeReorderPossible</code> member of the <code>VkDisplayPropertiesKHR</code> structure returned by <code>vkGetPhysicalDeviceDisplayPropertiesKHR</code> for the display corresponding to <code>displayMode</code> is <code>VK_TRUE</code> then <code>planeStackIndex</code> <strong class=\"purple\">must</strong> be less than the number of display planes supported by the device as determined by calling <code>vkGetPhysicalDeviceDisplayPlanePropertiesKHR</code>; otherwise <code>planeStackIndex</code> <strong class=\"purple\">must</strong> equal the <code>currentStackIndex</code> member of <code>VkDisplayPlanePropertiesKHR</code> returned by <code>vkGetPhysicalDeviceDisplayPlanePropertiesKHR</code> for the display plane corresponding to <code>displayMode</code>"
},
{
"vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-alphaMode-01254",
"text": " If <code>alphaMode</code> is <code>VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR</code> then <code>globalAlpha</code> <strong class=\"purple\">must</strong> be between <code>0</code> and <code>1</code>, inclusive"
},
{
"vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-alphaMode-01255",
"text": " <code>alphaMode</code> <strong class=\"purple\">must</strong> be <code>0</code> or one of the bits present in the <code>supportedAlpha</code> member of <code>VkDisplayPlaneCapabilitiesKHR</code> returned by <code>vkGetDisplayPlaneCapabilitiesKHR</code> for the display plane corresponding to <code>displayMode</code>"
},
{
"vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-width-01256",
"text": " The <code>width</code> and <code>height</code> members of <code>imageExtent</code> <strong class=\"purple\">must</strong> be less than the <code>maxImageDimensions2D</code> member of <code>VkPhysicalDeviceLimits</code>"
},
{
"vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR</code>"
},
{
"vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-displayMode-parameter",
"text": " <code>displayMode</code> <strong class=\"purple\">must</strong> be a valid <code>VkDisplayModeKHR</code> handle"
},
{
"vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-transform-parameter",
"text": " <code>transform</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSurfaceTransformFlagBitsKHR\">VkSurfaceTransformFlagBitsKHR</a> value"
},
{
"vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-alphaMode-parameter",
"text": " <code>alphaMode</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDisplayPlaneAlphaFlagBitsKHR\">VkDisplayPlaneAlphaFlagBitsKHR</a> value"
}
]
},
"vkGetPhysicalDeviceSurfaceSupportKHR": {
"(VK_KHR_surface)": [
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceSupportKHR-queueFamilyIndex-01269",
"text": " <code>queueFamilyIndex</code> <strong class=\"purple\">must</strong> be less than <code>pQueueFamilyPropertyCount</code> returned by <code>vkGetPhysicalDeviceQueueFamilyProperties</code> for the given <code>physicalDevice</code>"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceSupportKHR-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceSupportKHR-surface-parameter",
"text": " <code>surface</code> <strong class=\"purple\">must</strong> be a valid <code>VkSurfaceKHR</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceSupportKHR-pSupported-parameter",
"text": " <code>pSupported</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkBool32</code> value"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceSupportKHR-commonparent",
"text": " Both of <code>physicalDevice</code>, and <code>surface</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkInstance</code>"
}
]
},
"vkGetPhysicalDeviceMirPresentationSupportKHR": {
"(VK_KHR_surface)+(VK_KHR_mir_surface)": [
{
"vuid": "VUID-vkGetPhysicalDeviceMirPresentationSupportKHR-queueFamilyIndex-01265",
"text": " <code>queueFamilyIndex</code> <strong class=\"purple\">must</strong> be less than <code>pQueueFamilyPropertyCount</code> returned by <code>vkGetPhysicalDeviceQueueFamilyProperties</code> for the given <code>physicalDevice</code>"
},
{
"vuid": "VUID-vkGetPhysicalDeviceMirPresentationSupportKHR-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceMirPresentationSupportKHR-connection-parameter",
"text": " <code>connection</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>MirConnection</code> value"
}
]
},
"vkGetPhysicalDeviceWaylandPresentationSupportKHR": {
"(VK_KHR_surface)+(VK_KHR_wayland_surface)": [
{
"vuid": "VUID-vkGetPhysicalDeviceWaylandPresentationSupportKHR-queueFamilyIndex-01306",
"text": " <code>queueFamilyIndex</code> <strong class=\"purple\">must</strong> be less than <code>pQueueFamilyPropertyCount</code> returned by <code>vkGetPhysicalDeviceQueueFamilyProperties</code> for the given <code>physicalDevice</code>"
},
{
"vuid": "VUID-vkGetPhysicalDeviceWaylandPresentationSupportKHR-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceWaylandPresentationSupportKHR-display-parameter",
"text": " <code>display</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>wl_display</code> value"
}
]
},
"vkGetPhysicalDeviceWin32PresentationSupportKHR": {
"(VK_KHR_surface)+(VK_KHR_win32_surface)": [
{
"vuid": "VUID-vkGetPhysicalDeviceWin32PresentationSupportKHR-queueFamilyIndex-01309",
"text": " <code>queueFamilyIndex</code> <strong class=\"purple\">must</strong> be less than <code>pQueueFamilyPropertyCount</code> returned by <code>vkGetPhysicalDeviceQueueFamilyProperties</code> for the given <code>physicalDevice</code>"
},
{
"vuid": "VUID-vkGetPhysicalDeviceWin32PresentationSupportKHR-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
}
]
},
"vkGetPhysicalDeviceXcbPresentationSupportKHR": {
"(VK_KHR_surface)+(VK_KHR_xcb_surface)": [
{
"vuid": "VUID-vkGetPhysicalDeviceXcbPresentationSupportKHR-queueFamilyIndex-01312",
"text": " <code>queueFamilyIndex</code> <strong class=\"purple\">must</strong> be less than <code>pQueueFamilyPropertyCount</code> returned by <code>vkGetPhysicalDeviceQueueFamilyProperties</code> for the given <code>physicalDevice</code>"
},
{
"vuid": "VUID-vkGetPhysicalDeviceXcbPresentationSupportKHR-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceXcbPresentationSupportKHR-connection-parameter",
"text": " <code>connection</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>xcb_connection_t</code> value"
}
]
},
"vkGetPhysicalDeviceXlibPresentationSupportKHR": {
"(VK_KHR_surface)+(VK_KHR_xlib_surface)": [
{
"vuid": "VUID-vkGetPhysicalDeviceXlibPresentationSupportKHR-queueFamilyIndex-01315",
"text": " <code>queueFamilyIndex</code> <strong class=\"purple\">must</strong> be less than <code>pQueueFamilyPropertyCount</code> returned by <code>vkGetPhysicalDeviceQueueFamilyProperties</code> for the given <code>physicalDevice</code>"
},
{
"vuid": "VUID-vkGetPhysicalDeviceXlibPresentationSupportKHR-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceXlibPresentationSupportKHR-dpy-parameter",
"text": " <code>dpy</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>Display</code> value"
}
]
},
"vkGetPhysicalDeviceSurfaceCapabilitiesKHR": {
"(VK_KHR_surface)": [
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilitiesKHR-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilitiesKHR-surface-parameter",
"text": " <code>surface</code> <strong class=\"purple\">must</strong> be a valid <code>VkSurfaceKHR</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilitiesKHR-pSurfaceCapabilities-parameter",
"text": " <code>pSurfaceCapabilities</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSurfaceCapabilitiesKHR</code> structure"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilitiesKHR-commonparent",
"text": " Both of <code>physicalDevice</code>, and <code>surface</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkInstance</code>"
}
]
},
"vkGetPhysicalDeviceSurfaceCapabilities2KHR": {
"(VK_KHR_surface)+(VK_KHR_get_surface_capabilities2)": [
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-pSurfaceInfo-parameter",
"text": " <code>pSurfaceInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPhysicalDeviceSurfaceInfo2KHR</code> structure"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-pSurfaceCapabilities-parameter",
"text": " <code>pSurfaceCapabilities</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSurfaceCapabilities2KHR</code> structure"
}
]
},
"VkPhysicalDeviceSurfaceInfo2KHR": {
"(VK_KHR_surface)+(VK_KHR_get_surface_capabilities2)": [
{
"vuid": "VUID-VkPhysicalDeviceSurfaceInfo2KHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR</code>"
},
{
"vuid": "VUID-VkPhysicalDeviceSurfaceInfo2KHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkPhysicalDeviceSurfaceInfo2KHR-surface-parameter",
"text": " <code>surface</code> <strong class=\"purple\">must</strong> be a valid <code>VkSurfaceKHR</code> handle"
}
]
},
"VkSurfaceCapabilities2KHR": {
"(VK_KHR_surface)+(VK_KHR_get_surface_capabilities2)": [
{
"vuid": "VUID-VkSurfaceCapabilities2KHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR</code>"
},
{
"vuid": "VUID-VkSurfaceCapabilities2KHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkSharedPresentSurfaceCapabilitiesKHR\">VkSharedPresentSurfaceCapabilitiesKHR</a>"
}
]
},
"VkSharedPresentSurfaceCapabilitiesKHR": {
"(VK_KHR_surface)+(VK_KHR_get_surface_capabilities2)+(VK_KHR_shared_presentable_image)": [
{
"vuid": "VUID-VkSharedPresentSurfaceCapabilitiesKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR</code>"
}
]
},
"vkGetPhysicalDeviceSurfaceCapabilities2EXT": {
"(VK_KHR_surface)+(VK_EXT_display_surface_counter)": [
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2EXT-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2EXT-surface-parameter",
"text": " <code>surface</code> <strong class=\"purple\">must</strong> be a valid <code>VkSurfaceKHR</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2EXT-pSurfaceCapabilities-parameter",
"text": " <code>pSurfaceCapabilities</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSurfaceCapabilities2EXT</code> structure"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2EXT-commonparent",
"text": " Both of <code>physicalDevice</code>, and <code>surface</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkInstance</code>"
}
]
},
"VkSurfaceCapabilities2EXT": {
"(VK_KHR_surface)+(VK_EXT_display_surface_counter)": [
{
"vuid": "VUID-VkSurfaceCapabilities2EXT-supportedSurfaceCounters-01246",
"text": " <code>supportedSurfaceCounters</code> <strong class=\"purple\">must</strong> not include <code>VK_SURFACE_COUNTER_VBLANK_EXT</code> unless the surface queried is a &amp;amp;lt;&amp;amp;lt;wsi-display-surfaces,display surface&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-VkSurfaceCapabilities2EXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT</code>"
},
{
"vuid": "VUID-VkSurfaceCapabilities2EXT-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
},
"vkGetPhysicalDeviceSurfaceFormatsKHR": {
"(VK_KHR_surface)": [
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceFormatsKHR-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceFormatsKHR-surface-parameter",
"text": " <code>surface</code> <strong class=\"purple\">must</strong> be a valid <code>VkSurfaceKHR</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceFormatsKHR-pSurfaceFormatCount-parameter",
"text": " <code>pSurfaceFormatCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceFormatsKHR-pSurfaceFormats-parameter",
"text": " If the value referenced by <code>pSurfaceFormatCount</code> is not <code>0</code>, and <code>pSurfaceFormats</code> is not <code>NULL</code>, <code>pSurfaceFormats</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pSurfaceFormatCount</code> <code>VkSurfaceFormatKHR</code> structures"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceFormatsKHR-commonparent",
"text": " Both of <code>physicalDevice</code>, and <code>surface</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkInstance</code>"
}
]
},
"vkGetPhysicalDeviceSurfaceFormats2KHR": {
"(VK_KHR_surface)+(VK_KHR_get_surface_capabilities2)": [
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceFormats2KHR-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceFormats2KHR-pSurfaceInfo-parameter",
"text": " <code>pSurfaceInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPhysicalDeviceSurfaceInfo2KHR</code> structure"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceFormats2KHR-pSurfaceFormatCount-parameter",
"text": " <code>pSurfaceFormatCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceFormats2KHR-pSurfaceFormats-parameter",
"text": " If the value referenced by <code>pSurfaceFormatCount</code> is not <code>0</code>, and <code>pSurfaceFormats</code> is not <code>NULL</code>, <code>pSurfaceFormats</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pSurfaceFormatCount</code> <code>VkSurfaceFormat2KHR</code> structures"
}
]
},
"VkSurfaceFormat2KHR": {
"(VK_KHR_surface)+(VK_KHR_get_surface_capabilities2)": [
{
"vuid": "VUID-VkSurfaceFormat2KHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR</code>"
},
{
"vuid": "VUID-VkSurfaceFormat2KHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
},
"vkGetPhysicalDeviceSurfacePresentModesKHR": {
"(VK_KHR_surface)": [
{
"vuid": "VUID-vkGetPhysicalDeviceSurfacePresentModesKHR-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfacePresentModesKHR-surface-parameter",
"text": " <code>surface</code> <strong class=\"purple\">must</strong> be a valid <code>VkSurfaceKHR</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfacePresentModesKHR-pPresentModeCount-parameter",
"text": " <code>pPresentModeCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfacePresentModesKHR-pPresentModes-parameter",
"text": " If the value referenced by <code>pPresentModeCount</code> is not <code>0</code>, and <code>pPresentModes</code> is not <code>NULL</code>, <code>pPresentModes</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pPresentModeCount</code> <a href=\"#VkPresentModeKHR\">VkPresentModeKHR</a> values"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfacePresentModesKHR-commonparent",
"text": " Both of <code>physicalDevice</code>, and <code>surface</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkInstance</code>"
}
]
},
"vkGetDeviceGroupPresentCapabilitiesKHR": {
"(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_VERSION_1_1,VK_KHR_device_group)": [
{
"vuid": "VUID-vkGetDeviceGroupPresentCapabilitiesKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkGetDeviceGroupPresentCapabilitiesKHR-pDeviceGroupPresentCapabilities-parameter",
"text": " <code>pDeviceGroupPresentCapabilities</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkDeviceGroupPresentCapabilitiesKHR</code> structure"
}
]
},
"VkDeviceGroupPresentCapabilitiesKHR": {
"(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_VERSION_1_1,VK_KHR_device_group)": [
{
"vuid": "VUID-VkDeviceGroupPresentCapabilitiesKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR</code>"
},
{
"vuid": "VUID-VkDeviceGroupPresentCapabilitiesKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
},
"vkGetDeviceGroupSurfacePresentModesKHR": {
"(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_VERSION_1_1,VK_KHR_device_group)": [
{
"vuid": "VUID-vkGetDeviceGroupSurfacePresentModesKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkGetDeviceGroupSurfacePresentModesKHR-surface-parameter",
"text": " <code>surface</code> <strong class=\"purple\">must</strong> be a valid <code>VkSurfaceKHR</code> handle"
},
{
"vuid": "VUID-vkGetDeviceGroupSurfacePresentModesKHR-pModes-parameter",
"text": " <code>pModes</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkDeviceGroupPresentModeFlagsKHR\">VkDeviceGroupPresentModeFlagsKHR</a> value"
},
{
"vuid": "VUID-vkGetDeviceGroupSurfacePresentModesKHR-commonparent",
"text": " Both of <code>device</code>, and <code>surface</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkInstance</code>"
}
]
},
"vkGetPhysicalDevicePresentRectanglesKHR": {
"(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_VERSION_1_1,VK_KHR_device_group)": [
{
"vuid": "VUID-vkGetPhysicalDevicePresentRectanglesKHR-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDevicePresentRectanglesKHR-surface-parameter",
"text": " <code>surface</code> <strong class=\"purple\">must</strong> be a valid <code>VkSurfaceKHR</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDevicePresentRectanglesKHR-pRectCount-parameter",
"text": " <code>pRectCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
},
{
"vuid": "VUID-vkGetPhysicalDevicePresentRectanglesKHR-pRects-parameter",
"text": " If the value referenced by <code>pRectCount</code> is not <code>0</code>, and <code>pRects</code> is not <code>NULL</code>, <code>pRects</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pRectCount</code> <code>VkRect2D</code> structures"
},
{
"vuid": "VUID-vkGetPhysicalDevicePresentRectanglesKHR-commonparent",
"text": " Both of <code>physicalDevice</code>, and <code>surface</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkInstance</code>"
}
]
},
"vkGetRefreshCycleDurationGOOGLE": {
"(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_GOOGLE_display_timing)": [
{
"vuid": "VUID-vkGetRefreshCycleDurationGOOGLE-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkGetRefreshCycleDurationGOOGLE-swapchain-parameter",
"text": " <code>swapchain</code> <strong class=\"purple\">must</strong> be a valid <code>VkSwapchainKHR</code> handle"
},
{
"vuid": "VUID-vkGetRefreshCycleDurationGOOGLE-pDisplayTimingProperties-parameter",
"text": " <code>pDisplayTimingProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkRefreshCycleDurationGOOGLE</code> structure"
},
{
"vuid": "VUID-vkGetRefreshCycleDurationGOOGLE-commonparent",
"text": " Both of <code>device</code>, and <code>swapchain</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkInstance</code>"
}
]
},
"vkGetPastPresentationTimingGOOGLE": {
"(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_GOOGLE_display_timing)": [
{
"vuid": "VUID-vkGetPastPresentationTimingGOOGLE-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkGetPastPresentationTimingGOOGLE-swapchain-parameter",
"text": " <code>swapchain</code> <strong class=\"purple\">must</strong> be a valid <code>VkSwapchainKHR</code> handle"
},
{
"vuid": "VUID-vkGetPastPresentationTimingGOOGLE-pPresentationTimingCount-parameter",
"text": " <code>pPresentationTimingCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
},
{
"vuid": "VUID-vkGetPastPresentationTimingGOOGLE-pPresentationTimings-parameter",
"text": " If the value referenced by <code>pPresentationTimingCount</code> is not <code>0</code>, and <code>pPresentationTimings</code> is not <code>NULL</code>, <code>pPresentationTimings</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pPresentationTimingCount</code> <code>VkPastPresentationTimingGOOGLE</code> structures"
},
{
"vuid": "VUID-vkGetPastPresentationTimingGOOGLE-commonparent",
"text": " Both of <code>device</code>, and <code>swapchain</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkInstance</code>"
}
]
},
"vkGetSwapchainStatusKHR": {
"(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_KHR_shared_presentable_image)": [
{
"vuid": "VUID-vkGetSwapchainStatusKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkGetSwapchainStatusKHR-swapchain-parameter",
"text": " <code>swapchain</code> <strong class=\"purple\">must</strong> be a valid <code>VkSwapchainKHR</code> handle"
},
{
"vuid": "VUID-vkGetSwapchainStatusKHR-commonparent",
"text": " Both of <code>device</code>, and <code>swapchain</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkInstance</code>"
}
]
},
"vkCreateSwapchainKHR": {
"(VK_KHR_surface)+(VK_KHR_swapchain)": [
{
"vuid": "VUID-vkCreateSwapchainKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkCreateSwapchainKHR-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkSwapchainCreateInfoKHR</code> structure"
},
{
"vuid": "VUID-vkCreateSwapchainKHR-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateSwapchainKHR-pSwapchain-parameter",
"text": " <code>pSwapchain</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkSwapchainKHR</code> handle"
}
]
},
"VkSwapchainCreateInfoKHR": {
"(VK_KHR_surface)+(VK_KHR_swapchain)": [
{
"vuid": "VUID-VkSwapchainCreateInfoKHR-surface-01270",
"text": " <code>surface</code> <strong class=\"purple\">must</strong> be a surface that is supported by the device as determined using <code>vkGetPhysicalDeviceSurfaceSupportKHR</code>"
},
{
"vuid": "VUID-VkSwapchainCreateInfoKHR-minImageCount-01271",
"text": " <code>minImageCount</code> <strong class=\"purple\">must</strong> be greater than or equal to the value returned in the <code>minImageCount</code> member of the <code>VkSurfaceCapabilitiesKHR</code> structure returned by <code>vkGetPhysicalDeviceSurfaceCapabilitiesKHR</code> for the surface"
},
{
"vuid": "VUID-VkSwapchainCreateInfoKHR-minImageCount-01272",
"text": " <code>minImageCount</code> <strong class=\"purple\">must</strong> be less than or equal to the value returned in the <code>maxImageCount</code> member of the <code>VkSurfaceCapabilitiesKHR</code> structure returned by <code>vkGetPhysicalDeviceSurfaceCapabilitiesKHR</code> for the surface if the returned <code>maxImageCount</code> is not zero"
},
{
"vuid": "VUID-VkSwapchainCreateInfoKHR-imageFormat-01273",
"text": " <code>imageFormat</code> and <code>imageColorSpace</code> <strong class=\"purple\">must</strong> match the <code>format</code> and <code>colorSpace</code> members, respectively, of one of the <code>VkSurfaceFormatKHR</code> structures returned by <code>vkGetPhysicalDeviceSurfaceFormatsKHR</code> for the surface"
},
{
"vuid": "VUID-VkSwapchainCreateInfoKHR-imageExtent-01274",
"text": " <code>imageExtent</code> <strong class=\"purple\">must</strong> be between <code>minImageExtent</code> and <code>maxImageExtent</code>, inclusive, where <code>minImageExtent</code> and <code>maxImageExtent</code> are members of the <code>VkSurfaceCapabilitiesKHR</code> structure returned by <code>vkGetPhysicalDeviceSurfaceCapabilitiesKHR</code> for the surface"
},
{
"vuid": "VUID-VkSwapchainCreateInfoKHR-imageExtent-01689",
"text": " <code>imageExtent</code> members <code>width</code> and <code>height</code> <strong class=\"purple\">must</strong> both be non-zero"
},
{
"vuid": "VUID-VkSwapchainCreateInfoKHR-imageArrayLayers-01275",
"text": " <code>imageArrayLayers</code> <strong class=\"purple\">must</strong> be greater than <code>0</code> and less than or equal to the <code>maxImageArrayLayers</code> member of the <code>VkSurfaceCapabilitiesKHR</code> structure returned by <code>vkGetPhysicalDeviceSurfaceCapabilitiesKHR</code> for the surface"
},
{
"vuid": "VUID-VkSwapchainCreateInfoKHR-imageSharingMode-01277",
"text": " If <code>imageSharingMode</code> is <code>VK_SHARING_MODE_CONCURRENT</code>, <code>pQueueFamilyIndices</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>queueFamilyIndexCount</code> <code>uint32_t</code> values"
},
{
"vuid": "VUID-VkSwapchainCreateInfoKHR-imageSharingMode-01278",
"text": " If <code>imageSharingMode</code> is <code>VK_SHARING_MODE_CONCURRENT</code>, <code>queueFamilyIndexCount</code> <strong class=\"purple\">must</strong> be greater than <code>1</code>"
},
{
"vuid": "VUID-VkSwapchainCreateInfoKHR-preTransform-01279",
"text": " <code>preTransform</code> <strong class=\"purple\">must</strong> be one of the bits present in the <code>supportedTransforms</code> member of the <code>VkSurfaceCapabilitiesKHR</code> structure returned by <code>vkGetPhysicalDeviceSurfaceCapabilitiesKHR</code> for the surface"
},
{
"vuid": "VUID-VkSwapchainCreateInfoKHR-compositeAlpha-01280",
"text": " <code>compositeAlpha</code> <strong class=\"purple\">must</strong> be one of the bits present in the <code>supportedCompositeAlpha</code> member of the <code>VkSurfaceCapabilitiesKHR</code> structure returned by <code>vkGetPhysicalDeviceSurfaceCapabilitiesKHR</code> for the surface"
},
{
"vuid": "VUID-VkSwapchainCreateInfoKHR-presentMode-01281",
"text": " <code>presentMode</code> <strong class=\"purple\">must</strong> be one of the <a href=\"#VkPresentModeKHR\">VkPresentModeKHR</a> values returned by <code>vkGetPhysicalDeviceSurfacePresentModesKHR</code> for the surface"
},
{
"vuid": "VUID-VkSwapchainCreateInfoKHR-oldSwapchain-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;amp;lt;&amp;amp;lt;synchronization-semaphores-signaling, semaphore signal operations&amp;amp;gt;&amp;amp;gt; previously submitted for execution."
},
{
"vuid": "VUID-vkQueuePresentKHR-queue-parameter",
"text": " <code>queue</code> <strong class=\"purple\">must</strong> be a valid <code>VkQueue</code> handle"
},
{
"vuid": "VUID-vkQueuePresentKHR-pPresentInfo-parameter",
"text": " <code>pPresentInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPresentInfoKHR</code> structure"
}
],
"(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_KHR_display_swapchain)": [
{
"vuid": "VUID-vkQueuePresentKHR-pSwapchains-01293",
"text": " If more than one member of <code>pSwapchains</code> was created from a display surface, all display surfaces referenced that refer to the same display <strong class=\"purple\">must</strong> use the same display mode"
}
]
},
"VkPresentInfoKHR": {
"(VK_KHR_surface)+(VK_KHR_swapchain)+!(VK_KHR_shared_presentable_image)": [
{
"vuid": "VUID-VkPresentInfoKHR-pImageIndices-01296",
"text": " Each element of <code>pImageIndices</code> <strong class=\"purple\">must</strong> be the index of a presentable image acquired from the swapchain specified by the corresponding element of the <code>pSwapchains</code> array, and the presented image subresource <strong class=\"purple\">must</strong> be in the <code>VK_IMAGE_LAYOUT_PRESENT_SRC_KHR</code> layout at the time the operation is executed on a <code>VkDevice</code>"
}
],
"(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_KHR_shared_presentable_image)": [
{
"vuid": "VUID-VkPresentInfoKHR-pImageIndices-01430",
"text": " Each element of <code>pImageIndices</code> <strong class=\"purple\">must</strong> be the index of a presentable image acquired from the swapchain specified by the corresponding element of the <code>pSwapchains</code> array, and the presented image subresource <strong class=\"purple\">must</strong> be in the <code>VK_IMAGE_LAYOUT_PRESENT_SRC_KHR</code> or <code>VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR</code> layout at the time the operation is executed on a <code>VkDevice</code>"
}
],
"(VK_KHR_surface)+(VK_KHR_swapchain)": [
{
"vuid": "VUID-VkPresentInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PRESENT_INFO_KHR</code>"
},
{
"vuid": "VUID-VkPresentInfoKHR-pNext-pNext",
"text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkDeviceGroupPresentInfoKHR\">VkDeviceGroupPresentInfoKHR</a>, <a href=\"#VkDisplayPresentInfoKHR\">VkDisplayPresentInfoKHR</a>, <a href=\"#VkPresentRegionsKHR\">VkPresentRegionsKHR</a>, or <a href=\"#VkPresentTimesInfoGOOGLE\">VkPresentTimesInfoGOOGLE</a>"
},
{
"vuid": "VUID-VkPresentInfoKHR-sType-unique",
"text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkPresentInfoKHR-pWaitSemaphores-parameter",
"text": " If <code>waitSemaphoreCount</code> is not <code>0</code>, <code>pWaitSemaphores</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>waitSemaphoreCount</code> valid <code>VkSemaphore</code> handles"
},
{
"vuid": "VUID-VkPresentInfoKHR-pSwapchains-parameter",
"text": " <code>pSwapchains</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>swapchainCount</code> valid <code>VkSwapchainKHR</code> handles"
},
{
"vuid": "VUID-VkPresentInfoKHR-pImageIndices-parameter",
"text": " <code>pImageIndices</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>swapchainCount</code> <code>uint32_t</code> values"
},
{
"vuid": "VUID-VkPresentInfoKHR-pResults-parameter",
"text": " If <code>pResults</code> is not <code>NULL</code>, <code>pResults</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>swapchainCount</code> <a href=\"#VkResult\">VkResult</a> values"
},
{
"vuid": "VUID-VkPresentInfoKHR-swapchainCount-arraylength",
"text": " <code>swapchainCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-VkPresentInfoKHR-commonparent",
"text": " Both of the elements of <code>pSwapchains</code>, and the elements of <code>pWaitSemaphores</code> that are valid handles <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkInstance</code>"
}
]
},
"VkPresentRegionsKHR": {
"(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_KHR_incremental_present)": [
{
"vuid": "VUID-VkPresentRegionsKHR-swapchainCount-01260",
"text": " <code>swapchainCount</code> <strong class=\"purple\">must</strong> be the same value as <code>VkPresentInfoKHR</code>::<code>swapchainCount</code>, where <code>VkPresentInfoKHR</code> is in the pNext-chain of this <code>VkPresentRegionsKHR</code> structure."
},
{
"vuid": "VUID-VkPresentRegionsKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR</code>"
},
{
"vuid": "VUID-VkPresentRegionsKHR-pRegions-parameter",
"text": " If <code>pRegions</code> is not <code>NULL</code>, <code>pRegions</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>swapchainCount</code> valid <code>VkPresentRegionKHR</code> structures"
},
{
"vuid": "VUID-VkPresentRegionsKHR-swapchainCount-arraylength",
"text": " <code>swapchainCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"VkPresentRegionKHR": {
"(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_KHR_incremental_present)": [
{
"vuid": "VUID-VkPresentRegionKHR-pRectangles-parameter",
"text": " If <code>rectangleCount</code> is not <code>0</code>, and <code>pRectangles</code> is not <code>NULL</code>, <code>pRectangles</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>rectangleCount</code> <code>VkRectLayerKHR</code> structures"
}
]
},
"VkRectLayerKHR": {
"(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_KHR_incremental_present)": [
{
"vuid": "VUID-VkRectLayerKHR-offset-01261",
"text": " The sum of <code>offset</code> and <code>extent</code> <strong class=\"purple\">must</strong> be no greater than the <code>imageExtent</code> member of the <code>VkSwapchainCreateInfoKHR</code> structure given to <a href=\"#vkCreateSwapchainKHR\">vkCreateSwapchainKHR</a>."
},
{
"vuid": "VUID-VkRectLayerKHR-layer-01262",
"text": " <code>layer</code> <strong class=\"purple\">must</strong> be less than <code>imageArrayLayers</code> member of the <code>VkSwapchainCreateInfoKHR</code> structure given to <a href=\"#vkCreateSwapchainKHR\">vkCreateSwapchainKHR</a>."
}
]
},
"VkDisplayPresentInfoKHR": {
"(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_KHR_display_swapchain)": [
{
"vuid": "VUID-VkDisplayPresentInfoKHR-srcRect-01257",
"text": " <code>srcRect</code> <strong class=\"purple\">must</strong> specify a rectangular region that is a subset of the image being presented"
},
{
"vuid": "VUID-VkDisplayPresentInfoKHR-dstRect-01258",
"text": " <code>dstRect</code> <strong class=\"purple\">must</strong> specify a rectangular region that is a subset of the <code>visibleRegion</code> parameter of the display mode the swapchain being presented uses"
},
{
"vuid": "VUID-VkDisplayPresentInfoKHR-persistentContent-01259",
"text": " If the <code>persistentContent</code> member of the <code>VkDisplayPropertiesKHR</code> structure returned by <code>vkGetPhysicalDeviceDisplayPropertiesKHR</code> for the display the present operation targets then <code>persistent</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
},
{
"vuid": "VUID-VkDisplayPresentInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR</code>"
}
]
},
"VkDeviceGroupPresentInfoKHR": {
"(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_VERSION_1_1,VK_KHR_device_group)": [
{
"vuid": "VUID-VkDeviceGroupPresentInfoKHR-swapchainCount-01297",
"text": " <code>swapchainCount</code> <strong class=\"purple\">must</strong> equal <code>0</code> or <a href=\"#VkPresentInfoKHR\">VkPresentInfoKHR</a>::<code>swapchainCount</code>"
},
{
"vuid": "VUID-VkDeviceGroupPresentInfoKHR-mode-01298",
"text": " If <code>mode</code> is <code>VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR</code>, then each element of <code>pDeviceMasks</code> <strong class=\"purple\">must</strong> have exactly one bit set, and the corresponding element of <a href=\"#VkDeviceGroupPresentCapabilitiesKHR\">VkDeviceGroupPresentCapabilitiesKHR</a>::<code>presentMask</code> <strong class=\"purple\">must</strong> be non-zero"
},
{
"vuid": "VUID-VkDeviceGroupPresentInfoKHR-mode-01299",
"text": " If <code>mode</code> is <code>VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR</code>, then each element of <code>pDeviceMasks</code> <strong class=\"purple\">must</strong> have exactly one bit set, and some physical device in the logical device <strong class=\"purple\">must</strong> include that bit in its <a href=\"#VkDeviceGroupPresentCapabilitiesKHR\">VkDeviceGroupPresentCapabilitiesKHR</a>::<code>presentMask</code>."
},
{
"vuid": "VUID-VkDeviceGroupPresentInfoKHR-mode-01300",
"text": " If <code>mode</code> is <code>VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR</code>, then each element of <code>pDeviceMasks</code> <strong class=\"purple\">must</strong> have a value for which all set bits are set in one of the elements of <a href=\"#VkDeviceGroupPresentCapabilitiesKHR\">VkDeviceGroupPresentCapabilitiesKHR</a>::<code>presentMask</code>"
},
{
"vuid": "VUID-VkDeviceGroupPresentInfoKHR-mode-01301",
"text": " If <code>mode</code> is <code>VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR</code>, then for each bit set in each element of <code>pDeviceMasks</code>, the corresponding element of <a href=\"#VkDeviceGroupPresentCapabilitiesKHR\">VkDeviceGroupPresentCapabilitiesKHR</a>::<code>presentMask</code> <strong class=\"purple\">must</strong> be non-zero"
},
{
"vuid": "VUID-VkDeviceGroupPresentInfoKHR-pDeviceMasks-01302",
"text": " The value of each element of <code>pDeviceMasks</code> <strong class=\"purple\">must</strong> be equal to the device mask passed in <a href=\"#VkAcquireNextImageInfoKHR\">VkAcquireNextImageInfoKHR</a>::<code>deviceMask</code> when the image index was last acquired"
},
{
"vuid": "VUID-VkDeviceGroupPresentInfoKHR-mode-01303",
"text": " <code>mode</code> <strong class=\"purple\">must</strong> have exactly one bit set, and that bit <strong class=\"purple\">must</strong> have been included in <a href=\"#VkDeviceGroupSwapchainCreateInfoKHR\">VkDeviceGroupSwapchainCreateInfoKHR</a>::<code>modes</code>"
},
{
"vuid": "VUID-VkDeviceGroupPresentInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR</code>"
},
{
"vuid": "VUID-VkDeviceGroupPresentInfoKHR-pDeviceMasks-parameter",
"text": " If <code>swapchainCount</code> is not <code>0</code>, <code>pDeviceMasks</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>swapchainCount</code> <code>uint32_t</code> values"
},
{
"vuid": "VUID-VkDeviceGroupPresentInfoKHR-mode-parameter",
"text": " <code>mode</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDeviceGroupPresentModeFlagBitsKHR\">VkDeviceGroupPresentModeFlagBitsKHR</a> value"
}
]
},
"VkPresentTimesInfoGOOGLE": {
"(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_GOOGLE_display_timing)": [
{
"vuid": "VUID-VkPresentTimesInfoGOOGLE-swapchainCount-01247",
"text": " <code>swapchainCount</code> <strong class=\"purple\">must</strong> be the same value as <code>VkPresentInfoKHR</code>::<code>swapchainCount</code>, where <code>VkPresentInfoKHR</code> is in the <code>pNext</code> chain of this <code>VkPresentTimesInfoGOOGLE</code> structure."
},
{
"vuid": "VUID-VkPresentTimesInfoGOOGLE-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE</code>"
},
{
"vuid": "VUID-VkPresentTimesInfoGOOGLE-pTimes-parameter",
"text": " If <code>pTimes</code> is not <code>NULL</code>, <code>pTimes</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>swapchainCount</code> <code>VkPresentTimeGOOGLE</code> structures"
},
{
"vuid": "VUID-VkPresentTimesInfoGOOGLE-swapchainCount-arraylength",
"text": " <code>swapchainCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"vkSetHdrMetadataEXT": {
"(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_EXT_hdr_metadata)": [
{
"vuid": "VUID-vkSetHdrMetadataEXT-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkSetHdrMetadataEXT-pSwapchains-parameter",
"text": " <code>pSwapchains</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>swapchainCount</code> valid <code>VkSwapchainKHR</code> handles"
},
{
"vuid": "VUID-vkSetHdrMetadataEXT-pMetadata-parameter",
"text": " <code>pMetadata</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>swapchainCount</code> valid <code>VkHdrMetadataEXT</code> structures"
},
{
"vuid": "VUID-vkSetHdrMetadataEXT-swapchainCount-arraylength",
"text": " <code>swapchainCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkSetHdrMetadataEXT-commonparent",
"text": " Both of <code>device</code>, and the elements of <code>pSwapchains</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <code>VkInstance</code>"
}
]
},
"vkEnumerateInstanceLayerProperties": {
"core": [
{
"vuid": "VUID-vkEnumerateInstanceLayerProperties-pPropertyCount-parameter",
"text": " <code>pPropertyCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
},
{
"vuid": "VUID-vkEnumerateInstanceLayerProperties-pProperties-parameter",
"text": " If the value referenced by <code>pPropertyCount</code> is not <code>0</code>, and <code>pProperties</code> is not <code>NULL</code>, <code>pProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pPropertyCount</code> <code>VkLayerProperties</code> structures"
}
]
},
"vkEnumerateDeviceLayerProperties": {
"core": [
{
"vuid": "VUID-vkEnumerateDeviceLayerProperties-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkEnumerateDeviceLayerProperties-pPropertyCount-parameter",
"text": " <code>pPropertyCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
},
{
"vuid": "VUID-vkEnumerateDeviceLayerProperties-pProperties-parameter",
"text": " If the value referenced by <code>pPropertyCount</code> is not <code>0</code>, and <code>pProperties</code> is not <code>NULL</code>, <code>pProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pPropertyCount</code> <code>VkLayerProperties</code> structures"
}
]
},
"vkEnumerateInstanceExtensionProperties": {
"core": [
{
"vuid": "VUID-vkEnumerateInstanceExtensionProperties-pLayerName-parameter",
"text": " If <code>pLayerName</code> is not <code>NULL</code>, <code>pLayerName</code> <strong class=\"purple\">must</strong> be a null-terminated UTF-8 string"
},
{
"vuid": "VUID-vkEnumerateInstanceExtensionProperties-pPropertyCount-parameter",
"text": " <code>pPropertyCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
},
{
"vuid": "VUID-vkEnumerateInstanceExtensionProperties-pProperties-parameter",
"text": " If the value referenced by <code>pPropertyCount</code> is not <code>0</code>, and <code>pProperties</code> is not <code>NULL</code>, <code>pProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pPropertyCount</code> <code>VkExtensionProperties</code> structures"
}
]
},
"vkEnumerateDeviceExtensionProperties": {
"core": [
{
"vuid": "VUID-vkEnumerateDeviceExtensionProperties-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkEnumerateDeviceExtensionProperties-pLayerName-parameter",
"text": " If <code>pLayerName</code> is not <code>NULL</code>, <code>pLayerName</code> <strong class=\"purple\">must</strong> be a null-terminated UTF-8 string"
},
{
"vuid": "VUID-vkEnumerateDeviceExtensionProperties-pPropertyCount-parameter",
"text": " <code>pPropertyCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
},
{
"vuid": "VUID-vkEnumerateDeviceExtensionProperties-pProperties-parameter",
"text": " If the value referenced by <code>pPropertyCount</code> is not <code>0</code>, and <code>pProperties</code> is not <code>NULL</code>, <code>pProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pPropertyCount</code> <code>VkExtensionProperties</code> structures"
}
]
},
"vkGetPhysicalDeviceFeatures": {
"core": [
{
"vuid": "VUID-vkGetPhysicalDeviceFeatures-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceFeatures-pFeatures-parameter",
"text": " <code>pFeatures</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkPhysicalDeviceFeatures</code> structure"
}
]
},
"vkGetPhysicalDeviceFeatures2": {
"(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
{
"vuid": "VUID-vkGetPhysicalDeviceFeatures2-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceFeatures2-pFeatures-parameter",
"text": " <code>pFeatures</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkPhysicalDeviceFeatures2</code> structure"
}
]
},
"VkPhysicalDeviceFeatures2": {
"(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
{
"vuid": "VUID-VkPhysicalDeviceFeatures2-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2</code>"
}
]
},
"VkPhysicalDeviceVariablePointerFeatures": {
"(VK_VERSION_1_1,VK_KHR_variable_pointers)": [
{
"vuid": "VUID-VkPhysicalDeviceVariablePointerFeatures-variablePointers-01431",
"text": " If <code>variablePointers</code> is enabled then <code>variablePointersStorageBuffer</code> <strong class=\"purple\">must</strong> also be enabled."
},
{
"vuid": "VUID-VkPhysicalDeviceVariablePointerFeatures-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES</code>"
}
]
},
"VkPhysicalDeviceMultiviewFeatures": {
"(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-VkPhysicalDeviceMultiviewFeatures-multiviewGeometryShader-00580",
"text": " If <code>multiviewGeometryShader</code> is enabled then <code>multiview</code> <strong class=\"purple\">must</strong> also be enabled."
},
{
"vuid": "VUID-VkPhysicalDeviceMultiviewFeatures-multiviewTessellationShader-00581",
"text": " If <code>multiviewTessellationShader</code> is enabled then <code>multiview</code> <strong class=\"purple\">must</strong> also be enabled."
},
{
"vuid": "VUID-VkPhysicalDeviceMultiviewFeatures-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES</code>"
}
]
},
"VkPhysicalDevice16BitStorageFeatures": {
"(VK_VERSION_1_1,VK_KHR_16bit_storage)": [
{
"vuid": "VUID-VkPhysicalDevice16BitStorageFeatures-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES</code>"
}
]
},
"VkPhysicalDeviceSamplerYcbcrConversionFeatures": {
"(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-VkPhysicalDeviceSamplerYcbcrConversionFeatures-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES</code>"
}
]
},
"VkPhysicalDeviceProtectedMemoryFeatures": {
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-VkPhysicalDeviceProtectedMemoryFeatures-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES</code>"
}
]
},
"VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT": {
"(VK_EXT_blend_operation_advanced)": [
{
"vuid": "VUID-VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT</code>"
}
]
},
"VkPhysicalDeviceShaderDrawParameterFeatures": {
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-VkPhysicalDeviceShaderDrawParameterFeatures-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES</code>"
}
]
},
"VkPhysicalDeviceDescriptorIndexingFeaturesEXT": {
"(VK_EXT_descriptor_indexing)": [
{
"vuid": "VUID-VkPhysicalDeviceDescriptorIndexingFeaturesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT</code>"
}
]
},
"VkPhysicalDevicePushDescriptorPropertiesKHR": {
"(VK_KHR_push_descriptor)": [
{
"vuid": "VUID-VkPhysicalDevicePushDescriptorPropertiesKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR</code>"
}
]
},
"VkPhysicalDeviceMultiviewProperties": {
"(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-VkPhysicalDeviceMultiviewProperties-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES</code>"
}
]
},
"VkPhysicalDeviceDiscardRectanglePropertiesEXT": {
"(VK_EXT_discard_rectangles)": [
{
"vuid": "VUID-VkPhysicalDeviceDiscardRectanglePropertiesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT</code>"
}
]
},
"VkPhysicalDeviceSampleLocationsPropertiesEXT": {
"(VK_EXT_sample_locations)": [
{
"vuid": "VUID-VkPhysicalDeviceSampleLocationsPropertiesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT</code>"
}
]
},
"VkPhysicalDeviceExternalMemoryHostPropertiesEXT": {
"(VK_EXT_external_memory_host)": [
{
"vuid": "VUID-VkPhysicalDeviceExternalMemoryHostPropertiesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT</code>"
}
]
},
"VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX": {
"(VK_NVX_multiview_per_view_attributes)": [
{
"vuid": "VUID-VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX</code>"
}
]
},
"VkPhysicalDevicePointClippingProperties": {
"(VK_VERSION_1_1,VK_KHR_maintenance2)": [
{
"vuid": "VUID-VkPhysicalDevicePointClippingProperties-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES</code>"
}
]
},
"VkPhysicalDeviceSubgroupProperties": {
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-VkPhysicalDeviceSubgroupProperties-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES</code>"
}
]
},
"VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT": {
"(VK_EXT_blend_operation_advanced)": [
{
"vuid": "VUID-VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT</code>"
}
]
},
"VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT": {
"(VK_EXT_vertex_attribute_divisor)": [
{
"vuid": "VUID-VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT</code>"
}
]
},
"VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT": {
"(VK_EXT_sampler_filter_minmax)": [
{
"vuid": "VUID-VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT</code>"
}
]
},
"VkPhysicalDeviceProtectedMemoryProperties": {
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-VkPhysicalDeviceProtectedMemoryProperties-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES</code>"
}
]
},
"VkPhysicalDeviceMaintenance3Properties": {
"(VK_VERSION_1_1,VK_KHR_maintenance3)": [
{
"vuid": "VUID-VkPhysicalDeviceMaintenance3Properties-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES</code>"
}
]
},
"VkPhysicalDeviceDescriptorIndexingPropertiesEXT": {
"(VK_EXT_descriptor_indexing)": [
{
"vuid": "VUID-VkPhysicalDeviceDescriptorIndexingPropertiesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT</code>"
}
]
},
"VkPhysicalDeviceConservativeRasterizationPropertiesEXT": {
"(VK_EXT_conservative_rasterization)": [
{
"vuid": "VUID-VkPhysicalDeviceConservativeRasterizationPropertiesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT</code>"
}
]
},
"VkPhysicalDeviceShaderCorePropertiesAMD": {
"(VK_AMD_shader_core_properties)": [
{
"vuid": "VUID-VkPhysicalDeviceShaderCorePropertiesAMD-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD</code>"
}
]
},
"vkGetPhysicalDeviceMultisamplePropertiesEXT": {
"(VK_EXT_sample_locations)": [
{
"vuid": "VUID-vkGetPhysicalDeviceMultisamplePropertiesEXT-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceMultisamplePropertiesEXT-samples-parameter",
"text": " <code>samples</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSampleCountFlagBits\">VkSampleCountFlagBits</a> value"
},
{
"vuid": "VUID-vkGetPhysicalDeviceMultisamplePropertiesEXT-pMultisampleProperties-parameter",
"text": " <code>pMultisampleProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkMultisamplePropertiesEXT</code> structure"
}
]
},
"VkMultisamplePropertiesEXT": {
"(VK_EXT_sample_locations)": [
{
"vuid": "VUID-VkMultisamplePropertiesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT</code>"
},
{
"vuid": "VUID-VkMultisamplePropertiesEXT-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
},
"vkGetPhysicalDeviceFormatProperties": {
"core": [
{
"vuid": "VUID-vkGetPhysicalDeviceFormatProperties-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceFormatProperties-format-parameter",
"text": " <code>format</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFormat\">VkFormat</a> value"
},
{
"vuid": "VUID-vkGetPhysicalDeviceFormatProperties-pFormatProperties-parameter",
"text": " <code>pFormatProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkFormatProperties</code> structure"
}
]
},
"vkGetPhysicalDeviceFormatProperties2": {
"(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
{
"vuid": "VUID-vkGetPhysicalDeviceFormatProperties2-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceFormatProperties2-format-parameter",
"text": " <code>format</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFormat\">VkFormat</a> value"
},
{
"vuid": "VUID-vkGetPhysicalDeviceFormatProperties2-pFormatProperties-parameter",
"text": " <code>pFormatProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkFormatProperties2</code> structure"
}
]
},
"VkFormatProperties2": {
"(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
{
"vuid": "VUID-VkFormatProperties2-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2</code>"
},
{
"vuid": "VUID-VkFormatProperties2-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
},
"vkGetPhysicalDeviceImageFormatProperties": {
"core": [
{
"vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties-format-parameter",
"text": " <code>format</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFormat\">VkFormat</a> value"
},
{
"vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties-type-parameter",
"text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageType\">VkImageType</a> value"
},
{
"vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties-tiling-parameter",
"text": " <code>tiling</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageTiling\">VkImageTiling</a> value"
},
{
"vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties-usage-parameter",
"text": " <code>usage</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageUsageFlagBits\">VkImageUsageFlagBits</a> values"
},
{
"vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties-usage-requiredbitmask",
"text": " <code>usage</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageCreateFlagBits\">VkImageCreateFlagBits</a> values"
},
{
"vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties-pImageFormatProperties-parameter",
"text": " <code>pImageFormatProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkImageFormatProperties</code> structure"
}
]
},
"vkGetPhysicalDeviceExternalImageFormatPropertiesNV": {
"(VK_NV_external_memory_capabilities)": [
{
"vuid": "VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-format-parameter",
"text": " <code>format</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFormat\">VkFormat</a> value"
},
{
"vuid": "VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-type-parameter",
"text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageType\">VkImageType</a> value"
},
{
"vuid": "VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-tiling-parameter",
"text": " <code>tiling</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageTiling\">VkImageTiling</a> value"
},
{
"vuid": "VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-usage-parameter",
"text": " <code>usage</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageUsageFlagBits\">VkImageUsageFlagBits</a> values"
},
{
"vuid": "VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-usage-requiredbitmask",
"text": " <code>usage</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageCreateFlagBits\">VkImageCreateFlagBits</a> values"
},
{
"vuid": "VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-externalHandleType-parameter",
"text": " <code>externalHandleType</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkExternalMemoryHandleTypeFlagBitsNV\">VkExternalMemoryHandleTypeFlagBitsNV</a> values"
},
{
"vuid": "VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-pExternalImageFormatProperties-parameter",
"text": " <code>pExternalImageFormatProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkExternalImageFormatPropertiesNV</code> structure"
}
]
},
"vkGetPhysicalDeviceImageFormatProperties2": {
"(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)+(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties2-pNext-01868",
"text": " If the <code>pNext</code> chain of <code>pImageFormatProperties</code> contains an instance of <a href=\"#VkAndroidHardwareBufferUsageANDROID\">VkAndroidHardwareBufferUsageANDROID</a>, the <code>pNext</code> chain of <code>pImageFormatInfo</code> <strong class=\"purple\">must</strong> contain an instance of <a href=\"#VkPhysicalDeviceExternalImageFormatInfo\">VkPhysicalDeviceExternalImageFormatInfo</a> with <code>handleType</code> set to <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID</code>."
}
],
"(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
{
"vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties2-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties2-pImageFormatInfo-parameter",
"text": " <code>pImageFormatInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPhysicalDeviceImageFormatInfo2</code> structure"
},
{
"vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties2-pImageFormatProperties-parameter",
"text": " <code>pImageFormatProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkImageFormatProperties2</code> structure"
}
]
},
"VkPhysicalDeviceImageFormatInfo2": {
"(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
{
"vuid": "VUID-VkPhysicalDeviceImageFormatInfo2-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2</code>"
},
{
"vuid": "VUID-VkPhysicalDeviceImageFormatInfo2-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkPhysicalDeviceExternalImageFormatInfo\">VkPhysicalDeviceExternalImageFormatInfo</a>"
},
{
"vuid": "VUID-VkPhysicalDeviceImageFormatInfo2-format-parameter",
"text": " <code>format</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFormat\">VkFormat</a> value"
},
{
"vuid": "VUID-VkPhysicalDeviceImageFormatInfo2-type-parameter",
"text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageType\">VkImageType</a> value"
},
{
"vuid": "VUID-VkPhysicalDeviceImageFormatInfo2-tiling-parameter",
"text": " <code>tiling</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageTiling\">VkImageTiling</a> value"
},
{
"vuid": "VUID-VkPhysicalDeviceImageFormatInfo2-usage-parameter",
"text": " <code>usage</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageUsageFlagBits\">VkImageUsageFlagBits</a> values"
},
{
"vuid": "VUID-VkPhysicalDeviceImageFormatInfo2-usage-requiredbitmask",
"text": " <code>usage</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-VkPhysicalDeviceImageFormatInfo2-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageCreateFlagBits\">VkImageCreateFlagBits</a> values"
}
]
},
"VkImageFormatProperties2": {
"(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)": [
{
"vuid": "VUID-VkImageFormatProperties2-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2</code>"
},
{
"vuid": "VUID-VkImageFormatProperties2-pNext-pNext",
"text": " Each <code>pNext</code> member of any structure (including this one) in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be either <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkAndroidHardwareBufferUsageANDROID\">VkAndroidHardwareBufferUsageANDROID</a>, <a href=\"#VkExternalImageFormatProperties\">VkExternalImageFormatProperties</a>, <a href=\"#VkSamplerYcbcrConversionImageFormatProperties\">VkSamplerYcbcrConversionImageFormatProperties</a>, or <a href=\"#VkTextureLODGatherFormatPropertiesAMD\">VkTextureLODGatherFormatPropertiesAMD</a>"
},
{
"vuid": "VUID-VkImageFormatProperties2-sType-unique",
"text": " Each <code>sType</code> member in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
}
]
},
"VkPhysicalDeviceExternalImageFormatInfo": {
"(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)+(VK_VERSION_1_1,VK_KHR_external_memory_capabilities)": [
{
"vuid": "VUID-VkPhysicalDeviceExternalImageFormatInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO</code>"
},
{
"vuid": "VUID-VkPhysicalDeviceExternalImageFormatInfo-handleType-parameter",
"text": " If <code>handleType</code> is not <code>0</code>, <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalMemoryHandleTypeFlagBits\">VkExternalMemoryHandleTypeFlagBits</a> value"
}
]
},
"VkExternalImageFormatProperties": {
"(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)+(VK_VERSION_1_1,VK_KHR_external_memory_capabilities)": [
{
"vuid": "VUID-VkExternalImageFormatProperties-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES</code>"
}
]
},
"VkSamplerYcbcrConversionImageFormatProperties": {
"(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)+(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-VkSamplerYcbcrConversionImageFormatProperties-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES</code>"
}
]
},
"VkAndroidHardwareBufferUsageANDROID": {
"(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)+(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-VkAndroidHardwareBufferUsageANDROID-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID</code>"
}
]
},
"vkGetPhysicalDeviceExternalBufferProperties": {
"(VK_VERSION_1_1,VK_KHR_external_memory_capabilities)": [
{
"vuid": "VUID-vkGetPhysicalDeviceExternalBufferProperties-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceExternalBufferProperties-pExternalBufferInfo-parameter",
"text": " <code>pExternalBufferInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPhysicalDeviceExternalBufferInfo</code> structure"
},
{
"vuid": "VUID-vkGetPhysicalDeviceExternalBufferProperties-pExternalBufferProperties-parameter",
"text": " <code>pExternalBufferProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkExternalBufferProperties</code> structure"
}
]
},
"VkPhysicalDeviceExternalBufferInfo": {
"(VK_VERSION_1_1,VK_KHR_external_memory_capabilities)": [
{
"vuid": "VUID-VkPhysicalDeviceExternalBufferInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO</code>"
},
{
"vuid": "VUID-VkPhysicalDeviceExternalBufferInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkPhysicalDeviceExternalBufferInfo-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkBufferCreateFlagBits\">VkBufferCreateFlagBits</a> values"
},
{
"vuid": "VUID-VkPhysicalDeviceExternalBufferInfo-usage-parameter",
"text": " <code>usage</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkBufferUsageFlagBits\">VkBufferUsageFlagBits</a> values"
},
{
"vuid": "VUID-VkPhysicalDeviceExternalBufferInfo-usage-requiredbitmask",
"text": " <code>usage</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-VkPhysicalDeviceExternalBufferInfo-handleType-parameter",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalMemoryHandleTypeFlagBits\">VkExternalMemoryHandleTypeFlagBits</a> value"
}
]
},
"VkExternalBufferProperties": {
"(VK_VERSION_1_1,VK_KHR_external_memory_capabilities)": [
{
"vuid": "VUID-VkExternalBufferProperties-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES</code>"
},
{
"vuid": "VUID-VkExternalBufferProperties-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
},
"vkGetPhysicalDeviceExternalSemaphoreProperties": {
"(VK_VERSION_1_1,VK_KHR_external_semaphore_capabilities)": [
{
"vuid": "VUID-vkGetPhysicalDeviceExternalSemaphoreProperties-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceExternalSemaphoreProperties-pExternalSemaphoreInfo-parameter",
"text": " <code>pExternalSemaphoreInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPhysicalDeviceExternalSemaphoreInfo</code> structure"
},
{
"vuid": "VUID-vkGetPhysicalDeviceExternalSemaphoreProperties-pExternalSemaphoreProperties-parameter",
"text": " <code>pExternalSemaphoreProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkExternalSemaphoreProperties</code> structure"
}
]
},
"VkPhysicalDeviceExternalSemaphoreInfo": {
"(VK_VERSION_1_1,VK_KHR_external_semaphore_capabilities)": [
{
"vuid": "VUID-VkPhysicalDeviceExternalSemaphoreInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO</code>"
},
{
"vuid": "VUID-VkPhysicalDeviceExternalSemaphoreInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkPhysicalDeviceExternalSemaphoreInfo-handleType-parameter",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalSemaphoreHandleTypeFlagBits\">VkExternalSemaphoreHandleTypeFlagBits</a> value"
}
]
},
"VkExternalSemaphoreProperties": {
"(VK_VERSION_1_1,VK_KHR_external_semaphore_capabilities)": [
{
"vuid": "VUID-VkExternalSemaphoreProperties-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES</code>"
},
{
"vuid": "VUID-VkExternalSemaphoreProperties-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
},
"vkGetPhysicalDeviceExternalFenceProperties": {
"(VK_VERSION_1_1,VK_KHR_external_fence_capabilities)": [
{
"vuid": "VUID-vkGetPhysicalDeviceExternalFenceProperties-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <code>VkPhysicalDevice</code> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceExternalFenceProperties-pExternalFenceInfo-parameter",
"text": " <code>pExternalFenceInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkPhysicalDeviceExternalFenceInfo</code> structure"
},
{
"vuid": "VUID-vkGetPhysicalDeviceExternalFenceProperties-pExternalFenceProperties-parameter",
"text": " <code>pExternalFenceProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkExternalFenceProperties</code> structure"
}
]
},
"VkPhysicalDeviceExternalFenceInfo": {
"(VK_VERSION_1_1,VK_KHR_external_fence_capabilities)": [
{
"vuid": "VUID-VkPhysicalDeviceExternalFenceInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO</code>"
},
{
"vuid": "VUID-VkPhysicalDeviceExternalFenceInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkPhysicalDeviceExternalFenceInfo-handleType-parameter",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalFenceHandleTypeFlagBits\">VkExternalFenceHandleTypeFlagBits</a> value"
}
]
},
"VkExternalFenceProperties": {
"(VK_VERSION_1_1,VK_KHR_external_fence_capabilities)": [
{
"vuid": "VUID-VkExternalFenceProperties-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES</code>"
},
{
"vuid": "VUID-VkExternalFenceProperties-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
},
"vkSetDebugUtilsObjectNameEXT": {
"(VK_EXT_debug_utils)": [
{
"vuid": "VUID-vkSetDebugUtilsObjectNameEXT-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkSetDebugUtilsObjectNameEXT-pNameInfo-parameter",
"text": " <code>pNameInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDebugUtilsObjectNameInfoEXT</code> structure"
}
]
},
"VkDebugUtilsObjectNameInfoEXT": {
"(VK_EXT_debug_utils)": [
{
"vuid": "VUID-VkDebugUtilsObjectNameInfoEXT-objectType-01905",
"text": " <code>objectType</code> <strong class=\"purple\">must</strong> not be <code>VK_OBJECT_TYPE_UNKNOWN</code>"
},
{
"vuid": "VUID-VkDebugUtilsObjectNameInfoEXT-objectHandle-01906",
"text": " <code>objectHandle</code> <strong class=\"purple\">must</strong> not be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-VkDebugUtilsObjectNameInfoEXT-objectHandle-01907",
"text": " <code>objectHandle</code> <strong class=\"purple\">must</strong> be a Vulkan object of the type associated with <code>objectType</code> as defined in &amp;amp;lt;&amp;amp;lt;debugging-object-types&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-VkDebugUtilsObjectNameInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT</code>"
},
{
"vuid": "VUID-VkDebugUtilsObjectNameInfoEXT-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkDebugUtilsObjectNameInfoEXT-objectType-parameter",
"text": " <code>objectType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkObjectType\">VkObjectType</a> value"
},
{
"vuid": "VUID-VkDebugUtilsObjectNameInfoEXT-pObjectName-parameter",
"text": " If <code>pObjectName</code> is not <code>NULL</code>, <code>pObjectName</code> <strong class=\"purple\">must</strong> be a null-terminated UTF-8 string"
}
]
},
"vkSetDebugUtilsObjectTagEXT": {
"(VK_EXT_debug_utils)": [
{
"vuid": "VUID-vkSetDebugUtilsObjectTagEXT-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkSetDebugUtilsObjectTagEXT-pTagInfo-parameter",
"text": " <code>pTagInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDebugUtilsObjectTagInfoEXT</code> structure"
}
]
},
"VkDebugUtilsObjectTagInfoEXT": {
"(VK_EXT_debug_utils)": [
{
"vuid": "VUID-VkDebugUtilsObjectTagInfoEXT-objectType-01908",
"text": " <code>objectType</code> <strong class=\"purple\">must</strong> not be <code>VK_OBJECT_TYPE_UNKNOWN</code>"
},
{
"vuid": "VUID-VkDebugUtilsObjectTagInfoEXT-objectHandle-01909",
"text": " <code>objectHandle</code> <strong class=\"purple\">must</strong> not be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-VkDebugUtilsObjectTagInfoEXT-objectHandle-01910",
"text": " <code>objectHandle</code> <strong class=\"purple\">must</strong> be a Vulkan object of the type associated with <code>objectType</code> as defined in &amp;amp;lt;&amp;amp;lt;debugging-object-types&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-VkDebugUtilsObjectTagInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT</code>"
},
{
"vuid": "VUID-VkDebugUtilsObjectTagInfoEXT-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkDebugUtilsObjectTagInfoEXT-objectType-parameter",
"text": " <code>objectType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkObjectType\">VkObjectType</a> value"
},
{
"vuid": "VUID-VkDebugUtilsObjectTagInfoEXT-pTag-parameter",
"text": " <code>pTag</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>tagSize</code> bytes"
},
{
"vuid": "VUID-VkDebugUtilsObjectTagInfoEXT-tagSize-arraylength",
"text": " <code>tagSize</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"vkQueueBeginDebugUtilsLabelEXT": {
"(VK_EXT_debug_utils)": [
{
"vuid": "VUID-vkQueueBeginDebugUtilsLabelEXT-queue-parameter",
"text": " <code>queue</code> <strong class=\"purple\">must</strong> be a valid <code>VkQueue</code> handle"
},
{
"vuid": "VUID-vkQueueBeginDebugUtilsLabelEXT-pLabelInfo-parameter",
"text": " <code>pLabelInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDebugUtilsLabelEXT</code> structure"
}
]
},
"VkDebugUtilsLabelEXT": {
"(VK_EXT_debug_utils)": [
{
"vuid": "VUID-VkDebugUtilsLabelEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT</code>"
},
{
"vuid": "VUID-VkDebugUtilsLabelEXT-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkDebugUtilsLabelEXT-pLabelName-parameter",
"text": " <code>pLabelName</code> <strong class=\"purple\">must</strong> be a null-terminated UTF-8 string"
}
]
},
"vkQueueEndDebugUtilsLabelEXT": {
"(VK_EXT_debug_utils)": [
{
"vuid": "VUID-vkQueueEndDebugUtilsLabelEXT-None-01911",
"text": " There <strong class=\"purple\">must</strong> be an outstanding <code>vkQueueBeginDebugUtilsLabelEXT</code> command prior to the <code>vkQueueEndDebugUtilsLabelEXT</code> on the queue"
},
{
"vuid": "VUID-vkQueueEndDebugUtilsLabelEXT-queue-parameter",
"text": " <code>queue</code> <strong class=\"purple\">must</strong> be a valid <code>VkQueue</code> handle"
}
]
},
"vkQueueInsertDebugUtilsLabelEXT": {
"(VK_EXT_debug_utils)": [
{
"vuid": "VUID-vkQueueInsertDebugUtilsLabelEXT-queue-parameter",
"text": " <code>queue</code> <strong class=\"purple\">must</strong> be a valid <code>VkQueue</code> handle"
},
{
"vuid": "VUID-vkQueueInsertDebugUtilsLabelEXT-pLabelInfo-parameter",
"text": " <code>pLabelInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDebugUtilsLabelEXT</code> structure"
}
]
},
"vkCmdBeginDebugUtilsLabelEXT": {
"(VK_EXT_debug_utils)": [
{
"vuid": "VUID-vkCmdBeginDebugUtilsLabelEXT-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdBeginDebugUtilsLabelEXT-pLabelInfo-parameter",
"text": " <code>pLabelInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDebugUtilsLabelEXT</code> structure"
},
{
"vuid": "VUID-vkCmdBeginDebugUtilsLabelEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdBeginDebugUtilsLabelEXT-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
}
]
},
"vkCmdEndDebugUtilsLabelEXT": {
"(VK_EXT_debug_utils)": [
{
"vuid": "VUID-vkCmdEndDebugUtilsLabelEXT-commandBuffer-01912",
"text": " There <strong class=\"purple\">must</strong> be an outstanding <code>vkCmdBeginDebugUtilsLabelEXT</code> command prior to the <code>vkCmdEndDebugUtilsLabelEXT</code> on the queue that <code>commandBuffer</code> is submitted to"
},
{
"vuid": "VUID-vkCmdEndDebugUtilsLabelEXT-commandBuffer-01913",
"text": " If <code>commandBuffer</code> is a secondary command buffer, there <strong class=\"purple\">must</strong> be an outstanding <code>vkCmdBeginDebugUtilsLabelEXT</code> command recorded to <code>commandBuffer</code> that has not previously been ended by a call to <code>vkCmdEndDebugUtilsLabelEXT</code>."
},
{
"vuid": "VUID-vkCmdEndDebugUtilsLabelEXT-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdEndDebugUtilsLabelEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdEndDebugUtilsLabelEXT-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
}
]
},
"vkCmdInsertDebugUtilsLabelEXT": {
"(VK_EXT_debug_utils)": [
{
"vuid": "VUID-vkCmdInsertDebugUtilsLabelEXT-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdInsertDebugUtilsLabelEXT-pLabelInfo-parameter",
"text": " <code>pLabelInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDebugUtilsLabelEXT</code> structure"
},
{
"vuid": "VUID-vkCmdInsertDebugUtilsLabelEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdInsertDebugUtilsLabelEXT-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
}
]
},
"vkCreateDebugUtilsMessengerEXT": {
"(VK_EXT_debug_utils)": [
{
"vuid": "VUID-vkCreateDebugUtilsMessengerEXT-instance-parameter",
"text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
},
{
"vuid": "VUID-vkCreateDebugUtilsMessengerEXT-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDebugUtilsMessengerCreateInfoEXT</code> structure"
},
{
"vuid": "VUID-vkCreateDebugUtilsMessengerEXT-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateDebugUtilsMessengerEXT-pMessenger-parameter",
"text": " <code>pMessenger</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkDebugUtilsMessengerEXT</code> handle"
}
]
},
"VkDebugUtilsMessengerCreateInfoEXT": {
"(VK_EXT_debug_utils)": [
{
"vuid": "VUID-VkDebugUtilsMessengerCreateInfoEXT-pfnUserCallback-01914",
"text": " <code>pfnUserCallback</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#PFN_vkDebugUtilsMessengerCallbackEXT\">PFN_vkDebugUtilsMessengerCallbackEXT</a>"
},
{
"vuid": "VUID-VkDebugUtilsMessengerCreateInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT</code>"
},
{
"vuid": "VUID-VkDebugUtilsMessengerCreateInfoEXT-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkDebugUtilsMessengerCreateInfoEXT-messageSeverity-parameter",
"text": " <code>messageSeverity</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkDebugUtilsMessageSeverityFlagBitsEXT\">VkDebugUtilsMessageSeverityFlagBitsEXT</a> values"
},
{
"vuid": "VUID-VkDebugUtilsMessengerCreateInfoEXT-messageSeverity-requiredbitmask",
"text": " <code>messageSeverity</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-VkDebugUtilsMessengerCreateInfoEXT-messageType-parameter",
"text": " <code>messageType</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkDebugUtilsMessageTypeFlagBitsEXT\">VkDebugUtilsMessageTypeFlagBitsEXT</a> values"
},
{
"vuid": "VUID-VkDebugUtilsMessengerCreateInfoEXT-messageType-requiredbitmask",
"text": " <code>messageType</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
}
]
},
"VkDebugUtilsMessengerCallbackDataEXT": {
"(VK_EXT_debug_utils)": [
{
"vuid": "VUID-VkDebugUtilsMessengerCallbackDataEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT</code>"
},
{
"vuid": "VUID-VkDebugUtilsMessengerCallbackDataEXT-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkDebugUtilsMessengerCallbackDataEXT-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkDebugUtilsMessengerCallbackDataEXT-pMessageIdName-parameter",
"text": " If <code>pMessageIdName</code> is not <code>NULL</code>, <code>pMessageIdName</code> <strong class=\"purple\">must</strong> be a null-terminated UTF-8 string"
},
{
"vuid": "VUID-VkDebugUtilsMessengerCallbackDataEXT-pMessage-parameter",
"text": " <code>pMessage</code> <strong class=\"purple\">must</strong> be a null-terminated UTF-8 string"
},
{
"vuid": "VUID-VkDebugUtilsMessengerCallbackDataEXT-objectCount-arraylength",
"text": " <code>objectCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"vkSubmitDebugUtilsMessageEXT": {
"(VK_EXT_debug_utils)": [
{
"vuid": "VUID-vkSubmitDebugUtilsMessageEXT-instance-parameter",
"text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
},
{
"vuid": "VUID-vkSubmitDebugUtilsMessageEXT-messageSeverity-parameter",
"text": " <code>messageSeverity</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDebugUtilsMessageSeverityFlagBitsEXT\">VkDebugUtilsMessageSeverityFlagBitsEXT</a> value"
},
{
"vuid": "VUID-vkSubmitDebugUtilsMessageEXT-messageTypes-parameter",
"text": " <code>messageTypes</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkDebugUtilsMessageTypeFlagBitsEXT\">VkDebugUtilsMessageTypeFlagBitsEXT</a> values"
},
{
"vuid": "VUID-vkSubmitDebugUtilsMessageEXT-messageTypes-requiredbitmask",
"text": " <code>messageTypes</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-vkSubmitDebugUtilsMessageEXT-pCallbackData-parameter",
"text": " <code>pCallbackData</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDebugUtilsMessengerCallbackDataEXT</code> structure"
}
]
},
"vkDestroyDebugUtilsMessengerEXT": {
"(VK_EXT_debug_utils)": [
{
"vuid": "VUID-vkDestroyDebugUtilsMessengerEXT-messenger-01915",
"text": " If <code>VkAllocationCallbacks</code> were provided when <code>messenger</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
},
{
"vuid": "VUID-vkDestroyDebugUtilsMessengerEXT-messenger-01916",
"text": " If no <code>VkAllocationCallbacks</code> were provided when <code>messenger</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-vkDestroyDebugUtilsMessengerEXT-instance-parameter",
"text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
},
{
"vuid": "VUID-vkDestroyDebugUtilsMessengerEXT-messenger-parameter",
"text": " <code>messenger</code> <strong class=\"purple\">must</strong> be a valid <code>VkDebugUtilsMessengerEXT</code> handle"
},
{
"vuid": "VUID-vkDestroyDebugUtilsMessengerEXT-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkDestroyDebugUtilsMessengerEXT-messenger-parent",
"text": " <code>messenger</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>instance</code>"
}
]
},
"vkDebugMarkerSetObjectNameEXT": {
"(VK_EXT_debug_marker)": [
{
"vuid": "VUID-vkDebugMarkerSetObjectNameEXT-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkDebugMarkerSetObjectNameEXT-pNameInfo-parameter",
"text": " <code>pNameInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDebugMarkerObjectNameInfoEXT</code> structure"
}
]
},
"VkDebugMarkerObjectNameInfoEXT": {
"(VK_EXT_debug_marker)": [
{
"vuid": "VUID-VkDebugMarkerObjectNameInfoEXT-objectType-01490",
"text": " <code>objectType</code> <strong class=\"purple\">must</strong> not be <code>VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT</code>"
},
{
"vuid": "VUID-VkDebugMarkerObjectNameInfoEXT-object-01491",
"text": " <code>object</code> <strong class=\"purple\">must</strong> not be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-VkDebugMarkerObjectNameInfoEXT-object-01492",
"text": " <code>object</code> <strong class=\"purple\">must</strong> be a Vulkan object of the type associated with <code>objectType</code> as defined in &amp;amp;lt;&amp;amp;lt;debug-report-object-types&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-VkDebugMarkerObjectNameInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT</code>"
},
{
"vuid": "VUID-VkDebugMarkerObjectNameInfoEXT-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkDebugMarkerObjectNameInfoEXT-objectType-parameter",
"text": " <code>objectType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDebugReportObjectTypeEXT\">VkDebugReportObjectTypeEXT</a> value"
},
{
"vuid": "VUID-VkDebugMarkerObjectNameInfoEXT-pObjectName-parameter",
"text": " <code>pObjectName</code> <strong class=\"purple\">must</strong> be a null-terminated UTF-8 string"
}
]
},
"vkDebugMarkerSetObjectTagEXT": {
"(VK_EXT_debug_marker)": [
{
"vuid": "VUID-vkDebugMarkerSetObjectTagEXT-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <code>VkDevice</code> handle"
},
{
"vuid": "VUID-vkDebugMarkerSetObjectTagEXT-pTagInfo-parameter",
"text": " <code>pTagInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDebugMarkerObjectTagInfoEXT</code> structure"
}
]
},
"VkDebugMarkerObjectTagInfoEXT": {
"(VK_EXT_debug_marker)": [
{
"vuid": "VUID-VkDebugMarkerObjectTagInfoEXT-objectType-01493",
"text": " <code>objectType</code> <strong class=\"purple\">must</strong> not be <code>VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT</code>"
},
{
"vuid": "VUID-VkDebugMarkerObjectTagInfoEXT-object-01494",
"text": " <code>object</code> <strong class=\"purple\">must</strong> not be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-VkDebugMarkerObjectTagInfoEXT-object-01495",
"text": " <code>object</code> <strong class=\"purple\">must</strong> be a Vulkan object of the type associated with <code>objectType</code> as defined in &amp;amp;lt;&amp;amp;lt;debug-report-object-types&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-VkDebugMarkerObjectTagInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT</code>"
},
{
"vuid": "VUID-VkDebugMarkerObjectTagInfoEXT-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkDebugMarkerObjectTagInfoEXT-objectType-parameter",
"text": " <code>objectType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDebugReportObjectTypeEXT\">VkDebugReportObjectTypeEXT</a> value"
},
{
"vuid": "VUID-VkDebugMarkerObjectTagInfoEXT-pTag-parameter",
"text": " <code>pTag</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>tagSize</code> bytes"
},
{
"vuid": "VUID-VkDebugMarkerObjectTagInfoEXT-tagSize-arraylength",
"text": " <code>tagSize</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"vkCmdDebugMarkerBeginEXT": {
"(VK_EXT_debug_marker)": [
{
"vuid": "VUID-vkCmdDebugMarkerBeginEXT-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdDebugMarkerBeginEXT-pMarkerInfo-parameter",
"text": " <code>pMarkerInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDebugMarkerMarkerInfoEXT</code> structure"
},
{
"vuid": "VUID-vkCmdDebugMarkerBeginEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDebugMarkerBeginEXT-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
}
]
},
"VkDebugMarkerMarkerInfoEXT": {
"(VK_EXT_debug_marker)": [
{
"vuid": "VUID-VkDebugMarkerMarkerInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT</code>"
},
{
"vuid": "VUID-VkDebugMarkerMarkerInfoEXT-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkDebugMarkerMarkerInfoEXT-pMarkerName-parameter",
"text": " <code>pMarkerName</code> <strong class=\"purple\">must</strong> be a null-terminated UTF-8 string"
}
]
},
"vkCmdDebugMarkerEndEXT": {
"(VK_EXT_debug_marker)": [
{
"vuid": "VUID-vkCmdDebugMarkerEndEXT-commandBuffer-01239",
"text": " There <strong class=\"purple\">must</strong> be an outstanding <a href=\"#vkCmdDebugMarkerBeginEXT\">vkCmdDebugMarkerBeginEXT</a> command prior to the <code>vkCmdDebugMarkerEndEXT</code> on the queue that <code>commandBuffer</code> is submitted to"
},
{
"vuid": "VUID-vkCmdDebugMarkerEndEXT-commandBuffer-01240",
"text": " If <code>commandBuffer</code> is a secondary command buffer, there <strong class=\"purple\">must</strong> be an outstanding <a href=\"#vkCmdDebugMarkerBeginEXT\">vkCmdDebugMarkerBeginEXT</a> command recorded to <code>commandBuffer</code> that has not previously been ended by a call to <a href=\"#vkCmdDebugMarkerEndEXT\">vkCmdDebugMarkerEndEXT</a>."
},
{
"vuid": "VUID-vkCmdDebugMarkerEndEXT-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdDebugMarkerEndEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDebugMarkerEndEXT-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
}
]
},
"vkCmdDebugMarkerInsertEXT": {
"(VK_EXT_debug_marker)": [
{
"vuid": "VUID-vkCmdDebugMarkerInsertEXT-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <code>VkCommandBuffer</code> handle"
},
{
"vuid": "VUID-vkCmdDebugMarkerInsertEXT-pMarkerInfo-parameter",
"text": " <code>pMarkerInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDebugMarkerMarkerInfoEXT</code> structure"
},
{
"vuid": "VUID-vkCmdDebugMarkerInsertEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the &amp;amp;lt;&amp;amp;lt;commandbuffers-lifecycle, recording state&amp;amp;gt;&amp;amp;gt;"
},
{
"vuid": "VUID-vkCmdDebugMarkerInsertEXT-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
}
]
},
"vkCreateDebugReportCallbackEXT": {
"(VK_EXT_debug_report)": [
{
"vuid": "VUID-vkCreateDebugReportCallbackEXT-instance-parameter",
"text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
},
{
"vuid": "VUID-vkCreateDebugReportCallbackEXT-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkDebugReportCallbackCreateInfoEXT</code> structure"
},
{
"vuid": "VUID-vkCreateDebugReportCallbackEXT-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkCreateDebugReportCallbackEXT-pCallback-parameter",
"text": " <code>pCallback</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>VkDebugReportCallbackEXT</code> handle"
}
]
},
"VkDebugReportCallbackCreateInfoEXT": {
"(VK_EXT_debug_report)": [
{
"vuid": "VUID-VkDebugReportCallbackCreateInfoEXT-pfnCallback-01385",
"text": " <code>pfnCallback</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#PFN_vkDebugReportCallbackEXT\">PFN_vkDebugReportCallbackEXT</a>"
},
{
"vuid": "VUID-VkDebugReportCallbackCreateInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT</code>"
},
{
"vuid": "VUID-VkDebugReportCallbackCreateInfoEXT-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkDebugReportFlagBitsEXT\">VkDebugReportFlagBitsEXT</a> values"
}
]
},
"vkDebugReportMessageEXT": {
"(VK_EXT_debug_report)": [
{
"vuid": "VUID-vkDebugReportMessageEXT-object-01241",
"text": " <code>object</code> <strong class=\"purple\">must</strong> be a Vulkan object or <code>VK_NULL_HANDLE</code>"
},
{
"vuid": "VUID-vkDebugReportMessageEXT-objectType-01498",
"text": " If <code>objectType</code> is not <code>VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT</code> and <code>object</code> is not <code>VK_NULL_HANDLE</code>, <code>object</code> <strong class=\"purple\">must</strong> be a Vulkan object of the corresponding type associated with <code>objectType</code> as defined in &amp;amp;lt;&amp;amp;lt;debug-report-object-types&amp;amp;gt;&amp;amp;gt;."
},
{
"vuid": "VUID-vkDebugReportMessageEXT-instance-parameter",
"text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
},
{
"vuid": "VUID-vkDebugReportMessageEXT-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkDebugReportFlagBitsEXT\">VkDebugReportFlagBitsEXT</a> values"
},
{
"vuid": "VUID-vkDebugReportMessageEXT-flags-requiredbitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-vkDebugReportMessageEXT-objectType-parameter",
"text": " <code>objectType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDebugReportObjectTypeEXT\">VkDebugReportObjectTypeEXT</a> value"
},
{
"vuid": "VUID-vkDebugReportMessageEXT-pLayerPrefix-parameter",
"text": " <code>pLayerPrefix</code> <strong class=\"purple\">must</strong> be a null-terminated UTF-8 string"
},
{
"vuid": "VUID-vkDebugReportMessageEXT-pMessage-parameter",
"text": " <code>pMessage</code> <strong class=\"purple\">must</strong> be a null-terminated UTF-8 string"
}
]
},
"vkDestroyDebugReportCallbackEXT": {
"(VK_EXT_debug_report)": [
{
"vuid": "VUID-vkDestroyDebugReportCallbackEXT-instance-01242",
"text": " If <code>VkAllocationCallbacks</code> were provided when <code>callback</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
},
{
"vuid": "VUID-vkDestroyDebugReportCallbackEXT-instance-01243",
"text": " If no <code>VkAllocationCallbacks</code> were provided when <code>callback</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-vkDestroyDebugReportCallbackEXT-instance-parameter",
"text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <code>VkInstance</code> handle"
},
{
"vuid": "VUID-vkDestroyDebugReportCallbackEXT-callback-parameter",
"text": " <code>callback</code> <strong class=\"purple\">must</strong> be a valid <code>VkDebugReportCallbackEXT</code> handle"
},
{
"vuid": "VUID-vkDestroyDebugReportCallbackEXT-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <code>VkAllocationCallbacks</code> structure"
},
{
"vuid": "VUID-vkDestroyDebugReportCallbackEXT-callback-parent",
"text": " <code>callback</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>instance</code>"
}
]
}
}
}