yuzu/externals/Vulkan-Headers/registry/validusage.json

30490 lines
2.2 MiB
Executable File
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

{
"version info": {
"schema version": 2,
"api version": "1.2.145",
"comment": "from git branch: github-master commit: 1e4e9cad5c761f05463ab65aa95e38b0dac534bc",
"date": "2020-06-20 14:48:00Z"
},
"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 <a href=\"#VkInstance\">VkInstance</a> 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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#extendingvulkan-extensions-extensiondependencies\">required extensions</a> 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 <a href=\"#VkInstanceCreateInfo\">VkInstanceCreateInfo</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateInstance-pInstance-parameter",
"text": " <code>pInstance</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkInstance\">VkInstance</a> 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>, <a href=\"#VkValidationFeaturesEXT\">VkValidationFeaturesEXT</a>, or <a href=\"#VkValidationFlagsEXT\">VkValidationFlagsEXT</a>"
},
{
"vuid": "VUID-VkInstanceCreateInfo-sType-unique",
"text": " The <code>sType</code> value of each struct 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 <a href=\"#VkApplicationInfo\">VkApplicationInfo</a> 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> valid <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>"
}
]
},
"VkValidationFeaturesEXT": {
"(VK_EXT_validation_features)": [
{
"vuid": "VUID-VkValidationFeaturesEXT-pEnabledValidationFeatures-02967",
"text": " If the <code>pEnabledValidationFeatures</code> array contains <code>VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT</code>, then it <strong class=\"purple\">must</strong> also contain <code>VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT</code>"
},
{
"vuid": "VUID-VkValidationFeaturesEXT-pEnabledValidationFeatures-02968",
"text": " If the <code>pEnabledValidationFeatures</code> array contains <code>VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT</code>, then it <strong class=\"purple\">must</strong> not contain <code>VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT</code>"
},
{
"vuid": "VUID-VkValidationFeaturesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT</code>"
},
{
"vuid": "VUID-VkValidationFeaturesEXT-pEnabledValidationFeatures-parameter",
"text": " If <code>enabledValidationFeatureCount</code> is not <code>0</code>, <code>pEnabledValidationFeatures</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>enabledValidationFeatureCount</code> valid <a href=\"#VkValidationFeatureEnableEXT\">VkValidationFeatureEnableEXT</a> values"
},
{
"vuid": "VUID-VkValidationFeaturesEXT-pDisabledValidationFeatures-parameter",
"text": " If <code>disabledValidationFeatureCount</code> is not <code>0</code>, <code>pDisabledValidationFeatures</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>disabledValidationFeatureCount</code> valid <a href=\"#VkValidationFeatureDisableEXT\">VkValidationFeatureDisableEXT</a> values"
}
]
},
"VkApplicationInfo": {
"core": [
{
"vuid": "VUID-VkApplicationInfo-apiVersion-04010",
"text": " If <code>apiVersion</code> is not <code>0</code>, then it <strong class=\"purple\">must</strong> be greater or equal to <a href=\"#VK_API_VERSION_1_0\">VK_API_VERSION_1_0</a>"
},
{
"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 <a href=\"#VkInstance\">VkInstance</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
}
]
},
"vkEnumeratePhysicalDevices": {
"core": [
{
"vuid": "VUID-vkEnumeratePhysicalDevices-instance-parameter",
"text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkInstance\">VkInstance</a> 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> <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handles"
}
]
},
"vkGetPhysicalDeviceProperties": {
"core": [
{
"vuid": "VUID-vkGetPhysicalDeviceProperties-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceProperties-pProperties-parameter",
"text": " <code>pProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkPhysicalDeviceProperties\">VkPhysicalDeviceProperties</a> 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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceProperties2-pProperties-parameter",
"text": " <code>pProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkPhysicalDeviceProperties2\">VkPhysicalDeviceProperties2</a> 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=\"#VkPhysicalDeviceCooperativeMatrixPropertiesNV\">VkPhysicalDeviceCooperativeMatrixPropertiesNV</a>, <a href=\"#VkPhysicalDeviceCustomBorderColorPropertiesEXT\">VkPhysicalDeviceCustomBorderColorPropertiesEXT</a>, <a href=\"#VkPhysicalDeviceDepthStencilResolveProperties\">VkPhysicalDeviceDepthStencilResolveProperties</a>, <a href=\"#VkPhysicalDeviceDescriptorIndexingProperties\">VkPhysicalDeviceDescriptorIndexingProperties</a>, <a href=\"#VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV\">VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV</a>, <a href=\"#VkPhysicalDeviceDiscardRectanglePropertiesEXT\">VkPhysicalDeviceDiscardRectanglePropertiesEXT</a>, <a href=\"#VkPhysicalDeviceDriverProperties\">VkPhysicalDeviceDriverProperties</a>, <a href=\"#VkPhysicalDeviceExternalMemoryHostPropertiesEXT\">VkPhysicalDeviceExternalMemoryHostPropertiesEXT</a>, <a href=\"#VkPhysicalDeviceFloatControlsProperties\">VkPhysicalDeviceFloatControlsProperties</a>, <a href=\"#VkPhysicalDeviceFragmentDensityMapPropertiesEXT\">VkPhysicalDeviceFragmentDensityMapPropertiesEXT</a>, <a href=\"#VkPhysicalDeviceIDProperties\">VkPhysicalDeviceIDProperties</a>, <a href=\"#VkPhysicalDeviceInlineUniformBlockPropertiesEXT\">VkPhysicalDeviceInlineUniformBlockPropertiesEXT</a>, <a href=\"#VkPhysicalDeviceLineRasterizationPropertiesEXT\">VkPhysicalDeviceLineRasterizationPropertiesEXT</a>, <a href=\"#VkPhysicalDeviceMaintenance3Properties\">VkPhysicalDeviceMaintenance3Properties</a>, <a href=\"#VkPhysicalDeviceMeshShaderPropertiesNV\">VkPhysicalDeviceMeshShaderPropertiesNV</a>, <a href=\"#VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX\">VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX</a>, <a href=\"#VkPhysicalDeviceMultiviewProperties\">VkPhysicalDeviceMultiviewProperties</a>, <a href=\"#VkPhysicalDevicePCIBusInfoPropertiesEXT\">VkPhysicalDevicePCIBusInfoPropertiesEXT</a>, <a href=\"#VkPhysicalDevicePerformanceQueryPropertiesKHR\">VkPhysicalDevicePerformanceQueryPropertiesKHR</a>, <a href=\"#VkPhysicalDevicePointClippingProperties\">VkPhysicalDevicePointClippingProperties</a>, <a href=\"#VkPhysicalDeviceProtectedMemoryProperties\">VkPhysicalDeviceProtectedMemoryProperties</a>, <a href=\"#VkPhysicalDevicePushDescriptorPropertiesKHR\">VkPhysicalDevicePushDescriptorPropertiesKHR</a>, <a href=\"#VkPhysicalDeviceRayTracingPropertiesKHR\">VkPhysicalDeviceRayTracingPropertiesKHR</a>, <a href=\"#VkPhysicalDeviceRayTracingPropertiesNV\">VkPhysicalDeviceRayTracingPropertiesNV</a>, <a href=\"#VkPhysicalDeviceRobustness2PropertiesEXT\">VkPhysicalDeviceRobustness2PropertiesEXT</a>, <a href=\"#VkPhysicalDeviceSampleLocationsPropertiesEXT\">VkPhysicalDeviceSampleLocationsPropertiesEXT</a>, <a href=\"#VkPhysicalDeviceSamplerFilterMinmaxProperties\">VkPhysicalDeviceSamplerFilterMinmaxProperties</a>, <a href=\"#VkPhysicalDeviceShaderCoreProperties2AMD\">VkPhysicalDeviceShaderCoreProperties2AMD</a>, <a href=\"#VkPhysicalDeviceShaderCorePropertiesAMD\">VkPhysicalDeviceShaderCorePropertiesAMD</a>, <a href=\"#VkPhysicalDeviceShaderSMBuiltinsPropertiesNV\">VkPhysicalDeviceShaderSMBuiltinsPropertiesNV</a>, <a href=\"#VkPhysicalDeviceShadingRateImagePropertiesNV\">VkPhysicalDeviceShadingRateImagePropertiesNV</a>, <a href=\"#VkPhysicalDeviceSubgroupProperties\">VkPhysicalDeviceSubgroupProperties</a>, <a href=\"#VkPhysicalDeviceSubgroupSizeControlPropertiesEXT\">VkPhysicalDeviceSubgroupSizeControlPropertiesEXT</a>, <a href=\"#VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT\">VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT</a>, <a href=\"#VkPhysicalDeviceTimelineSemaphoreProperties\">VkPhysicalDeviceTimelineSemaphoreProperties</a>, <a href=\"#VkPhysicalDeviceTransformFeedbackPropertiesEXT\">VkPhysicalDeviceTransformFeedbackPropertiesEXT</a>, <a href=\"#VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT\">VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT</a>, <a href=\"#VkPhysicalDeviceVulkan11Properties\">VkPhysicalDeviceVulkan11Properties</a>, or <a href=\"#VkPhysicalDeviceVulkan12Properties\">VkPhysicalDeviceVulkan12Properties</a>"
},
{
"vuid": "VUID-VkPhysicalDeviceProperties2-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
}
]
},
"VkPhysicalDeviceVulkan11Properties": {
"(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)+(VK_VERSION_1_2)": [
{
"vuid": "VUID-VkPhysicalDeviceVulkan11Properties-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES</code>"
}
]
},
"VkPhysicalDeviceVulkan12Properties": {
"(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)+(VK_VERSION_1_2)": [
{
"vuid": "VUID-VkPhysicalDeviceVulkan12Properties-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES</code>"
}
]
},
"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>"
}
]
},
"VkPhysicalDeviceDriverProperties": {
"(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)+(VK_VERSION_1_2,VK_KHR_driver_properties)": [
{
"vuid": "VUID-VkPhysicalDeviceDriverProperties-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES</code>"
}
]
},
"VkPhysicalDevicePCIBusInfoPropertiesEXT": {
"(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)+(VK_EXT_pci_bus_info)": [
{
"vuid": "VUID-VkPhysicalDevicePCIBusInfoPropertiesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT</code>"
}
]
},
"vkGetPhysicalDeviceQueueFamilyProperties": {
"core": [
{
"vuid": "VUID-vkGetPhysicalDeviceQueueFamilyProperties-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> 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> <a href=\"#VkQueueFamilyProperties\">VkQueueFamilyProperties</a> 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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> 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> <a href=\"#VkQueueFamilyProperties2\">VkQueueFamilyProperties2</a> 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> or a pointer to a valid instance of <a href=\"#VkQueueFamilyCheckpointPropertiesNV\">VkQueueFamilyCheckpointPropertiesNV</a>"
},
{
"vuid": "VUID-VkQueueFamilyProperties2-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
}
]
},
"VkQueueFamilyCheckpointPropertiesNV": {
"(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)+(VK_NV_device_diagnostic_checkpoints)": [
{
"vuid": "VUID-VkQueueFamilyCheckpointPropertiesNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV</code>"
}
]
},
"vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR": {
"(VK_KHR_performance_query)": [
{
"vuid": "VUID-vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR-pCounterCount-parameter",
"text": " <code>pCounterCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
},
{
"vuid": "VUID-vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR-pCounters-parameter",
"text": " If the value referenced by <code>pCounterCount</code> is not <code>0</code>, and <code>pCounters</code> is not <code>NULL</code>, <code>pCounters</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pCounterCount</code> <a href=\"#VkPerformanceCounterKHR\">VkPerformanceCounterKHR</a> structures"
},
{
"vuid": "VUID-vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR-pCounterDescriptions-parameter",
"text": " If the value referenced by <code>pCounterCount</code> is not <code>0</code>, and <code>pCounterDescriptions</code> is not <code>NULL</code>, <code>pCounterDescriptions</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pCounterCount</code> <a href=\"#VkPerformanceCounterDescriptionKHR\">VkPerformanceCounterDescriptionKHR</a> structures"
}
]
},
"VkPerformanceCounterKHR": {
"(VK_KHR_performance_query)": [
{
"vuid": "VUID-VkPerformanceCounterKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR</code>"
},
{
"vuid": "VUID-VkPerformanceCounterKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
},
"VkPerformanceCounterDescriptionKHR": {
"(VK_KHR_performance_query)": [
{
"vuid": "VUID-VkPerformanceCounterDescriptionKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR</code>"
},
{
"vuid": "VUID-VkPerformanceCounterDescriptionKHR-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 <a href=\"#VkInstance\">VkInstance</a> 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> <a href=\"#VkPhysicalDeviceGroupProperties\">VkPhysicalDeviceGroupProperties</a> structures"
}
]
},
"VkPhysicalDeviceGroupProperties": {
"(VK_VERSION_1_1,VK_KHR_device_group_creation)": [
{
"vuid": "VUID-VkPhysicalDeviceGroupProperties-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES</code>"
},
{
"vuid": "VUID-VkPhysicalDeviceGroupProperties-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
},
"vkCreateDevice": {
"core": [
{
"vuid": "VUID-vkCreateDevice-ppEnabledExtensionNames-01387",
"text": " All <a href=\"#extendingvulkan-extensions-extensiondependencies\">required extensions</a> 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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkCreateDevice-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkDeviceCreateInfo\">VkDeviceCreateInfo</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateDevice-pDevice-parameter",
"text": " <code>pDevice</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkDevice\">VkDevice</a> handle"
}
]
},
"VkDeviceCreateInfo": {
"!(VK_VERSION_1_1)": [
{
"vuid": "VUID-VkDeviceCreateInfo-queueFamilyIndex-00372",
"text": " The <code>queueFamilyIndex</code> member of each element of <code>pQueueCreateInfos</code> <strong class=\"purple\">must</strong> be unique within <code>pQueueCreateInfos</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-VkDeviceCreateInfo-queueFamilyIndex-02802",
"text": " The <code>queueFamilyIndex</code> member of each element of <code>pQueueCreateInfos</code> <strong class=\"purple\">must</strong> be unique within <code>pQueueCreateInfos</code>, except that two members can share the same <code>queueFamilyIndex</code> if one is a protected-capable queue and one is not a protected-capable queue"
}
],
"(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><a href=\"#VK_AMD_negative_viewport_height\">VK_AMD_negative_viewport_height</a></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>"
}
],
"(VK_EXT_buffer_device_address+VK_KHR_buffer_device_address)": [
{
"vuid": "VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-03328",
"text": " <code>ppEnabledExtensionNames</code> <strong class=\"purple\">must</strong> not contain both <code><a href=\"#VK_KHR_buffer_device_address\">VK_KHR_buffer_device_address</a></code> and <code><a href=\"#VK_EXT_buffer_device_address\">VK_EXT_buffer_device_address</a></code>"
}
],
"(VK_VERSION_1_2)": [
{
"vuid": "VUID-VkDeviceCreateInfo-pNext-02829",
"text": " If the <code>pNext</code> chain includes a <a href=\"#VkPhysicalDeviceVulkan11Features\">VkPhysicalDeviceVulkan11Features</a> structure, then it <strong class=\"purple\">must</strong> not include a <a href=\"#VkPhysicalDevice16BitStorageFeatures\">VkPhysicalDevice16BitStorageFeatures</a>, <a href=\"#VkPhysicalDeviceMultiviewFeatures\">VkPhysicalDeviceMultiviewFeatures</a>, <a href=\"#VkPhysicalDeviceVariablePointersFeatures\">VkPhysicalDeviceVariablePointersFeatures</a>, <a href=\"#VkPhysicalDeviceProtectedMemoryFeatures\">VkPhysicalDeviceProtectedMemoryFeatures</a>, <a href=\"#VkPhysicalDeviceSamplerYcbcrConversionFeatures\">VkPhysicalDeviceSamplerYcbcrConversionFeatures</a>, or <a href=\"#VkPhysicalDeviceShaderDrawParametersFeatures\">VkPhysicalDeviceShaderDrawParametersFeatures</a> structure"
},
{
"vuid": "VUID-VkDeviceCreateInfo-pNext-02830",
"text": " If the <code>pNext</code> chain includes a <a href=\"#VkPhysicalDeviceVulkan12Features\">VkPhysicalDeviceVulkan12Features</a> structure, then it <strong class=\"purple\">must</strong> not include a <a href=\"#VkPhysicalDevice8BitStorageFeatures\">VkPhysicalDevice8BitStorageFeatures</a>, <a href=\"#VkPhysicalDeviceShaderAtomicInt64Features\">VkPhysicalDeviceShaderAtomicInt64Features</a>, <a href=\"#VkPhysicalDeviceShaderFloat16Int8Features\">VkPhysicalDeviceShaderFloat16Int8Features</a>, <a href=\"#VkPhysicalDeviceDescriptorIndexingFeatures\">VkPhysicalDeviceDescriptorIndexingFeatures</a>, <a href=\"#VkPhysicalDeviceScalarBlockLayoutFeatures\">VkPhysicalDeviceScalarBlockLayoutFeatures</a>, <a href=\"#VkPhysicalDeviceImagelessFramebufferFeatures\">VkPhysicalDeviceImagelessFramebufferFeatures</a>, <a href=\"#VkPhysicalDeviceUniformBufferStandardLayoutFeatures\">VkPhysicalDeviceUniformBufferStandardLayoutFeatures</a>, <a href=\"#VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures\">VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures</a>, <a href=\"#VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures\">VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures</a>, <a href=\"#VkPhysicalDeviceHostQueryResetFeatures\">VkPhysicalDeviceHostQueryResetFeatures</a>, <a href=\"#VkPhysicalDeviceTimelineSemaphoreFeatures\">VkPhysicalDeviceTimelineSemaphoreFeatures</a>, <a href=\"#VkPhysicalDeviceBufferDeviceAddressFeatures\">VkPhysicalDeviceBufferDeviceAddressFeatures</a>, or <a href=\"#VkPhysicalDeviceVulkanMemoryModelFeatures\">VkPhysicalDeviceVulkanMemoryModelFeatures</a> structure"
}
],
"(VK_VERSION_1_2)+(VK_KHR_draw_indirect_count)": [
{
"vuid": "VUID-VkDeviceCreateInfo-ppEnabledExtensions-02831",
"text": " If <code>ppEnabledExtensions</code> contains <code>\"VK_KHR_draw_indirect_count\"</code> and the <code>pNext</code> chain includes a <a href=\"#VkPhysicalDeviceVulkan12Features\">VkPhysicalDeviceVulkan12Features</a> structure, then <code>VkPhysicalDeviceVulkan12Features</code>::<code>drawIndirectCount</code> <strong class=\"purple\">must</strong> be <code>VK_TRUE</code>"
}
],
"(VK_VERSION_1_2)+(VK_KHR_sampler_mirror_clamp_to_edge)": [
{
"vuid": "VUID-VkDeviceCreateInfo-ppEnabledExtensions-02832",
"text": " If <code>ppEnabledExtensions</code> contains <code>\"VK_KHR_sampler_mirror_clamp_to_edge\"</code> and the <code>pNext</code> chain includes a <a href=\"#VkPhysicalDeviceVulkan12Features\">VkPhysicalDeviceVulkan12Features</a> structure, then <code>VkPhysicalDeviceVulkan12Features</code>::<code>samplerMirrorClampToEdge</code> <strong class=\"purple\">must</strong> be <code>VK_TRUE</code>"
}
],
"(VK_VERSION_1_2)+(VK_EXT_descriptor_indexing)": [
{
"vuid": "VUID-VkDeviceCreateInfo-ppEnabledExtensions-02833",
"text": " If <code>ppEnabledExtensions</code> contains <code>\"VK_EXT_descriptor_indexing\"</code> and the <code>pNext</code> chain includes a <a href=\"#VkPhysicalDeviceVulkan12Features\">VkPhysicalDeviceVulkan12Features</a> structure, then <code>VkPhysicalDeviceVulkan12Features</code>::<code>descriptorIndexing</code> <strong class=\"purple\">must</strong> be <code>VK_TRUE</code>"
}
],
"(VK_VERSION_1_2)+(VK_EXT_sampler_filter_minmax)": [
{
"vuid": "VUID-VkDeviceCreateInfo-ppEnabledExtensions-02834",
"text": " If <code>ppEnabledExtensions</code> contains <code>\"VK_EXT_sampler_filter_minmax\"</code> and the <code>pNext</code> chain includes a <a href=\"#VkPhysicalDeviceVulkan12Features\">VkPhysicalDeviceVulkan12Features</a> structure, then <code>VkPhysicalDeviceVulkan12Features</code>::<code>samplerFilterMinmax</code> <strong class=\"purple\">must</strong> be <code>VK_TRUE</code>"
}
],
"(VK_VERSION_1_2)+(VK_EXT_shader_viewport_index_layer)": [
{
"vuid": "VUID-VkDeviceCreateInfo-ppEnabledExtensions-02835",
"text": " If <code>ppEnabledExtensions</code> contains <code>\"VK_EXT_shader_viewport_index_layer\"</code> and the <code>pNext</code> chain includes a <a href=\"#VkPhysicalDeviceVulkan12Features\">VkPhysicalDeviceVulkan12Features</a> structure, then <code>VkPhysicalDeviceVulkan12Features</code>::<code>shaderOutputViewportIndex</code> and <code>VkPhysicalDeviceVulkan12Features</code>::<code>shaderOutputLayer</code> <strong class=\"purple\">must</strong> both be <code>VK_TRUE</code>"
}
],
"core": [
{
"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=\"#VkDeviceDiagnosticsConfigCreateInfoNV\">VkDeviceDiagnosticsConfigCreateInfoNV</a>, <a href=\"#VkDeviceGroupDeviceCreateInfo\">VkDeviceGroupDeviceCreateInfo</a>, <a href=\"#VkDeviceMemoryOverallocationCreateInfoAMD\">VkDeviceMemoryOverallocationCreateInfoAMD</a>, <a href=\"#VkDevicePrivateDataCreateInfoEXT\">VkDevicePrivateDataCreateInfoEXT</a>, <a href=\"#VkPhysicalDevice16BitStorageFeatures\">VkPhysicalDevice16BitStorageFeatures</a>, <a href=\"#VkPhysicalDevice8BitStorageFeatures\">VkPhysicalDevice8BitStorageFeatures</a>, <a href=\"#VkPhysicalDeviceASTCDecodeFeaturesEXT\">VkPhysicalDeviceASTCDecodeFeaturesEXT</a>, <a href=\"#VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT\">VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT</a>, <a href=\"#VkPhysicalDeviceBufferDeviceAddressFeatures\">VkPhysicalDeviceBufferDeviceAddressFeatures</a>, <a href=\"#VkPhysicalDeviceBufferDeviceAddressFeaturesEXT\">VkPhysicalDeviceBufferDeviceAddressFeaturesEXT</a>, <a href=\"#VkPhysicalDeviceCoherentMemoryFeaturesAMD\">VkPhysicalDeviceCoherentMemoryFeaturesAMD</a>, <a href=\"#VkPhysicalDeviceComputeShaderDerivativesFeaturesNV\">VkPhysicalDeviceComputeShaderDerivativesFeaturesNV</a>, <a href=\"#VkPhysicalDeviceConditionalRenderingFeaturesEXT\">VkPhysicalDeviceConditionalRenderingFeaturesEXT</a>, <a href=\"#VkPhysicalDeviceCooperativeMatrixFeaturesNV\">VkPhysicalDeviceCooperativeMatrixFeaturesNV</a>, <a href=\"#VkPhysicalDeviceCornerSampledImageFeaturesNV\">VkPhysicalDeviceCornerSampledImageFeaturesNV</a>, <a href=\"#VkPhysicalDeviceCoverageReductionModeFeaturesNV\">VkPhysicalDeviceCoverageReductionModeFeaturesNV</a>, <a href=\"#VkPhysicalDeviceCustomBorderColorFeaturesEXT\">VkPhysicalDeviceCustomBorderColorFeaturesEXT</a>, <a href=\"#VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV\">VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV</a>, <a href=\"#VkPhysicalDeviceDepthClipEnableFeaturesEXT\">VkPhysicalDeviceDepthClipEnableFeaturesEXT</a>, <a href=\"#VkPhysicalDeviceDescriptorIndexingFeatures\">VkPhysicalDeviceDescriptorIndexingFeatures</a>, <a href=\"#VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV\">VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV</a>, <a href=\"#VkPhysicalDeviceDiagnosticsConfigFeaturesNV\">VkPhysicalDeviceDiagnosticsConfigFeaturesNV</a>, <a href=\"#VkPhysicalDeviceExclusiveScissorFeaturesNV\">VkPhysicalDeviceExclusiveScissorFeaturesNV</a>, <a href=\"#VkPhysicalDeviceExtendedDynamicStateFeaturesEXT\">VkPhysicalDeviceExtendedDynamicStateFeaturesEXT</a>, <a href=\"#VkPhysicalDeviceFeatures2\">VkPhysicalDeviceFeatures2</a>, <a href=\"#VkPhysicalDeviceFragmentDensityMapFeaturesEXT\">VkPhysicalDeviceFragmentDensityMapFeaturesEXT</a>, <a href=\"#VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV\">VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV</a>, <a href=\"#VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT\">VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT</a>, <a href=\"#VkPhysicalDeviceHostQueryResetFeatures\">VkPhysicalDeviceHostQueryResetFeatures</a>, <a href=\"#VkPhysicalDeviceImagelessFramebufferFeatures\">VkPhysicalDeviceImagelessFramebufferFeatures</a>, <a href=\"#VkPhysicalDeviceIndexTypeUint8FeaturesEXT\">VkPhysicalDeviceIndexTypeUint8FeaturesEXT</a>, <a href=\"#VkPhysicalDeviceInlineUniformBlockFeaturesEXT\">VkPhysicalDeviceInlineUniformBlockFeaturesEXT</a>, <a href=\"#VkPhysicalDeviceLineRasterizationFeaturesEXT\">VkPhysicalDeviceLineRasterizationFeaturesEXT</a>, <a href=\"#VkPhysicalDeviceMemoryPriorityFeaturesEXT\">VkPhysicalDeviceMemoryPriorityFeaturesEXT</a>, <a href=\"#VkPhysicalDeviceMeshShaderFeaturesNV\">VkPhysicalDeviceMeshShaderFeaturesNV</a>, <a href=\"#VkPhysicalDeviceMultiviewFeatures\">VkPhysicalDeviceMultiviewFeatures</a>, <a href=\"#VkPhysicalDevicePerformanceQueryFeaturesKHR\">VkPhysicalDevicePerformanceQueryFeaturesKHR</a>, <a href=\"#VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT\">VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT</a>, <a href=\"#VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR\">VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR</a>, <a href=\"#VkPhysicalDevicePrivateDataFeaturesEXT\">VkPhysicalDevicePrivateDataFeaturesEXT</a>, <a href=\"#VkPhysicalDeviceProtectedMemoryFeatures\">VkPhysicalDeviceProtectedMemoryFeatures</a>, <a href=\"#VkPhysicalDeviceRayTracingFeaturesKHR\">VkPhysicalDeviceRayTracingFeaturesKHR</a>, <a href=\"#VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV\">VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV</a>, <a href=\"#VkPhysicalDeviceRobustness2FeaturesEXT\">VkPhysicalDeviceRobustness2FeaturesEXT</a>, <a href=\"#VkPhysicalDeviceSamplerYcbcrConversionFeatures\">VkPhysicalDeviceSamplerYcbcrConversionFeatures</a>, <a href=\"#VkPhysicalDeviceScalarBlockLayoutFeatures\">VkPhysicalDeviceScalarBlockLayoutFeatures</a>, <a href=\"#VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures\">VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures</a>, <a href=\"#VkPhysicalDeviceShaderAtomicInt64Features\">VkPhysicalDeviceShaderAtomicInt64Features</a>, <a href=\"#VkPhysicalDeviceShaderClockFeaturesKHR\">VkPhysicalDeviceShaderClockFeaturesKHR</a>, <a href=\"#VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT\">VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT</a>, <a href=\"#VkPhysicalDeviceShaderDrawParametersFeatures\">VkPhysicalDeviceShaderDrawParametersFeatures</a>, <a href=\"#VkPhysicalDeviceShaderFloat16Int8Features\">VkPhysicalDeviceShaderFloat16Int8Features</a>, <a href=\"#VkPhysicalDeviceShaderImageFootprintFeaturesNV\">VkPhysicalDeviceShaderImageFootprintFeaturesNV</a>, <a href=\"#VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL\">VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL</a>, <a href=\"#VkPhysicalDeviceShaderSMBuiltinsFeaturesNV\">VkPhysicalDeviceShaderSMBuiltinsFeaturesNV</a>, <a href=\"#VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures\">VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures</a>, <a href=\"#VkPhysicalDeviceShadingRateImageFeaturesNV\">VkPhysicalDeviceShadingRateImageFeaturesNV</a>, <a href=\"#VkPhysicalDeviceSubgroupSizeControlFeaturesEXT\">VkPhysicalDeviceSubgroupSizeControlFeaturesEXT</a>, <a href=\"#VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT\">VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT</a>, <a href=\"#VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT\">VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT</a>, <a href=\"#VkPhysicalDeviceTimelineSemaphoreFeatures\">VkPhysicalDeviceTimelineSemaphoreFeatures</a>, <a href=\"#VkPhysicalDeviceTransformFeedbackFeaturesEXT\">VkPhysicalDeviceTransformFeedbackFeaturesEXT</a>, <a href=\"#VkPhysicalDeviceUniformBufferStandardLayoutFeatures\">VkPhysicalDeviceUniformBufferStandardLayoutFeatures</a>, <a href=\"#VkPhysicalDeviceVariablePointersFeatures\">VkPhysicalDeviceVariablePointersFeatures</a>, <a href=\"#VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT\">VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT</a>, <a href=\"#VkPhysicalDeviceVulkan11Features\">VkPhysicalDeviceVulkan11Features</a>, <a href=\"#VkPhysicalDeviceVulkan12Features\">VkPhysicalDeviceVulkan12Features</a>, <a href=\"#VkPhysicalDeviceVulkanMemoryModelFeatures\">VkPhysicalDeviceVulkanMemoryModelFeatures</a>, or <a href=\"#VkPhysicalDeviceYcbcrImageArraysFeaturesEXT\">VkPhysicalDeviceYcbcrImageArraysFeaturesEXT</a>"
},
{
"vuid": "VUID-VkDeviceCreateInfo-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique, with the exception of structures of type <a href=\"#VkDevicePrivateDataCreateInfoEXT\">VkDevicePrivateDataCreateInfoEXT</a>"
},
{
"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 <a href=\"#VkDeviceQueueCreateInfo\">VkDeviceQueueCreateInfo</a> 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 <a href=\"#VkPhysicalDeviceFeatures\">VkPhysicalDeviceFeatures</a> structure"
},
{
"vuid": "VUID-VkDeviceCreateInfo-queueCreateInfoCount-arraylength",
"text": " <code>queueCreateInfoCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handles"
}
]
},
"VkDeviceMemoryOverallocationCreateInfoAMD": {
"(VK_AMD_memory_overallocation_behavior)": [
{
"vuid": "VUID-VkDeviceMemoryOverallocationCreateInfoAMD-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD</code>"
},
{
"vuid": "VUID-VkDeviceMemoryOverallocationCreateInfoAMD-overallocationBehavior-parameter",
"text": " <code>overallocationBehavior</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkMemoryOverallocationBehaviorAMD\">VkMemoryOverallocationBehaviorAMD</a> value"
}
]
},
"VkDeviceDiagnosticsConfigCreateInfoNV": {
"(VK_NV_device_diagnostics_config)": [
{
"vuid": "VUID-VkDeviceDiagnosticsConfigCreateInfoNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV</code>"
},
{
"vuid": "VUID-VkDeviceDiagnosticsConfigCreateInfoNV-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkDeviceDiagnosticsConfigFlagBitsNV\">VkDeviceDiagnosticsConfigFlagBitsNV</a> values"
}
]
},
"VkDevicePrivateDataCreateInfoEXT": {
"(VK_EXT_private_data)": [
{
"vuid": "VUID-VkDevicePrivateDataCreateInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT</code>"
}
]
},
"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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> 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>[queueFamilyIndex]"
},
{
"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-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"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>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-VkDeviceQueueCreateInfo-flags-02861",
"text": " If the <a href=\"#features-protectedMemory\">protected memory</a> feature is not enabled, the <code>VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT</code> bit of <code>flags</code> <strong class=\"purple\">must</strong> not be set"
}
]
},
"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 <a href=\"#VkDeviceQueueCreateInfo\">VkDeviceQueueCreateInfo</a> 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 <a href=\"#VkDeviceQueueCreateInfo\">VkDeviceQueueCreateInfo</a> 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetDeviceQueue-pQueue-parameter",
"text": " <code>pQueue</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkQueue\">VkQueue</a> handle"
}
]
},
"vkGetDeviceQueue2": {
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkGetDeviceQueue2-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetDeviceQueue2-pQueueInfo-parameter",
"text": " <code>pQueueInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkDeviceQueueInfo2\">VkDeviceQueueInfo2</a> structure"
},
{
"vuid": "VUID-vkGetDeviceQueue2-pQueue-parameter",
"text": " <code>pQueue</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkQueue\">VkQueue</a> 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 <a href=\"#VkDeviceQueueCreateInfo\">VkDeviceQueueCreateInfo</a> 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 <a href=\"#VkDeviceQueueCreateFlags\">VkDeviceQueueCreateFlags</a> 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 <a href=\"#VkDeviceQueueCreateInfo\">VkDeviceQueueCreateInfo</a> 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"
}
]
},
"vkCreateCommandPool": {
"core": [
{
"vuid": "VUID-vkCreateCommandPool-queueFamilyIndex-01937",
"text": " <code>pCreateInfo-&gt;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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkCreateCommandPool-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkCommandPoolCreateInfo\">VkCommandPoolCreateInfo</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateCommandPool-pCommandPool-parameter",
"text": " <code>pCommandPool</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkCommandPool\">VkCommandPool</a> handle"
}
]
},
"VkCommandPoolCreateInfo": {
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-VkCommandPoolCreateInfo-flags-02860",
"text": " If the protected memory feature is not enabled, the <code>VK_COMMAND_POOL_CREATE_PROTECTED_BIT</code> bit of <code>flags</code> <strong class=\"purple\">must</strong> not be set"
}
],
"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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkTrimCommandPool-commandPool-parameter",
"text": " <code>commandPool</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandPool\">VkCommandPool</a> 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 <a href=\"#commandbuffers-lifecycle\">pending state</a>"
},
{
"vuid": "VUID-vkResetCommandPool-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkResetCommandPool-commandPool-parameter",
"text": " <code>commandPool</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandPool\">VkCommandPool</a> 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 <a href=\"#commandbuffers-lifecycle\">pending state</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkCommandPool\">VkCommandPool</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkAllocateCommandBuffers-pAllocateInfo-parameter",
"text": " <code>pAllocateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkCommandBufferAllocateInfo\">VkCommandBufferAllocateInfo</a> 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-&gt;commandBufferCount</code> <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handles"
},
{
"vuid": "VUID-vkAllocateCommandBuffers-pAllocateInfo::commandBufferCount-arraylength",
"text": " The value referenced by <code>pAllocateInfo-&gt;commandBufferCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"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 <a href=\"#VkCommandPool\">VkCommandPool</a> 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 <a href=\"#commandbuffers-lifecycle\">pending state</a>"
},
{
"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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> 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 <a href=\"#commandbuffers-lifecycle\">pending state</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkFreeCommandBuffers-commandPool-parameter",
"text": " <code>commandPool</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandPool\">VkCommandPool</a> 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 <a href=\"#commandbuffers-lifecycle\">recording or pending state</a>"
},
{
"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 <a href=\"#commandbuffers-lifecycle\">initial state</a>"
},
{
"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-02840",
"text": " If <code>commandBuffer</code> is a primary command buffer, then <code>pBeginInfo-&gt;flags</code> <strong class=\"purple\">must</strong> not set both the <code>VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT</code> and the <code>VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT</code> flags"
},
{
"vuid": "VUID-vkBeginCommandBuffer-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkBeginCommandBuffer-pBeginInfo-parameter",
"text": " <code>pBeginInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkCommandBufferBeginInfo\">VkCommandBufferBeginInfo</a> 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-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"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 <a href=\"#features-inheritedQueries\">inherited queries</a> 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 <a href=\"#features-inheritedQueries\">inherited queries</a> 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-queryFlags-02788",
"text": " If the <a href=\"#features-inheritedQueries\">inherited queries</a> feature is not enabled, <code>queryFlags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkCommandBufferInheritanceInfo-pipelineStatistics-02789",
"text": " If the <a href=\"#features-pipelineStatisticsQuery\">pipeline statistics queries</a> feature is enabled, <code>pipelineStatistics</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkQueryPipelineStatisticFlagBits\">VkQueryPipelineStatisticFlagBits</a> values"
},
{
"vuid": "VUID-VkCommandBufferInheritanceInfo-pipelineStatistics-00058",
"text": " If the <a href=\"#features-pipelineStatisticsQuery\">pipeline statistics queries</a> 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": " 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=\"#VkCommandBufferInheritanceConditionalRenderingInfoEXT\">VkCommandBufferInheritanceConditionalRenderingInfoEXT</a> or <a href=\"#VkCommandBufferInheritanceRenderPassTransformInfoQCOM\">VkCommandBufferInheritanceRenderPassTransformInfoQCOM</a>"
},
{
"vuid": "VUID-VkCommandBufferInheritanceInfo-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkCommandBufferInheritanceInfo-commonparent",
"text": " Both of <code>framebuffer</code>, and <code>renderPass</code> that are valid handles of non-ignored parameters <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"VkCommandBufferInheritanceConditionalRenderingInfoEXT": {
"(VK_EXT_conditional_rendering)": [
{
"vuid": "VUID-VkCommandBufferInheritanceConditionalRenderingInfoEXT-conditionalRenderingEnable-01977",
"text": " If the <a href=\"#features-inheritedConditionalRendering\">inherited conditional rendering</a> feature is not enabled, <code>conditionalRenderingEnable</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
},
{
"vuid": "VUID-VkCommandBufferInheritanceConditionalRenderingInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT</code>"
}
]
},
"VkCommandBufferInheritanceRenderPassTransformInfoQCOM": {
"(VK_QCOM_render_pass_transform)": [
{
"vuid": "VUID-VkCommandBufferInheritanceRenderPassTransformInfoQCOM-transform-02864",
"text": " <code>transform</code> <strong class=\"purple\">must</strong> be <code>VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR</code>, <code>VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR</code>, <code>VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR</code>, or <code>VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR</code>"
},
{
"vuid": "VUID-VkCommandBufferInheritanceRenderPassTransformInfoQCOM-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM</code>"
}
]
},
"vkEndCommandBuffer": {
"core": [
{
"vuid": "VUID-vkEndCommandBuffer-commandBuffer-00059",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#queries-operation-active\">active</a> 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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
}
],
"(VK_EXT_conditional_rendering)": [
{
"vuid": "VUID-vkEndCommandBuffer-None-01978",
"text": " Conditional rendering <strong class=\"purple\">must</strong> not be <a href=\"#active-conditional-rendering\">active</a>"
}
],
"(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 <a href=\"#synchronization-pipeline-stages-supported\">table of supported pipeline stages</a>"
},
{
"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 wait operation referring to a binary semaphore defined by any element of the <code>pWaitSemaphores</code> member of any element of <code>pSubmits</code> executes on <code>queue</code>, there <strong class=\"purple\">must</strong> be no other queues waiting on the same semaphore"
},
{
"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 <a href=\"#commandbuffers-lifecycle\">pending or executable state</a>"
},
{
"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 <a href=\"#commandbuffers-lifecycle\">pending state</a>"
},
{
"vuid": "VUID-vkQueueSubmit-pCommandBuffers-00072",
"text": " Any <a href=\"#commandbuffers-secondary\">secondary command buffers recorded</a> into any element of the <code>pCommandBuffers</code> member of any element of <code>pSubmits</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">pending or executable state</a>"
},
{
"vuid": "VUID-vkQueueSubmit-pCommandBuffers-00073",
"text": " If any <a href=\"#commandbuffers-secondary\">secondary command buffers recorded</a> 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 <a href=\"#commandbuffers-lifecycle\">pending state</a>"
},
{
"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-pSubmits-02207",
"text": " If any element of <code>pSubmits-&gt;pCommandBuffers</code> includes a <a href=\"#synchronization-queue-transfers-acquire\">Queue Family Transfer Acquire Operation</a>, there <strong class=\"purple\">must</strong> exist a previously submitted <a href=\"#synchronization-queue-transfers-release\">Queue Family Transfer Release Operation</a> on a queue in the queue family identified by the acquire operation, with parameters matching the acquire operation as defined in the definition of such <a href=\"#synchronization-queue-transfers-acquire\">acquire operations</a>, and which happens-before the acquire operation"
},
{
"vuid": "VUID-vkQueueSubmit-pSubmits-02808",
"text": " Any resource created with <code>VK_SHARING_MODE_EXCLUSIVE</code> that is read by an operation specified by <code>pSubmits</code> <strong class=\"purple\">must</strong> not be owned by any queue family other than the one which <code>queue</code> belongs to, at the time it is executed"
},
{
"vuid": "VUID-vkQueueSubmit-queue-parameter",
"text": " <code>queue</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkQueue\">VkQueue</a> 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 <a href=\"#VkSubmitInfo\">VkSubmitInfo</a> 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 <a href=\"#VkFence\">VkFence</a> handle"
},
{
"vuid": "VUID-vkQueueSubmit-commonparent",
"text": " Both of <code>fence</code>, and <code>queue</code> that are valid handles of non-ignored parameters <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
],
"!(VK_KHR_timeline_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 <a href=\"#synchronization-semaphores-signaling\">semaphore signal operations</a> previously submitted for execution"
}
],
"(VK_VERSION_1_2,VK_KHR_timeline_semaphore)": [
{
"vuid": "VUID-vkQueueSubmit-pWaitSemaphores-03238",
"text": " All elements of the <code>pWaitSemaphores</code> member of all elements of <code>pSubmits</code> created with a <a href=\"#VkSemaphoreType\">VkSemaphoreType</a> of <code>VK_SEMAPHORE_TYPE_BINARY</code> <strong class=\"purple\">must</strong> reference a semaphore signal operation that has been submitted for execution and any semaphore signal operations on which it depends (if any) <strong class=\"purple\">must</strong> have also been submitted for execution"
}
],
"(VK_KHR_performance_query)": [
{
"vuid": "VUID-vkQueueSubmit-pCommandBuffers-03220",
"text": " If a command recorded into any element of <code>pCommandBuffers</code> was a <a href=\"#vkCmdBeginQuery\">vkCmdBeginQuery</a> whose <code>queryPool</code> was created with a <code>queryType</code> of <code>VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR</code>, the <a href=\"#profiling-lock\">profiling lock</a> <strong class=\"purple\">must</strong> have been held continuously on the <code>VkDevice</code> that <code>queue</code> was retrieved from, throughout recording of those command buffers"
}
]
},
"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 <a href=\"#features-geometryShader\">geometry shaders</a> 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 <a href=\"#features-tessellationShader\">tessellation shaders</a> 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=\"#VkPerformanceQuerySubmitInfoKHR\">VkPerformanceQuerySubmitInfoKHR</a>, <a href=\"#VkProtectedSubmitInfo\">VkProtectedSubmitInfo</a>, <a href=\"#VkTimelineSemaphoreSubmitInfo\">VkTimelineSemaphoreSubmitInfo</a>, <a href=\"#VkWin32KeyedMutexAcquireReleaseInfoKHR\">VkWin32KeyedMutexAcquireReleaseInfoKHR</a>, or <a href=\"#VkWin32KeyedMutexAcquireReleaseInfoNV\">VkWin32KeyedMutexAcquireReleaseInfoNV</a>"
},
{
"vuid": "VUID-VkSubmitInfo-sType-unique",
"text": " The <code>sType</code> value of each struct 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 <a href=\"#VkSemaphore\">VkSemaphore</a> 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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> 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 <a href=\"#VkSemaphore\">VkSemaphore</a> 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 of non-ignored parameters <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(VK_VERSION_1_2,VK_KHR_timeline_semaphore)": [
{
"vuid": "VUID-VkSubmitInfo-pWaitSemaphores-03239",
"text": " If any element of <code>pWaitSemaphores</code> or <code>pSignalSemaphores</code> was created with a <a href=\"#VkSemaphoreType\">VkSemaphoreType</a> of <code>VK_SEMAPHORE_TYPE_TIMELINE</code>, then the <code>pNext</code> chain <strong class=\"purple\">must</strong> include a <a href=\"#VkTimelineSemaphoreSubmitInfo\">VkTimelineSemaphoreSubmitInfo</a> structure"
},
{
"vuid": "VUID-VkSubmitInfo-pNext-03240",
"text": " If the <code>pNext</code> chain of this structure includes a <a href=\"#VkTimelineSemaphoreSubmitInfo\">VkTimelineSemaphoreSubmitInfo</a> structure and any element of <code>pWaitSemaphores</code> was created with a <a href=\"#VkSemaphoreType\">VkSemaphoreType</a> of <code>VK_SEMAPHORE_TYPE_TIMELINE</code>, then its <code>waitSemaphoreValueCount</code> member <strong class=\"purple\">must</strong> equal <code>waitSemaphoreCount</code>"
},
{
"vuid": "VUID-VkSubmitInfo-pNext-03241",
"text": " If the <code>pNext</code> chain of this structure includes a <a href=\"#VkTimelineSemaphoreSubmitInfo\">VkTimelineSemaphoreSubmitInfo</a> structure and any element of <code>pSignalSemaphores</code> was created with a <a href=\"#VkSemaphoreType\">VkSemaphoreType</a> of <code>VK_SEMAPHORE_TYPE_TIMELINE</code>, then its <code>signalSemaphoreValueCount</code> member <strong class=\"purple\">must</strong> equal <code>signalSemaphoreCount</code>"
},
{
"vuid": "VUID-VkSubmitInfo-pSignalSemaphores-03242",
"text": " For each element of <code>pSignalSemaphores</code> created with a <a href=\"#VkSemaphoreType\">VkSemaphoreType</a> of <code>VK_SEMAPHORE_TYPE_TIMELINE</code> the corresponding element of <a href=\"#VkTimelineSemaphoreSubmitInfo\">VkTimelineSemaphoreSubmitInfo</a>::pSignalSemaphoreValues <strong class=\"purple\">must</strong> have a value greater than the current value of the semaphore when the <a href=\"#synchronization-semaphores-signaling\">semaphore signal operation</a> is executed"
},
{
"vuid": "VUID-VkSubmitInfo-pWaitSemaphores-03243",
"text": " For each element of <code>pWaitSemaphores</code> created with a <a href=\"#VkSemaphoreType\">VkSemaphoreType</a> of <code>VK_SEMAPHORE_TYPE_TIMELINE</code> the corresponding element of <a href=\"#VkTimelineSemaphoreSubmitInfo\">VkTimelineSemaphoreSubmitInfo</a>::pWaitSemaphoreValues <strong class=\"purple\">must</strong> have a value which does not differ from the current value of the semaphore or the value of any outstanding semaphore wait or signal operation on that semaphore by more than <a href=\"#limits-maxTimelineSemaphoreValueDifference\"><code>maxTimelineSemaphoreValueDifference</code></a>"
},
{
"vuid": "VUID-VkSubmitInfo-pSignalSemaphores-03244",
"text": " For each element of <code>pSignalSemaphores</code> created with a <a href=\"#VkSemaphoreType\">VkSemaphoreType</a> of <code>VK_SEMAPHORE_TYPE_TIMELINE</code> the corresponding element of <a href=\"#VkTimelineSemaphoreSubmitInfo\">VkTimelineSemaphoreSubmitInfo</a>::pSignalSemaphoreValues <strong class=\"purple\">must</strong> have a value which does not differ from the current value of the semaphore or the value of any outstanding semaphore wait or signal operation on that semaphore by more than <a href=\"#limits-maxTimelineSemaphoreValueDifference\"><code>maxTimelineSemaphoreValueDifference</code></a>"
}
],
"(VK_NV_mesh_shader)": [
{
"vuid": "VUID-VkSubmitInfo-pWaitDstStageMask-02089",
"text": " If the <a href=\"#features-meshShader\">mesh shaders</a> feature is not enabled, each element of <code>pWaitDstStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV</code>"
},
{
"vuid": "VUID-VkSubmitInfo-pWaitDstStageMask-02090",
"text": " If the <a href=\"#features-taskShader\">task shaders</a> feature is not enabled, each element of <code>pWaitDstStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV</code>"
}
]
},
"VkTimelineSemaphoreSubmitInfo": {
"(VK_VERSION_1_2,VK_KHR_timeline_semaphore)": [
{
"vuid": "VUID-VkTimelineSemaphoreSubmitInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO</code>"
},
{
"vuid": "VUID-VkTimelineSemaphoreSubmitInfo-pWaitSemaphoreValues-parameter",
"text": " If <code>waitSemaphoreValueCount</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>waitSemaphoreValueCount</code> <code>uint64_t</code> values"
},
{
"vuid": "VUID-VkTimelineSemaphoreSubmitInfo-pSignalSemaphoreValues-parameter",
"text": " If <code>signalSemaphoreValueCount</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>signalSemaphoreValueCount</code> <code>uint64_t</code> values"
}
]
},
"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 <a href=\"#VkDeviceMemory\">VkDeviceMemory</a> 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 <a href=\"#VkDeviceMemory\">VkDeviceMemory</a> 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 of non-ignored parameters <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"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 <a href=\"#VkDeviceMemory\">VkDeviceMemory</a> 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 <a href=\"#VkDeviceMemory\">VkDeviceMemory</a> 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 of non-ignored parameters <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"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"
}
]
},
"VkPerformanceQuerySubmitInfoKHR": {
"(VK_KHR_performance_query)": [
{
"vuid": "VUID-VkPerformanceQuerySubmitInfoKHR-counterPassIndex-03221",
"text": " <code>counterPassIndex</code> <strong class=\"purple\">must</strong> be less than the number of counter passes required by any queries within the batch. The required number of counter passes for a performance query is obtained by calling <a href=\"#vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR\">vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR</a>"
},
{
"vuid": "VUID-VkPerformanceQuerySubmitInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR</code>"
}
]
},
"vkCmdExecuteCommands": {
"core": [
{
"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 <a href=\"#commandbuffers-lifecycle\">pending or executable state</a>"
},
{
"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 <a href=\"#commandbuffers-lifecycle\">pending state</a>"
},
{
"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-&gt;pInheritanceInfo-&gt;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 <a href=\"#renderpass-compatibility\">compatible</a> 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 <a href=\"#VkCommandBufferInheritanceInfo\">VkCommandBufferInheritanceInfo</a>::<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 <a href=\"#features-inheritedQueries\">inherited queries</a> feature is not enabled, <code>commandBuffer</code> <strong class=\"purple\">must</strong> not have any queries <a href=\"#queries-operation-active\">active</a>"
},
{
"vuid": "VUID-vkCmdExecuteCommands-commandBuffer-00102",
"text": " If <code>commandBuffer</code> has a <code>VK_QUERY_TYPE_OCCLUSION</code> query <a href=\"#queries-operation-active\">active</a>, 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 <a href=\"#queries-operation-active\">active</a>, 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 <a href=\"#queries-operation-active\">active</a>, 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 <a href=\"#queries-operation-active\">active</a> in <code>commandBuffer</code>"
},
{
"vuid": "VUID-vkCmdExecuteCommands-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> 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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handles"
},
{
"vuid": "VUID-vkCmdExecuteCommands-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(VK_QCOM_render_pass_transform)": [
{
"vuid": "VUID-vkCmdExecuteCommands-pNext-02865",
"text": " If <code>vkCmdExecuteCommands</code> is being called within a render pass instance that included <a href=\"#VkRenderPassTransformBeginInfoQCOM\">VkRenderPassTransformBeginInfoQCOM</a> in the <code>pNext</code> chain of <a href=\"#VkRenderPassBeginInfo\">VkRenderPassBeginInfo</a>, then each element of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> have been recorded with <a href=\"#VkCommandBufferInheritanceRenderPassTransformInfoQCOM\">VkCommandBufferInheritanceRenderPassTransformInfoQCOM</a> in the <code>pNext</code> chain of <a href=\"#VkCommandBufferBeginInfo\">VkCommandBufferBeginInfo</a>"
},
{
"vuid": "VUID-vkCmdExecuteCommands-pNext-02866",
"text": " If <code>vkCmdExecuteCommands</code> is being called within a render pass instance that included <a href=\"#VkRenderPassTransformBeginInfoQCOM\">VkRenderPassTransformBeginInfoQCOM</a> in the <code>pNext</code> chain of <a href=\"#VkRenderPassBeginInfo\">VkRenderPassBeginInfo</a>, then each element of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> have been recorded with <a href=\"#VkCommandBufferInheritanceRenderPassTransformInfoQCOM\">VkCommandBufferInheritanceRenderPassTransformInfoQCOM</a>::<code>transform</code> identical to <a href=\"#VkRenderPassTransformBeginInfoQCOM\">VkRenderPassTransformBeginInfoQCOM</a>::<code>transform</code>"
},
{
"vuid": "VUID-vkCmdExecuteCommands-pNext-02867",
"text": " If <code>vkCmdExecuteCommands</code> is being called within a render pass instance that included <a href=\"#VkRenderPassTransformBeginInfoQCOM\">VkRenderPassTransformBeginInfoQCOM</a> in the <code>pNext</code> chain of <a href=\"#VkRenderPassBeginInfo\">VkRenderPassBeginInfo</a>, then each element of <code>pCommandBuffers</code> <strong class=\"purple\">must</strong> have been recorded with <a href=\"#VkCommandBufferInheritanceRenderPassTransformInfoQCOM\">VkCommandBufferInheritanceRenderPassTransformInfoQCOM</a>::<code>renderArea</code> identical to <a href=\"#VkRenderPassBeginInfo\">VkRenderPassBeginInfo</a>::<code>renderArea</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"
}
],
"(VK_EXT_transform_feedback)": [
{
"vuid": "VUID-vkCmdExecuteCommands-None-02286",
"text": " This command <strong class=\"purple\">must</strong> not be recorded when transform feedback is active"
}
]
},
"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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdSetDeviceMask-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkCreateFence-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkFenceCreateInfo\">VkFenceCreateInfo</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateFence-pFence-parameter",
"text": " <code>pFence</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkFence\">VkFence</a> 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": " The <code>sType</code> value of each struct 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> <strong class=\"purple\">must</strong> 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>, a <code>VkExportFenceWin32HandleInfoKHR</code> structure <strong class=\"purple\">must</strong> not be included 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetFenceWin32HandleKHR-pGetWin32HandleInfo-parameter",
"text": " <code>pGetWin32HandleInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkFenceGetWin32HandleInfoKHR\">VkFenceGetWin32HandleInfoKHR</a> 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 <a href=\"#synchronization-fences-importing\">Importing Fence Payloads</a> 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 <a href=\"#synchronization-fences-signaling\">fence signal operation</a> 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 <a href=\"#VkFence\">VkFence</a> 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetFenceFdKHR-pGetFdInfo-parameter",
"text": " <code>pGetFdInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkFenceGetFdInfoKHR\">VkFenceGetFdInfoKHR</a> structure"
},
{
"vuid": "VUID-vkGetFenceFdKHR-pFd-parameter",
"text": " <code>pFd</code> <strong class=\"purple\">must</strong> be a valid pointer to an <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 <a href=\"#synchronization-fences-signaling\">fence signal operation</a> 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 <a href=\"#synchronization-fences-importing\">Importing Fence Payloads</a> 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 <a href=\"#VkFence\">VkFence</a> 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 <a href=\"#devsandqueues-submission\">queue submission</a> 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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkFence\">VkFence</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetFenceStatus-fence-parameter",
"text": " <code>fence</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFence\">VkFence</a> 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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkFence\">VkFence</a> 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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkFence\">VkFence</a> 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkRegisterDeviceEventEXT-pDeviceEventInfo-parameter",
"text": " <code>pDeviceEventInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkDeviceEventInfoEXT\">VkDeviceEventInfoEXT</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkRegisterDeviceEventEXT-pFence-parameter",
"text": " <code>pFence</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkFence\">VkFence</a> 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkRegisterDisplayEventEXT-display-parameter",
"text": " <code>display</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDisplayKHR\">VkDisplayKHR</a> handle"
},
{
"vuid": "VUID-vkRegisterDisplayEventEXT-pDisplayEventInfo-parameter",
"text": " <code>pDisplayEventInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkDisplayEventInfoEXT\">VkDisplayEventInfoEXT</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkRegisterDisplayEventEXT-pFence-parameter",
"text": " <code>pFence</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkFence\">VkFence</a> handle"
},
{
"vuid": "VUID-vkRegisterDisplayEventEXT-commonparent",
"text": " Both of <code>device</code>, and <code>display</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a>"
}
]
},
"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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkImportFenceWin32HandleKHR-pImportFenceWin32HandleInfo-parameter",
"text": " <code>pImportFenceWin32HandleInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkImportFenceWin32HandleInfoKHR\">VkImportFenceWin32HandleInfoKHR</a> 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 <a href=\"#synchronization-fence-handletypes-win32\">Handle Types Supported by <code>VkImportFenceWin32HandleInfoKHR</code></a> 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> <strong class=\"purple\">must</strong> 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 <a href=\"#VkFence\">VkFence</a> 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkImportFenceFdKHR-pImportFenceFdInfo-parameter",
"text": " <code>pImportFenceFdInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkImportFenceFdInfoKHR\">VkImportFenceFdInfoKHR</a> 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 <a href=\"#synchronization-fence-handletypes-fd\">Handle Types Supported by <code>VkImportFenceFdInfoKHR</code></a> table"
},
{
"vuid": "VUID-VkImportFenceFdInfoKHR-fd-01541",
"text": " <code>fd</code> <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-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 <a href=\"#VkFence\">VkFence</a> 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkCreateSemaphore-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkSemaphoreCreateInfo\">VkSemaphoreCreateInfo</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateSemaphore-pSemaphore-parameter",
"text": " <code>pSemaphore</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkSemaphore\">VkSemaphore</a> 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>, <a href=\"#VkExportSemaphoreWin32HandleInfoKHR\">VkExportSemaphoreWin32HandleInfoKHR</a>, or <a href=\"#VkSemaphoreTypeCreateInfo\">VkSemaphoreTypeCreateInfo</a>"
},
{
"vuid": "VUID-VkSemaphoreCreateInfo-sType-unique",
"text": " The <code>sType</code> value of each struct 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>"
}
]
},
"VkSemaphoreTypeCreateInfo": {
"(VK_VERSION_1_2,VK_KHR_timeline_semaphore)": [
{
"vuid": "VUID-VkSemaphoreTypeCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkSemaphoreTypeCreateInfo-semaphoreType-parameter",
"text": " <code>semaphoreType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSemaphoreType\">VkSemaphoreType</a> value"
},
{
"vuid": "VUID-VkSemaphoreTypeCreateInfo-timelineSemaphore-03252",
"text": " If the <a href=\"#features-timelineSemaphore\"><code>timelineSemaphore</code></a> feature is not enabled, <code>semaphoreType</code> <strong class=\"purple\">must</strong> not equal <code>VK_SEMAPHORE_TYPE_TIMELINE</code>"
},
{
"vuid": "VUID-VkSemaphoreTypeCreateInfo-semaphoreType-03279",
"text": " If <code>semaphoreType</code> is <code>VK_SEMAPHORE_TYPE_BINARY</code>, <code>initialValue</code> <strong class=\"purple\">must</strong> be zero"
}
]
},
"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 included 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetSemaphoreWin32HandleKHR-pGetWin32HandleInfo-parameter",
"text": " <code>pGetWin32HandleInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkSemaphoreGetWin32HandleInfoKHR\">VkSemaphoreGetWin32HandleInfoKHR</a> 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 <a href=\"#synchronization-semaphores-importing\">Importing Semaphore Payloads</a> 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 <a href=\"#synchronization-semaphores-importing\">Importing Semaphore Payloads</a>, 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 <a href=\"#synchronization-semaphores-signaling\">semaphore signal operation</a> 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 <a href=\"#VkSemaphore\">VkSemaphore</a> 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetSemaphoreFdKHR-pGetFdInfo-parameter",
"text": " <code>pGetFdInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkSemaphoreGetFdInfoKHR\">VkSemaphoreGetFdInfoKHR</a> structure"
},
{
"vuid": "VUID-vkGetSemaphoreFdKHR-pFd-parameter",
"text": " <code>pFd</code> <strong class=\"purple\">must</strong> be a valid pointer to an <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 <a href=\"#synchronization-semaphores-importing\">Importing Semaphore Payloads</a> 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 <a href=\"#synchronization-semaphores-importing\">Importing Semaphore Payloads</a>, 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 <a href=\"#synchronization-semaphores-signaling\">semaphore signal operation</a> 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 <a href=\"#VkSemaphore\">VkSemaphore</a> handle"
},
{
"vuid": "VUID-VkSemaphoreGetFdInfoKHR-handleType-parameter",
"text": " <code>handleType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkExternalSemaphoreHandleTypeFlagBits\">VkExternalSemaphoreHandleTypeFlagBits</a> value"
}
],
"(VK_KHR_external_semaphore_fd)+(VK_VERSION_1_2,VK_KHR_timeline_semaphore)": [
{
"vuid": "VUID-VkSemaphoreGetFdInfoKHR-handleType-03253",
"text": " If <code>handleType</code> refers to a handle type with copy payload transference semantics, <code>semaphore</code> <strong class=\"purple\">must</strong> have been created with a <a href=\"#VkSemaphoreType\">VkSemaphoreType</a> of <code>VK_SEMAPHORE_TYPE_BINARY</code>"
},
{
"vuid": "VUID-VkSemaphoreGetFdInfoKHR-handleType-03254",
"text": " If <code>handleType</code> refers to a handle type with copy payload transference semantics, <code>semaphore</code> <strong class=\"purple\">must</strong> have an associated semaphore signal operation that has been submitted for execution and any semaphore signal operations on which it depends (if any) <strong class=\"purple\">must</strong> have also been submitted for execution"
}
]
},
"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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkSemaphore\">VkSemaphore</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> 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>"
}
]
},
"vkGetSemaphoreCounterValue": {
"(VK_VERSION_1_2,VK_KHR_timeline_semaphore)": [
{
"vuid": "VUID-vkGetSemaphoreCounterValue-semaphore-03255",
"text": " <code>semaphore</code> <strong class=\"purple\">must</strong> have been created with a <a href=\"#VkSemaphoreType\">VkSemaphoreType</a> of <code>VK_SEMAPHORE_TYPE_TIMELINE</code>"
},
{
"vuid": "VUID-vkGetSemaphoreCounterValue-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetSemaphoreCounterValue-semaphore-parameter",
"text": " <code>semaphore</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSemaphore\">VkSemaphore</a> handle"
},
{
"vuid": "VUID-vkGetSemaphoreCounterValue-pValue-parameter",
"text": " <code>pValue</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint64_t</code> value"
},
{
"vuid": "VUID-vkGetSemaphoreCounterValue-semaphore-parent",
"text": " <code>semaphore</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkWaitSemaphores": {
"(VK_VERSION_1_2,VK_KHR_timeline_semaphore)": [
{
"vuid": "VUID-vkWaitSemaphores-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkWaitSemaphores-pWaitInfo-parameter",
"text": " <code>pWaitInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkSemaphoreWaitInfo\">VkSemaphoreWaitInfo</a> structure"
}
]
},
"VkSemaphoreWaitInfo": {
"(VK_VERSION_1_2,VK_KHR_timeline_semaphore)": [
{
"vuid": "VUID-VkSemaphoreWaitInfo-pSemaphores-03256",
"text": " All of the elements of <code>pSemaphores</code> <strong class=\"purple\">must</strong> reference a semaphore that was created with a <a href=\"#VkSemaphoreType\">VkSemaphoreType</a> of <code>VK_SEMAPHORE_TYPE_TIMELINE</code>"
},
{
"vuid": "VUID-VkSemaphoreWaitInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO</code>"
},
{
"vuid": "VUID-VkSemaphoreWaitInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkSemaphoreWaitInfo-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkSemaphoreWaitFlagBits\">VkSemaphoreWaitFlagBits</a> values"
},
{
"vuid": "VUID-VkSemaphoreWaitInfo-pSemaphores-parameter",
"text": " <code>pSemaphores</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>semaphoreCount</code> valid <a href=\"#VkSemaphore\">VkSemaphore</a> handles"
},
{
"vuid": "VUID-VkSemaphoreWaitInfo-pValues-parameter",
"text": " <code>pValues</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>semaphoreCount</code> <code>uint64_t</code> values"
},
{
"vuid": "VUID-VkSemaphoreWaitInfo-semaphoreCount-arraylength",
"text": " <code>semaphoreCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"vkSignalSemaphore": {
"(VK_VERSION_1_2,VK_KHR_timeline_semaphore)": [
{
"vuid": "VUID-vkSignalSemaphore-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkSignalSemaphore-pSignalInfo-parameter",
"text": " <code>pSignalInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkSemaphoreSignalInfo\">VkSemaphoreSignalInfo</a> structure"
}
]
},
"VkSemaphoreSignalInfo": {
"(VK_VERSION_1_2,VK_KHR_timeline_semaphore)": [
{
"vuid": "VUID-VkSemaphoreSignalInfo-semaphore-03257",
"text": " <code>semaphore</code> <strong class=\"purple\">must</strong> have been created with a <a href=\"#VkSemaphoreType\">VkSemaphoreType</a> of <code>VK_SEMAPHORE_TYPE_TIMELINE</code>"
},
{
"vuid": "VUID-VkSemaphoreSignalInfo-value-03258",
"text": " <code>value</code> <strong class=\"purple\">must</strong> have a value greater than the current value of the semaphore"
},
{
"vuid": "VUID-VkSemaphoreSignalInfo-value-03259",
"text": " <code>value</code> <strong class=\"purple\">must</strong> be less than the value of any pending semaphore signal operations"
},
{
"vuid": "VUID-VkSemaphoreSignalInfo-value-03260",
"text": " <code>value</code> <strong class=\"purple\">must</strong> have a value which does not differ from the current value of the semaphore or the value of any outstanding semaphore wait or signal operation on <code>semaphore</code> by more than <a href=\"#limits-maxTimelineSemaphoreValueDifference\"><code>maxTimelineSemaphoreValueDifference</code></a>"
},
{
"vuid": "VUID-VkSemaphoreSignalInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO</code>"
},
{
"vuid": "VUID-VkSemaphoreSignalInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkSemaphoreSignalInfo-semaphore-parameter",
"text": " <code>semaphore</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSemaphore\">VkSemaphore</a> handle"
}
]
},
"vkImportSemaphoreWin32HandleKHR": {
"(VK_KHR_external_semaphore_win32)": [
{
"vuid": "VUID-vkImportSemaphoreWin32HandleKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkImportSemaphoreWin32HandleKHR-pImportSemaphoreWin32HandleInfo-parameter",
"text": " <code>pImportSemaphoreWin32HandleInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkImportSemaphoreWin32HandleInfoKHR\">VkImportSemaphoreWin32HandleInfoKHR</a> 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 <a href=\"#synchronization-semaphore-handletypes-win32\">Handle Types Supported by <code>VkImportSemaphoreWin32HandleInfoKHR</code></a> 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> <strong class=\"purple\">must</strong> 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-handleType-03261",
"text": " If <code>handleType</code> is <code>VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT</code> or <code>VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT</code>, the <a href=\"#VkSemaphoreCreateInfo\">VkSemaphoreCreateInfo</a>::<code>flags</code> field <strong class=\"purple\">must</strong> match that of the semaphore from which <code>handle</code> or <code>name</code> was exported"
},
{
"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 <a href=\"#VkSemaphore\">VkSemaphore</a> 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"
}
],
"(VK_KHR_external_semaphore_win32)+(VK_VERSION_1_2,VK_KHR_timeline_semaphore)": [
{
"vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-03262",
"text": " If <code>handleType</code> is <code>VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT</code> or <code>VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT</code>, the <a href=\"#VkSemaphoreTypeCreateInfo\">VkSemaphoreTypeCreateInfo</a>::<code>semaphoreType</code> field <strong class=\"purple\">must</strong> match that of the semaphore from which <code>handle</code> or <code>name</code> was exported"
},
{
"vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-flags-03322",
"text": " If <code>flags</code> contains <code>VK_SEMAPHORE_IMPORT_TEMPORARY_BIT</code>, the <a href=\"#VkSemaphoreTypeCreateInfo\">VkSemaphoreTypeCreateInfo</a>::<code>semaphoreType</code> field of the semaphore from which <code>handle</code> or <code>name</code> was exported <strong class=\"purple\">must</strong> not be <code>VK_SEMAPHORE_TYPE_TIMELINE</code>"
}
]
},
"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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkImportSemaphoreFdKHR-pImportSemaphoreFdInfo-parameter",
"text": " <code>pImportSemaphoreFdInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkImportSemaphoreFdInfoKHR\">VkImportSemaphoreFdInfoKHR</a> 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 <a href=\"#synchronization-semaphore-handletypes-fd\">Handle Types Supported by <code>VkImportSemaphoreFdInfoKHR</code></a> table"
},
{
"vuid": "VUID-VkImportSemaphoreFdInfoKHR-fd-01544",
"text": " <code>fd</code> <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-VkImportSemaphoreFdInfoKHR-handleType-03263",
"text": " If <code>handleType</code> is <code>VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT</code>, the <a href=\"#VkSemaphoreCreateInfo\">VkSemaphoreCreateInfo</a>::<code>flags</code> field <strong class=\"purple\">must</strong> match that of the semaphore from which <code>fd</code> was exported"
},
{
"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 <a href=\"#VkSemaphore\">VkSemaphore</a> 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"
}
],
"(VK_KHR_external_semaphore_fd)+(VK_VERSION_1_2,VK_KHR_timeline_semaphore)": [
{
"vuid": "VUID-VkImportSemaphoreFdInfoKHR-handleType-03264",
"text": " If <code>handleType</code> is <code>VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT</code>, the <a href=\"#VkSemaphoreTypeCreateInfo\">VkSemaphoreTypeCreateInfo</a>::<code>semaphoreType</code> field <strong class=\"purple\">must</strong> match that of the semaphore from which <code>fd</code> was exported"
},
{
"vuid": "VUID-VkImportSemaphoreFdInfoKHR-flags-03323",
"text": " If <code>flags</code> contains <code>VK_SEMAPHORE_IMPORT_TEMPORARY_BIT</code>, the <a href=\"#VkSemaphoreTypeCreateInfo\">VkSemaphoreTypeCreateInfo</a>::<code>semaphoreType</code> field of the semaphore from which <code>fd</code> was exported <strong class=\"purple\">must</strong> not be <code>VK_SEMAPHORE_TYPE_TIMELINE</code>"
}
]
},
"vkCreateEvent": {
"core": [
{
"vuid": "VUID-vkCreateEvent-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkCreateEvent-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkEventCreateInfo\">VkEventCreateInfo</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateEvent-pEvent-parameter",
"text": " <code>pEvent</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkEvent\">VkEvent</a> 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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkEvent\">VkEvent</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetEventStatus-event-parameter",
"text": " <code>event</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkEvent\">VkEvent</a> 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkSetEvent-event-parameter",
"text": " <code>event</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkEvent\">VkEvent</a> 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkResetEvent-event-parameter",
"text": " <code>event</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkEvent\">VkEvent</a> 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-04090",
"text": " If the <a href=\"#features-geometryShader\">geometry shaders</a> feature is not enabled, pname:stageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT</code>"
},
{
"vuid": "VUID-vkCmdSetEvent-stageMask-04091",
"text": " If the <a href=\"#features-tessellationShader\">tessellation shaders</a> feature is not enabled, pname:stageMask <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-stageMask-4098",
"text": " Any pipeline stage included in pname:stageMask <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 <a href=\"#synchronization-pipeline-stages-supported\">table of supported pipeline stages</a>"
},
{
"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-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdSetEvent-event-parameter",
"text": " <code>event</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkEvent\">VkEvent</a> 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 <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(VK_EXT_conditional_rendering)": [
{
"vuid": "VUID-vkCmdSetEvent-stageMask-04092",
"text": " If the <a href=\"#features-conditionalRendering\">conditional rendering</a> feature is not enabled, pname:stageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT</code>"
}
],
"(VK_EXT_fragment_density_map)": [
{
"vuid": "VUID-vkCmdSetEvent-stageMask-04093",
"text": " If the <a href=\"#features-fragmentDensityMap\">fragment density map</a> feature is not enabled, pname:stageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT</code>"
}
],
"(VK_EXT_transform_feedback)": [
{
"vuid": "VUID-vkCmdSetEvent-stageMask-04094",
"text": " If the <a href=\"#features-transformFeedback\">transform feedback</a> feature is not enabled, pname:stageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT</code>"
}
],
"(VK_NV_mesh_shader)": [
{
"vuid": "VUID-vkCmdSetEvent-stageMask-04095",
"text": " If the <a href=\"#features-meshShader\">mesh shaders</a> feature is not enabled, pname:stageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV</code>"
},
{
"vuid": "VUID-vkCmdSetEvent-stageMask-04096",
"text": " If the <a href=\"#features-taskShader\">task shaders</a> feature is not enabled, pname:stageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV</code>"
}
],
"(VK_NV_shading_rate_image)": [
{
"vuid": "VUID-vkCmdSetEvent-stageMask-04097",
"text": " If the <a href=\"#features-shadingRateImage\">shading rate image</a> feature is not enabled, pname:stageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV</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-04090",
"text": " If the <a href=\"#features-geometryShader\">geometry shaders</a> feature is not enabled, pname:stageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT</code>"
},
{
"vuid": "VUID-vkCmdResetEvent-stageMask-04091",
"text": " If the <a href=\"#features-tessellationShader\">tessellation shaders</a> feature is not enabled, pname:stageMask <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-stageMask-4098",
"text": " Any pipeline stage included in pname:stageMask <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 <a href=\"#synchronization-pipeline-stages-supported\">table of supported pipeline stages</a>"
},
{
"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-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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdResetEvent-event-parameter",
"text": " <code>event</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkEvent\">VkEvent</a> 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 <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(VK_EXT_conditional_rendering)": [
{
"vuid": "VUID-vkCmdResetEvent-stageMask-04092",
"text": " If the <a href=\"#features-conditionalRendering\">conditional rendering</a> feature is not enabled, pname:stageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT</code>"
}
],
"(VK_EXT_fragment_density_map)": [
{
"vuid": "VUID-vkCmdResetEvent-stageMask-04093",
"text": " If the <a href=\"#features-fragmentDensityMap\">fragment density map</a> feature is not enabled, pname:stageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT</code>"
}
],
"(VK_EXT_transform_feedback)": [
{
"vuid": "VUID-vkCmdResetEvent-stageMask-04094",
"text": " If the <a href=\"#features-transformFeedback\">transform feedback</a> feature is not enabled, pname:stageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT</code>"
}
],
"(VK_NV_mesh_shader)": [
{
"vuid": "VUID-vkCmdResetEvent-stageMask-04095",
"text": " If the <a href=\"#features-meshShader\">mesh shaders</a> feature is not enabled, pname:stageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV</code>"
},
{
"vuid": "VUID-vkCmdResetEvent-stageMask-04096",
"text": " If the <a href=\"#features-taskShader\">task shaders</a> feature is not enabled, pname:stageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV</code>"
}
],
"(VK_NV_shading_rate_image)": [
{
"vuid": "VUID-vkCmdResetEvent-stageMask-04097",
"text": " If the <a href=\"#features-shadingRateImage\">shading rate image</a> feature is not enabled, pname:stageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV</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-04090",
"text": " If the <a href=\"#features-geometryShader\">geometry shaders</a> feature is not enabled, pname:srcStageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT</code>"
},
{
"vuid": "VUID-vkCmdWaitEvents-srcStageMask-04091",
"text": " If the <a href=\"#features-tessellationShader\">tessellation shaders</a> feature is not enabled, pname:srcStageMask <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-srcStageMask-4098",
"text": " Any pipeline stage included in pname:srcStageMask <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 <a href=\"#synchronization-pipeline-stages-supported\">table of supported pipeline stages</a>"
},
{
"vuid": "VUID-vkCmdWaitEvents-dstStageMask-04090",
"text": " If the <a href=\"#features-geometryShader\">geometry shaders</a> feature is not enabled, pname:dstStageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT</code>"
},
{
"vuid": "VUID-vkCmdWaitEvents-dstStageMask-04091",
"text": " If the <a href=\"#features-tessellationShader\">tessellation shaders</a> feature is not enabled, pname:dstStageMask <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-4098",
"text": " Any pipeline stage included in pname:dstStageMask <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 <a href=\"#synchronization-pipeline-stages-supported\">table of supported pipeline stages</a>"
},
{
"vuid": "VUID-vkCmdWaitEvents-srcAccessMask-02815",
"text": " The <code>srcAccessMask</code> member of each element of <code>pMemoryBarriers</code> <strong class=\"purple\">must</strong> only include access flags that are supported by one or more of the pipeline stages in <code>srcStageMask</code>, as specified in the <a href=\"#synchronization-access-types-supported\">table of supported access types</a>"
},
{
"vuid": "VUID-vkCmdWaitEvents-dstAccessMask-02816",
"text": " The <code>dstAccessMask</code> member of each element of <code>pMemoryBarriers</code> <strong class=\"purple\">must</strong> only include access flags that are supported by one or more of the pipeline stages in <code>dstStageMask</code>, as specified in the <a href=\"#synchronization-access-types-supported\">table of supported access types</a>"
},
{
"vuid": "VUID-vkCmdWaitEvents-pBufferMemoryBarriers-02817",
"text": " For any element of <code>pBufferMemoryBarriers</code>, if its <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> members are equal, or if its <code>srcQueueFamilyIndex</code> is the queue family index that was used to create the command pool that <code>commandBuffer</code> was allocated from, then its <code>srcAccessMask</code> member <strong class=\"purple\">must</strong> only contain access flags that are supported by one or more of the pipeline stages in <code>srcStageMask</code>, as specified in the <a href=\"#synchronization-access-types-supported\">table of supported access types</a>"
},
{
"vuid": "VUID-vkCmdWaitEvents-pBufferMemoryBarriers-02818",
"text": " For any element of <code>pBufferMemoryBarriers</code>, if its <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> members are equal, or if its <code>dstQueueFamilyIndex</code> is the queue family index that was used to create the command pool that <code>commandBuffer</code> was allocated from, then its <code>dstAccessMask</code> member <strong class=\"purple\">must</strong> only contain access flags that are supported by one or more of the pipeline stages in <code>dstStageMask</code>, as specified in the <a href=\"#synchronization-access-types-supported\">table of supported access types</a>"
},
{
"vuid": "VUID-vkCmdWaitEvents-pImageMemoryBarriers-02819",
"text": " For any element of <code>pImageMemoryBarriers</code>, if its <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> members are equal, or if its <code>srcQueueFamilyIndex</code> is the queue family index that was used to create the command pool that <code>commandBuffer</code> was allocated from, then its <code>srcAccessMask</code> member <strong class=\"purple\">must</strong> only contain access flags that are supported by one or more of the pipeline stages in <code>srcStageMask</code>, as specified in the <a href=\"#synchronization-access-types-supported\">table of supported access types</a>"
},
{
"vuid": "VUID-vkCmdWaitEvents-pImageMemoryBarriers-02820",
"text": " For any element of <code>pImageMemoryBarriers</code>, if its <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> members are equal, or if its <code>dstQueueFamilyIndex</code> is the queue family index that was used to create the command pool that <code>commandBuffer</code> was allocated from, then its <code>dstAccessMask</code> member <strong class=\"purple\">must</strong> only contain access flags that are supported by one or more of the pipeline stages in <code>dstStageMask</code>, as specified in the <a href=\"#synchronization-access-types-supported\">table of supported access types</a>"
},
{
"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-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-srcQueueFamilyIndex-02803",
"text": " The <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> members of any element of <code>pBufferMemoryBarriers</code> or <code>pImageMemoryBarriers</code> <strong class=\"purple\">must</strong> be equal"
},
{
"vuid": "VUID-vkCmdWaitEvents-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> 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 <a href=\"#VkEvent\">VkEvent</a> 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 <a href=\"#VkMemoryBarrier\">VkMemoryBarrier</a> 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 <a href=\"#VkBufferMemoryBarrier\">VkBufferMemoryBarrier</a> 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 <a href=\"#VkImageMemoryBarrier\">VkImageMemoryBarrier</a> structures"
},
{
"vuid": "VUID-vkCmdWaitEvents-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(VK_EXT_conditional_rendering)": [
{
"vuid": "VUID-vkCmdWaitEvents-srcStageMask-04092",
"text": " If the <a href=\"#features-conditionalRendering\">conditional rendering</a> feature is not enabled, pname:srcStageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT</code>"
},
{
"vuid": "VUID-vkCmdWaitEvents-dstStageMask-04092",
"text": " If the <a href=\"#features-conditionalRendering\">conditional rendering</a> feature is not enabled, pname:dstStageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT</code>"
}
],
"(VK_EXT_fragment_density_map)": [
{
"vuid": "VUID-vkCmdWaitEvents-srcStageMask-04093",
"text": " If the <a href=\"#features-fragmentDensityMap\">fragment density map</a> feature is not enabled, pname:srcStageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT</code>"
},
{
"vuid": "VUID-vkCmdWaitEvents-dstStageMask-04093",
"text": " If the <a href=\"#features-fragmentDensityMap\">fragment density map</a> feature is not enabled, pname:dstStageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT</code>"
}
],
"(VK_EXT_transform_feedback)": [
{
"vuid": "VUID-vkCmdWaitEvents-srcStageMask-04094",
"text": " If the <a href=\"#features-transformFeedback\">transform feedback</a> feature is not enabled, pname:srcStageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT</code>"
},
{
"vuid": "VUID-vkCmdWaitEvents-dstStageMask-04094",
"text": " If the <a href=\"#features-transformFeedback\">transform feedback</a> feature is not enabled, pname:dstStageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT</code>"
}
],
"(VK_NV_mesh_shader)": [
{
"vuid": "VUID-vkCmdWaitEvents-srcStageMask-04095",
"text": " If the <a href=\"#features-meshShader\">mesh shaders</a> feature is not enabled, pname:srcStageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV</code>"
},
{
"vuid": "VUID-vkCmdWaitEvents-srcStageMask-04096",
"text": " If the <a href=\"#features-taskShader\">task shaders</a> feature is not enabled, pname:srcStageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV</code>"
},
{
"vuid": "VUID-vkCmdWaitEvents-dstStageMask-04095",
"text": " If the <a href=\"#features-meshShader\">mesh shaders</a> feature is not enabled, pname:dstStageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV</code>"
},
{
"vuid": "VUID-vkCmdWaitEvents-dstStageMask-04096",
"text": " If the <a href=\"#features-taskShader\">task shaders</a> feature is not enabled, pname:dstStageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV</code>"
}
],
"(VK_NV_shading_rate_image)": [
{
"vuid": "VUID-vkCmdWaitEvents-srcStageMask-04097",
"text": " If the <a href=\"#features-shadingRateImage\">shading rate image</a> feature is not enabled, pname:srcStageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV</code>"
},
{
"vuid": "VUID-vkCmdWaitEvents-dstStageMask-04097",
"text": " If the <a href=\"#features-shadingRateImage\">shading rate image</a> feature is not enabled, pname:dstStageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV</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-04090",
"text": " If the <a href=\"#features-geometryShader\">geometry shaders</a> feature is not enabled, pname:srcStageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT</code>"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-04091",
"text": " If the <a href=\"#features-tessellationShader\">tessellation shaders</a> feature is not enabled, pname:srcStageMask <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-srcStageMask-4098",
"text": " Any pipeline stage included in pname:srcStageMask <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 <a href=\"#synchronization-pipeline-stages-supported\">table of supported pipeline stages</a>"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-dstStageMask-04090",
"text": " If the <a href=\"#features-geometryShader\">geometry shaders</a> feature is not enabled, pname:dstStageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT</code>"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-dstStageMask-04091",
"text": " If the <a href=\"#features-tessellationShader\">tessellation shaders</a> feature is not enabled, pname:dstStageMask <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-4098",
"text": " Any pipeline stage included in pname:dstStageMask <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 <a href=\"#synchronization-pipeline-stages-supported\">table of supported pipeline stages</a>"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-srcAccessMask-02815",
"text": " The <code>srcAccessMask</code> member of each element of <code>pMemoryBarriers</code> <strong class=\"purple\">must</strong> only include access flags that are supported by one or more of the pipeline stages in <code>srcStageMask</code>, as specified in the <a href=\"#synchronization-access-types-supported\">table of supported access types</a>"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-dstAccessMask-02816",
"text": " The <code>dstAccessMask</code> member of each element of <code>pMemoryBarriers</code> <strong class=\"purple\">must</strong> only include access flags that are supported by one or more of the pipeline stages in <code>dstStageMask</code>, as specified in the <a href=\"#synchronization-access-types-supported\">table of supported access types</a>"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-pBufferMemoryBarriers-02817",
"text": " For any element of <code>pBufferMemoryBarriers</code>, if its <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> members are equal, or if its <code>srcQueueFamilyIndex</code> is the queue family index that was used to create the command pool that <code>commandBuffer</code> was allocated from, then its <code>srcAccessMask</code> member <strong class=\"purple\">must</strong> only contain access flags that are supported by one or more of the pipeline stages in <code>srcStageMask</code>, as specified in the <a href=\"#synchronization-access-types-supported\">table of supported access types</a>"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-pBufferMemoryBarriers-02818",
"text": " For any element of <code>pBufferMemoryBarriers</code>, if its <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> members are equal, or if its <code>dstQueueFamilyIndex</code> is the queue family index that was used to create the command pool that <code>commandBuffer</code> was allocated from, then its <code>dstAccessMask</code> member <strong class=\"purple\">must</strong> only contain access flags that are supported by one or more of the pipeline stages in <code>dstStageMask</code>, as specified in the <a href=\"#synchronization-access-types-supported\">table of supported access types</a>"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-pImageMemoryBarriers-02819",
"text": " For any element of <code>pImageMemoryBarriers</code>, if its <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> members are equal, or if its <code>srcQueueFamilyIndex</code> is the queue family index that was used to create the command pool that <code>commandBuffer</code> was allocated from, then its <code>srcAccessMask</code> member <strong class=\"purple\">must</strong> only contain access flags that are supported by one or more of the pipeline stages in <code>srcStageMask</code>, as specified in the <a href=\"#synchronization-access-types-supported\">table of supported access types</a>"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-pImageMemoryBarriers-02820",
"text": " For any element of <code>pImageMemoryBarriers</code>, if its <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> members are equal, or if its <code>dstQueueFamilyIndex</code> is the queue family index that was used to create the command pool that <code>commandBuffer</code> was allocated from, then its <code>dstAccessMask</code> member <strong class=\"purple\">must</strong> only contain access flags that are supported by one or more of the pipeline stages in <code>dstStageMask</code>, as specified in the <a href=\"#synchronization-access-types-supported\">table of supported access types</a>"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-pDependencies-02285",
"text": " If fname:vkCmdPipelineBarrier is called within a render pass instance, the render pass <strong class=\"purple\">must</strong> have been created with at least one <a href=\"#VkSubpassDependency\">VkSubpassDependency</a> instance in <code>VkRenderPassCreateInfo</code>::<code>pDependencies</code> that expresses a dependency from the current subpass to itself, with <a href=\"#synchronization-dependencies-scopes\">synchronization scopes</a> and <a href=\"#synchronization-dependencies-access-scopes\">access scopes</a> that are all supersets of the scopes defined in this command"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-bufferMemoryBarrierCount-01178",
"text": " If fname:vkCmdPipelineBarrier is called within a render pass instance, it <strong class=\"purple\">must</strong> not include any buffer memory barriers"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-image-04073",
"text": " If fname:vkCmdPipelineBarrier is called within a render pass instance, the <code>image</code> member of any image memory barrier included in this command <strong class=\"purple\">must</strong> be an attachment used in the current subpass both as an input attachment, and as either a color or depth/stencil attachment"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-oldLayout-01181",
"text": " If fname:vkCmdPipelineBarrier is called within a render pass instance, the <code>oldLayout</code> and <code>newLayout</code> members of any image memory barrier included in this command <strong class=\"purple\">must</strong> be equal"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-srcQueueFamilyIndex-01182",
"text": " If fname:vkCmdPipelineBarrier is called within a render pass instance, the <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> members of any image memory barrier included in this command <strong class=\"purple\">must</strong> be equal"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> 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 <a href=\"#VkMemoryBarrier\">VkMemoryBarrier</a> 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 <a href=\"#VkBufferMemoryBarrier\">VkBufferMemoryBarrier</a> 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 <a href=\"#VkImageMemoryBarrier\">VkImageMemoryBarrier</a> structures"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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_EXT_conditional_rendering)": [
{
"vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-04092",
"text": " If the <a href=\"#features-conditionalRendering\">conditional rendering</a> feature is not enabled, pname:srcStageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT</code>"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-dstStageMask-04092",
"text": " If the <a href=\"#features-conditionalRendering\">conditional rendering</a> feature is not enabled, pname:dstStageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT</code>"
}
],
"(VK_EXT_fragment_density_map)": [
{
"vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-04093",
"text": " If the <a href=\"#features-fragmentDensityMap\">fragment density map</a> feature is not enabled, pname:srcStageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT</code>"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-dstStageMask-04093",
"text": " If the <a href=\"#features-fragmentDensityMap\">fragment density map</a> feature is not enabled, pname:dstStageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT</code>"
}
],
"(VK_EXT_transform_feedback)": [
{
"vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-04094",
"text": " If the <a href=\"#features-transformFeedback\">transform feedback</a> feature is not enabled, pname:srcStageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT</code>"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-dstStageMask-04094",
"text": " If the <a href=\"#features-transformFeedback\">transform feedback</a> feature is not enabled, pname:dstStageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT</code>"
}
],
"(VK_NV_mesh_shader)": [
{
"vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-04095",
"text": " If the <a href=\"#features-meshShader\">mesh shaders</a> feature is not enabled, pname:srcStageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV</code>"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-04096",
"text": " If the <a href=\"#features-taskShader\">task shaders</a> feature is not enabled, pname:srcStageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV</code>"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-dstStageMask-04095",
"text": " If the <a href=\"#features-meshShader\">mesh shaders</a> feature is not enabled, pname:dstStageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV</code>"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-dstStageMask-04096",
"text": " If the <a href=\"#features-taskShader\">task shaders</a> feature is not enabled, pname:dstStageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV</code>"
}
],
"(VK_NV_shading_rate_image)": [
{
"vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-04097",
"text": " If the <a href=\"#features-shadingRateImage\">shading rate image</a> feature is not enabled, pname:srcStageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV</code>"
},
{
"vuid": "VUID-vkCmdPipelineBarrier-dstStageMask-04097",
"text": " If the <a href=\"#features-shadingRateImage\">shading rate image</a> feature is not enabled, pname:dstStageMask <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-vkCmdPipelineBarrier-dependencyFlags-01186",
"text": " If fname:vkCmdPipelineBarrier is called outside of a render pass instance, <code>VK_DEPENDENCY_VIEW_LOCAL_BIT</code> <strong class=\"purple\">must</strong> not be included in the dependency flags"
}
]
},
"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-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-buffer-parameter",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
}
],
"!(VK_VERSION_1_1,VK_KHR_external_memory)": [
{
"vuid": "VUID-VkBufferMemoryBarrier-buffer-04086",
"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 equal, <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> <strong class=\"purple\">must</strong> be valid queue families"
},
{
"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>"
}
],
"(VK_VERSION_1_1,VK_KHR_external_memory)": [
{
"vuid": "VUID-VkBufferMemoryBarrier-srcQueueFamilyIndex-04087",
"text": " If <code>srcQueueFamilyIndex</code> is not equal to <code>dstQueueFamilyIndex</code>, at least one <strong class=\"purple\">must</strong> not be a special queue family reserved for external memory ownership transfers, as described in <a href=\"#synchronization-queue-transfers\">Queue Family Ownership Transfer</a>"
},
{
"vuid": "VUID-VkBufferMemoryBarrier-buffer-04088",
"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> are not equal, and one of <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> is a special queue family values reserved for external memory transfers, the other <strong class=\"purple\">must</strong> be <code>VK_QUEUE_FAMILY_IGNORED</code>"
},
{
"vuid": "VUID-VkBufferMemoryBarrier-buffer-04089",
"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 equal, <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> <strong class=\"purple\">must</strong> both be valid queue families, or one of the special queue family values reserved for external memory transfers, as described in <a href=\"#synchronization-queue-transfers\">Queue Family Ownership Transfer</a>"
},
{
"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>"
}
]
},
"VkImageMemoryBarrier": {
"core": [
{
"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-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-oldLayout-01208",
"text": " If <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> define a <a href=\"#synchronization-queue-transfers\">queue family ownership transfer</a> or <code>oldLayout</code> and <code>newLayout</code> define a <a href=\"#synchronization-image-layout-transitions\">image layout transition</a>, and <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 <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> define a <a href=\"#synchronization-queue-transfers\">queue family ownership transfer</a> or <code>oldLayout</code> and <code>newLayout</code> define a <a href=\"#synchronization-image-layout-transitions\">image layout transition</a>, and <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 <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> define a <a href=\"#synchronization-queue-transfers\">queue family ownership transfer</a> or <code>oldLayout</code> and <code>newLayout</code> define a <a href=\"#synchronization-image-layout-transitions\">image layout transition</a>, and <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 <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> define a <a href=\"#synchronization-queue-transfers\">queue family ownership transfer</a> or <code>oldLayout</code> and <code>newLayout</code> define a <a href=\"#synchronization-image-layout-transitions\">image layout transition</a>, and <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 <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> define a <a href=\"#synchronization-queue-transfers\">queue family ownership transfer</a> or <code>oldLayout</code> and <code>newLayout</code> define a <a href=\"#synchronization-image-layout-transitions\">image layout transition</a>, and <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 <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> define a <a href=\"#synchronization-queue-transfers\">queue family ownership transfer</a> or <code>oldLayout</code> and <code>newLayout</code> define a <a href=\"#synchronization-image-layout-transitions\">image layout transition</a>, and <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-oldLayout-01197",
"text": " If <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> define a <a href=\"#synchronization-queue-transfers\">queue family ownership transfer</a> or <code>oldLayout</code> and <code>newLayout</code> define a <a href=\"#synchronization-image-layout-transitions\">image layout transition</a>, <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": " If <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> define a <a href=\"#synchronization-queue-transfers\">queue family ownership transfer</a> or <code>oldLayout</code> and <code>newLayout</code> define a <a href=\"#synchronization-image-layout-transitions\">image layout transition</a>, <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-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-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"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 <a href=\"#VkImage\">VkImage</a> handle"
},
{
"vuid": "VUID-VkImageMemoryBarrier-subresourceRange-parameter",
"text": " <code>subresourceRange</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageSubresourceRange\">VkImageSubresourceRange</a> structure"
}
],
"(VK_VERSION_1_1,VK_KHR_maintenance2)": [
{
"vuid": "VUID-VkImageMemoryBarrier-oldLayout-01658",
"text": " If <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> define a <a href=\"#synchronization-queue-transfers\">queue family ownership transfer</a> or <code>oldLayout</code> and <code>newLayout</code> define a <a href=\"#synchronization-image-layout-transitions\">image layout transition</a>, and <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 <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> define a <a href=\"#synchronization-queue-transfers\">queue family ownership transfer</a> or <code>oldLayout</code> and <code>newLayout</code> define a <a href=\"#synchronization-image-layout-transitions\">image layout transition</a>, and <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"
}
],
"(VK_VERSION_1_2,VK_EXT_separate_depth_stencil_layouts)": [
{
"vuid": "VUID-VkImageMemoryBarrier-srcQueueFamilyIndex-04065",
"text": " If <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> define a <a href=\"#synchronization-queue-transfers\">queue family ownership transfer</a> or <code>oldLayout</code> and <code>newLayout</code> define a <a href=\"#synchronization-image-layout-transitions\">image layout transition</a>, and <code>oldLayout</code> or <code>newLayout</code> is <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL_KHR</code> then <code>image</code> <strong class=\"purple\">must</strong> have been created with at least one of <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code>, <code>VK_IMAGE_USAGE_SAMPLED_BIT</code>, or <code>VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT</code> set"
},
{
"vuid": "VUID-VkImageMemoryBarrier-srcQueueFamilyIndex-04066",
"text": " If <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> define a <a href=\"#synchronization-queue-transfers\">queue family ownership transfer</a> or <code>oldLayout</code> and <code>newLayout</code> define a <a href=\"#synchronization-image-layout-transitions\">image layout transition</a>, and <code>oldLayout</code> or <code>newLayout</code> is <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL_KHR</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-srcQueueFamilyIndex-04067",
"text": " If <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> define a <a href=\"#synchronization-queue-transfers\">queue family ownership transfer</a> or <code>oldLayout</code> and <code>newLayout</code> define a <a href=\"#synchronization-image-layout-transitions\">image layout transition</a>, and <code>oldLayout</code> or <code>newLayout</code> is <code>VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL_KHR</code> then <code>image</code> <strong class=\"purple\">must</strong> have been created with at least one of <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code>, <code>VK_IMAGE_USAGE_SAMPLED_BIT</code>, or <code>VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT</code> set"
},
{
"vuid": "VUID-VkImageMemoryBarrier-srcQueueFamilyIndex-04068",
"text": " If <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> define a <a href=\"#synchronization-queue-transfers\">queue family ownership transfer</a> or <code>oldLayout</code> and <code>newLayout</code> define a <a href=\"#synchronization-image-layout-transitions\">image layout transition</a>, and <code>oldLayout</code> or <code>newLayout</code> is <code>VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL_KHR</code> then <code>image</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code> set"
}
],
"(VK_NV_shading_rate_image)": [
{
"vuid": "VUID-VkImageMemoryBarrier-oldLayout-02088",
"text": " If <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> define a <a href=\"#synchronization-queue-transfers\">queue family ownership transfer</a> or <code>oldLayout</code> and <code>newLayout</code> define a <a href=\"#synchronization-image-layout-transitions\">image layout transition</a>, and <code>oldLayout</code> or <code>newLayout</code> is <code>VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV</code> then <code>image</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV</code> set"
}
],
"!(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-VkImageMemoryBarrier-image-02902",
"text": " If <code>image</code> has a color format, then the <code>aspectMask</code> member of <code>subresourceRange</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_ASPECT_COLOR_BIT</code>"
}
],
"(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_2,VK_KHR_separate_depth_stencil_layouts)": [
{
"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>"
}
],
"(VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts)": [
{
"vuid": "VUID-VkImageMemoryBarrier-image-03319",
"text": " If <code>image</code> has a depth/stencil format with both depth and stencil and the <a href=\"#features-separateDepthStencilLayouts\">separateDepthStencilLayouts</a> feature is enabled, then the <code>aspectMask</code> member of <code>subresourceRange</code> <strong class=\"purple\">must</strong> include either or both <code>VK_IMAGE_ASPECT_DEPTH_BIT</code> and <code>VK_IMAGE_ASPECT_STENCIL_BIT</code>"
},
{
"vuid": "VUID-VkImageMemoryBarrier-image-03320",
"text": " If <code>image</code> has a depth/stencil format with both depth and stencil and the <a href=\"#features-separateDepthStencilLayouts\">separateDepthStencilLayouts</a> feature is not enabled, 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>"
}
],
"!(VK_VERSION_1_1,VK_KHR_external_memory)": [
{
"vuid": "VUID-VkImageMemoryBarrier-image-04069",
"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 equal, <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> <strong class=\"purple\">must</strong> be valid queue families"
},
{
"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>"
}
],
"(VK_VERSION_1_1,VK_KHR_external_memory)": [
{
"vuid": "VUID-VkImageMemoryBarrier-srcQueueFamilyIndex-04070",
"text": " If <code>srcQueueFamilyIndex</code> is not equal to <code>dstQueueFamilyIndex</code>, at least one <strong class=\"purple\">must</strong> not be a special queue family reserved for external memory ownership transfers, as described in <a href=\"#synchronization-queue-transfers\">Queue Family Ownership Transfer</a>"
},
{
"vuid": "VUID-VkImageMemoryBarrier-image-04071",
"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> are not equal, and one of <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> is a special queue family values reserved for external memory transfers, the other <strong class=\"purple\">must</strong> be <code>VK_QUEUE_FAMILY_IGNORED</code>"
},
{
"vuid": "VUID-VkImageMemoryBarrier-image-04072",
"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 equal, <code>srcQueueFamilyIndex</code> and <code>dstQueueFamilyIndex</code> <strong class=\"purple\">must</strong> both be valid queue families, or one of the special queue family values reserved for external memory transfers, as described in <a href=\"#synchronization-queue-transfers\">Queue Family Ownership Transfer</a>"
},
{
"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>"
}
]
},
"vkQueueWaitIdle": {
"core": [
{
"vuid": "VUID-vkQueueWaitIdle-queue-parameter",
"text": " <code>queue</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkQueue\">VkQueue</a> handle"
}
]
},
"vkDeviceWaitIdle": {
"core": [
{
"vuid": "VUID-vkDeviceWaitIdle-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
}
]
},
"vkGetCalibratedTimestampsEXT": {
"(VK_EXT_calibrated_timestamps)": [
{
"vuid": "VUID-vkGetCalibratedTimestampsEXT-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetCalibratedTimestampsEXT-pTimestampInfos-parameter",
"text": " <code>pTimestampInfos</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>timestampCount</code> valid <a href=\"#VkCalibratedTimestampInfoEXT\">VkCalibratedTimestampInfoEXT</a> structures"
},
{
"vuid": "VUID-vkGetCalibratedTimestampsEXT-pTimestamps-parameter",
"text": " <code>pTimestamps</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>timestampCount</code> <code>uint64_t</code> values"
},
{
"vuid": "VUID-vkGetCalibratedTimestampsEXT-pMaxDeviation-parameter",
"text": " <code>pMaxDeviation</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint64_t</code> value"
},
{
"vuid": "VUID-vkGetCalibratedTimestampsEXT-timestampCount-arraylength",
"text": " <code>timestampCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"VkCalibratedTimestampInfoEXT": {
"(VK_EXT_calibrated_timestamps)": [
{
"vuid": "VUID-VkCalibratedTimestampInfoEXT-timeDomain-02354",
"text": " <code>timeDomain</code> <strong class=\"purple\">must</strong> be one of the <a href=\"#VkTimeDomainEXT\">VkTimeDomainEXT</a> values returned by <a href=\"#vkGetPhysicalDeviceCalibrateableTimeDomainsEXT\">vkGetPhysicalDeviceCalibrateableTimeDomainsEXT</a>"
},
{
"vuid": "VUID-VkCalibratedTimestampInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT</code>"
},
{
"vuid": "VUID-VkCalibratedTimestampInfoEXT-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkCalibratedTimestampInfoEXT-timeDomain-parameter",
"text": " <code>timeDomain</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkTimeDomainEXT\">VkTimeDomainEXT</a> value"
}
]
},
"vkCreateRenderPass": {
"core": [
{
"vuid": "VUID-vkCreateRenderPass-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkCreateRenderPass-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkRenderPassCreateInfo\">VkRenderPassCreateInfo</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateRenderPass-pRenderPass-parameter",
"text": " <code>pRenderPass</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkRenderPass\">VkRenderPass</a> handle"
}
]
},
"VkRenderPassCreateInfo": {
"core": [
{
"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-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-pAttachments-02511",
"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_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 <a href=\"#synchronization-pipeline-stages-types\">pipeline</a> 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 <a href=\"#synchronization-pipeline-stages-types\">pipeline</a> identified by the <code>pipelineBindPoint</code> member of the destination subpass"
},
{
"vuid": "VUID-VkRenderPassCreateInfo-srcSubpass-02517",
"text": " The <code>srcSubpass</code> member of each element of <code>pDependencies</code> <strong class=\"purple\">must</strong> be less than <code>subpassCount</code>"
},
{
"vuid": "VUID-VkRenderPassCreateInfo-dstSubpass-02518",
"text": " The <code>dstSubpass</code> member of each element of <code>pDependencies</code> <strong class=\"purple\">must</strong> be less than <code>subpassCount</code>"
},
{
"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=\"#VkRenderPassFragmentDensityMapCreateInfoEXT\">VkRenderPassFragmentDensityMapCreateInfoEXT</a>, <a href=\"#VkRenderPassInputAttachmentAspectCreateInfo\">VkRenderPassInputAttachmentAspectCreateInfo</a>, or <a href=\"#VkRenderPassMultiviewCreateInfo\">VkRenderPassMultiviewCreateInfo</a>"
},
{
"vuid": "VUID-VkRenderPassCreateInfo-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkRenderPassCreateInfo-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkRenderPassCreateFlagBits\">VkRenderPassCreateFlagBits</a> values"
},
{
"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 <a href=\"#VkAttachmentDescription\">VkAttachmentDescription</a> 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 <a href=\"#VkSubpassDescription\">VkSubpassDescription</a> 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 <a href=\"#VkSubpassDependency\">VkSubpassDependency</a> 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 a <a href=\"#VkRenderPassInputAttachmentAspectCreateInfo\">VkRenderPassInputAttachmentAspectCreateInfo</a> structure, 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 a <a href=\"#VkRenderPassInputAttachmentAspectCreateInfo\">VkRenderPassInputAttachmentAspectCreateInfo</a> structure, 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 a <a href=\"#VkRenderPassInputAttachmentAspectCreateInfo\">VkRenderPassInputAttachmentAspectCreateInfo</a> structure, for any element of the <code>pInputAttachments</code> member of any element of <code>pSubpasses</code> where the <code>attachment</code> member is not <code>VK_ATTACHMENT_UNUSED</code>, the <code>aspectMask</code> member of the corresponding element of <a href=\"#VkRenderPassInputAttachmentAspectCreateInfo\">VkRenderPassInputAttachmentAspectCreateInfo</a>::<code>pAspectReferences</code> <strong class=\"purple\">must</strong> only include aspects that are present in images of the format specified by the element of <code>pAttachments</code> at <code>attachment</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-VkRenderPassCreateInfo-pNext-01928",
"text": " If the <code>pNext</code> chain includes a <a href=\"#VkRenderPassMultiviewCreateInfo\">VkRenderPassMultiviewCreateInfo</a> structure, 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 a <a href=\"#VkRenderPassMultiviewCreateInfo\">VkRenderPassMultiviewCreateInfo</a> structure, 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 a <a href=\"#VkRenderPassMultiviewCreateInfo\">VkRenderPassMultiviewCreateInfo</a> structure, 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"
},
{
"vuid": "VUID-VkRenderPassCreateInfo-pNext-02512",
"text": " If the <code>pNext</code> chain includes a <a href=\"#VkRenderPassMultiviewCreateInfo\">VkRenderPassMultiviewCreateInfo</a> structure, for any element of <code>pDependencies</code> with a <code>dependencyFlags</code> member that does not include <code>VK_DEPENDENCY_VIEW_LOCAL_BIT</code>, the corresponding element of the <code>pViewOffsets</code> member of that <a href=\"#VkRenderPassMultiviewCreateInfo\">VkRenderPassMultiviewCreateInfo</a> instance <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkRenderPassCreateInfo-pNext-02513",
"text": " If the <code>pNext</code> chain includes a <a href=\"#VkRenderPassMultiviewCreateInfo\">VkRenderPassMultiviewCreateInfo</a> structure, elements of its <code>pViewMasks</code> member <strong class=\"purple\">must</strong> either all be <code>0</code>, or all not be <code>0</code>"
},
{
"vuid": "VUID-VkRenderPassCreateInfo-pNext-02514",
"text": " If the <code>pNext</code> chain includes a <a href=\"#VkRenderPassMultiviewCreateInfo\">VkRenderPassMultiviewCreateInfo</a> structure, and each element of its <code>pViewMasks</code> member is <code>0</code>, the <code>dependencyFlags</code> member of each element of <code>pDependencies</code> <strong class=\"purple\">must</strong> not include <code>VK_DEPENDENCY_VIEW_LOCAL_BIT</code>"
},
{
"vuid": "VUID-VkRenderPassCreateInfo-pNext-02515",
"text": " If the <code>pNext</code> chain includes a <a href=\"#VkRenderPassMultiviewCreateInfo\">VkRenderPassMultiviewCreateInfo</a> structure, and each element of its <code>pViewMasks</code> member is <code>0</code>, <code>correlatedViewMaskCount</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkRenderPassCreateInfo-pNext-02516",
"text": " If the <code>pNext</code> chain includes a <a href=\"#VkRenderPassMultiviewCreateInfo\">VkRenderPassMultiviewCreateInfo</a> structure, each element of its <code>pViewMask</code> member <strong class=\"purple\">must</strong> not have a bit set at an index greater than or equal to <a href=\"#VkPhysicalDeviceLimits\">VkPhysicalDeviceLimits</a>::<code>maxFramebufferLayers</code>"
}
]
},
"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"
}
]
},
"VkRenderPassFragmentDensityMapCreateInfoEXT": {
"(VK_EXT_fragment_density_map)": [
{
"vuid": "VUID-VkRenderPassFragmentDensityMapCreateInfoEXT-fragmentDensityMapAttachment-02547",
"text": " If <code>fragmentDensityMapAttachment</code> is not <code>VK_ATTACHMENT_UNUSED</code>, <code>fragmentDensityMapAttachment</code> <strong class=\"purple\">must</strong> be less than <code>VkRenderPassCreateInfo</code>::<code>attachmentCount</code>"
},
{
"vuid": "VUID-VkRenderPassFragmentDensityMapCreateInfoEXT-fragmentDensityMapAttachment-02548",
"text": " If <code>fragmentDensityMapAttachment</code> is not <code>VK_ATTACHMENT_UNUSED</code>, <code>fragmentDensityMapAttachment</code> <strong class=\"purple\">must</strong> not be an element of <code>VkSubpassDescription</code>::<code>pInputAttachments</code>, <code>VkSubpassDescription</code>::<code>pColorAttachments</code>, <code>VkSubpassDescription</code>::<code>pResolveAttachments</code>, <code>VkSubpassDescription</code>::<code>pDepthStencilAttachment</code>, or <code>VkSubpassDescription</code>::<code>pPreserveAttachments</code> for any subpass"
},
{
"vuid": "VUID-VkRenderPassFragmentDensityMapCreateInfoEXT-fragmentDensityMapAttachment-02549",
"text": " If <code>fragmentDensityMapAttachment</code> is not <code>VK_ATTACHMENT_UNUSED</code>, <code>layout</code> <strong class=\"purple\">must</strong> be equal to <code>VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT</code>, or <code>VK_IMAGE_LAYOUT_GENERAL</code>"
},
{
"vuid": "VUID-VkRenderPassFragmentDensityMapCreateInfoEXT-fragmentDensityMapAttachment-02550",
"text": " If <code>fragmentDensityMapAttachment</code> is not <code>VK_ATTACHMENT_UNUSED</code>, <code>fragmentDensityMapAttachment</code> <strong class=\"purple\">must</strong> reference an attachment with a <code>loadOp</code> equal to <code>VK_ATTACHMENT_LOAD_OP_LOAD</code> or <code>VK_ATTACHMENT_LOAD_OP_DONT_CARE</code>"
},
{
"vuid": "VUID-VkRenderPassFragmentDensityMapCreateInfoEXT-fragmentDensityMapAttachment-02551",
"text": " If <code>fragmentDensityMapAttachment</code> is not <code>VK_ATTACHMENT_UNUSED</code>, <code>fragmentDensityMapAttachment</code> <strong class=\"purple\">must</strong> reference an attachment with a <code>storeOp</code> equal to <code>VK_ATTACHMENT_STORE_OP_DONT_CARE</code>"
},
{
"vuid": "VUID-VkRenderPassFragmentDensityMapCreateInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT</code>"
},
{
"vuid": "VUID-VkRenderPassFragmentDensityMapCreateInfoEXT-fragmentDensityMapAttachment-parameter",
"text": " <code>fragmentDensityMapAttachment</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAttachmentReference\">VkAttachmentReference</a> structure"
}
]
},
"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-format-03280",
"text": " If <code>format</code> is a color format, <code>initialLayout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL</code>, or <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL</code>"
},
{
"vuid": "VUID-VkAttachmentDescription-format-03281",
"text": " If <code>format</code> is a depth/stencil format, <code>initialLayout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL</code>"
},
{
"vuid": "VUID-VkAttachmentDescription-format-03282",
"text": " If <code>format</code> is a color format, <code>finalLayout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL</code>, or <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL</code>"
},
{
"vuid": "VUID-VkAttachmentDescription-format-03283",
"text": " If <code>format</code> is a depth/stencil format, <code>finalLayout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL</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"
}
],
"(VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts)": [
{
"vuid": "VUID-VkAttachmentDescription-separateDepthStencilLayouts-03284",
"text": " If the <a href=\"#features-separateDepthStencilLayouts\"><code>separateDepthStencilLayouts</code></a> feature is not enabled, <code>initialLayout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL</code>, or <code>VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL</code>"
},
{
"vuid": "VUID-VkAttachmentDescription-separateDepthStencilLayouts-03285",
"text": " If the <a href=\"#features-separateDepthStencilLayouts\"><code>separateDepthStencilLayouts</code></a> feature is not enabled, <code>finalLayout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL</code>, or <code>VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL</code>"
},
{
"vuid": "VUID-VkAttachmentDescription-format-03286",
"text": " If <code>format</code> is a color format, <code>initialLayout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL</code>, or <code>VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL</code>"
},
{
"vuid": "VUID-VkAttachmentDescription-format-03287",
"text": " If <code>format</code> is a color format, <code>finalLayout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL</code>, or <code>VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL</code>"
},
{
"vuid": "VUID-VkAttachmentDescription-format-03288",
"text": " If <code>format</code> is a depth/stencil format which includes both depth and stencil aspects, <code>initialLayout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL</code>, or <code>VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL</code>"
},
{
"vuid": "VUID-VkAttachmentDescription-format-03289",
"text": " If <code>format</code> is a depth/stencil format which includes both depth and stencil aspects, <code>finalLayout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL</code>, or <code>VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL</code>"
},
{
"vuid": "VUID-VkAttachmentDescription-format-03290",
"text": " If <code>format</code> is a depth/stencil format which includes only the depth aspect, <code>initialLayout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL</code>"
},
{
"vuid": "VUID-VkAttachmentDescription-format-03291",
"text": " If <code>format</code> is a depth/stencil format which includes only the depth aspect, <code>finalLayout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL</code>"
},
{
"vuid": "VUID-VkAttachmentDescription-format-03292",
"text": " If <code>format</code> is a depth/stencil format which includes only the stencil aspect, <code>initialLayout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL</code>"
},
{
"vuid": "VUID-VkAttachmentDescription-format-03293",
"text": " If <code>format</code> is a depth/stencil format which includes only the stencil aspect, <code>finalLayout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL</code>"
}
]
},
"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 <a href=\"#VkInputAttachmentAspectReference\">VkInputAttachmentAspectReference</a> 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>"
}
],
"(VK_VERSION_1_1,VK_KHR_maintenance2)+(VK_EXT_image_drm_format_modifier)": [
{
"vuid": "VUID-VkInputAttachmentAspectReference-aspectMask-02250",
"text": " <code>aspectMask</code> <strong class=\"purple\">must</strong> not include <code>VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT</code> for any index <code>i</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 is not <code>VK_ATTACHMENT_UNUSED</code>, the corresponding color attachment <strong class=\"purple\">must</strong> not be <code>VK_ATTACHMENT_UNUSED</code>"
},
{
"vuid": "VUID-VkSubpassDescription-pResolveAttachments-00848",
"text": " If <code>pResolveAttachments</code> is not <code>NULL</code>, for each resolve attachment that is not <code>VK_ATTACHMENT_UNUSED</code>, the corresponding color attachment <strong class=\"purple\">must</strong> not have a sample count of <code>VK_SAMPLE_COUNT_1_BIT</code>"
},
{
"vuid": "VUID-VkSubpassDescription-pResolveAttachments-00849",
"text": " If <code>pResolveAttachments</code> is not <code>NULL</code>, each resolve attachment that is not <code>VK_ATTACHMENT_UNUSED</code> <strong class=\"purple\">must</strong> have a sample count of <code>VK_SAMPLE_COUNT_1_BIT</code>"
},
{
"vuid": "VUID-VkSubpassDescription-pResolveAttachments-00850",
"text": " If <code>pResolveAttachments</code> is not <code>NULL</code>, each resolve attachment that is not <code>VK_ATTACHMENT_UNUSED</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-pInputAttachments-02647",
"text": " All attachments in <code>pInputAttachments</code> that are not <code>VK_ATTACHMENT_UNUSED</code> <strong class=\"purple\">must</strong> have image formats whose <a href=\"#potential-format-features\">potential format features</a> contain at least <code>VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT</code> or <code>VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT</code>"
},
{
"vuid": "VUID-VkSubpassDescription-pColorAttachments-02648",
"text": " All attachments in <code>pColorAttachments</code> that are not <code>VK_ATTACHMENT_UNUSED</code> <strong class=\"purple\">must</strong> have image formats whose <a href=\"#potential-format-features\">potential format features</a> contain <code>VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT</code>"
},
{
"vuid": "VUID-VkSubpassDescription-pResolveAttachments-02649",
"text": " All attachments in <code>pResolveAttachments</code> that are not <code>VK_ATTACHMENT_UNUSED</code> <strong class=\"purple\">must</strong> have image formats whose <a href=\"#potential-format-features\">potential format features</a> contain <code>VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT</code>"
},
{
"vuid": "VUID-VkSubpassDescription-pDepthStencilAttachment-02650",
"text": " If <code>pDepthStencilAttachment</code> is not <code>NULL</code> and the attachment is not <code>VK_ATTACHMENT_UNUSED</code> then it <strong class=\"purple\">must</strong> have a image format whose <a href=\"#potential-format-features\">potential format features</a> contain <code>VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT</code>"
},
{
"vuid": "VUID-VkSubpassDescription-pDepthStencilAttachment-01418",
"text": " If neither the <code>VK_AMD_mixed_attachment_samples</code> nor the <code>VK_NV_framebuffer_mixed_samples</code> extensions are enabled, and 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"
},
{
"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-02519",
"text": " If any attachment is used by more than one <a href=\"#VkAttachmentReference\">VkAttachmentReference</a> member, 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 <a href=\"#VkAttachmentReference\">VkAttachmentReference</a> 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 <a href=\"#VkAttachmentReference\">VkAttachmentReference</a> 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 <a href=\"#VkAttachmentReference\">VkAttachmentReference</a> 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 <a href=\"#VkAttachmentReference\">VkAttachmentReference</a> 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": " If the <code>VK_AMD_mixed_attachment_samples</code> extension is enabled, and 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_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>"
}
],
"(VK_QCOM_render_pass_shader_resolve)": [
{
"vuid": "VUID-VkSubpassDescription-flags-03341",
"text": " If <code>flags</code> includes <code>VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM</code>, and if <code>pResolveAttachments</code> is not <code>NULL</code>, then each resolve attachment <strong class=\"purple\">must</strong> be <code>VK_ATTACHMENT_UNUSED</code>"
},
{
"vuid": "VUID-VkSubpassDescription-flags-03342",
"text": " If <code>flags</code> includes <code>VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM</code>, and if <code>pDepthStencilResolveAttachmentKHR</code> is not <code>NULL</code>, then the depth/stencil resolve attachment <strong class=\"purple\">must</strong> be <code>VK_ATTACHMENT_UNUSED</code>"
},
{
"vuid": "VUID-VkSubpassDescription-flags-03343",
"text": " If <code>flags</code> includes <code>VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM</code>, then the subpass <strong class=\"purple\">must</strong> be the last subpass in a subpass dependency chain"
},
{
"vuid": "VUID-VkSubpassDescription-flags-03344",
"text": " If <code>flags</code> includes <code>VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM</code>, then the sample count of the input attachments <strong class=\"purple\">must</strong> equal <code>rasterizationSamples</code>"
},
{
"vuid": "VUID-VkSubpassDescription-flags-03345",
"text": " If <code>flags</code> includes <code>VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM</code>, and if <code>sampleShadingEnable</code> is enabled (explicitly or implicitly) then <code>minSampleShading</code> <strong class=\"purple\">must</strong> equal 0.0"
}
],
"(VK_QCOM_render_pass_transform)": [
{
"vuid": "VUID-VkSubpassDescription-pInputAttachments-02868",
"text": " If the render pass is created with <code>VK_RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM</code> each of the elements of <code>pInputAttachments</code> <strong class=\"purple\">must</strong> be <code>VK_ATTACHMENT_UNUSED</code>"
}
]
},
"VkAttachmentReference": {
"core": [
{
"vuid": "VUID-VkAttachmentReference-layout-00857",
"text": " If <code>attachment</code> is not <code>VK_ATTACHMENT_UNUSED</code>, <code>layout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_UNDEFINED</code>, <code>VK_IMAGE_LAYOUT_PREINITIALIZED</code>, <code>VK_IMAGE_LAYOUT_PRESENT_SRC_KHR</code>, <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL_KHR</code>, <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL_KHR</code>, <code>VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL_KHR</code>, or <code>VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL_KHR</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-srcStageMask-00860",
"text": " If the <a href=\"#features-geometryShader\">geometry shaders</a> 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 <a href=\"#features-geometryShader\">geometry shaders</a> 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 <a href=\"#features-tessellationShader\">tessellation shaders</a> 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 <a href=\"#features-tessellationShader\">tessellation shaders</a> 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-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 <a href=\"#synchronization-framebuffer-regions\">framebuffer-space stages</a>, the <a href=\"#synchronization-pipeline-stages-order\">logically latest</a> pipeline stage in <code>srcStageMask</code> <strong class=\"purple\">must</strong> be <a href=\"#synchronization-pipeline-stages-order\">logically earlier</a> than or equal to the <a href=\"#synchronization-pipeline-stages-order\">logically earliest</a> 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 <a href=\"#synchronization-access-types-supported\">table of supported access types</a>"
},
{
"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 <a href=\"#synchronization-access-types-supported\">table of supported access types</a>"
},
{
"vuid": "VUID-VkSubpassDependency-srcSubpass-02243",
"text": " If <code>srcSubpass</code> equals <code>dstSubpass</code>, and <code>srcStageMask</code> and <code>dstStageMask</code> both include a <a href=\"#synchronization-framebuffer-regions\">framebuffer-space stage</a>, then <code>dependencyFlags</code> <strong class=\"purple\">must</strong> include <code>VK_DEPENDENCY_BY_REGION_BIT</code>"
},
{
"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-02520",
"text": " If <code>dependencyFlags</code> includes <code>VK_DEPENDENCY_VIEW_LOCAL_BIT</code>, <code>srcSubpass</code> <strong class=\"purple\">must</strong> not be equal to <code>VK_SUBPASS_EXTERNAL</code>"
},
{
"vuid": "VUID-VkSubpassDependency-dependencyFlags-02521",
"text": " If <code>dependencyFlags</code> includes <code>VK_DEPENDENCY_VIEW_LOCAL_BIT</code>, <code>dstSubpass</code> <strong class=\"purple\">must</strong> not be equal to <code>VK_SUBPASS_EXTERNAL</code>"
},
{
"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>"
}
],
"(VK_NV_mesh_shader)": [
{
"vuid": "VUID-VkSubpassDependency-srcStageMask-02099",
"text": " If the <a href=\"#features-meshShader\">mesh shaders</a> feature is not enabled, <code>srcStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV</code>"
},
{
"vuid": "VUID-VkSubpassDependency-srcStageMask-02100",
"text": " If the <a href=\"#features-taskShader\">task shaders</a> feature is not enabled, <code>srcStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV</code>"
},
{
"vuid": "VUID-VkSubpassDependency-dstStageMask-02101",
"text": " If the <a href=\"#features-meshShader\">mesh shaders</a> feature is not enabled, <code>dstStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV</code>"
},
{
"vuid": "VUID-VkSubpassDependency-dstStageMask-02102",
"text": " If the <a href=\"#features-taskShader\">task shaders</a> feature is not enabled, <code>dstStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV</code>"
}
]
},
"vkCreateRenderPass2": {
"(VK_VERSION_1_2,VK_KHR_create_renderpass2)": [
{
"vuid": "VUID-vkCreateRenderPass2-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkCreateRenderPass2-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkRenderPassCreateInfo2\">VkRenderPassCreateInfo2</a> structure"
},
{
"vuid": "VUID-vkCreateRenderPass2-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateRenderPass2-pRenderPass-parameter",
"text": " <code>pRenderPass</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkRenderPass\">VkRenderPass</a> handle"
}
]
},
"VkRenderPassCreateInfo2": {
"(VK_VERSION_1_2,VK_KHR_create_renderpass2)": [
{
"vuid": "VUID-VkRenderPassCreateInfo2-None-03049",
"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-VkRenderPassCreateInfo2-attachment-03050",
"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 given 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>VkAttachmentDescription2</code> structures describing them <strong class=\"purple\">must</strong> include <code>VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT</code> in <code>flags</code>"
},
{
"vuid": "VUID-VkRenderPassCreateInfo2-attachment-03051",
"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 given 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-VkRenderPassCreateInfo2-pAttachments-02522",
"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>, <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL</code>, or <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL</code>"
},
{
"vuid": "VUID-VkRenderPassCreateInfo2-pAttachments-02523",
"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_SHADER_READ_ONLY_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL</code>, or <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL</code>"
},
{
"vuid": "VUID-VkRenderPassCreateInfo2-pDependencies-03054",
"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 <a href=\"#synchronization-pipeline-stages-types\">pipeline</a> identified by the <code>pipelineBindPoint</code> member of the source subpass"
},
{
"vuid": "VUID-VkRenderPassCreateInfo2-pDependencies-03055",
"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 <a href=\"#synchronization-pipeline-stages-types\">pipeline</a> identified by the <code>pipelineBindPoint</code> member of the destination subpass"
},
{
"vuid": "VUID-VkRenderPassCreateInfo2-pCorrelatedViewMasks-03056",
"text": " The set of bits included in any element of <code>pCorrelatedViewMasks</code> <strong class=\"purple\">must</strong> not overlap with the set of bits included in any other element of <code>pCorrelatedViewMasks</code>"
},
{
"vuid": "VUID-VkRenderPassCreateInfo2-viewMask-03057",
"text": " If the <a href=\"#VkSubpassDescription2\">VkSubpassDescription2</a>::<code>viewMask</code> member of all elements of <code>pSubpasses</code> is <code>0</code>, <code>correlatedViewMaskCount</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkRenderPassCreateInfo2-viewMask-03058",
"text": " The <a href=\"#VkSubpassDescription2\">VkSubpassDescription2</a>::<code>viewMask</code> member of all elements of <code>pSubpasses</code> <strong class=\"purple\">must</strong> either all be <code>0</code>, or all not be <code>0</code>"
},
{
"vuid": "VUID-VkRenderPassCreateInfo2-viewMask-03059",
"text": " If the <a href=\"#VkSubpassDescription2\">VkSubpassDescription2</a>::<code>viewMask</code> member of all elements of <code>pSubpasses</code> is <code>0</code>, the <code>dependencyFlags</code> member of any element of <code>pDependencies</code> <strong class=\"purple\">must</strong> not include <code>VK_DEPENDENCY_VIEW_LOCAL_BIT</code>"
},
{
"vuid": "VUID-VkRenderPassCreateInfo2-pDependencies-03060",
"text": " For any element of <code>pDependencies</code> where its <code>srcSubpass</code> member equals its <code>dstSubpass</code> member, if the <code>viewMask</code> member of the corresponding element of <code>pSubpasses</code> includes more than one bit, its <code>dependencyFlags</code> member <strong class=\"purple\">must</strong> include <code>VK_DEPENDENCY_VIEW_LOCAL_BIT</code>"
},
{
"vuid": "VUID-VkRenderPassCreateInfo2-viewMask-02524",
"text": " The <code>viewMask</code> member <strong class=\"purple\">must</strong> not have a bit set at an index greater than or equal to <a href=\"#VkPhysicalDeviceLimits\">VkPhysicalDeviceLimits</a>::<code>maxFramebufferLayers</code>"
},
{
"vuid": "VUID-VkRenderPassCreateInfo2-attachment-02525",
"text": " If the <code>attachment</code> member of any element of the <code>pInputAttachments</code> member of any element of <code>pSubpasses</code> is not <code>VK_ATTACHMENT_UNUSED</code>, the <code>aspectMask</code> member of that element of <code>pInputAttachments</code> <strong class=\"purple\">must</strong> only include aspects that are present in images of the format specified by the element of <code>pAttachments</code> specified by <code>attachment</code>"
},
{
"vuid": "VUID-VkRenderPassCreateInfo2-srcSubpass-02526",
"text": " The <code>srcSubpass</code> member of each element of <code>pDependencies</code> <strong class=\"purple\">must</strong> be less than <code>subpassCount</code>"
},
{
"vuid": "VUID-VkRenderPassCreateInfo2-dstSubpass-02527",
"text": " The <code>dstSubpass</code> member of each element of <code>pDependencies</code> <strong class=\"purple\">must</strong> be less than <code>subpassCount</code>"
},
{
"vuid": "VUID-VkRenderPassCreateInfo2-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2</code>"
},
{
"vuid": "VUID-VkRenderPassCreateInfo2-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=\"#VkRenderPassFragmentDensityMapCreateInfoEXT\">VkRenderPassFragmentDensityMapCreateInfoEXT</a>"
},
{
"vuid": "VUID-VkRenderPassCreateInfo2-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkRenderPassCreateInfo2-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkRenderPassCreateFlagBits\">VkRenderPassCreateFlagBits</a> values"
},
{
"vuid": "VUID-VkRenderPassCreateInfo2-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 <a href=\"#VkAttachmentDescription2\">VkAttachmentDescription2</a> structures"
},
{
"vuid": "VUID-VkRenderPassCreateInfo2-pSubpasses-parameter",
"text": " <code>pSubpasses</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>subpassCount</code> valid <a href=\"#VkSubpassDescription2\">VkSubpassDescription2</a> structures"
},
{
"vuid": "VUID-VkRenderPassCreateInfo2-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 <a href=\"#VkSubpassDependency2\">VkSubpassDependency2</a> structures"
},
{
"vuid": "VUID-VkRenderPassCreateInfo2-pCorrelatedViewMasks-parameter",
"text": " If <code>correlatedViewMaskCount</code> is not <code>0</code>, <code>pCorrelatedViewMasks</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>correlatedViewMaskCount</code> <code>uint32_t</code> values"
},
{
"vuid": "VUID-VkRenderPassCreateInfo2-subpassCount-arraylength",
"text": " <code>subpassCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"VkAttachmentDescription2": {
"(VK_VERSION_1_2,VK_KHR_create_renderpass2)": [
{
"vuid": "VUID-VkAttachmentDescription2-finalLayout-03061",
"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-VkAttachmentDescription2-format-03294",
"text": " If <code>format</code> is a color format, <code>initialLayout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL</code>, or <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL</code>"
},
{
"vuid": "VUID-VkAttachmentDescription2-format-03295",
"text": " If <code>format</code> is a depth/stencil format, <code>initialLayout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL</code>"
},
{
"vuid": "VUID-VkAttachmentDescription2-format-03296",
"text": " If <code>format</code> is a color format, <code>finalLayout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL</code>, or <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL</code>"
},
{
"vuid": "VUID-VkAttachmentDescription2-format-03297",
"text": " If <code>format</code> is a depth/stencil format, <code>finalLayout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL</code>"
},
{
"vuid": "VUID-VkAttachmentDescription2-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2</code>"
},
{
"vuid": "VUID-VkAttachmentDescription2-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkAttachmentDescriptionFlagBits\">VkAttachmentDescriptionFlagBits</a> values"
},
{
"vuid": "VUID-VkAttachmentDescription2-format-parameter",
"text": " <code>format</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFormat\">VkFormat</a> value"
},
{
"vuid": "VUID-VkAttachmentDescription2-samples-parameter",
"text": " <code>samples</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSampleCountFlagBits\">VkSampleCountFlagBits</a> value"
},
{
"vuid": "VUID-VkAttachmentDescription2-loadOp-parameter",
"text": " <code>loadOp</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAttachmentLoadOp\">VkAttachmentLoadOp</a> value"
},
{
"vuid": "VUID-VkAttachmentDescription2-storeOp-parameter",
"text": " <code>storeOp</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAttachmentStoreOp\">VkAttachmentStoreOp</a> value"
},
{
"vuid": "VUID-VkAttachmentDescription2-stencilLoadOp-parameter",
"text": " <code>stencilLoadOp</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAttachmentLoadOp\">VkAttachmentLoadOp</a> value"
},
{
"vuid": "VUID-VkAttachmentDescription2-stencilStoreOp-parameter",
"text": " <code>stencilStoreOp</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAttachmentStoreOp\">VkAttachmentStoreOp</a> value"
},
{
"vuid": "VUID-VkAttachmentDescription2-initialLayout-parameter",
"text": " <code>initialLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
},
{
"vuid": "VUID-VkAttachmentDescription2-finalLayout-parameter",
"text": " <code>finalLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
}
],
"(VK_VERSION_1_2,VK_KHR_create_renderpass2)+(VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts)": [
{
"vuid": "VUID-VkAttachmentDescription2-separateDepthStencilLayouts-03298",
"text": " If the <a href=\"#features-separateDepthStencilLayouts\"><code>separateDepthStencilLayouts</code></a> feature is not enabled, <code>initialLayout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL</code>"
},
{
"vuid": "VUID-VkAttachmentDescription2-separateDepthStencilLayouts-03299",
"text": " If the <a href=\"#features-separateDepthStencilLayouts\"><code>separateDepthStencilLayouts</code></a> feature is not enabled, <code>finalLayout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL</code>"
},
{
"vuid": "VUID-VkAttachmentDescription2-format-03300",
"text": " If <code>format</code> is a color format, <code>initialLayout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL</code>"
},
{
"vuid": "VUID-VkAttachmentDescription2-format-03301",
"text": " If <code>format</code> is a color format, <code>finalLayout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL</code>"
},
{
"vuid": "VUID-VkAttachmentDescription2-format-03302",
"text": " If <code>format</code> is a depth/stencil format which includes both depth and stencil aspects, and <code>initialLayout</code> is <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL</code>, the <code>pNext</code> chain <strong class=\"purple\">must</strong> include a <a href=\"#VkAttachmentDescriptionStencilLayout\">VkAttachmentDescriptionStencilLayout</a> structure"
},
{
"vuid": "VUID-VkAttachmentDescription2-format-03303",
"text": " If <code>format</code> is a depth/stencil format which includes both depth and stencil aspects, and <code>finalLayout</code> is <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL</code>, the <code>pNext</code> chain <strong class=\"purple\">must</strong> include a <a href=\"#VkAttachmentDescriptionStencilLayout\">VkAttachmentDescriptionStencilLayout</a> structure"
},
{
"vuid": "VUID-VkAttachmentDescription2-format-03304",
"text": " If <code>format</code> is a depth/stencil format which includes only the depth aspect, <code>initialLayout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL</code>"
},
{
"vuid": "VUID-VkAttachmentDescription2-format-03305",
"text": " If <code>format</code> is a depth/stencil format which includes only the depth aspect, <code>finalLayout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL</code>"
},
{
"vuid": "VUID-VkAttachmentDescription2-format-03306",
"text": " If <code>format</code> is a depth/stencil format which includes only the stencil aspect, <code>initialLayout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL</code>"
},
{
"vuid": "VUID-VkAttachmentDescription2-format-03307",
"text": " If <code>format</code> is a depth/stencil format which includes only the stencil aspect, <code>finalLayout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL</code>"
}
]
},
"VkAttachmentDescriptionStencilLayout": {
"(VK_VERSION_1_2,VK_KHR_create_renderpass2)+(VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts)": [
{
"vuid": "VUID-VkAttachmentDescriptionStencilLayout-stencilInitialLayout-03308",
"text": " <code>stencilInitialLayout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL</code>, or <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL</code>"
},
{
"vuid": "VUID-VkAttachmentDescriptionStencilLayout-stencilFinalLayout-03309",
"text": " <code>stencilFinalLayout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL</code>, or <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL</code>"
},
{
"vuid": "VUID-VkAttachmentDescriptionStencilLayout-stencilFinalLayout-03310",
"text": " <code>stencilFinalLayout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_UNDEFINED</code> or <code>VK_IMAGE_LAYOUT_PREINITIALIZED</code>"
},
{
"vuid": "VUID-VkAttachmentDescriptionStencilLayout-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT</code>"
},
{
"vuid": "VUID-VkAttachmentDescriptionStencilLayout-stencilInitialLayout-parameter",
"text": " <code>stencilInitialLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
},
{
"vuid": "VUID-VkAttachmentDescriptionStencilLayout-stencilFinalLayout-parameter",
"text": " <code>stencilFinalLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
}
]
},
"VkSubpassDescription2": {
"(VK_VERSION_1_2,VK_KHR_create_renderpass2)": [
{
"vuid": "VUID-VkSubpassDescription2-pipelineBindPoint-03062",
"text": " <code>pipelineBindPoint</code> <strong class=\"purple\">must</strong> be <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>"
},
{
"vuid": "VUID-VkSubpassDescription2-colorAttachmentCount-03063",
"text": " <code>colorAttachmentCount</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxColorAttachments</code>"
},
{
"vuid": "VUID-VkSubpassDescription2-loadOp-03064",
"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-VkSubpassDescription2-pResolveAttachments-03065",
"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-VkSubpassDescription2-pResolveAttachments-03066",
"text": " If <code>pResolveAttachments</code> is not <code>NULL</code>, for each resolve attachment that is not <code>VK_ATTACHMENT_UNUSED</code>, the corresponding color attachment <strong class=\"purple\">must</strong> not have a sample count of <code>VK_SAMPLE_COUNT_1_BIT</code>"
},
{
"vuid": "VUID-VkSubpassDescription2-pResolveAttachments-03067",
"text": " If <code>pResolveAttachments</code> is not <code>NULL</code>, each resolve attachment that is not <code>VK_ATTACHMENT_UNUSED</code> <strong class=\"purple\">must</strong> have a sample count of <code>VK_SAMPLE_COUNT_1_BIT</code>"
},
{
"vuid": "VUID-VkSubpassDescription2-pResolveAttachments-03068",
"text": " Any given 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-VkSubpassDescription2-pColorAttachments-03069",
"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-VkSubpassDescription2-pInputAttachments-02897",
"text": " All attachments in <code>pInputAttachments</code> that are not <code>VK_ATTACHMENT_UNUSED</code> <strong class=\"purple\">must</strong> have image formats whose <a href=\"#potential-format-features\">potential format features</a> contain at least <code>VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT</code> or <code>VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT</code>"
},
{
"vuid": "VUID-VkSubpassDescription2-pColorAttachments-02898",
"text": " All attachments in <code>pColorAttachments</code> that are not <code>VK_ATTACHMENT_UNUSED</code> <strong class=\"purple\">must</strong> have image formats whose <a href=\"#potential-format-features\">potential format features</a> contain <code>VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT</code>"
},
{
"vuid": "VUID-VkSubpassDescription2-pResolveAttachments-02899",
"text": " All attachments in <code>pResolveAttachments</code> that are not <code>VK_ATTACHMENT_UNUSED</code> <strong class=\"purple\">must</strong> have image formats whose <a href=\"#potential-format-features\">potential format features</a> contain <code>VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT</code>"
},
{
"vuid": "VUID-VkSubpassDescription2-pDepthStencilAttachment-02900",
"text": " If <code>pDepthStencilAttachment</code> is not <code>NULL</code> and the attachment is not <code>VK_ATTACHMENT_UNUSED</code> then it <strong class=\"purple\">must</strong> have a image format whose <a href=\"#potential-format-features\">potential format features</a> contain <code>VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT</code>"
},
{
"vuid": "VUID-VkSubpassDescription2-pDepthStencilAttachment-03071",
"text": " If neither the <code>VK_AMD_mixed_attachment_samples</code> nor the <code>VK_NV_framebuffer_mixed_samples</code> extensions are enabled, and 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"
},
{
"vuid": "VUID-VkSubpassDescription2-attachment-03073",
"text": " The <code>attachment</code> member of any element of <code>pPreserveAttachments</code> <strong class=\"purple\">must</strong> not be <code>VK_ATTACHMENT_UNUSED</code>"
},
{
"vuid": "VUID-VkSubpassDescription2-pPreserveAttachments-03074",
"text": " Any given 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-VkSubpassDescription2-layout-02528",
"text": " If any attachment is used by more than one <a href=\"#VkAttachmentReference\">VkAttachmentReference</a> member, then each use <strong class=\"purple\">must</strong> use the same <code>layout</code>"
},
{
"vuid": "VUID-VkSubpassDescription2-attachment-02799",
"text": " If the <code>attachment</code> member of any element of <code>pInputAttachments</code> is not <code>VK_ATTACHMENT_UNUSED</code>, then the <code>aspectMask</code> member <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageAspectFlagBits\">VkImageAspectFlagBits</a>"
},
{
"vuid": "VUID-VkSubpassDescription2-attachment-02800",
"text": " If the <code>attachment</code> member of any element of <code>pInputAttachments</code> is not <code>VK_ATTACHMENT_UNUSED</code>, then the <code>aspectMask</code> member <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-VkSubpassDescription2-attachment-02801",
"text": " If the <code>attachment</code> member of any element of <code>pInputAttachments</code> is not <code>VK_ATTACHMENT_UNUSED</code>, then the <code>aspectMask</code> member <strong class=\"purple\">must</strong> not include <code>VK_IMAGE_ASPECT_METADATA_BIT</code>"
},
{
"vuid": "VUID-VkSubpassDescription2-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2</code>"
},
{
"vuid": "VUID-VkSubpassDescription2-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkSubpassDescriptionFlagBits\">VkSubpassDescriptionFlagBits</a> values"
},
{
"vuid": "VUID-VkSubpassDescription2-pipelineBindPoint-parameter",
"text": " <code>pipelineBindPoint</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipelineBindPoint\">VkPipelineBindPoint</a> value"
},
{
"vuid": "VUID-VkSubpassDescription2-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 <a href=\"#VkAttachmentReference2\">VkAttachmentReference2</a> structures"
},
{
"vuid": "VUID-VkSubpassDescription2-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 <a href=\"#VkAttachmentReference2\">VkAttachmentReference2</a> structures"
},
{
"vuid": "VUID-VkSubpassDescription2-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 <a href=\"#VkAttachmentReference2\">VkAttachmentReference2</a> structures"
},
{
"vuid": "VUID-VkSubpassDescription2-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 <a href=\"#VkAttachmentReference2\">VkAttachmentReference2</a> structure"
},
{
"vuid": "VUID-VkSubpassDescription2-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_VERSION_1_2,VK_KHR_create_renderpass2)+(VK_AMD_mixed_attachment_samples)": [
{
"vuid": "VUID-VkSubpassDescription2-pColorAttachments-03070",
"text": " If the <code>VK_AMD_mixed_attachment_samples</code> extension is enabled, 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_VERSION_1_2,VK_KHR_create_renderpass2)+(VK_NVX_multiview_per_view_attributes)": [
{
"vuid": "VUID-VkSubpassDescription2-flags-03076",
"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>"
}
]
},
"VkSubpassDescriptionDepthStencilResolve": {
"(VK_VERSION_1_2,VK_KHR_create_renderpass2)+(VK_VERSION_1_2,VK_KHR_depth_stencil_resolve)": [
{
"vuid": "VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03177",
"text": " If <code>pDepthStencilResolveAttachment</code> is not <code>NULL</code> and does not have the value <code>VK_ATTACHMENT_UNUSED</code>, <code>pDepthStencilAttachment</code> <strong class=\"purple\">must</strong> not have the value <code>VK_ATTACHMENT_UNUSED</code>"
},
{
"vuid": "VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03178",
"text": " If <code>pDepthStencilResolveAttachment</code> is not <code>NULL</code> and does not have the value <code>VK_ATTACHMENT_UNUSED</code>, <code>depthResolveMode</code> and <code>stencilResolveMode</code> <strong class=\"purple\">must</strong> not both be <code>VK_RESOLVE_MODE_NONE</code>"
},
{
"vuid": "VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03179",
"text": " If <code>pDepthStencilResolveAttachment</code> is not <code>NULL</code> and does not have the value <code>VK_ATTACHMENT_UNUSED</code>, <code>pDepthStencilAttachment</code> <strong class=\"purple\">must</strong> not have a sample count of <code>VK_SAMPLE_COUNT_1_BIT</code>"
},
{
"vuid": "VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03180",
"text": " If <code>pDepthStencilResolveAttachment</code> is not <code>NULL</code> and does not have the value <code>VK_ATTACHMENT_UNUSED</code>, <code>pDepthStencilResolveAttachment</code> <strong class=\"purple\">must</strong> have a sample count of <code>VK_SAMPLE_COUNT_1_BIT</code>"
},
{
"vuid": "VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-02651",
"text": " If <code>pDepthStencilResolveAttachment</code> is not <code>NULL</code> and does not have the value <code>VK_ATTACHMENT_UNUSED</code> then it <strong class=\"purple\">must</strong> have a format whose features contain <code>VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT</code>"
},
{
"vuid": "VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03181",
"text": " If the <a href=\"#VkFormat\">VkFormat</a> of <code>pDepthStencilResolveAttachment</code> has a depth component, then the <a href=\"#VkFormat\">VkFormat</a> of <code>pDepthStencilAttachment</code> <strong class=\"purple\">must</strong> have a depth component with the same number of bits and numerical type"
},
{
"vuid": "VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03182",
"text": " If the <a href=\"#VkFormat\">VkFormat</a> of <code>pDepthStencilResolveAttachment</code> has a stencil component, then the <a href=\"#VkFormat\">VkFormat</a> of <code>pDepthStencilAttachment</code> <strong class=\"purple\">must</strong> have a stencil component with the same number of bits and numerical type"
},
{
"vuid": "VUID-VkSubpassDescriptionDepthStencilResolve-depthResolveMode-03183",
"text": " The value of <code>depthResolveMode</code> <strong class=\"purple\">must</strong> be one of the bits set in <a href=\"#VkPhysicalDeviceDepthStencilResolveProperties\">VkPhysicalDeviceDepthStencilResolveProperties</a>::<code>supportedDepthResolveModes</code> or <code>VK_RESOLVE_MODE_NONE</code>"
},
{
"vuid": "VUID-VkSubpassDescriptionDepthStencilResolve-stencilResolveMode-03184",
"text": " The value of <code>stencilResolveMode</code> <strong class=\"purple\">must</strong> be one of the bits set in <a href=\"#VkPhysicalDeviceDepthStencilResolveProperties\">VkPhysicalDeviceDepthStencilResolveProperties</a>::<code>supportedStencilResolveModes</code> or <code>VK_RESOLVE_MODE_NONE</code>"
},
{
"vuid": "VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03185",
"text": " If the <a href=\"#VkFormat\">VkFormat</a> of <code>pDepthStencilResolveAttachment</code> has both depth and stencil components, <a href=\"#VkPhysicalDeviceDepthStencilResolveProperties\">VkPhysicalDeviceDepthStencilResolveProperties</a>::<code>independentResolve</code> is <code>VK_FALSE</code>, and <a href=\"#VkPhysicalDeviceDepthStencilResolveProperties\">VkPhysicalDeviceDepthStencilResolveProperties</a>::<code>independentResolveNone</code> is <code>VK_FALSE</code>, then the values of <code>depthResolveMode</code> and <code>stencilResolveMode</code> <strong class=\"purple\">must</strong> be identical"
},
{
"vuid": "VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03186",
"text": " If the <a href=\"#VkFormat\">VkFormat</a> of <code>pDepthStencilResolveAttachment</code> has both depth and stencil components, <a href=\"#VkPhysicalDeviceDepthStencilResolveProperties\">VkPhysicalDeviceDepthStencilResolveProperties</a>::<code>independentResolve</code> is <code>VK_FALSE</code> and <a href=\"#VkPhysicalDeviceDepthStencilResolveProperties\">VkPhysicalDeviceDepthStencilResolveProperties</a>::<code>independentResolveNone</code> is <code>VK_TRUE</code>, then the values of <code>depthResolveMode</code> and <code>stencilResolveMode</code> <strong class=\"purple\">must</strong> be identical or one of them <strong class=\"purple\">must</strong> be <code>VK_RESOLVE_MODE_NONE</code>"
},
{
"vuid": "VUID-VkSubpassDescriptionDepthStencilResolve-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE</code>"
},
{
"vuid": "VUID-VkSubpassDescriptionDepthStencilResolve-depthResolveMode-parameter",
"text": " <code>depthResolveMode</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkResolveModeFlagBits\">VkResolveModeFlagBits</a> value"
},
{
"vuid": "VUID-VkSubpassDescriptionDepthStencilResolve-stencilResolveMode-parameter",
"text": " <code>stencilResolveMode</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkResolveModeFlagBits\">VkResolveModeFlagBits</a> value"
},
{
"vuid": "VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-parameter",
"text": " If <code>pDepthStencilResolveAttachment</code> is not <code>NULL</code>, <code>pDepthStencilResolveAttachment</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkAttachmentReference2\">VkAttachmentReference2</a> structure"
}
]
},
"VkAttachmentReference2": {
"(VK_VERSION_1_2,VK_KHR_create_renderpass2)": [
{
"vuid": "VUID-VkAttachmentReference2-layout-03077",
"text": " If <code>attachment</code> is not <code>VK_ATTACHMENT_UNUSED</code>, <code>layout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_UNDEFINED</code>, <code>VK_IMAGE_LAYOUT_PREINITIALIZED</code>, or <code>VK_IMAGE_LAYOUT_PRESENT_SRC_KHR</code>"
},
{
"vuid": "VUID-VkAttachmentReference2-attachment-03311",
"text": " If <code>attachment</code> is not <code>VK_ATTACHMENT_UNUSED</code>, and <code>aspectMask</code> does not include <code>VK_IMAGE_ASPECT_STENCIL_BIT</code> or <code>VK_IMAGE_ASPECT_DEPTH_BIT</code>, <code>layout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL</code>, or <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL</code>"
},
{
"vuid": "VUID-VkAttachmentReference2-attachment-03312",
"text": " If <code>attachment</code> is not <code>VK_ATTACHMENT_UNUSED</code>, and <code>aspectMask</code> does not include <code>VK_IMAGE_ASPECT_COLOR_BIT</code>, <code>layout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL</code>"
},
{
"vuid": "VUID-VkAttachmentReference2-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2</code>"
},
{
"vuid": "VUID-VkAttachmentReference2-layout-parameter",
"text": " <code>layout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
}
],
"(VK_VERSION_1_2,VK_KHR_create_renderpass2)+(VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts)": [
{
"vuid": "VUID-VkAttachmentReference2-separateDepthStencilLayouts-03313",
"text": " If the <a href=\"#features-separateDepthStencilLayouts\"><code>separateDepthStencilLayouts</code></a> feature is not enabled, and <code>attachment</code> is not <code>VK_ATTACHMENT_UNUSED</code>, <code>layout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL</code>, or <code>VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL</code>,"
},
{
"vuid": "VUID-VkAttachmentReference2-attachment-03314",
"text": " If <code>attachment</code> is not <code>VK_ATTACHMENT_UNUSED</code>, and <code>aspectMask</code> includes <code>VK_IMAGE_ASPECT_COLOR_BIT</code>, <code>layout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL</code>, or <code>VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL</code>,"
},
{
"vuid": "VUID-VkAttachmentReference2-attachment-03315",
"text": " If <code>attachment</code> is not <code>VK_ATTACHMENT_UNUSED</code>, and <code>aspectMask</code> includes both <code>VK_IMAGE_ASPECT_DEPTH_BIT</code> and <code>VK_IMAGE_ASPECT_STENCIL_BIT</code>, and <code>layout</code> is <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL</code>, the <code>pNext</code> chain <strong class=\"purple\">must</strong> include a <a href=\"#VkAttachmentReferenceStencilLayout\">VkAttachmentReferenceStencilLayout</a> structure"
},
{
"vuid": "VUID-VkAttachmentReference2-attachment-03316",
"text": " If <code>attachment</code> is not <code>VK_ATTACHMENT_UNUSED</code>, and <code>aspectMask</code> includes only <code>VK_IMAGE_ASPECT_DEPTH_BIT</code> then <code>layout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL</code>, or <code>VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL</code>"
},
{
"vuid": "VUID-VkAttachmentReference2-attachment-03317",
"text": " If <code>attachment</code> is not <code>VK_ATTACHMENT_UNUSED</code>, and <code>aspectMask</code> includes only <code>VK_IMAGE_ASPECT_STENCIL_BIT</code> then <code>layout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL</code>, or <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL</code>"
}
]
},
"VkAttachmentReferenceStencilLayout": {
"(VK_VERSION_1_2,VK_KHR_create_renderpass2)+(VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts)": [
{
"vuid": "VUID-VkAttachmentReferenceStencilLayout-stencilLayout-03318",
"text": " <code>stencilLayout</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_LAYOUT_UNDEFINED</code>, <code>VK_IMAGE_LAYOUT_PREINITIALIZED</code>, <code>VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL</code>, or <code>VK_IMAGE_LAYOUT_PRESENT_SRC_KHR</code>"
},
{
"vuid": "VUID-VkAttachmentReferenceStencilLayout-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT</code>"
},
{
"vuid": "VUID-VkAttachmentReferenceStencilLayout-stencilLayout-parameter",
"text": " <code>stencilLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
}
]
},
"VkSubpassDependency2": {
"(VK_VERSION_1_2,VK_KHR_create_renderpass2)": [
{
"vuid": "VUID-VkSubpassDependency2-srcStageMask-03080",
"text": " If the <a href=\"#features-geometryShader\">geometry shaders</a> feature is not enabled, <code>srcStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT</code>"
},
{
"vuid": "VUID-VkSubpassDependency2-dstStageMask-03081",
"text": " If the <a href=\"#features-geometryShader\">geometry shaders</a> feature is not enabled, <code>dstStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT</code>"
},
{
"vuid": "VUID-VkSubpassDependency2-srcStageMask-03082",
"text": " If the <a href=\"#features-tessellationShader\">tessellation shaders</a> 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-VkSubpassDependency2-dstStageMask-03083",
"text": " If the <a href=\"#features-tessellationShader\">tessellation shaders</a> 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-VkSubpassDependency2-srcSubpass-03084",
"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-VkSubpassDependency2-srcSubpass-03085",
"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-VkSubpassDependency2-srcSubpass-03087",
"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 <a href=\"#synchronization-framebuffer-regions\">framebuffer-space stages</a>, the <a href=\"#synchronization-pipeline-stages-order\">logically latest</a> pipeline stage in <code>srcStageMask</code> <strong class=\"purple\">must</strong> be <a href=\"#synchronization-pipeline-stages-order\">logically earlier</a> than or equal to the <a href=\"#synchronization-pipeline-stages-order\">logically earliest</a> pipeline stage in <code>dstStageMask</code>"
},
{
"vuid": "VUID-VkSubpassDependency2-srcAccessMask-03088",
"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 <a href=\"#synchronization-access-types-supported\">table of supported access types</a>"
},
{
"vuid": "VUID-VkSubpassDependency2-dstAccessMask-03089",
"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 <a href=\"#synchronization-access-types-supported\">table of supported access types</a>"
},
{
"vuid": "VUID-VkSubpassDependency2-dependencyFlags-03090",
"text": " If <code>dependencyFlags</code> includes <code>VK_DEPENDENCY_VIEW_LOCAL_BIT</code>, <code>srcSubpass</code> <strong class=\"purple\">must</strong> not be equal to <code>VK_SUBPASS_EXTERNAL</code>"
},
{
"vuid": "VUID-VkSubpassDependency2-dependencyFlags-03091",
"text": " If <code>dependencyFlags</code> includes <code>VK_DEPENDENCY_VIEW_LOCAL_BIT</code>, <code>dstSubpass</code> <strong class=\"purple\">must</strong> not be equal to <code>VK_SUBPASS_EXTERNAL</code>"
},
{
"vuid": "VUID-VkSubpassDependency2-srcSubpass-02245",
"text": " If <code>srcSubpass</code> equals <code>dstSubpass</code>, and <code>srcStageMask</code> and <code>dstStageMask</code> both include a <a href=\"#synchronization-framebuffer-regions\">framebuffer-space stage</a>, then <code>dependencyFlags</code> <strong class=\"purple\">must</strong> include <code>VK_DEPENDENCY_BY_REGION_BIT</code>"
},
{
"vuid": "VUID-VkSubpassDependency2-viewOffset-02530",
"text": " If <code>viewOffset</code> is not equal to <code>0</code>, <code>srcSubpass</code> <strong class=\"purple\">must</strong> not be equal to <code>dstSubpass</code>"
},
{
"vuid": "VUID-VkSubpassDependency2-dependencyFlags-03092",
"text": " If <code>dependencyFlags</code> does not include <code>VK_DEPENDENCY_VIEW_LOCAL_BIT</code>, <code>viewOffset</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkSubpassDependency2-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2</code>"
},
{
"vuid": "VUID-VkSubpassDependency2-srcStageMask-parameter",
"text": " <code>srcStageMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkPipelineStageFlagBits\">VkPipelineStageFlagBits</a> values"
},
{
"vuid": "VUID-VkSubpassDependency2-srcStageMask-requiredbitmask",
"text": " <code>srcStageMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-VkSubpassDependency2-dstStageMask-parameter",
"text": " <code>dstStageMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkPipelineStageFlagBits\">VkPipelineStageFlagBits</a> values"
},
{
"vuid": "VUID-VkSubpassDependency2-dstStageMask-requiredbitmask",
"text": " <code>dstStageMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-VkSubpassDependency2-srcAccessMask-parameter",
"text": " <code>srcAccessMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkAccessFlagBits\">VkAccessFlagBits</a> values"
},
{
"vuid": "VUID-VkSubpassDependency2-dstAccessMask-parameter",
"text": " <code>dstAccessMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkAccessFlagBits\">VkAccessFlagBits</a> values"
},
{
"vuid": "VUID-VkSubpassDependency2-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_2,VK_KHR_create_renderpass2)+(VK_NV_mesh_shader)": [
{
"vuid": "VUID-VkSubpassDependency2-srcStageMask-02103",
"text": " If the <a href=\"#features-meshShader\">mesh shaders</a> feature is not enabled, <code>srcStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV</code>"
},
{
"vuid": "VUID-VkSubpassDependency2-srcStageMask-02104",
"text": " If the <a href=\"#features-taskShader\">task shaders</a> feature is not enabled, <code>srcStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV</code>"
},
{
"vuid": "VUID-VkSubpassDependency2-dstStageMask-02105",
"text": " If the <a href=\"#features-meshShader\">mesh shaders</a> feature is not enabled, <code>dstStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV</code>"
},
{
"vuid": "VUID-VkSubpassDependency2-dstStageMask-02106",
"text": " If the <a href=\"#features-taskShader\">task shaders</a> feature is not enabled, <code>dstStageMask</code> <strong class=\"purple\">must</strong> not contain <code>VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV</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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkRenderPass\">VkRenderPass</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> 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-pCreateInfo-02777",
"text": " If <code>pCreateInfo-&gt;flags</code> does not include <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, and <code>attachmentCount</code> is not <code>0</code>, each element of <code>pCreateInfo-&gt;pAttachments</code> <strong class=\"purple\">must</strong> have been created on <code>device</code>"
},
{
"vuid": "VUID-vkCreateFramebuffer-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkCreateFramebuffer-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkFramebufferCreateInfo\">VkFramebufferCreateInfo</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateFramebuffer-pFramebuffer-parameter",
"text": " <code>pFramebuffer</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkFramebuffer\">VkFramebuffer</a> 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-flags-02778",
"text": " If <code>flags</code> does not include <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, and <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 <a href=\"#VkImageView\">VkImageView</a> handles"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-pAttachments-00877",
"text": " If <code>flags</code> does not include <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, 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-02633",
"text": " If <code>flags</code> does not include <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, 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": " If <code>flags</code> does not include <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, 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": " If <code>flags</code> does not include <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, each element of <code>pAttachments</code> <strong class=\"purple\">must</strong> have been created with a <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": " If <code>flags</code> does not include <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, 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-00883",
"text": " If <code>flags</code> does not include <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, each element of <code>pAttachments</code> <strong class=\"purple\">must</strong> only specify a single mip level"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-pAttachments-00884",
"text": " If <code>flags</code> does not include <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, 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-flags-03188",
"text": " If <code>flags</code> does not include <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, and <code>attachmentCount</code> is not 0, <code>pAttachments</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>attachmentCount</code> valid <a href=\"#VkImageView\">VkImageView</a> handles"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-flags-04113",
"text": " If <code>flags</code> does not include <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, each element of <code>pAttachments</code> <strong class=\"purple\">must</strong> have been created with <a href=\"#VkImageViewCreateInfo\">VkImageViewCreateInfo</a>::<code>viewType</code> not equal to <code>VK_IMAGE_VIEW_TYPE_3D</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> or a pointer to a valid instance of <a href=\"#VkFramebufferAttachmentsCreateInfo\">VkFramebufferAttachmentsCreateInfo</a>"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkFramebufferCreateFlagBits\">VkFramebufferCreateFlagBits</a> values"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-renderPass-parameter",
"text": " <code>renderPass</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkRenderPass\">VkRenderPass</a> handle"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-commonparent",
"text": " Both of <code>renderPass</code>, and the elements of <code>pAttachments</code> that are valid handles of non-ignored parameters <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(VK_VERSION_1_2,VK_KHR_depth_stencil_resolve)": [
{
"vuid": "VUID-VkFramebufferCreateInfo-pAttachments-02634",
"text": " If <code>flags</code> does not include <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, each element of <code>pAttachments</code> that is used as a depth/stencil 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_DEPTH_STENCIL_ATTACHMENT_BIT</code>"
}
],
"(VK_EXT_fragment_density_map)": [
{
"vuid": "VUID-VkFramebufferCreateInfo-pAttachments-02552",
"text": " Each element of <code>pAttachments</code> that is used as a fragment density map attachment by <code>renderPass</code> <strong class=\"purple\">must</strong> not have been created with a <code>flags</code> value including <code>VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT</code>"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-renderPass-02553",
"text": " If <code>renderPass</code> has a fragment density map attachment and <a href=\"#features-nonsubsampledimages\">non-subsample image feature</a> is not enabled, each element of <code>pAttachments</code> <strong class=\"purple\">must</strong> have been created with a <code>flags</code> value including <code>VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT</code> unless that element is the fragment density map attachment"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-pAttachments-02554",
"text": " If <code>flags</code> does not include <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, each element of <code>pAttachments</code> <strong class=\"purple\">must</strong> have dimensions at least as large as the corresponding framebuffer dimension except for any element that is referenced by <code>fragmentDensityMapAttachment</code>"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-pAttachments-02555",
"text": " If <code>flags</code> does not include <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, an element of <code>pAttachments</code> that is referenced by <code>fragmentDensityMapAttachment</code> <strong class=\"purple\">must</strong> have a width at least as large as \\(\\left\\lceil{\\frac{width}{maxFragmentDensityTexelSize_{width}}}\\right\\rceil\\)"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-pAttachments-02556",
"text": " If <code>flags</code> does not include <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, an element of <code>pAttachments</code> that is referenced by <code>fragmentDensityMapAttachment</code> <strong class=\"purple\">must</strong> have a height at least as large as \\(\\left\\lceil{\\frac{height}{maxFragmentDensityTexelSize_{height}}}\\right\\rceil\\)"
}
],
"!(VK_EXT_fragment_density_map)": [
{
"vuid": "VUID-VkFramebufferCreateInfo-pAttachments-00882",
"text": " If <code>flags</code> does not include <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, each element of <code>pAttachments</code> <strong class=\"purple\">must</strong> have dimensions at least as large as the corresponding framebuffer dimension"
}
],
"!(VK_EXT_fragment_density_map)+(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-VkFramebufferCreateInfo-renderPass-02743",
"text": " If <code>renderPass</code> was specified with non-zero view masks, each element of <code>pAttachments</code> <strong class=\"purple\">must</strong> have a <code>layerCount</code> greater than the index of the most significant bit set in any of those view masks"
}
],
"(VK_EXT_fragment_density_map)+!(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-VkFramebufferCreateInfo-pAttachments-02744",
"text": " An element of <code>pAttachments</code> that is referenced by <code>fragmentDensityMapAttachment</code> <strong class=\"purple\">must</strong> have a <code>layerCount</code> equal to <code>1</code>"
}
],
"(VK_EXT_fragment_density_map)+(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-VkFramebufferCreateInfo-renderPass-02745",
"text": " If <code>renderPass</code> was specified with non-zero view masks, each element of <code>pAttachments</code> that is not referenced by <code>fragmentDensityMapAttachment</code> <strong class=\"purple\">must</strong> have a <code>layerCount</code> greater than the index of the most significant bit set in any of those view masks"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-renderPass-02746",
"text": " If <code>renderPass</code> was specified with non-zero view masks, each element of <code>pAttachments</code> that is referenced by <code>fragmentDensityMapAttachment</code> <strong class=\"purple\">must</strong> have a <code>layerCount</code> equal to <code>1</code> or greater than the index of the most significant bit set in any of those view masks"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-renderPass-02747",
"text": " If <code>renderPass</code> was not specified with non-zero view masks, each element of <code>pAttachments</code> that is referenced by <code>fragmentDensityMapAttachment</code> <strong class=\"purple\">must</strong> have a <code>layerCount</code> equal to <code>1</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-VkFramebufferCreateInfo-renderPass-02531",
"text": " If <code>renderPass</code> was specified with non-zero view masks, <code>layers</code> <strong class=\"purple\">must</strong> be <code>1</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_maintenance1)": [
{
"vuid": "VUID-VkFramebufferCreateInfo-pAttachments-00891",
"text": " If <code>flags</code> does not include <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, 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"
}
],
"(VK_VERSION_1_2,VK_KHR_imageless_framebuffer)": [
{
"vuid": "VUID-VkFramebufferCreateInfo-flags-03189",
"text": " If the <a href=\"#features-imagelessFramebuffer\">imageless framebuffer</a> feature is not enabled, <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-flags-03190",
"text": " If <code>flags</code> includes <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, the <code>pNext</code> chain <strong class=\"purple\">must</strong> include a <a href=\"#VkFramebufferAttachmentsCreateInfo\">VkFramebufferAttachmentsCreateInfo</a> structure"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-flags-03191",
"text": " If <code>flags</code> includes <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, the <code>attachmentImageInfoCount</code> member of a <a href=\"#VkFramebufferAttachmentsCreateInfo\">VkFramebufferAttachmentsCreateInfo</a> structure included in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be equal to either zero or <code>attachmentCount</code>"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-flags-03201",
"text": " If <code>flags</code> includes <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, the <code>usage</code> member of any element of the <code>pAttachmentImageInfos</code> member of a <a href=\"#VkFramebufferAttachmentsCreateInfo\">VkFramebufferAttachmentsCreateInfo</a> structure included in the <code>pNext</code> chain that refers to an attachment used as a color attachment or resolve attachment by <code>renderPass</code> <strong class=\"purple\">must</strong> include <code>VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT</code>"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-flags-03202",
"text": " If <code>flags</code> includes <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, the <code>usage</code> member of any element of the <code>pAttachmentImageInfos</code> member of a <a href=\"#VkFramebufferAttachmentsCreateInfo\">VkFramebufferAttachmentsCreateInfo</a> structure included in the <code>pNext</code> chain that refers to an attachment used as a depth/stencil attachment by <code>renderPass</code> <strong class=\"purple\">must</strong> include <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code>"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-flags-03204",
"text": " If <code>flags</code> includes <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, the <code>usage</code> member of any element of the <code>pAttachmentImageInfos</code> member of a <a href=\"#VkFramebufferAttachmentsCreateInfo\">VkFramebufferAttachmentsCreateInfo</a> structure included in the <code>pNext</code> chain that refers to an attachment used as an input attachment by <code>renderPass</code> <strong class=\"purple\">must</strong> include <code>VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT</code>"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-flags-03205",
"text": " If <code>flags</code> includes <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, at least one element of the <code>pViewFormats</code> member of any element of the <code>pAttachmentImageInfos</code> member of a <a href=\"#VkFramebufferAttachmentsCreateInfo\">VkFramebufferAttachmentsCreateInfo</a> structure included in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be equal to the corresponding value of <a href=\"#VkAttachmentDescription\">VkAttachmentDescription</a>::<code>format</code> used to create <code>renderPass</code>"
}
],
"(VK_VERSION_1_2,VK_KHR_imageless_framebuffer)+!(VK_EXT_fragment_density_map)": [
{
"vuid": "VUID-VkFramebufferCreateInfo-flags-03192",
"text": " If <code>flags</code> includes <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, the <code>width</code> member of any element of the <code>pAttachmentImageInfos</code> member of a <a href=\"#VkFramebufferAttachmentsCreateInfo\">VkFramebufferAttachmentsCreateInfo</a> structure included in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be greater than or equal to <code>width</code>"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-flags-03193",
"text": " If <code>flags</code> includes <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, the <code>height</code> member of any element of the <code>pAttachmentImageInfos</code> member of a <a href=\"#VkFramebufferAttachmentsCreateInfo\">VkFramebufferAttachmentsCreateInfo</a> structure included in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be greater than or equal to <code>height</code>"
}
],
"(VK_VERSION_1_2,VK_KHR_imageless_framebuffer)+(VK_EXT_fragment_density_map)": [
{
"vuid": "VUID-VkFramebufferCreateInfo-flags-03194",
"text": " If <code>flags</code> includes <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, the <code>width</code> member of any element of the <code>pAttachmentImageInfos</code> member of a <a href=\"#VkFramebufferAttachmentsCreateInfo\">VkFramebufferAttachmentsCreateInfo</a> structure included in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be greater than or equal to <code>width</code>, except for any element that is referenced by <a href=\"#VkRenderPassFragmentDensityMapCreateInfoEXT\">VkRenderPassFragmentDensityMapCreateInfoEXT</a>::<code>fragmentDensityMapAttachment</code> in <code>renderPass</code>"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-flags-03195",
"text": " If <code>flags</code> includes <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, the <code>height</code> member of any element of the <code>pAttachmentImageInfos</code> member of a <a href=\"#VkFramebufferAttachmentsCreateInfo\">VkFramebufferAttachmentsCreateInfo</a> structure included in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be greater than or equal to <code>height</code>, except for any element that is referenced by <a href=\"#VkRenderPassFragmentDensityMapCreateInfoEXT\">VkRenderPassFragmentDensityMapCreateInfoEXT</a>::<code>fragmentDensityMapAttachment</code> in <code>renderPass</code>"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-flags-03196",
"text": " If <code>flags</code> includes <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, the <code>width</code> member of any element of the <code>pAttachmentImageInfos</code> member of a <a href=\"#VkFramebufferAttachmentsCreateInfo\">VkFramebufferAttachmentsCreateInfo</a> structure included in the <code>pNext</code> chain that is referenced by <a href=\"#VkRenderPassFragmentDensityMapCreateInfoEXT\">VkRenderPassFragmentDensityMapCreateInfoEXT</a>::<code>fragmentDensityMapAttachment</code> in <code>renderPass</code> <strong class=\"purple\">must</strong> be greater than or equal to \\(\\left\\lceil{\\frac{width}{maxFragmentDensityTexelSize_{width}}}\\right\\rceil\\)"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-flags-03197",
"text": " If <code>flags</code> includes <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, the <code>height</code> member of any element of the <code>pAttachmentImageInfos</code> member of a <a href=\"#VkFramebufferAttachmentsCreateInfo\">VkFramebufferAttachmentsCreateInfo</a> structure included in the <code>pNext</code> chain that is referenced by <a href=\"#VkRenderPassFragmentDensityMapCreateInfoEXT\">VkRenderPassFragmentDensityMapCreateInfoEXT</a>::<code>fragmentDensityMapAttachment</code> in <code>renderPass</code> <strong class=\"purple\">must</strong> be greater than or equal to \\(\\left\\lceil{\\frac{height}{maxFragmentDensityTexelSize_{height}}}\\right\\rceil\\)"
}
],
"(VK_VERSION_1_2,VK_KHR_imageless_framebuffer)+(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-VkFramebufferCreateInfo-renderPass-03198",
"text": " If multiview is enabled for <code>renderPass</code>, and <code>flags</code> includes <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, the <code>layerCount</code> member of any element of the <code>pAttachmentImageInfos</code> member of a <a href=\"#VkFramebufferAttachmentsCreateInfo\">VkFramebufferAttachmentsCreateInfo</a> structure included in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be greater than the maximum bit index set in the view mask in the subpasses in which it is used in <code>renderPass</code>"
},
{
"vuid": "VUID-VkFramebufferCreateInfo-renderPass-03199",
"text": " If multiview is not enabled for <code>renderPass</code>, and <code>flags</code> includes <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, the <code>layerCount</code> member of any element of the <code>pAttachmentImageInfos</code> member of a <a href=\"#VkFramebufferAttachmentsCreateInfo\">VkFramebufferAttachmentsCreateInfo</a> structure included in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be greater than or equal to <code>layers</code>"
}
],
"(VK_VERSION_1_2,VK_KHR_imageless_framebuffer)+!(VK_VERSION_1_1+VK_KHR_multiview)": [
{
"vuid": "VUID-VkFramebufferCreateInfo-flags-03200",
"text": " If <code>flags</code> includes <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, the <code>layerCount</code> member of any element of the <code>pAttachmentImageInfos</code> member of a <a href=\"#VkFramebufferAttachmentsCreateInfo\">VkFramebufferAttachmentsCreateInfo</a> structure included in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be greater than or equal to <code>layers</code>"
}
],
"(VK_VERSION_1_2,VK_KHR_imageless_framebuffer)+(VK_KHR_depth_stencil_resolve)": [
{
"vuid": "VUID-VkFramebufferCreateInfo-flags-03203",
"text": " If <code>flags</code> includes <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, the <code>usage</code> member of any element of the <code>pAttachmentImageInfos</code> member of a <a href=\"#VkFramebufferAttachmentsCreateInfo\">VkFramebufferAttachmentsCreateInfo</a> structure included in the <code>pNext</code> chain that refers to an attachment used as a depth/stencil resolve attachment by <code>renderPass</code> <strong class=\"purple\">must</strong> include <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code>"
}
]
},
"VkFramebufferAttachmentsCreateInfo": {
"(VK_VERSION_1_2,VK_KHR_imageless_framebuffer)": [
{
"vuid": "VUID-VkFramebufferAttachmentsCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkFramebufferAttachmentsCreateInfo-pAttachmentImageInfos-parameter",
"text": " If <code>attachmentImageInfoCount</code> is not <code>0</code>, <code>pAttachmentImageInfos</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>attachmentImageInfoCount</code> valid <a href=\"#VkFramebufferAttachmentImageInfo\">VkFramebufferAttachmentImageInfo</a> structures"
}
]
},
"VkFramebufferAttachmentImageInfo": {
"(VK_VERSION_1_2,VK_KHR_imageless_framebuffer)": [
{
"vuid": "VUID-VkFramebufferAttachmentImageInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO</code>"
},
{
"vuid": "VUID-VkFramebufferAttachmentImageInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkFramebufferAttachmentImageInfo-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageCreateFlagBits\">VkImageCreateFlagBits</a> values"
},
{
"vuid": "VUID-VkFramebufferAttachmentImageInfo-usage-parameter",
"text": " <code>usage</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageUsageFlagBits\">VkImageUsageFlagBits</a> values"
},
{
"vuid": "VUID-VkFramebufferAttachmentImageInfo-usage-requiredbitmask",
"text": " <code>usage</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-VkFramebufferAttachmentImageInfo-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"
}
]
},
"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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkFramebuffer\">VkFramebuffer</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> 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 view of the framebuffer specified in the <code>framebuffer</code> member of <code>pRenderPassBegin</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-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 view of the framebuffer specified in the <code>framebuffer</code> member of <code>pRenderPassBegin</code> <strong class=\"purple\">must</strong> have been created with a <code>usage</code> value including <code>VK_IMAGE_USAGE_SAMPLED_BIT</code> or <code>VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT</code>"
},
{
"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 view of the framebuffer specified in the <code>framebuffer</code> member of <code>pRenderPassBegin</code> <strong class=\"purple\">must</strong> have been created with a <code>usage</code> value including <code>VK_IMAGE_USAGE_TRANSFER_SRC_BIT</code>"
},
{
"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 view of the framebuffer specified in the <code>framebuffer</code> member of <code>pRenderPassBegin</code> <strong class=\"purple\">must</strong> have been created with a <code>usage</code> value including <code>VK_IMAGE_USAGE_TRANSFER_DST_BIT</code>"
},
{
"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-framebuffer-02532",
"text": " For any attachment in <code>framebuffer</code> that is used by <code>renderPass</code> and is bound to memory locations that are also bound to another attachment used by <code>renderPass</code>, and if at least one of those uses causes either attachment to be written to, both attachments <strong class=\"purple\">must</strong> have had the <code>VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT</code> set"
},
{
"vuid": "VUID-vkCmdBeginRenderPass-pAttachments-04102",
"text": " Each element of the <code>pAttachments</code> of <code>framebuffer</code> that is referenced by any element of the <code>pInputAttachments</code> of any element of <code>pSubpasses</code> of <code>renderPass</code> <strong class=\"purple\">must</strong> have <a href=\"#resources-image-view-format-features\">image view format features</a> containing at least <code>VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT</code> or <code>VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT</code>"
},
{
"vuid": "VUID-vkCmdBeginRenderPass-pAttachments-04103",
"text": " Each element of the <code>pAttachments</code> of <code>framebuffer</code> that is referenced by any element of the <code>pColorAttachments</code> of any element of <code>pSubpasses</code> of <code>renderPass</code> <strong class=\"purple\">must</strong> have <a href=\"#resources-image-view-format-features\">image view format features</a> containing <code>VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT</code>"
},
{
"vuid": "VUID-vkCmdBeginRenderPass-pAttachments-04104",
"text": " Each element of the <code>pAttachments</code> of <code>framebuffer</code> that is referenced by any element of the <code>pResolveAttachments</code> of any element of <code>pSubpasses</code> of <code>renderPass</code> <strong class=\"purple\">must</strong> have <a href=\"#resources-image-view-format-features\">image view format features</a> containing <code>VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT</code>"
},
{
"vuid": "VUID-vkCmdBeginRenderPass-pAttachments-04105",
"text": " Each element of the <code>pAttachments</code> of <code>framebuffer</code> that is referenced by any element of the <code>pDepthStencilAttachment</code> of any element of <code>pSubpasses</code> of <code>renderPass</code> <strong class=\"purple\">must</strong> have <a href=\"#resources-image-view-format-features\">image view format features</a> containing <code>VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT</code>"
},
{
"vuid": "VUID-vkCmdBeginRenderPass-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdBeginRenderPass-pRenderPassBegin-parameter",
"text": " <code>pRenderPassBegin</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkRenderPassBeginInfo\">VkRenderPassBeginInfo</a> 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 <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 view of the framebuffer specified in the <code>framebuffer</code> member of <code>pRenderPassBegin</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>"
}
],
"(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 view of the framebuffer specified in the <code>framebuffer</code> member of <code>pRenderPassBegin</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>"
}
],
"(VK_VERSION_1_1,VK_KHR_maintenance2)+(VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts)": [
{
"vuid": "VUID-vkCmdBeginRenderPass-initialLayout-02842",
"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_ATTACHMENT_OPTIMAL</code>, or <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL</code>, or <code>VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL</code> then the corresponding attachment image view of the framebuffer specified in the <code>framebuffer</code> member of <code>pRenderPassBegin</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-vkCmdBeginRenderPass-stencilInitialLayout-02843",
"text": " If any of the <code>stencilInitialLayout</code> or <code>stencilFinalLayout</code> member of the <code>VkAttachmentDescriptionStencilLayout</code> structures or the <code>stencilLayout</code> member of the <code>VkAttachmentReferenceStencilLayout</code> structures specified when creating the render pass specified in the <code>renderPass</code> member of <code>pRenderPassBegin</code> is <code>VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL</code>, or <code>VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL</code> then the corresponding attachment image view of the framebuffer specified in the <code>framebuffer</code> member of <code>pRenderPassBegin</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>"
}
]
},
"vkCmdBeginRenderPass2": {
"(VK_VERSION_1_2,VK_KHR_create_renderpass2)": [
{
"vuid": "VUID-vkCmdBeginRenderPass2-framebuffer-02779",
"text": " Both the <code>framebuffer</code> and <code>renderPass</code> members of <code>pRenderPassBegin</code> <strong class=\"purple\">must</strong> have been created on the same <a href=\"#VkDevice\">VkDevice</a> that <code>commandBuffer</code> was allocated on"
},
{
"vuid": "VUID-vkCmdBeginRenderPass2-initialLayout-03094",
"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 view of the framebuffer specified in the <code>framebuffer</code> member of <code>pRenderPassBegin</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-vkCmdBeginRenderPass2-initialLayout-03096",
"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 view of the framebuffer specified in the <code>framebuffer</code> member of <code>pRenderPassBegin</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-vkCmdBeginRenderPass2-initialLayout-03097",
"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 view of the framebuffer specified in the <code>framebuffer</code> member of <code>pRenderPassBegin</code> <strong class=\"purple\">must</strong> have been created with a <code>usage</code> value including <code>VK_IMAGE_USAGE_SAMPLED_BIT</code> or <code>VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT</code>"
},
{
"vuid": "VUID-vkCmdBeginRenderPass2-initialLayout-03098",
"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 view of the framebuffer specified in the <code>framebuffer</code> member of <code>pRenderPassBegin</code> <strong class=\"purple\">must</strong> have been created with a <code>usage</code> value including <code>VK_IMAGE_USAGE_TRANSFER_SRC_BIT</code>"
},
{
"vuid": "VUID-vkCmdBeginRenderPass2-initialLayout-03099",
"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 view of the framebuffer specified in the <code>framebuffer</code> member of <code>pRenderPassBegin</code> <strong class=\"purple\">must</strong> have been created with a <code>usage</code> value including <code>VK_IMAGE_USAGE_TRANSFER_DST_BIT</code>"
},
{
"vuid": "VUID-vkCmdBeginRenderPass2-initialLayout-03100",
"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-vkCmdBeginRenderPass2-srcStageMask-03101",
"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-vkCmdBeginRenderPass2-framebuffer-02533",
"text": " For any attachment in <code>framebuffer</code> that is used by <code>renderPass</code> and is bound to memory locations that are also bound to another attachment used by <code>renderPass</code>, and if at least one of those uses causes either attachment to be written to, both attachments <strong class=\"purple\">must</strong> have had the <code>VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT</code> set"
},
{
"vuid": "VUID-vkCmdBeginRenderPass2-pAttachments-04106",
"text": " Each element of the <code>pAttachments</code> of <code>framebuffer</code> that is referenced by any element of the <code>pInputAttachments</code> of any element of <code>pSubpasses</code> of <code>renderPass</code> <strong class=\"purple\">must</strong> have <a href=\"#resources-image-view-format-features\">image view format features</a> contain at least <code>VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT</code> or <code>VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT</code>"
},
{
"vuid": "VUID-vkCmdBeginRenderPass2-pAttachments-04107",
"text": " Each element of the <code>pAttachments</code> of <code>framebuffer</code> that is referenced by any element of the <code>pColorAttachments</code> of any element of <code>pSubpasses</code> of <code>renderPass</code> <strong class=\"purple\">must</strong> have <a href=\"#resources-image-view-format-features\">image view format features</a> contain <code>VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT</code>"
},
{
"vuid": "VUID-vkCmdBeginRenderPass2-pAttachments-04108",
"text": " Each element of the <code>pAttachments</code> of <code>framebuffer</code> that is referenced by any element of the <code>pResolveAttachments</code> of any element of <code>pSubpasses</code> of <code>renderPass</code> <strong class=\"purple\">must</strong> have <a href=\"#resources-image-view-format-features\">image view format features</a> contain <code>VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT</code>"
},
{
"vuid": "VUID-vkCmdBeginRenderPass2-pAttachments-04109",
"text": " Each element of the <code>pAttachments</code> of <code>framebuffer</code> that is referenced by any element of the <code>pDepthStencilAttachment</code> of any element of <code>pSubpasses</code> of <code>renderPass</code> <strong class=\"purple\">must</strong> have <a href=\"#resources-image-view-format-features\">image view format features</a> contain <code>VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT</code>"
},
{
"vuid": "VUID-vkCmdBeginRenderPass2-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdBeginRenderPass2-pRenderPassBegin-parameter",
"text": " <code>pRenderPassBegin</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkRenderPassBeginInfo\">VkRenderPassBeginInfo</a> structure"
},
{
"vuid": "VUID-vkCmdBeginRenderPass2-pSubpassBeginInfo-parameter",
"text": " <code>pSubpassBeginInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkSubpassBeginInfo\">VkSubpassBeginInfo</a> structure"
},
{
"vuid": "VUID-vkCmdBeginRenderPass2-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdBeginRenderPass2-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdBeginRenderPass2-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
},
{
"vuid": "VUID-vkCmdBeginRenderPass2-bufferlevel",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a primary <code>VkCommandBuffer</code>"
}
],
"(VK_VERSION_1_2,VK_KHR_create_renderpass2)+(VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts)": [
{
"vuid": "VUID-vkCmdBeginRenderPass2-initialLayout-02844",
"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_ATTACHMENT_OPTIMAL</code>, or <code>VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL</code>, or <code>VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL</code> then the corresponding attachment image view of the framebuffer specified in the <code>framebuffer</code> member of <code>pRenderPassBegin</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-vkCmdBeginRenderPass2-stencilInitialLayout-02845",
"text": " If any of the <code>stencilInitialLayout</code> or <code>stencilFinalLayout</code> member of the <code>VkAttachmentDescriptionStencilLayout</code> structures or the <code>stencilLayout</code> member of the <code>VkAttachmentReferenceStencilLayout</code> structures specified when creating the render pass specified in the <code>renderPass</code> member of <code>pRenderPassBegin</code> is <code>VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL</code>, or <code>VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL</code> then the corresponding attachment image view of the framebuffer specified in the <code>framebuffer</code> member of <code>pRenderPassBegin</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>"
}
]
},
"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-renderPass-00904",
"text": " <code>renderPass</code> <strong class=\"purple\">must</strong> be <a href=\"#renderpass-compatibility\">compatible</a> with the <code>renderPass</code> member of the <a href=\"#VkFramebufferCreateInfo\">VkFramebufferCreateInfo</a> 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>, <a href=\"#VkRenderPassAttachmentBeginInfo\">VkRenderPassAttachmentBeginInfo</a>, <a href=\"#VkRenderPassSampleLocationsBeginInfoEXT\">VkRenderPassSampleLocationsBeginInfoEXT</a>, or <a href=\"#VkRenderPassTransformBeginInfoQCOM\">VkRenderPassTransformBeginInfoQCOM</a>"
},
{
"vuid": "VUID-VkRenderPassBeginInfo-sType-unique",
"text": " The <code>sType</code> value of each struct 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 <a href=\"#VkRenderPass\">VkRenderPass</a> handle"
},
{
"vuid": "VUID-VkRenderPassBeginInfo-framebuffer-parameter",
"text": " <code>framebuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFramebuffer\">VkFramebuffer</a> handle"
},
{
"vuid": "VUID-VkRenderPassBeginInfo-pClearValues-parameter",
"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> <a href=\"#VkClearValue\">VkClearValue</a> unions"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a>"
}
],
"!(VK_VERSION_1_1,VK_KHR_device_group)": [
{
"vuid": "VUID-VkRenderPassBeginInfo-renderArea-02846",
"text": " <code>renderArea.offset.x</code> <strong class=\"purple\">must</strong> be greater than or equal to 0"
},
{
"vuid": "VUID-VkRenderPassBeginInfo-renderArea-02847",
"text": " <code>renderArea.offset.y</code> <strong class=\"purple\">must</strong> be greater than or equal to 0"
},
{
"vuid": "VUID-VkRenderPassBeginInfo-renderArea-02848",
"text": " <span class=\"eq\"><code>renderArea.offset.x</code> &#43; <code>renderArea.offset.width</code></span> <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkFramebufferCreateInfo\">VkFramebufferCreateInfo</a>::<code>width</code> the <code>framebuffer</code> was created with"
},
{
"vuid": "VUID-VkRenderPassBeginInfo-renderArea-02849",
"text": " <span class=\"eq\"><code>renderArea.offset.y</code> &#43; <code>renderArea.offset.height</code></span> <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkFramebufferCreateInfo\">VkFramebufferCreateInfo</a>::<code>height</code> the <code>framebuffer</code> was created with"
}
],
"(VK_VERSION_1_1,VK_KHR_device_group)": [
{
"vuid": "VUID-VkRenderPassBeginInfo-pNext-02850",
"text": " If the <code>pNext</code> chain does not contain <a href=\"#VkDeviceGroupRenderPassBeginInfo\">VkDeviceGroupRenderPassBeginInfo</a> or its <code>deviceRenderAreaCount</code> member is equal to 0, <code>renderArea.offset.x</code> <strong class=\"purple\">must</strong> be greater than or equal to 0"
},
{
"vuid": "VUID-VkRenderPassBeginInfo-pNext-02851",
"text": " If the <code>pNext</code> chain does not contain <a href=\"#VkDeviceGroupRenderPassBeginInfo\">VkDeviceGroupRenderPassBeginInfo</a> or its <code>deviceRenderAreaCount</code> member is equal to 0, <code>renderArea.offset.y</code> <strong class=\"purple\">must</strong> be greater than or equal to 0"
},
{
"vuid": "VUID-VkRenderPassBeginInfo-pNext-02852",
"text": " If the <code>pNext</code> chain does not contain <a href=\"#VkDeviceGroupRenderPassBeginInfo\">VkDeviceGroupRenderPassBeginInfo</a> or its <code>deviceRenderAreaCount</code> member is equal to 0, <span class=\"eq\"><code>renderArea.offset.x</code> &#43; <code>renderArea.offset.width</code></span> <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkFramebufferCreateInfo\">VkFramebufferCreateInfo</a>::<code>width</code> the <code>framebuffer</code> was created with"
},
{
"vuid": "VUID-VkRenderPassBeginInfo-pNext-02853",
"text": " If the <code>pNext</code> chain does not contain <a href=\"#VkDeviceGroupRenderPassBeginInfo\">VkDeviceGroupRenderPassBeginInfo</a> or its <code>deviceRenderAreaCount</code> member is equal to 0, <span class=\"eq\"><code>renderArea.offset.y</code> &#43; <code>renderArea.offset.height</code></span> <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkFramebufferCreateInfo\">VkFramebufferCreateInfo</a>::<code>height</code> the <code>framebuffer</code> was created with"
},
{
"vuid": "VUID-VkRenderPassBeginInfo-pNext-02854",
"text": " If the <code>pNext</code> chain contains <a href=\"#VkDeviceGroupRenderPassBeginInfo\">VkDeviceGroupRenderPassBeginInfo</a>, the <code>offset.x</code> member of each element of <code>pDeviceRenderAreas</code> <strong class=\"purple\">must</strong> be greater than or equal to 0"
},
{
"vuid": "VUID-VkRenderPassBeginInfo-pNext-02855",
"text": " If the <code>pNext</code> chain contains <a href=\"#VkDeviceGroupRenderPassBeginInfo\">VkDeviceGroupRenderPassBeginInfo</a>, the <code>offset.y</code> member of each element of <code>pDeviceRenderAreas</code> <strong class=\"purple\">must</strong> be greater than or equal to 0"
},
{
"vuid": "VUID-VkRenderPassBeginInfo-pNext-02856",
"text": " If the <code>pNext</code> chain contains <a href=\"#VkDeviceGroupRenderPassBeginInfo\">VkDeviceGroupRenderPassBeginInfo</a>, <span class=\"eq\"><code>offset.x</code> &#43; <code>offset.width</code></span> of each element of <code>pDeviceRenderAreas</code> <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkFramebufferCreateInfo\">VkFramebufferCreateInfo</a>::<code>width</code> the <code>framebuffer</code> was created with"
},
{
"vuid": "VUID-VkRenderPassBeginInfo-pNext-02857",
"text": " If the <code>pNext</code> chain contains <a href=\"#VkDeviceGroupRenderPassBeginInfo\">VkDeviceGroupRenderPassBeginInfo</a>, <span class=\"eq\"><code>offset.y</code> &#43; <code>offset.height</code></span> of each element of <code>pDeviceRenderAreas</code> <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkFramebufferCreateInfo\">VkFramebufferCreateInfo</a>::<code>height</code> the <code>framebuffer</code> was created with"
}
],
"(VK_VERSION_1_2,VK_KHR_imageless_framebuffer)": [
{
"vuid": "VUID-VkRenderPassBeginInfo-framebuffer-03207",
"text": " If <code>framebuffer</code> was created with a <a href=\"#VkFramebufferCreateInfo\">VkFramebufferCreateInfo</a>::<code>flags</code> value that did not include <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, and the <code>pNext</code> chain includes a <a href=\"#VkRenderPassAttachmentBeginInfo\">VkRenderPassAttachmentBeginInfo</a> structure, its <code>attachmentCount</code> <strong class=\"purple\">must</strong> be zero"
},
{
"vuid": "VUID-VkRenderPassBeginInfo-framebuffer-03208",
"text": " If <code>framebuffer</code> was created with a <a href=\"#VkFramebufferCreateInfo\">VkFramebufferCreateInfo</a>::<code>flags</code> value that included <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, the <code>attachmentCount</code> of a <a href=\"#VkRenderPassAttachmentBeginInfo\">VkRenderPassAttachmentBeginInfo</a> structure included in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be equal to the value of <a href=\"#VkFramebufferAttachmentsCreateInfo\">VkFramebufferAttachmentsCreateInfo</a>::<code>attachmentImageInfoCount</code> used to create <code>framebuffer</code>"
},
{
"vuid": "VUID-VkRenderPassBeginInfo-framebuffer-02780",
"text": " If <code>framebuffer</code> was created with a <a href=\"#VkFramebufferCreateInfo\">VkFramebufferCreateInfo</a>::<code>flags</code> value that included <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT_KHR</code>, each element of the <code>pAttachments</code> member of a <a href=\"#VkRenderPassAttachmentBeginInfo\">VkRenderPassAttachmentBeginInfo</a> structure included in the <code>pNext</code> chain <strong class=\"purple\">must</strong> have been created on the same <a href=\"#VkDevice\">VkDevice</a> as <code>framebuffer</code> and <code>renderPass</code>"
},
{
"vuid": "VUID-VkRenderPassBeginInfo-framebuffer-03209",
"text": " If <code>framebuffer</code> was created with a <a href=\"#VkFramebufferCreateInfo\">VkFramebufferCreateInfo</a>::<code>flags</code> value that included <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, each element of the <code>pAttachments</code> member of a <a href=\"#VkRenderPassAttachmentBeginInfo\">VkRenderPassAttachmentBeginInfo</a> structure included in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be a <a href=\"#VkImageView\">VkImageView</a> of an image created with a value of <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>::<code>flags</code> equal to the <code>flags</code> member of the corresponding element of <a href=\"#VkFramebufferAttachmentsCreateInfoKHR\">VkFramebufferAttachmentsCreateInfoKHR</a>::<code>pAttachments</code> used to create <code>framebuffer</code>"
},
{
"vuid": "VUID-VkRenderPassBeginInfo-framebuffer-03210",
"text": " If <code>framebuffer</code> was created with a <a href=\"#VkFramebufferCreateInfo\">VkFramebufferCreateInfo</a>::<code>flags</code> value that included <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, each element of the <code>pAttachments</code> member of a <a href=\"#VkRenderPassAttachmentBeginInfo\">VkRenderPassAttachmentBeginInfo</a> structure included in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be a <a href=\"#VkImageView\">VkImageView</a> of an image created with a value of <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>::<code>usage</code> equal to the <code>usage</code> member of the corresponding element of <a href=\"#VkFramebufferAttachmentsCreateInfo\">VkFramebufferAttachmentsCreateInfo</a>::<code>pAttachments</code> used to create <code>framebuffer</code>"
},
{
"vuid": "VUID-VkRenderPassBeginInfo-framebuffer-03211",
"text": " If <code>framebuffer</code> was created with a <a href=\"#VkFramebufferCreateInfo\">VkFramebufferCreateInfo</a>::<code>flags</code> value that included <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, each element of the <code>pAttachments</code> member of a <a href=\"#VkRenderPassAttachmentBeginInfo\">VkRenderPassAttachmentBeginInfo</a> structure included in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be a <a href=\"#VkImageView\">VkImageView</a> with a width equal to the <code>width</code> member of the corresponding element of <a href=\"#VkFramebufferAttachmentsCreateInfo\">VkFramebufferAttachmentsCreateInfo</a>::<code>pAttachments</code> used to create <code>framebuffer</code>"
},
{
"vuid": "VUID-VkRenderPassBeginInfo-framebuffer-03212",
"text": " If <code>framebuffer</code> was created with a <a href=\"#VkFramebufferCreateInfo\">VkFramebufferCreateInfo</a>::<code>flags</code> value that included <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, each element of the <code>pAttachments</code> member of a <a href=\"#VkRenderPassAttachmentBeginInfo\">VkRenderPassAttachmentBeginInfo</a> structure included in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be a <a href=\"#VkImageView\">VkImageView</a> with a height equal to the <code>height</code> member of the corresponding element of <a href=\"#VkFramebufferAttachmentsCreateInfo\">VkFramebufferAttachmentsCreateInfo</a>::<code>pAttachments</code> used to create <code>framebuffer</code>"
},
{
"vuid": "VUID-VkRenderPassBeginInfo-framebuffer-03213",
"text": " If <code>framebuffer</code> was created with a <a href=\"#VkFramebufferCreateInfo\">VkFramebufferCreateInfo</a>::<code>flags</code> value that included <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, each element of the <code>pAttachments</code> member of a <a href=\"#VkRenderPassAttachmentBeginInfo\">VkRenderPassAttachmentBeginInfo</a> structure included in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be a <a href=\"#VkImageView\">VkImageView</a> of an image created with a value of <a href=\"#VkImageViewCreateInfo\">VkImageViewCreateInfo</a>::<code>subresourceRange.layerCount</code> equal to the <code>layerCount</code> member of the corresponding element of <a href=\"#VkFramebufferAttachmentsCreateInfo\">VkFramebufferAttachmentsCreateInfo</a>::<code>pAttachments</code> used to create <code>framebuffer</code>"
},
{
"vuid": "VUID-VkRenderPassBeginInfo-framebuffer-03214",
"text": " If <code>framebuffer</code> was created with a <a href=\"#VkFramebufferCreateInfo\">VkFramebufferCreateInfo</a>::<code>flags</code> value that included <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, each element of the <code>pAttachments</code> member of a <a href=\"#VkRenderPassAttachmentBeginInfo\">VkRenderPassAttachmentBeginInfo</a> structure included in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be a <a href=\"#VkImageView\">VkImageView</a> of an image created with a value of <a href=\"#VkImageFormatListCreateInfo\">VkImageFormatListCreateInfo</a>::<code>viewFormatCount</code> equal to the <code>viewFormatCount</code> member of the corresponding element of <a href=\"#VkFramebufferAttachmentsCreateInfo\">VkFramebufferAttachmentsCreateInfo</a>::<code>pAttachments</code> used to create <code>framebuffer</code>"
},
{
"vuid": "VUID-VkRenderPassBeginInfo-framebuffer-03215",
"text": " If <code>framebuffer</code> was created with a <a href=\"#VkFramebufferCreateInfo\">VkFramebufferCreateInfo</a>::<code>flags</code> value that included <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, each element of the <code>pAttachments</code> member of a <a href=\"#VkRenderPassAttachmentBeginInfo\">VkRenderPassAttachmentBeginInfo</a> structure included in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be a <a href=\"#VkImageView\">VkImageView</a> of an image created with a set of elements in <a href=\"#VkImageFormatListCreateInfo\">VkImageFormatListCreateInfo</a>::<code>pViewFormats</code> equal to the set of elements in the <code>pViewFormats</code> member of the corresponding element of <a href=\"#VkFramebufferAttachmentsCreateInfo\">VkFramebufferAttachmentsCreateInfo</a>::<code>pAttachments</code> used to create <code>framebuffer</code>"
},
{
"vuid": "VUID-VkRenderPassBeginInfo-framebuffer-03216",
"text": " If <code>framebuffer</code> was created with a <a href=\"#VkFramebufferCreateInfo\">VkFramebufferCreateInfo</a>::<code>flags</code> value that included <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, each element of the <code>pAttachments</code> member of a <a href=\"#VkRenderPassAttachmentBeginInfo\">VkRenderPassAttachmentBeginInfo</a> structure included in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be a <a href=\"#VkImageView\">VkImageView</a> of an image created with a value of <a href=\"#VkImageViewCreateInfo\">VkImageViewCreateInfo</a>::<code>format</code> equal to the corresponding value of <a href=\"#VkAttachmentDescription\">VkAttachmentDescription</a>::<code>format</code> in <code>renderPass</code>"
},
{
"vuid": "VUID-VkRenderPassBeginInfo-framebuffer-03217",
"text": " If <code>framebuffer</code> was created with a <a href=\"#VkFramebufferCreateInfo\">VkFramebufferCreateInfo</a>::<code>flags</code> value that included <code>VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT</code>, each element of the <code>pAttachments</code> member of a <a href=\"#VkRenderPassAttachmentBeginInfo\">VkRenderPassAttachmentBeginInfo</a> structure included in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be a <a href=\"#VkImageView\">VkImageView</a> of an image created with a value of <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>::<code>samples</code> equal to the corresponding value of <a href=\"#VkAttachmentDescription\">VkAttachmentDescription</a>::<code>samples</code> in <code>renderPass</code>"
}
],
"(VK_QCOM_render_pass_transform)": [
{
"vuid": "VUID-VkRenderPassBeginInfo-pNext-02869",
"text": " If the <code>pNext</code> chain includes <a href=\"#VkRenderPassTransformBeginInfoQCOM\">VkRenderPassTransformBeginInfoQCOM</a>, <code>renderArea</code>::<code>offset</code> <strong class=\"purple\">must</strong> equal (0,0)"
},
{
"vuid": "VUID-VkRenderPassBeginInfo-pNext-02870",
"text": " If the <code>pNext</code> chain includes <a href=\"#VkRenderPassTransformBeginInfoQCOM\">VkRenderPassTransformBeginInfoQCOM</a>, <code>renderArea</code>::<code>extent</code> transformed by <a href=\"#VkRenderPassTransformBeginInfoQCOM\">VkRenderPassTransformBeginInfoQCOM</a>::<code>transform</code> <strong class=\"purple\">must</strong> equal the <code>framebuffer</code> dimensions"
}
]
},
"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 <a href=\"#VkAttachmentSampleLocationsEXT\">VkAttachmentSampleLocationsEXT</a> 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 <a href=\"#VkSubpassSampleLocationsEXT\">VkSubpassSampleLocationsEXT</a> 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 <a href=\"#VkSampleLocationsInfoEXT\">VkSampleLocationsInfoEXT</a> 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 <a href=\"#VkSampleLocationsInfoEXT\">VkSampleLocationsInfoEXT</a> structure"
}
]
},
"VkRenderPassTransformBeginInfoQCOM": {
"(VK_QCOM_render_pass_transform)": [
{
"vuid": "VUID-VkRenderPassTransformBeginInfoQCOM-transform-02871",
"text": " <code>transform</code> <strong class=\"purple\">must</strong> be <code>VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR</code>, <code>VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR</code>, <code>VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR</code>, or <code>VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR</code>"
},
{
"vuid": "VUID-VkRenderPassTransformBeginInfoQCOM-flags-02872",
"text": " The <code>renderpass</code> <strong class=\"purple\">must</strong> have been created with <a href=\"#VkRenderPassCreateInfo\">VkRenderPassCreateInfo</a>::<code>flags</code> containing <code>VK_RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM</code>"
},
{
"vuid": "VUID-VkRenderPassTransformBeginInfoQCOM-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM</code>"
}
]
},
"VkSubpassBeginInfo": {
"(VK_VERSION_1_2,VK_KHR_create_renderpass2)": [
{
"vuid": "VUID-VkSubpassBeginInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO</code>"
},
{
"vuid": "VUID-VkSubpassBeginInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkSubpassBeginInfo-contents-parameter",
"text": " <code>contents</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSubpassContents\">VkSubpassContents</a> value"
}
]
},
"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> <a href=\"#VkRect2D\">VkRect2D</a> structures"
}
]
},
"VkRenderPassAttachmentBeginInfo": {
"(VK_VERSION_1_2,VK_KHR_imageless_framebuffer)": [
{
"vuid": "VUID-VkRenderPassAttachmentBeginInfo-pAttachments-03218",
"text": " Each element of <code>pAttachments</code> <strong class=\"purple\">must</strong> only specify a single mip level"
},
{
"vuid": "VUID-VkRenderPassAttachmentBeginInfo-pAttachments-03219",
"text": " Each element of <code>pAttachments</code> <strong class=\"purple\">must</strong> have been created with the identity swizzle"
},
{
"vuid": "VUID-VkRenderPassAttachmentBeginInfo-pAttachments-04114",
"text": " Each element of <code>pAttachments</code> <strong class=\"purple\">must</strong> have been created with <a href=\"#VkImageViewCreateInfo\">VkImageViewCreateInfo</a>::<code>viewType</code> not equal to <code>VK_IMAGE_VIEW_TYPE_3D</code>"
},
{
"vuid": "VUID-VkRenderPassAttachmentBeginInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO</code>"
},
{
"vuid": "VUID-VkRenderPassAttachmentBeginInfo-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 <a href=\"#VkImageView\">VkImageView</a> handles"
}
]
},
"vkGetRenderAreaGranularity": {
"core": [
{
"vuid": "VUID-vkGetRenderAreaGranularity-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetRenderAreaGranularity-renderPass-parameter",
"text": " <code>renderPass</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkRenderPass\">VkRenderPass</a> handle"
},
{
"vuid": "VUID-vkGetRenderAreaGranularity-pGranularity-parameter",
"text": " <code>pGranularity</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkExtent2D\">VkExtent2D</a> 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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> 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 <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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>"
}
],
"(VK_EXT_transform_feedback)": [
{
"vuid": "VUID-vkCmdNextSubpass-None-02349",
"text": " This command <strong class=\"purple\">must</strong> not be recorded when transform feedback is active"
}
]
},
"vkCmdNextSubpass2": {
"(VK_VERSION_1_2,VK_KHR_create_renderpass2)": [
{
"vuid": "VUID-vkCmdNextSubpass2-None-03102",
"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-vkCmdNextSubpass2-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdNextSubpass2-pSubpassBeginInfo-parameter",
"text": " <code>pSubpassBeginInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkSubpassBeginInfo\">VkSubpassBeginInfo</a> structure"
},
{
"vuid": "VUID-vkCmdNextSubpass2-pSubpassEndInfo-parameter",
"text": " <code>pSubpassEndInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkSubpassEndInfo\">VkSubpassEndInfo</a> structure"
},
{
"vuid": "VUID-vkCmdNextSubpass2-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdNextSubpass2-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdNextSubpass2-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
},
{
"vuid": "VUID-vkCmdNextSubpass2-bufferlevel",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a primary <code>VkCommandBuffer</code>"
}
],
"(VK_VERSION_1_2,VK_KHR_create_renderpass2)+(VK_EXT_transform_feedback)": [
{
"vuid": "VUID-vkCmdNextSubpass2-None-02350",
"text": " This command <strong class=\"purple\">must</strong> not be recorded when transform feedback is active"
}
]
},
"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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdEndRenderPass-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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>"
}
],
"(VK_EXT_transform_feedback)": [
{
"vuid": "VUID-vkCmdEndRenderPass-None-02351",
"text": " This command <strong class=\"purple\">must</strong> not be recorded when transform feedback is active"
}
]
},
"vkCmdEndRenderPass2": {
"(VK_VERSION_1_2,VK_KHR_create_renderpass2)": [
{
"vuid": "VUID-vkCmdEndRenderPass2-None-03103",
"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-vkCmdEndRenderPass2-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdEndRenderPass2-pSubpassEndInfo-parameter",
"text": " <code>pSubpassEndInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkSubpassEndInfo\">VkSubpassEndInfo</a> structure"
},
{
"vuid": "VUID-vkCmdEndRenderPass2-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdEndRenderPass2-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdEndRenderPass2-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
},
{
"vuid": "VUID-vkCmdEndRenderPass2-bufferlevel",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a primary <code>VkCommandBuffer</code>"
}
],
"(VK_VERSION_1_2,VK_KHR_create_renderpass2)+(VK_EXT_transform_feedback)": [
{
"vuid": "VUID-vkCmdEndRenderPass2-None-02352",
"text": " This command <strong class=\"purple\">must</strong> not be recorded when transform feedback is active"
}
]
},
"VkSubpassEndInfo": {
"(VK_VERSION_1_2,VK_KHR_create_renderpass2)": [
{
"vuid": "VUID-VkSubpassEndInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SUBPASS_END_INFO</code>"
},
{
"vuid": "VUID-VkSubpassEndInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
},
"vkCreateShaderModule": {
"core": [
{
"vuid": "VUID-vkCreateShaderModule-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkCreateShaderModule-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkShaderModuleCreateInfo\">VkShaderModuleCreateInfo</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateShaderModule-pShaderModule-parameter",
"text": " <code>pShaderModule</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkShaderModule\">VkShaderModule</a> 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 <a href=\"#spirvenv-module-validation\">Capabilities</a> section of the <a href=\"#spirvenv-capabilities\">SPIR-V Environment</a> appendix"
},
{
"vuid": "VUID-VkShaderModuleCreateInfo-pCode-01091",
"text": " If <code>pCode</code> declares any of the capabilities listed in the <a href=\"#spirvenv-capabilities-table\">SPIR-V Environment</a> appendix, one of the corresponding requirements <strong class=\"purple\">must</strong> be satisfied"
},
{
"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-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"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 \\(\\textrm{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 <a href=\"#spirv-spec\">Khronos SPIR-V Specification</a>"
},
{
"vuid": "VUID-VkShaderModuleCreateInfo-pCode-01088",
"text": " <code>pCode</code> <strong class=\"purple\">must</strong> adhere to the validation rules described by the <a href=\"#spirvenv-module-validation\">Validation Rules within a Module</a> section of the <a href=\"#spirvenv-capabilities\">SPIR-V Environment</a> appendix"
}
],
"(VK_NV_glsl_shader)": [
{
"vuid": "VUID-VkShaderModuleCreateInfo-pCode-01376",
"text": " If <code>pCode</code> is a pointer 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 <code>GL_KHR_vulkan_glsl</code> extension specification"
},
{
"vuid": "VUID-VkShaderModuleCreateInfo-pCode-01378",
"text": " If <code>pCode</code> is a pointer to SPIR-V code, that code <strong class=\"purple\">must</strong> adhere to the validation rules described by the <a href=\"#spirvenv-module-validation\">Validation Rules within a Module</a> section of the <a href=\"#spirvenv-capabilities\">SPIR-V Environment</a> appendix"
},
{
"vuid": "VUID-VkShaderModuleCreateInfo-pCode-01379",
"text": " If <code>pCode</code> is a pointer to GLSL code, it <strong class=\"purple\">must</strong> be valid GLSL code written to the <code>GL_KHR_vulkan_glsl</code> 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 <a href=\"#VkValidationCacheEXT\">VkValidationCacheEXT</a> 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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkShaderModule\">VkShaderModule</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> 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>"
}
]
},
"vkGetPhysicalDeviceCooperativeMatrixPropertiesNV": {
"(VK_NV_cooperative_matrix)": [
{
"vuid": "VUID-vkGetPhysicalDeviceCooperativeMatrixPropertiesNV-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceCooperativeMatrixPropertiesNV-pPropertyCount-parameter",
"text": " <code>pPropertyCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
},
{
"vuid": "VUID-vkGetPhysicalDeviceCooperativeMatrixPropertiesNV-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> <a href=\"#VkCooperativeMatrixPropertiesNV\">VkCooperativeMatrixPropertiesNV</a> structures"
}
]
},
"VkCooperativeMatrixPropertiesNV": {
"(VK_NV_cooperative_matrix)": [
{
"vuid": "VUID-VkCooperativeMatrixPropertiesNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV</code>"
},
{
"vuid": "VUID-VkCooperativeMatrixPropertiesNV-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkCooperativeMatrixPropertiesNV-AType-parameter",
"text": " <code>AType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkComponentTypeNV\">VkComponentTypeNV</a> value"
},
{
"vuid": "VUID-VkCooperativeMatrixPropertiesNV-BType-parameter",
"text": " <code>BType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkComponentTypeNV\">VkComponentTypeNV</a> value"
},
{
"vuid": "VUID-VkCooperativeMatrixPropertiesNV-CType-parameter",
"text": " <code>CType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkComponentTypeNV\">VkComponentTypeNV</a> value"
},
{
"vuid": "VUID-VkCooperativeMatrixPropertiesNV-DType-parameter",
"text": " <code>DType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkComponentTypeNV\">VkComponentTypeNV</a> value"
},
{
"vuid": "VUID-VkCooperativeMatrixPropertiesNV-scope-parameter",
"text": " <code>scope</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkScopeNV\">VkScopeNV</a> value"
}
]
},
"vkCreateValidationCacheEXT": {
"(VK_EXT_validation_cache)": [
{
"vuid": "VUID-vkCreateValidationCacheEXT-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkCreateValidationCacheEXT-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkValidationCacheCreateInfoEXT\">VkValidationCacheCreateInfoEXT</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateValidationCacheEXT-pValidationCache-parameter",
"text": " <code>pValidationCache</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkValidationCacheEXT\">VkValidationCacheEXT</a> 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkMergeValidationCachesEXT-dstCache-parameter",
"text": " <code>dstCache</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkValidationCacheEXT\">VkValidationCacheEXT</a> 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 <a href=\"#VkValidationCacheEXT\">VkValidationCacheEXT</a> 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetValidationCacheDataEXT-validationCache-parameter",
"text": " <code>validationCache</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkValidationCacheEXT\">VkValidationCacheEXT</a> 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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkValidationCacheEXT\">VkValidationCacheEXT</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> 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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkPipelineCache\">VkPipelineCache</a> 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 <a href=\"#VkComputePipelineCreateInfo\">VkComputePipelineCreateInfo</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> 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> <a href=\"#VkPipeline\">VkPipeline</a> 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>"
}
],
"(VK_EXT_pipeline_creation_cache_control)": [
{
"vuid": "VUID-vkCreateComputePipelines-pipelineCache-02873",
"text": " If <code>pipelineCache</code> was created with <code>VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT</code>, host access to <code>pipelineCache</code> <strong class=\"purple\">must</strong> be <a href=\"#fundamentals-threadingbehavior\">externally synchronized</a>"
}
]
},
"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 <a href=\"#interfaces\">Shader Interfaces</a> chapter"
},
{
"vuid": "VUID-VkComputePipelineCreateInfo-layout-00703",
"text": " <code>layout</code> <strong class=\"purple\">must</strong> be <a href=\"#descriptorsets-pipelinelayout-consistency\">consistent</a> 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": " 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=\"#VkPipelineCompilerControlCreateInfoAMD\">VkPipelineCompilerControlCreateInfoAMD</a> or <a href=\"#VkPipelineCreationFeedbackCreateInfoEXT\">VkPipelineCreationFeedbackCreateInfoEXT</a>"
},
{
"vuid": "VUID-VkComputePipelineCreateInfo-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"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 <a href=\"#VkPipelineShaderStageCreateInfo\">VkPipelineShaderStageCreateInfo</a> structure"
},
{
"vuid": "VUID-VkComputePipelineCreateInfo-layout-parameter",
"text": " <code>layout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipelineLayout\">VkPipelineLayout</a> handle"
},
{
"vuid": "VUID-VkComputePipelineCreateInfo-commonparent",
"text": " Both of <code>basePipelineHandle</code>, and <code>layout</code> that are valid handles of non-ignored parameters <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(VK_KHR_pipeline_library)": [
{
"vuid": "VUID-VkComputePipelineCreateInfo-flags-03364",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_CREATE_LIBRARY_BIT_KHR</code>"
}
],
"(VK_KHR_ray_tracing)": [
{
"vuid": "VUID-VkComputePipelineCreateInfo-flags-03365",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR</code>"
},
{
"vuid": "VUID-VkComputePipelineCreateInfo-flags-03366",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR</code>"
},
{
"vuid": "VUID-VkComputePipelineCreateInfo-flags-03367",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR</code>"
},
{
"vuid": "VUID-VkComputePipelineCreateInfo-flags-03368",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR</code>"
},
{
"vuid": "VUID-VkComputePipelineCreateInfo-flags-03369",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR</code>"
},
{
"vuid": "VUID-VkComputePipelineCreateInfo-flags-03370",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR</code>"
}
],
"(VK_NV_device_generated_commands)": [
{
"vuid": "VUID-VkComputePipelineCreateInfo-flags-02874",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV</code>"
}
],
"(VK_EXT_pipeline_creation_cache_control)": [
{
"vuid": "VUID-VkComputePipelineCreateInfo-pipelineCreationCacheControl-02875",
"text": " If the <a href=\"#features-pipelineCreationCacheControl\"><code>pipelineCreationCacheControl</code></a> feature is not enabled, <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT</code> or <code>VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT</code>"
}
]
},
"VkPipelineShaderStageCreateInfo": {
"core": [
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-00704",
"text": " If the <a href=\"#features-geometryShader\">geometry shaders</a> 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 <a href=\"#features-tessellationShader\">tessellation shaders</a> 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-02596",
"text": " If <code>stage</code> is a vertex processing stage, 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-02597",
"text": " If <code>stage</code> is a vertex processing stage, 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> or a pointer to a valid instance of <a href=\"#VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT\">VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT</a>"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkPipelineShaderStageCreateFlagBits\">VkPipelineShaderStageCreateFlagBits</a> values"
},
{
"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 <a href=\"#VkShaderModule\">VkShaderModule</a> 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 <a href=\"#VkSpecializationInfo\">VkSpecializationInfo</a> structure"
}
],
"(VK_NV_mesh_shader)": [
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-02091",
"text": " If the <a href=\"#features-meshShader\">mesh shader</a> feature is not enabled, <code>stage</code> <strong class=\"purple\">must</strong> not be <code>VK_SHADER_STAGE_MESH_BIT_NV</code>"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-02092",
"text": " If the <a href=\"#features-taskShader\">task shader</a> feature is not enabled, <code>stage</code> <strong class=\"purple\">must</strong> not be <code>VK_SHADER_STAGE_TASK_BIT_NV</code>"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-02093",
"text": " If <code>stage</code> is <code>VK_SHADER_STAGE_MESH_BIT_NV</code>, the identified entry point <strong class=\"purple\">must</strong> have an <code>OpExecutionMode</code> instruction that specifies a maximum output vertex count, <code>OutputVertices</code>, that is greater than <code>0</code> and less than or equal to <code>VkPhysicalDeviceMeshShaderPropertiesNV</code>::<code>maxMeshOutputVertices</code>"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-02094",
"text": " If <code>stage</code> is <code>VK_SHADER_STAGE_MESH_BIT_NV</code>, the identified entry point <strong class=\"purple\">must</strong> have an <code>OpExecutionMode</code> instruction that specifies a maximum output primitive count, <code>OutputPrimitivesNV</code>, that is greater than <code>0</code> and less than or equal to <code>VkPhysicalDeviceMeshShaderPropertiesNV</code>::<code>maxMeshOutputPrimitives</code>"
}
],
"(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"
}
],
"(VK_EXT_subgroup_size_control)": [
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-flags-02784",
"text": " If <code>flags</code> has the <code>VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT</code> flag set, the <a href=\"#features-subgroupSizeControl\"><code>subgroupSizeControl</code></a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-flags-02785",
"text": " If <code>flags</code> has the <code>VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT</code> flag set, the <a href=\"#features-computeFullSubgroups\"><code>computeFullSubgroups</code></a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-pNext-02754",
"text": " If a <a href=\"#VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT\">VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT</a> structure is included in the <code>pNext</code> chain, <code>flags</code> <strong class=\"purple\">must</strong> not have the <code>VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT</code> flag set"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-pNext-02755",
"text": " If a <a href=\"#VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT\">VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT</a> structure is included in the <code>pNext</code> chain, the <a href=\"#features-subgroupSizeControl\"><code>subgroupSizeControl</code></a> feature <strong class=\"purple\">must</strong> be enabled, and <code>stage</code> <strong class=\"purple\">must</strong> be a valid bit specified in <a href=\"#limits-required-subgroup-size-stages\"><code>requiredSubgroupSizeStages</code></a>"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-pNext-02756",
"text": " If a <a href=\"#VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT\">VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT</a> structure is included in the <code>pNext</code> chain and <code>stage</code> is <code>VK_SHADER_STAGE_COMPUTE_BIT</code>, the local workgroup size of the shader <strong class=\"purple\">must</strong> be less than or equal to the product of <a href=\"#VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT\">VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT</a>::<code>requiredSubgroupSize</code> and <a href=\"#limits-max-subgroups-per-workgroup\"><code>maxComputeWorkgroupSubgroups</code></a>"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-pNext-02757",
"text": " If a <a href=\"#VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT\">VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT</a> structure is included in the <code>pNext</code> chain, and <code>flags</code> has the <code>VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT</code> flag set, the local workgroup size in the X dimension of the pipeline <strong class=\"purple\">must</strong> be a multiple of <a href=\"#VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT\">VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT</a>::<code>requiredSubgroupSize</code>"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-flags-02758",
"text": " If <code>flags</code> has both the <code>VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT</code> and <code>VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT</code> flags set, the local workgroup size in the X dimension of the pipeline <strong class=\"purple\">must</strong> be a multiple of <a href=\"#limits-max-subgroup-size\"><code>maxSubgroupSize</code></a>"
},
{
"vuid": "VUID-VkPipelineShaderStageCreateInfo-flags-02759",
"text": " If <code>flags</code> has the <code>VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT</code> flag set and <code>flags</code> does not have the <code>VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT</code> flag set and no <a href=\"#VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT\">VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT</a> structure is included in the <code>pNext</code> chain, the local workgroup size in the X dimension of the pipeline <strong class=\"purple\">must</strong> be a multiple of <a href=\"#limits-subgroup-size\"><code>subgroupSize</code></a>"
}
]
},
"VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT": {
"(VK_EXT_subgroup_size_control)": [
{
"vuid": "VUID-VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT-requiredSubgroupSize-02760",
"text": " <code>requiredSubgroupSize</code> <strong class=\"purple\">must</strong> be a power-of-two integer"
},
{
"vuid": "VUID-VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT-requiredSubgroupSize-02761",
"text": " <code>requiredSubgroupSize</code> <strong class=\"purple\">must</strong> be greater or equal to <a href=\"#limits-min-subgroup-size\">minSubgroupSize</a>"
},
{
"vuid": "VUID-VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT-requiredSubgroupSize-02762",
"text": " <code>requiredSubgroupSize</code> <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#limits-max-subgroup-size\">maxSubgroupSize</a>"
},
{
"vuid": "VUID-VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT</code>"
}
]
},
"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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkPipelineCache\">VkPipelineCache</a> 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 <a href=\"#VkGraphicsPipelineCreateInfo\">VkGraphicsPipelineCreateInfo</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> 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> <a href=\"#VkPipeline\">VkPipeline</a> 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>"
}
],
"(VK_EXT_pipeline_creation_cache_control)": [
{
"vuid": "VUID-vkCreateGraphicsPipelines-pipelineCache-02876",
"text": " If <code>pipelineCache</code> was created with <code>VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT</code>, host access to <code>pipelineCache</code> <strong class=\"purple\">must</strong> be <a href=\"#fundamentals-threadingbehavior\">externally synchronized</a>"
}
]
},
"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-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 <a href=\"#VkPipelineTessellationStateCreateInfo\">VkPipelineTessellationStateCreateInfo</a> 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 <a href=\"#shaders-geometry-execution\">compatible</a> 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 <a href=\"#shaders-geometry-execution\">compatible</a> 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 <a href=\"#interfaces\">Shader Interfaces</a> chapter"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-blendEnable-02023",
"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 attached image&#8217;s <a href=\"#resources-image-format-features\">format features</a> does not contain <code>VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT</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-&gt;viewportCount</code> valid <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-&gt;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 <a href=\"#VkPipelineViewportStateCreateInfo\">VkPipelineViewportStateCreateInfo</a> 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 <a href=\"#VkPipelineMultisampleStateCreateInfo\">VkPipelineMultisampleStateCreateInfo</a> 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 <a href=\"#VkPipelineDepthStencilStateCreateInfo\">VkPipelineDepthStencilStateCreateInfo</a> 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 <a href=\"#VkPipelineColorBlendStateCreateInfo\">VkPipelineColorBlendStateCreateInfo</a> 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 <a href=\"#descriptorsets-pipelinelayout-consistency\">consistent</a> with all shaders specified in <code>pStages</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-subpass-00757",
"text": " If neither the <code>VK_AMD_mixed_attachment_samples</code> nor the <code>VK_NV_framebuffer_mixed_samples</code> extensions are enabled, and 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"
},
{
"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 <a href=\"#renderpass-noattachments\">zero-attachment subpass</a>"
},
{
"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-pStages-02097",
"text": " If <code>pStages</code> includes a vertex shader stage, <code>pVertexInputState</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkPipelineVertexInputStateCreateInfo\">VkPipelineVertexInputStateCreateInfo</a> structure"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-02098",
"text": " If <code>pStages</code> includes a vertex shader stage, <code>pInputAssemblyState</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkPipelineInputAssemblyStateCreateInfo\">VkPipelineInputAssemblyStateCreateInfo</a> structure"
},
{
"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": " 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=\"#VkGraphicsPipelineShaderGroupsCreateInfoNV\">VkGraphicsPipelineShaderGroupsCreateInfoNV</a>, <a href=\"#VkPipelineCompilerControlCreateInfoAMD\">VkPipelineCompilerControlCreateInfoAMD</a>, <a href=\"#VkPipelineCreationFeedbackCreateInfoEXT\">VkPipelineCreationFeedbackCreateInfoEXT</a>, <a href=\"#VkPipelineDiscardRectangleStateCreateInfoEXT\">VkPipelineDiscardRectangleStateCreateInfoEXT</a>, or <a href=\"#VkPipelineRepresentativeFragmentTestStateCreateInfoNV\">VkPipelineRepresentativeFragmentTestStateCreateInfoNV</a>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"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 <a href=\"#VkPipelineShaderStageCreateInfo\">VkPipelineShaderStageCreateInfo</a> structures"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pRasterizationState-parameter",
"text": " <code>pRasterizationState</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkPipelineRasterizationStateCreateInfo\">VkPipelineRasterizationStateCreateInfo</a> 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 <a href=\"#VkPipelineDynamicStateCreateInfo\">VkPipelineDynamicStateCreateInfo</a> structure"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-layout-parameter",
"text": " <code>layout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipelineLayout\">VkPipelineLayout</a> handle"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-parameter",
"text": " <code>renderPass</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkRenderPass\">VkRenderPass</a> 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 of non-ignored parameters <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
],
"!(VK_NV_mesh_shader)": [
{
"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>"
}
],
"(VK_NV_mesh_shader)": [
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-02095",
"text": " The geometric shader stages provided in <code>pStages</code> <strong class=\"purple\">must</strong> be either from the mesh shading pipeline (<code>stage</code> is <code>VK_SHADER_STAGE_TASK_BIT_NV</code> or <code>VK_SHADER_STAGE_MESH_BIT_NV</code>) or from the primitive shading pipeline (<code>stage</code> is <code>VK_SHADER_STAGE_VERTEX_BIT</code>, <code>VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT</code>, <code>VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT</code>, or <code>VK_SHADER_STAGE_GEOMETRY_BIT</code>)"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-stage-02096",
"text": " The <code>stage</code> member of one element of <code>pStages</code> <strong class=\"purple\">must</strong> be either <code>VK_SHADER_STAGE_VERTEX_BIT</code> or <code>VK_SHADER_STAGE_MESH_BIT_NV</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>"
}
],
"!(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-02510",
"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 included in 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 included in 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 included in 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 included in 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)": [
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-subpass-01505",
"text": " If the <code>VK_AMD_mixed_attachment_samples</code> extension is enabled, and 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 the <code>VK_NV_framebuffer_mixed_samples</code> extension is enabled, and 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 the <code>VK_NV_framebuffer_mixed_samples</code> extension is enabled, and 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_NV_coverage_reduction_mode)": [
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-coverageReductionMode-02722",
"text": " If the <code>VK_NV_coverage_reduction_mode</code> extension is enabled, the coverage reduction mode specified by <a href=\"#VkPipelineCoverageReductionStateCreateInfoNV\">VkPipelineCoverageReductionStateCreateInfoNV</a>::<code>coverageReductionMode</code>, the <code>rasterizationSamples</code> member of <code>pMultisampleState</code> and the sample counts for the color and depth/stencil attachments (if the subpass has them) <strong class=\"purple\">must</strong> be a valid combination returned by <code>vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV</code>"
}
],
"(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_VERSION_1_1,VK_KHR_maintenance2,VK_KHR_create_renderpass2)": [
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-01565",
"text": " If <code>pStages</code> includes a fragment shader stage and an input attachment was referenced by an <code>aspectMask</code> at <code>renderPass</code> creation time, its shader code <strong class=\"purple\">must</strong> only read from the aspects that were specified for that input attachment"
}
],
"(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, included in 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"
}
],
"(VK_NV_scissor_exclusive)": [
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04056",
"text": " If no element of the <code>pDynamicStates</code> member of <code>pDynamicState</code> is <code>VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV</code>, and if <code>pViewportState-&gt;pNext</code> chain includes a <a href=\"#VkPipelineViewportExclusiveScissorStateCreateInfoNV\">VkPipelineViewportExclusiveScissorStateCreateInfoNV</a> structure, and if its <code>exclusiveScissorCount</code> member is not <code>0</code>, then its <code>pExclusiveScissors</code> member <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>exclusiveScissorCount</code> <a href=\"#VkRect2D\">VkRect2D</a> structures"
}
],
"(VK_NV_shading_rate_image)": [
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04057",
"text": " If no element of the <code>pDynamicStates</code> member of <code>pDynamicState</code> is <code>VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV</code>, and if <code>pViewportState-&gt;pNext</code> chain includes a <a href=\"#VkPipelineViewportShadingRateImageStateCreateInfoNV\">VkPipelineViewportShadingRateImageStateCreateInfoNV</a> structure, then its <code>pShadingRatePalettes</code> member <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>viewportCount</code> valid <a href=\"#VkShadingRatePaletteNV\">VkShadingRatePaletteNV</a> structures"
}
],
"(VK_EXT_discard_rectangles)": [
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04058",
"text": " If no element of the <code>pDynamicStates</code> member of <code>pDynamicState</code> is <code>VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT</code>, and if <code>pNext</code> chain includes a <a href=\"#VkPipelineDiscardRectangleStateCreateInfoEXT\">VkPipelineDiscardRectangleStateCreateInfoEXT</a> structure, and if its <code>discardRectangleCount</code> member is not <code>0</code>, then its <code>pDiscardRectangles</code> member <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>discardRectangleCount</code> <a href=\"#VkRect2D\">VkRect2D</a> structures"
}
],
"(VK_EXT_transform_feedback)": [
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-02317",
"text": " The <code>Xfb</code> execution mode <strong class=\"purple\">can</strong> be specified by only one shader stage in <code>pStages</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-02318",
"text": " If any shader stage in <code>pStages</code> specifies <code>Xfb</code> execution mode it <strong class=\"purple\">must</strong> be the last vertex processing stage"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-rasterizationStream-02319",
"text": " If a <a href=\"#VkPipelineRasterizationStateStreamCreateInfoEXT\">VkPipelineRasterizationStateStreamCreateInfoEXT</a>::<code>rasterizationStream</code> value other than zero is specified, all variables in the output interface of the entry point being compiled decorated with <code>Position</code>, <code>PointSize</code>, <code>ClipDistance</code>, or <code>CullDistance</code> <strong class=\"purple\">must</strong> all be decorated with identical <code>Stream</code> values that match the <code>rasterizationStream</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-rasterizationStream-02320",
"text": " If <a href=\"#VkPipelineRasterizationStateStreamCreateInfoEXT\">VkPipelineRasterizationStateStreamCreateInfoEXT</a>::<code>rasterizationStream</code> is zero, or not specified, all variables in the output interface of the entry point being compiled decorated with <code>Position</code>, <code>PointSize</code>, <code>ClipDistance</code>, or <code>CullDistance</code> <strong class=\"purple\">must</strong> all be decorated with a <code>Stream</code> value of zero, or <strong class=\"purple\">must</strong> not specify the <code>Stream</code> decoration"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-geometryStreams-02321",
"text": " If the last vertex processing stage is a geometry shader, and that geometry shader uses the <code>GeometryStreams</code> capability, then <code>VkPhysicalDeviceTransformFeedbackFeaturesEXT</code>::<code>geometryStreams</code> feature <strong class=\"purple\">must</strong> be enabled"
}
],
"(VK_EXT_transform_feedback)+(VK_NV_mesh_shader)": [
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-None-02322",
"text": " If there are any mesh shader stages in the pipeline there <strong class=\"purple\">must</strong> not be any shader stage in the pipeline with a <code>Xfb</code> execution mode"
}
],
"(VK_EXT_line_rasterization)": [
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-lineRasterizationMode-02766",
"text": " If the <code>lineRasterizationMode</code> member of a <a href=\"#VkPipelineRasterizationLineStateCreateInfoEXT\">VkPipelineRasterizationLineStateCreateInfoEXT</a> structure included in the <code>pNext</code> chain of <code>pRasterizationState</code> is <code>VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT</code> or <code>VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT</code> and if rasterization is enabled, then the <code>alphaToCoverageEnable</code>, <code>alphaToOneEnable</code>, and <code>sampleShadingEnable</code> members of <code>pMultisampleState</code> <strong class=\"purple\">must</strong> all be <code>VK_FALSE</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-stippledLineEnable-02767",
"text": " If the <code>stippledLineEnable</code> member of <a href=\"#VkPipelineRasterizationLineStateCreateInfoEXT\">VkPipelineRasterizationLineStateCreateInfoEXT</a> is <code>VK_TRUE</code> and no element of the <code>pDynamicStates</code> member of <code>pDynamicState</code> is <code>VK_DYNAMIC_STATE_LINE_STIPPLE_EXT</code>, then the <code>lineStippleFactor</code> member of <a href=\"#VkPipelineRasterizationLineStateCreateInfoEXT\">VkPipelineRasterizationLineStateCreateInfoEXT</a> <strong class=\"purple\">must</strong> be in the range <span class=\"eq\">[1,256]</span>"
}
],
"(VK_KHR_pipeline_library)": [
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-03371",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_CREATE_LIBRARY_BIT_KHR</code>"
}
],
"(VK_KHR_ray_tracing)": [
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-03372",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-03373",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-03374",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-03375",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-03376",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-03377",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR</code>"
}
],
"(VK_EXT_extended_dynamic_state)": [
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-03378",
"text": " If the <a href=\"#features-extendedDynamicState\">extendedDynamicState</a> feature is not enabled, there <strong class=\"purple\">must</strong> be no element of the <code>pDynamicStates</code> member of <code>pDynamicState</code> set to <code>VK_DYNAMIC_STATE_CULL_MODE_EXT</code>, <code>VK_DYNAMIC_STATE_FRONT_FACE_EXT</code>, <code>VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT</code>, <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code>, <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code>, <code>VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT</code>, <code>VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT</code>, <code>VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT</code>, <code>VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT</code>, <code>VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT</code>, <code>VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT</code>, or <code>VK_DYNAMIC_STATE_STENCIL_OP_EXT</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-03379",
"text": " If <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> is included in the <code>pDynamicStates</code> array then <code>viewportCount</code> <strong class=\"purple\">must</strong> be zero"
},
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-03380",
"text": " If <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> is included in the <code>pDynamicStates</code> array then <code>scissorCount</code> <strong class=\"purple\">must</strong> be zero"
}
],
"(VK_NV_device_generated_commands)": [
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-02877",
"text": " If <code>flags</code> includes <code>VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV</code>, then the <a href=\"#feature-device-generated-commands\"><code>VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV</code>::<code>deviceGeneratedCommands</code></a> feature <strong class=\"purple\">must</strong> be enabled"
}
],
"(VK_NV_device_generated_commands)+(VK_EXT_transform_feedback)": [
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-02966",
"text": " If <code>flags</code> includes <code>VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV</code>, then all stages <strong class=\"purple\">must</strong> not specify <code>Xfb</code> execution mode"
}
],
"(VK_EXT_pipeline_creation_cache_control)": [
{
"vuid": "VUID-VkGraphicsPipelineCreateInfo-pipelineCreationCacheControl-02878",
"text": " If the <a href=\"#features-pipelineCreationCacheControl\"><code>pipelineCreationCacheControl</code></a> feature is not enabled, <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT</code> or <code>VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT</code>"
}
]
},
"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": " If <code>dynamicStateCount</code> is not <code>0</code>, <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"
}
]
},
"VkGraphicsPipelineShaderGroupsCreateInfoNV": {
"(VK_NV_device_generated_commands)": [
{
"vuid": "VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-groupCount-02879",
"text": " <code>groupCount</code> <strong class=\"purple\">must</strong> be at least <code>1</code> and as maximum <code>VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV</code>::<code>maxGraphicsShaderGroupCount</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-groupCount-02880",
"text": " The sum of <code>groupCount</code> including those groups added from referenced <code>pPipelines</code> <strong class=\"purple\">must</strong> also be as maximum <code>VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV</code>::<code>maxGraphicsShaderGroupCount</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-02881",
"text": " The state of the first element of <code>pGroups</code> <strong class=\"purple\">must</strong> match its equivalent within the parent&#8217;s <a href=\"#VkGraphicsPipelineCreateInfo\">VkGraphicsPipelineCreateInfo</a>"
},
{
"vuid": "VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-02882",
"text": " Each element of <code>pGroups</code> <strong class=\"purple\">must</strong> in combination with the rest of the pipeline state yield a valid state configuration"
},
{
"vuid": "VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pPipelines-02886",
"text": " Each element of the <code>pPipelines</code> member of <code>libraries</code> <strong class=\"purple\">must</strong> have been created with identical state to the pipeline currently created except the state that can be overriden by <a href=\"#VkGraphicsShaderGroupCreateInfoNV\">VkGraphicsShaderGroupCreateInfoNV</a>"
},
{
"vuid": "VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-deviceGeneratedCommands-02887",
"text": " The <a href=\"#feature-device-generated-commands\"><code>VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV</code>::<code>deviceGeneratedCommands</code></a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV</code>"
},
{
"vuid": "VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-parameter",
"text": " <code>pGroups</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>groupCount</code> valid <a href=\"#VkGraphicsShaderGroupCreateInfoNV\">VkGraphicsShaderGroupCreateInfoNV</a> structures"
},
{
"vuid": "VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pPipelines-parameter",
"text": " If <code>pipelineCount</code> is not <code>0</code>, <code>pPipelines</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pipelineCount</code> valid <a href=\"#VkPipeline\">VkPipeline</a> handles"
},
{
"vuid": "VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-groupCount-arraylength",
"text": " <code>groupCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
],
"(VK_NV_device_generated_commands)+!(VK_NV_mesh_shader)": [
{
"vuid": "VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-02883",
"text": " All elements of <code>pGroups</code> <strong class=\"purple\">must</strong> use the same shader stage combinations"
}
],
"(VK_NV_device_generated_commands)+(VK_NV_mesh_shader)": [
{
"vuid": "VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-02884",
"text": " All elements of <code>pGroups</code> <strong class=\"purple\">must</strong> use the same shader stage combinations unless any mesh shader stage is used, then either combination of task and mesh or just mesh shader is valid"
},
{
"vuid": "VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-02885",
"text": " Mesh and regular primitive shading stages cannot be mixed across <code>pGroups</code>"
}
]
},
"VkGraphicsShaderGroupCreateInfoNV": {
"(VK_NV_device_generated_commands)": [
{
"vuid": "VUID-VkGraphicsShaderGroupCreateInfoNV-stageCount-02888",
"text": " For <code>stageCount</code>, the same restrictions as in <a href=\"#VkGraphicsPipelineCreateInfo\">VkGraphicsPipelineCreateInfo</a>::<code>stageCount</code> apply"
},
{
"vuid": "VUID-VkGraphicsShaderGroupCreateInfoNV-pStages-02889",
"text": " For <code>pStages</code>, the same restrictions as in <a href=\"#VkGraphicsPipelineCreateInfo\">VkGraphicsPipelineCreateInfo</a>::<code>pStages</code> apply"
},
{
"vuid": "VUID-VkGraphicsShaderGroupCreateInfoNV-pVertexInputState-02890",
"text": " For <code>pVertexInputState</code>, the same restrictions as in <a href=\"#VkGraphicsPipelineCreateInfo\">VkGraphicsPipelineCreateInfo</a>::<code>pVertexInputState</code> apply"
},
{
"vuid": "VUID-VkGraphicsShaderGroupCreateInfoNV-pTessellationState-02891",
"text": " For <code>pTessellationState</code>, the same restrictions as in <a href=\"#VkGraphicsPipelineCreateInfo\">VkGraphicsPipelineCreateInfo</a>::<code>pTessellationState</code> apply"
},
{
"vuid": "VUID-VkGraphicsShaderGroupCreateInfoNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV</code>"
},
{
"vuid": "VUID-VkGraphicsShaderGroupCreateInfoNV-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkGraphicsShaderGroupCreateInfoNV-pStages-parameter",
"text": " <code>pStages</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>stageCount</code> valid <a href=\"#VkPipelineShaderStageCreateInfo\">VkPipelineShaderStageCreateInfo</a> structures"
},
{
"vuid": "VUID-VkGraphicsShaderGroupCreateInfoNV-stageCount-arraylength",
"text": " <code>stageCount</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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkPipeline\">VkPipeline</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkCreatePipelineCache-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkPipelineCacheCreateInfo\">VkPipelineCacheCreateInfo</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreatePipelineCache-pPipelineCache-parameter",
"text": " <code>pPipelineCache</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkPipelineCache\">VkPipelineCache</a> 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-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkPipelineCacheCreateFlagBits\">VkPipelineCacheCreateFlagBits</a> values"
},
{
"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"
}
],
"(VK_EXT_pipeline_creation_cache_control)": [
{
"vuid": "VUID-VkPipelineCacheCreateInfo-pipelineCreationCacheControl-02892",
"text": " If the <a href=\"#features-pipelineCreationCacheControl\"><code>pipelineCreationCacheControl</code></a> feature is not enabled, <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT</code>"
}
]
},
"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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkMergePipelineCaches-dstCache-parameter",
"text": " <code>dstCache</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipelineCache\">VkPipelineCache</a> 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 <a href=\"#VkPipelineCache\">VkPipelineCache</a> 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetPipelineCacheData-pipelineCache-parameter",
"text": " <code>pipelineCache</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipelineCache\">VkPipelineCache</a> 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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkPipelineCache\">VkPipelineCache</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> 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-pMapEntries-parameter",
"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 <a href=\"#VkSpecializationMapEntry\">VkSpecializationMapEntry</a> 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>"
}
]
},
"VkPipelineLibraryCreateInfoKHR": {
"(VK_KHR_pipeline_library)": [
{
"vuid": "VUID-VkPipelineLibraryCreateInfoKHR-pLibraries-03381",
"text": " Each element of <code>pLibraries</code> <strong class=\"purple\">must</strong> have been created with <code>VK_PIPELINE_CREATE_LIBRARY_BIT_KHR</code>"
},
{
"vuid": "VUID-VkPipelineLibraryCreateInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR</code>"
},
{
"vuid": "VUID-VkPipelineLibraryCreateInfoKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkPipelineLibraryCreateInfoKHR-pLibraries-parameter",
"text": " If <code>libraryCount</code> is not <code>0</code>, <code>pLibraries</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>libraryCount</code> valid <a href=\"#VkPipeline\">VkPipeline</a> handles"
}
]
},
"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 <a href=\"#features-variableMultisampleRate\">variable multisample rate</a> feature is not supported, <code>pipeline</code> is a graphics pipeline, the current subpass <a href=\"#renderpass-noattachments\">uses no attachments</a>, 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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> 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 <a href=\"#VkPipeline\">VkPipeline</a> handle"
},
{
"vuid": "VUID-vkCmdBindPipeline-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(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"
}
],
"(VK_EXT_transform_feedback)": [
{
"vuid": "VUID-vkCmdBindPipeline-None-02323",
"text": " This command <strong class=\"purple\">must</strong> not be recorded when transform feedback is active"
}
],
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)": [
{
"vuid": "VUID-vkCmdBindPipeline-pipelineBindPoint-02391",
"text": " If <code>pipelineBindPoint</code> is <code>VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR</code>, the <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support compute operations"
},
{
"vuid": "VUID-vkCmdBindPipeline-pipelineBindPoint-02392",
"text": " If <code>pipelineBindPoint</code> is <code>VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR</code>, the <code>pipeline</code> <strong class=\"purple\">must</strong> be a ray tracing pipeline"
}
],
"(VK_KHR_pipeline_library)": [
{
"vuid": "VUID-vkCmdBindPipeline-pipeline-03382",
"text": " The <code>pipeline</code> <strong class=\"purple\">must</strong> not have been created with <code>VK_PIPELINE_CREATE_LIBRARY_BIT_KHR</code> set"
}
]
},
"vkCmdBindPipelineShaderGroupNV": {
"(VK_NV_device_generated_commands)": [
{
"vuid": "VUID-vkCmdBindPipelineShaderGroupNV-groupIndex-02893",
"text": " <code>groupIndex</code> <strong class=\"purple\">must</strong> be <code>0</code> or less than the effective <a href=\"#VkGraphicsPipelineShaderGroupsCreateInfoNV\">VkGraphicsPipelineShaderGroupsCreateInfoNV</a>::<code>groupCount</code> including the referenced pipelines"
},
{
"vuid": "VUID-vkCmdBindPipelineShaderGroupNV-pipelineBindPoint-02894",
"text": " The <code>pipelineBindPoint</code> <strong class=\"purple\">must</strong> be <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>"
},
{
"vuid": "VUID-vkCmdBindPipelineShaderGroupNV-groupIndex-02895",
"text": " The same restrictions as <a href=\"#vkCmdBindPipeline\">vkCmdBindPipeline</a> apply as if the bound pipeline was created only with the Shader Group from the <code>groupIndex</code> information"
},
{
"vuid": "VUID-vkCmdBindPipelineShaderGroupNV-deviceGeneratedCommands-02896",
"text": " The <a href=\"#feature-device-generated-commands\"><code>VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV</code>::<code>deviceGeneratedCommands</code></a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkCmdBindPipelineShaderGroupNV-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdBindPipelineShaderGroupNV-pipelineBindPoint-parameter",
"text": " <code>pipelineBindPoint</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipelineBindPoint\">VkPipelineBindPoint</a> value"
},
{
"vuid": "VUID-vkCmdBindPipelineShaderGroupNV-pipeline-parameter",
"text": " <code>pipeline</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipeline\">VkPipeline</a> handle"
},
{
"vuid": "VUID-vkCmdBindPipelineShaderGroupNV-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdBindPipelineShaderGroupNV-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-vkCmdBindPipelineShaderGroupNV-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 <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"vkGetPipelineExecutablePropertiesKHR": {
"(VK_KHR_pipeline_executable_properties)": [
{
"vuid": "VUID-vkGetPipelineExecutablePropertiesKHR-pipelineExecutableInfo-03270",
"text": " <a href=\"#features-pipelineExecutableInfo\"><code>pipelineExecutableInfo</code></a> <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkGetPipelineExecutablePropertiesKHR-pipeline-03271",
"text": " <code>pipeline</code> member of <code>pPipelineInfo</code> <strong class=\"purple\">must</strong> have been created with <code>device</code>"
},
{
"vuid": "VUID-vkGetPipelineExecutablePropertiesKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetPipelineExecutablePropertiesKHR-pPipelineInfo-parameter",
"text": " <code>pPipelineInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkPipelineInfoKHR\">VkPipelineInfoKHR</a> structure"
},
{
"vuid": "VUID-vkGetPipelineExecutablePropertiesKHR-pExecutableCount-parameter",
"text": " <code>pExecutableCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
},
{
"vuid": "VUID-vkGetPipelineExecutablePropertiesKHR-pProperties-parameter",
"text": " If the value referenced by <code>pExecutableCount</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>pExecutableCount</code> <a href=\"#VkPipelineExecutablePropertiesKHR\">VkPipelineExecutablePropertiesKHR</a> structures"
}
]
},
"VkPipelineInfoKHR": {
"(VK_KHR_pipeline_executable_properties)": [
{
"vuid": "VUID-VkPipelineInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR</code>"
},
{
"vuid": "VUID-VkPipelineInfoKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkPipelineInfoKHR-pipeline-parameter",
"text": " <code>pipeline</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipeline\">VkPipeline</a> handle"
}
]
},
"VkPipelineExecutablePropertiesKHR": {
"(VK_KHR_pipeline_executable_properties)": [
{
"vuid": "VUID-VkPipelineExecutablePropertiesKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR</code>"
},
{
"vuid": "VUID-VkPipelineExecutablePropertiesKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
},
"vkGetPipelineExecutableStatisticsKHR": {
"(VK_KHR_pipeline_executable_properties)": [
{
"vuid": "VUID-vkGetPipelineExecutableStatisticsKHR-pipelineExecutableInfo-03272",
"text": " <a href=\"#features-pipelineExecutableInfo\"><code>pipelineExecutableInfo</code></a> <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkGetPipelineExecutableStatisticsKHR-pipeline-03273",
"text": " <code>pipeline</code> member of <code>pExecutableInfo</code> <strong class=\"purple\">must</strong> have been created with <code>device</code>"
},
{
"vuid": "VUID-vkGetPipelineExecutableStatisticsKHR-pipeline-03274",
"text": " <code>pipeline</code> member of <code>pExecutableInfo</code> <strong class=\"purple\">must</strong> have been created with <code>VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR</code> set in the <code>flags</code> field of <a href=\"#VkGraphicsPipelineCreateInfo\">VkGraphicsPipelineCreateInfo</a> or <a href=\"#VkComputePipelineCreateInfo\">VkComputePipelineCreateInfo</a>"
},
{
"vuid": "VUID-vkGetPipelineExecutableStatisticsKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetPipelineExecutableStatisticsKHR-pExecutableInfo-parameter",
"text": " <code>pExecutableInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkPipelineExecutableInfoKHR\">VkPipelineExecutableInfoKHR</a> structure"
},
{
"vuid": "VUID-vkGetPipelineExecutableStatisticsKHR-pStatisticCount-parameter",
"text": " <code>pStatisticCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
},
{
"vuid": "VUID-vkGetPipelineExecutableStatisticsKHR-pStatistics-parameter",
"text": " If the value referenced by <code>pStatisticCount</code> is not <code>0</code>, and <code>pStatistics</code> is not <code>NULL</code>, <code>pStatistics</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pStatisticCount</code> <a href=\"#VkPipelineExecutableStatisticKHR\">VkPipelineExecutableStatisticKHR</a> structures"
}
]
},
"VkPipelineExecutableInfoKHR": {
"(VK_KHR_pipeline_executable_properties)": [
{
"vuid": "VUID-VkPipelineExecutableInfoKHR-executableIndex-03275",
"text": " <code>executableIndex</code> <strong class=\"purple\">must</strong> be less than the number of executables associated with <code>pipeline</code> as returned in the <code>pExecutableCount</code> parameter of <code>vkGetPipelineExecutablePropertiesKHR</code>"
},
{
"vuid": "VUID-VkPipelineExecutableInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR</code>"
},
{
"vuid": "VUID-VkPipelineExecutableInfoKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkPipelineExecutableInfoKHR-pipeline-parameter",
"text": " <code>pipeline</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipeline\">VkPipeline</a> handle"
}
]
},
"VkPipelineExecutableStatisticKHR": {
"(VK_KHR_pipeline_executable_properties)": [
{
"vuid": "VUID-VkPipelineExecutableStatisticKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR</code>"
},
{
"vuid": "VUID-VkPipelineExecutableStatisticKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
},
"vkGetPipelineExecutableInternalRepresentationsKHR": {
"(VK_KHR_pipeline_executable_properties)": [
{
"vuid": "VUID-vkGetPipelineExecutableInternalRepresentationsKHR-pipelineExecutableInfo-03276",
"text": " <a href=\"#features-pipelineExecutableInfo\"><code>pipelineExecutableInfo</code></a> <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkGetPipelineExecutableInternalRepresentationsKHR-pipeline-03277",
"text": " <code>pipeline</code> member of <code>pExecutableInfo</code> <strong class=\"purple\">must</strong> have been created with <code>device</code>"
},
{
"vuid": "VUID-vkGetPipelineExecutableInternalRepresentationsKHR-pipeline-03278",
"text": " <code>pipeline</code> member of <code>pExecutableInfo</code> <strong class=\"purple\">must</strong> have been created with <code>VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR</code> set in the <code>flags</code> field of <a href=\"#VkGraphicsPipelineCreateInfo\">VkGraphicsPipelineCreateInfo</a> or <a href=\"#VkComputePipelineCreateInfo\">VkComputePipelineCreateInfo</a>"
},
{
"vuid": "VUID-vkGetPipelineExecutableInternalRepresentationsKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetPipelineExecutableInternalRepresentationsKHR-pExecutableInfo-parameter",
"text": " <code>pExecutableInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkPipelineExecutableInfoKHR\">VkPipelineExecutableInfoKHR</a> structure"
},
{
"vuid": "VUID-vkGetPipelineExecutableInternalRepresentationsKHR-pInternalRepresentationCount-parameter",
"text": " <code>pInternalRepresentationCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
},
{
"vuid": "VUID-vkGetPipelineExecutableInternalRepresentationsKHR-pInternalRepresentations-parameter",
"text": " If the value referenced by <code>pInternalRepresentationCount</code> is not <code>0</code>, and <code>pInternalRepresentations</code> is not <code>NULL</code>, <code>pInternalRepresentations</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pInternalRepresentationCount</code> <a href=\"#VkPipelineExecutableInternalRepresentationKHR\">VkPipelineExecutableInternalRepresentationKHR</a> structures"
}
]
},
"VkPipelineExecutableInternalRepresentationKHR": {
"(VK_KHR_pipeline_executable_properties)": [
{
"vuid": "VUID-VkPipelineExecutableInternalRepresentationKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR</code>"
},
{
"vuid": "VUID-VkPipelineExecutableInternalRepresentationKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
},
"vkGetShaderInfoAMD": {
"(VK_AMD_shader_info)": [
{
"vuid": "VUID-vkGetShaderInfoAMD-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetShaderInfoAMD-pipeline-parameter",
"text": " <code>pipeline</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipeline\">VkPipeline</a> 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>"
}
]
},
"VkPipelineCompilerControlCreateInfoAMD": {
"(VK_AMD_pipeline_compiler_control)": [
{
"vuid": "VUID-VkPipelineCompilerControlCreateInfoAMD-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD</code>"
},
{
"vuid": "VUID-VkPipelineCompilerControlCreateInfoAMD-compilerControlFlags-zerobitmask",
"text": " <code>compilerControlFlags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
}
]
},
"vkCreateRayTracingPipelinesNV": {
"core": [
{
"vuid": "VUID-vkCreateRayTracingPipelinesNV-flags-03415",
"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-vkCreateRayTracingPipelinesNV-flags-03416",
"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"
}
],
"(VK_EXT_pipeline_creation_cache_control)": [
{
"vuid": "VUID-vkCreateRayTracingPipelinesNV-pipelineCache-02903",
"text": " If <code>pipelineCache</code> was created with <code>VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT</code>, host access to <code>pipelineCache</code> <strong class=\"purple\">must</strong> be <a href=\"#fundamentals-threadingbehavior\">externally synchronized</a>"
}
],
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_NV_ray_tracing)": [
{
"vuid": "VUID-vkCreateRayTracingPipelinesNV-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkCreateRayTracingPipelinesNV-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 <a href=\"#VkPipelineCache\">VkPipelineCache</a> handle"
},
{
"vuid": "VUID-vkCreateRayTracingPipelinesNV-pCreateInfos-parameter",
"text": " <code>pCreateInfos</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>createInfoCount</code> valid <a href=\"#VkRayTracingPipelineCreateInfoNV\">VkRayTracingPipelineCreateInfoNV</a> structures"
},
{
"vuid": "VUID-vkCreateRayTracingPipelinesNV-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateRayTracingPipelinesNV-pPipelines-parameter",
"text": " <code>pPipelines</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>createInfoCount</code> <a href=\"#VkPipeline\">VkPipeline</a> handles"
},
{
"vuid": "VUID-vkCreateRayTracingPipelinesNV-createInfoCount-arraylength",
"text": " <code>createInfoCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkCreateRayTracingPipelinesNV-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>"
}
]
},
"vkCreateRayTracingPipelinesKHR": {
"core": [
{
"vuid": "VUID-vkCreateRayTracingPipelinesKHR-flags-03415",
"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-vkCreateRayTracingPipelinesKHR-flags-03416",
"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-vkCreateRayTracingPipelinesKHR-rayTracing-03455",
"text": " The <a href=\"#features-raytracing\"><code>rayTracing</code></a> feature <strong class=\"purple\">must</strong> be enabled"
}
],
"(VK_EXT_pipeline_creation_cache_control)": [
{
"vuid": "VUID-vkCreateRayTracingPipelinesKHR-pipelineCache-02903",
"text": " If <code>pipelineCache</code> was created with <code>VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT</code>, host access to <code>pipelineCache</code> <strong class=\"purple\">must</strong> be <a href=\"#fundamentals-threadingbehavior\">externally synchronized</a>"
}
],
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_KHR_ray_tracing)": [
{
"vuid": "VUID-vkCreateRayTracingPipelinesKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkCreateRayTracingPipelinesKHR-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 <a href=\"#VkPipelineCache\">VkPipelineCache</a> handle"
},
{
"vuid": "VUID-vkCreateRayTracingPipelinesKHR-pCreateInfos-parameter",
"text": " <code>pCreateInfos</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>createInfoCount</code> valid <a href=\"#VkRayTracingPipelineCreateInfoKHR\">VkRayTracingPipelineCreateInfoKHR</a> structures"
},
{
"vuid": "VUID-vkCreateRayTracingPipelinesKHR-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateRayTracingPipelinesKHR-pPipelines-parameter",
"text": " <code>pPipelines</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>createInfoCount</code> <a href=\"#VkPipeline\">VkPipeline</a> handles"
},
{
"vuid": "VUID-vkCreateRayTracingPipelinesKHR-createInfoCount-arraylength",
"text": " <code>createInfoCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkCreateRayTracingPipelinesKHR-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>"
}
]
},
"VkRayTracingPipelineCreateInfoNV": {
"core": [
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoNV-flags-03421",
"text": " If <code>flags</code> contains the <code>VK_PIPELINE_CREATE_DERIVATIVE_BIT</code> flag, and <code>basePipelineIndex</code> is <code>-1</code>, <code>basePipelineHandle</code> <strong class=\"purple\">must</strong> be a valid handle to a ray tracing <code>VkPipeline</code>"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoNV-flags-03422",
"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-VkRayTracingPipelineCreateInfoNV-flags-03423",
"text": " If <code>flags</code> contains the <code>VK_PIPELINE_CREATE_DERIVATIVE_BIT</code> flag, and <code>basePipelineIndex</code> is not <code>-1</code>, <code>basePipelineHandle</code> <strong class=\"purple\">must</strong> be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoNV-flags-03424",
"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 <code>-1</code>"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoNV-stage-03425",
"text": " The <code>stage</code> member of at least one element of <code>pStages</code> <strong class=\"purple\">must</strong> be <code>VK_SHADER_STAGE_RAYGEN_BIT_KHR</code>"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoNV-pStages-03426",
"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 <a href=\"#interfaces\">Shader Interfaces</a> chapter"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoNV-layout-03427",
"text": " <code>layout</code> <strong class=\"purple\">must</strong> be <a href=\"#descriptorsets-pipelinelayout-consistency\">consistent</a> with all shaders specified in <code>pStages</code>"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoNV-layout-03428",
"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 <a href=\"#VkPhysicalDeviceLimits\">VkPhysicalDeviceLimits</a>::<code>maxPerStageResources</code>"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoNV-maxRecursionDepth-03457",
"text": " <code>maxRecursionDepth</code> <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkPhysicalDeviceRayTracingPropertiesNV\">VkPhysicalDeviceRayTracingPropertiesNV</a>::<code>maxRecursionDepth</code>"
}
],
"(VK_NV_device_generated_commands)": [
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoNV-flags-02904",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV</code>"
}
],
"(VK_EXT_pipeline_creation_cache_control)": [
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoNV-pipelineCreationCacheControl-02905",
"text": " If the <a href=\"#features-pipelineCreationCacheControl\"><code>pipelineCreationCacheControl</code></a> feature is not enabled, <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT</code> or <code>VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT</code>"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoNV-flags-02957",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not include both <code>VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV</code> and <code>VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT</code> at the same time"
}
],
"(VK_KHR_pipeline_library)": [
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoNV-flags-03456",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_CREATE_LIBRARY_BIT_KHR</code>"
}
],
"(VK_KHR_ray_tracing)": [
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoNV-flags-03458",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR</code>"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoNV-flags-03459",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR</code>"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoNV-flags-03460",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR</code>"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoNV-flags-03461",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR</code>"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoNV-flags-03462",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR</code>"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoNV-flags-03463",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR</code>"
}
],
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_NV_ray_tracing)": [
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV</code>"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoNV-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=\"#VkPipelineCreationFeedbackCreateInfoEXT\">VkPipelineCreationFeedbackCreateInfoEXT</a>"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoNV-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoNV-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkPipelineCreateFlagBits\">VkPipelineCreateFlagBits</a> values"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoNV-pStages-parameter",
"text": " <code>pStages</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>stageCount</code> valid <a href=\"#VkPipelineShaderStageCreateInfo\">VkPipelineShaderStageCreateInfo</a> structures"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoNV-pGroups-parameter",
"text": " <code>pGroups</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>groupCount</code> valid <a href=\"#VkRayTracingShaderGroupCreateInfoNV\">VkRayTracingShaderGroupCreateInfoNV</a> structures"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoNV-layout-parameter",
"text": " <code>layout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipelineLayout\">VkPipelineLayout</a> handle"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoNV-stageCount-arraylength",
"text": " <code>stageCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoNV-groupCount-arraylength",
"text": " <code>groupCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoNV-commonparent",
"text": " Both of <code>basePipelineHandle</code>, and <code>layout</code> that are valid handles of non-ignored parameters <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"VkRayTracingPipelineCreateInfoKHR": {
"core": [
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-flags-03421",
"text": " If <code>flags</code> contains the <code>VK_PIPELINE_CREATE_DERIVATIVE_BIT</code> flag, and <code>basePipelineIndex</code> is <code>-1</code>, <code>basePipelineHandle</code> <strong class=\"purple\">must</strong> be a valid handle to a ray tracing <code>VkPipeline</code>"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-flags-03422",
"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-VkRayTracingPipelineCreateInfoKHR-flags-03423",
"text": " If <code>flags</code> contains the <code>VK_PIPELINE_CREATE_DERIVATIVE_BIT</code> flag, and <code>basePipelineIndex</code> is not <code>-1</code>, <code>basePipelineHandle</code> <strong class=\"purple\">must</strong> be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-flags-03424",
"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 <code>-1</code>"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-stage-03425",
"text": " The <code>stage</code> member of at least one element of <code>pStages</code> <strong class=\"purple\">must</strong> be <code>VK_SHADER_STAGE_RAYGEN_BIT_KHR</code>"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-pStages-03426",
"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 <a href=\"#interfaces\">Shader Interfaces</a> chapter"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-layout-03427",
"text": " <code>layout</code> <strong class=\"purple\">must</strong> be <a href=\"#descriptorsets-pipelinelayout-consistency\">consistent</a> with all shaders specified in <code>pStages</code>"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-layout-03428",
"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 <a href=\"#VkPhysicalDeviceLimits\">VkPhysicalDeviceLimits</a>::<code>maxPerStageResources</code>"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-maxRecursionDepth-03464",
"text": " <code>maxRecursionDepth</code> <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkPhysicalDeviceRayTracingPropertiesKHR\">VkPhysicalDeviceRayTracingPropertiesKHR</a>::<code>maxRecursionDepth</code>"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-flags-03470",
"text": " If <code>flags</code> includes <code>VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR</code>, for any element of <code>pGroups</code> with a <code>type</code> of <code>VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR</code> or <code>VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR</code>, the <code>anyHitShader</code> of that element <strong class=\"purple\">must</strong> not be <code>VK_SHADER_UNUSED_KHR</code>"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-flags-03471",
"text": " If <code>flags</code> includes <code>VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR</code>, for any element of <code>pGroups</code> with a <code>type</code> of <code>VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR</code> or <code>VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR</code>, the <code>closestHitShader</code> of that element <strong class=\"purple\">must</strong> not be <code>VK_SHADER_UNUSED_KHR</code>"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-rayTracingPrimitiveCulling-03472",
"text": " If the <a href=\"#features-rayTracingPrimitiveCulling\"><code>rayTracingPrimitiveCulling</code></a> feature is not enabled, <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR</code>"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-rayTracingPrimitiveCulling-03473",
"text": " If the <a href=\"#features-rayTracingPrimitiveCulling\"><code>rayTracingPrimitiveCulling</code></a> feature is not enabled, <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR</code>"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-libraries-02958",
"text": " If <code>libraries.libraryCount</code> is zero, then <code>stageCount</code> <strong class=\"purple\">must</strong> not be zero"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-libraries-02959",
"text": " If <code>libraries.libraryCount</code> is zero, then <code>groupCount</code> <strong class=\"purple\">must</strong> not be zero"
}
],
"(VK_NV_device_generated_commands)": [
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-flags-02904",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV</code>"
}
],
"(VK_EXT_pipeline_creation_cache_control)": [
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-pipelineCreationCacheControl-02905",
"text": " If the <a href=\"#features-pipelineCreationCacheControl\"><code>pipelineCreationCacheControl</code></a> feature is not enabled, <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT</code> or <code>VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT</code>"
}
],
"(VK_KHR_pipeline_library)": [
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-flags-03465",
"text": " If <code>flags</code> includes <code>VK_PIPELINE_CREATE_LIBRARY_BIT_KHR</code>, <code>pLibraryInterface</code> <strong class=\"purple\">must</strong> not be <code>NULL</code>"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-libraryCount-03466",
"text": " If the <code>libraryCount</code> member of <code>libraries</code> is greater than <code>0</code>, <code>pLibraryInterface</code> <strong class=\"purple\">must</strong> not be <code>NULL</code>"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-pLibraries-03467",
"text": " Each element of the <code>pLibraries</code> member of <code>libraries</code> <strong class=\"purple\">must</strong> have been created with the value of <code>maxRecursionDepth</code> equal to that in this pipeline"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-pLibraries-03468",
"text": " Each element of the <code>pLibraries</code> member of <code>libraries</code> <strong class=\"purple\">must</strong> have been created with a <code>layout</code> that is compatible with the <code>layout</code> in this pipeline"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-pLibraries-03469",
"text": " Each element of the <code>pLibraries</code> member of <code>libraries</code> <strong class=\"purple\">must</strong> have been created with values of the <code>maxPayloadSize</code>, <code>maxAttributeSize</code>, and <code>maxCallableSize</code> members of <code>pLibraryInterface</code> equal to those in this pipeline"
}
],
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_KHR_ray_tracing)": [
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR</code>"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-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=\"#VkDeferredOperationInfoKHR\">VkDeferredOperationInfoKHR</a> or <a href=\"#VkPipelineCreationFeedbackCreateInfoEXT\">VkPipelineCreationFeedbackCreateInfoEXT</a>"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkPipelineCreateFlagBits\">VkPipelineCreateFlagBits</a> values"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-pStages-parameter",
"text": " If <code>stageCount</code> is not <code>0</code>, <code>pStages</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>stageCount</code> valid <a href=\"#VkPipelineShaderStageCreateInfo\">VkPipelineShaderStageCreateInfo</a> structures"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-pGroups-parameter",
"text": " If <code>groupCount</code> is not <code>0</code>, <code>pGroups</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>groupCount</code> valid <a href=\"#VkRayTracingShaderGroupCreateInfoKHR\">VkRayTracingShaderGroupCreateInfoKHR</a> structures"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-libraries-parameter",
"text": " <code>libraries</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipelineLibraryCreateInfoKHR\">VkPipelineLibraryCreateInfoKHR</a> structure"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInterface-parameter",
"text": " If <code>pLibraryInterface</code> is not <code>NULL</code>, <code>pLibraryInterface</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkRayTracingPipelineInterfaceCreateInfoKHR\">VkRayTracingPipelineInterfaceCreateInfoKHR</a> structure"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-layout-parameter",
"text": " <code>layout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipelineLayout\">VkPipelineLayout</a> handle"
},
{
"vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-commonparent",
"text": " Both of <code>basePipelineHandle</code>, and <code>layout</code> that are valid handles of non-ignored parameters <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"VkRayTracingShaderGroupCreateInfoNV": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_NV_ray_tracing)": [
{
"vuid": "VUID-VkRayTracingShaderGroupCreateInfoNV-type-02413",
"text": " If <code>type</code> is <code>VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV</code> then <code>generalShader</code> <strong class=\"purple\">must</strong> be a valid index into <a href=\"#VkRayTracingPipelineCreateInfoNV\">VkRayTracingPipelineCreateInfoNV</a>::<code>pStages</code> referring to a shader of <code>VK_SHADER_STAGE_RAYGEN_BIT_NV</code>, <code>VK_SHADER_STAGE_MISS_BIT_NV</code>, or <code>VK_SHADER_STAGE_CALLABLE_BIT_NV</code>"
},
{
"vuid": "VUID-VkRayTracingShaderGroupCreateInfoNV-type-02414",
"text": " If <code>type</code> is <code>VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV</code> then <code>closestHitShader</code>, <code>anyHitShader</code>, and <code>intersectionShader</code> <strong class=\"purple\">must</strong> be <code>VK_SHADER_UNUSED_NV</code>"
},
{
"vuid": "VUID-VkRayTracingShaderGroupCreateInfoNV-type-02415",
"text": " If <code>type</code> is <code>VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV</code> then <code>intersectionShader</code> <strong class=\"purple\">must</strong> be a valid index into <a href=\"#VkRayTracingPipelineCreateInfoNV\">VkRayTracingPipelineCreateInfoNV</a>::<code>pStages</code> referring to a shader of <code>VK_SHADER_STAGE_INTERSECTION_BIT_NV</code>"
},
{
"vuid": "VUID-VkRayTracingShaderGroupCreateInfoNV-type-02416",
"text": " If <code>type</code> is <code>VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV</code> then <code>intersectionShader</code> <strong class=\"purple\">must</strong> be <code>VK_SHADER_UNUSED_NV</code>"
},
{
"vuid": "VUID-VkRayTracingShaderGroupCreateInfoNV-closestHitShader-02417",
"text": " <code>closestHitShader</code> <strong class=\"purple\">must</strong> be either <code>VK_SHADER_UNUSED_NV</code> or a valid index into <a href=\"#VkRayTracingPipelineCreateInfoNV\">VkRayTracingPipelineCreateInfoNV</a>::<code>pStages</code> referring to a shader of <code>VK_SHADER_STAGE_CLOSEST_HIT_BIT_NV</code>"
},
{
"vuid": "VUID-VkRayTracingShaderGroupCreateInfoNV-anyHitShader-02418",
"text": " <code>anyHitShader</code> <strong class=\"purple\">must</strong> be either <code>VK_SHADER_UNUSED_NV</code> or a valid index into <a href=\"#VkRayTracingPipelineCreateInfoNV\">VkRayTracingPipelineCreateInfoNV</a>::<code>pStages</code> referring to a shader of <code>VK_SHADER_STAGE_ANY_HIT_BIT_NV</code>"
},
{
"vuid": "VUID-VkRayTracingShaderGroupCreateInfoNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV</code>"
},
{
"vuid": "VUID-VkRayTracingShaderGroupCreateInfoNV-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkRayTracingShaderGroupCreateInfoNV-type-parameter",
"text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkRayTracingShaderGroupTypeKHR\">VkRayTracingShaderGroupTypeKHR</a> value"
}
]
},
"VkRayTracingShaderGroupCreateInfoKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_KHR_ray_tracing)": [
{
"vuid": "VUID-VkRayTracingShaderGroupCreateInfoKHR-type-03474",
"text": " If <code>type</code> is <code>VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR</code> then <code>generalShader</code> <strong class=\"purple\">must</strong> be a valid index into <a href=\"#VkRayTracingPipelineCreateInfoKHR\">VkRayTracingPipelineCreateInfoKHR</a>::<code>pStages</code> referring to a shader of <code>VK_SHADER_STAGE_RAYGEN_BIT_KHR</code>, <code>VK_SHADER_STAGE_MISS_BIT_KHR</code>, or <code>VK_SHADER_STAGE_CALLABLE_BIT_KHR</code>"
},
{
"vuid": "VUID-VkRayTracingShaderGroupCreateInfoKHR-type-03475",
"text": " If <code>type</code> is <code>VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR</code> then <code>closestHitShader</code>, <code>anyHitShader</code>, and <code>intersectionShader</code> <strong class=\"purple\">must</strong> be <code>VK_SHADER_UNUSED_KHR</code>"
},
{
"vuid": "VUID-VkRayTracingShaderGroupCreateInfoKHR-type-03476",
"text": " If <code>type</code> is <code>VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR</code> then <code>intersectionShader</code> <strong class=\"purple\">must</strong> be a valid index into <a href=\"#VkRayTracingPipelineCreateInfoKHR\">VkRayTracingPipelineCreateInfoKHR</a>::<code>pStages</code> referring to a shader of <code>VK_SHADER_STAGE_INTERSECTION_BIT_KHR</code>"
},
{
"vuid": "VUID-VkRayTracingShaderGroupCreateInfoKHR-type-03477",
"text": " If <code>type</code> is <code>VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR</code> then <code>intersectionShader</code> <strong class=\"purple\">must</strong> be <code>VK_SHADER_UNUSED_KHR</code>"
},
{
"vuid": "VUID-VkRayTracingShaderGroupCreateInfoKHR-closestHitShader-03478",
"text": " <code>closestHitShader</code> <strong class=\"purple\">must</strong> be either <code>VK_SHADER_UNUSED_KHR</code> or a valid index into <a href=\"#VkRayTracingPipelineCreateInfoKHR\">VkRayTracingPipelineCreateInfoKHR</a>::<code>pStages</code> referring to a shader of <code>VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR</code>"
},
{
"vuid": "VUID-VkRayTracingShaderGroupCreateInfoKHR-anyHitShader-03479",
"text": " <code>anyHitShader</code> <strong class=\"purple\">must</strong> be either <code>VK_SHADER_UNUSED_KHR</code> or a valid index into <a href=\"#VkRayTracingPipelineCreateInfoKHR\">VkRayTracingPipelineCreateInfoKHR</a>::<code>pStages</code> referring to a shader of <code>VK_SHADER_STAGE_ANY_HIT_BIT_KHR</code>"
},
{
"vuid": "VUID-VkRayTracingShaderGroupCreateInfoKHR-rayTracingShaderGroupHandleCaptureReplayMixed-03480",
"text": " If <a href=\"#VkPhysicalDeviceRayTracingFeaturesKHR\">VkPhysicalDeviceRayTracingFeaturesKHR</a>::<code>rayTracingShaderGroupHandleCaptureReplayMixed</code> is <code>VK_FALSE</code> then <code>pShaderGroupCaptureReplayHandle</code> <strong class=\"purple\">must</strong> not be provided if it has not been provided on a previous call to ray tracing pipeline creation"
},
{
"vuid": "VUID-VkRayTracingShaderGroupCreateInfoKHR-rayTracingShaderGroupHandleCaptureReplayMixed-03481",
"text": " If <a href=\"#VkPhysicalDeviceRayTracingFeaturesKHR\">VkPhysicalDeviceRayTracingFeaturesKHR</a>::<code>rayTracingShaderGroupHandleCaptureReplayMixed</code> is <code>VK_FALSE</code> then the caller <strong class=\"purple\">must</strong> guarantee that no ray tracing pipeline creation commands with <code>pShaderGroupCaptureReplayHandle</code> provided execute simultaneously with ray tracing pipeline creation commands without <code>pShaderGroupCaptureReplayHandle</code> provided"
},
{
"vuid": "VUID-VkRayTracingShaderGroupCreateInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR</code>"
},
{
"vuid": "VUID-VkRayTracingShaderGroupCreateInfoKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkRayTracingShaderGroupCreateInfoKHR-type-parameter",
"text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkRayTracingShaderGroupTypeKHR\">VkRayTracingShaderGroupTypeKHR</a> value"
}
]
},
"VkRayTracingPipelineInterfaceCreateInfoKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_KHR_ray_tracing)": [
{
"vuid": "VUID-VkRayTracingPipelineInterfaceCreateInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR</code>"
},
{
"vuid": "VUID-VkRayTracingPipelineInterfaceCreateInfoKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
},
"vkGetRayTracingShaderGroupHandlesKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)": [
{
"vuid": "VUID-vkGetRayTracingShaderGroupHandlesKHR-firstGroup-04050",
"text": " <code>firstGroup</code> <strong class=\"purple\">must</strong> be less than the number of shader groups in <code>pipeline</code>"
},
{
"vuid": "VUID-vkGetRayTracingShaderGroupHandlesKHR-firstGroup-02419",
"text": " The sum of <code>firstGroup</code> and <code>groupCount</code> <strong class=\"purple\">must</strong> be less than or equal to the number of shader groups in <code>pipeline</code>"
},
{
"vuid": "VUID-vkGetRayTracingShaderGroupHandlesKHR-dataSize-02420",
"text": " <code>dataSize</code> <strong class=\"purple\">must</strong> be at least <span class=\"eq\"><a href=\"#VkPhysicalDeviceRayTracingPropertiesKHR\">VkPhysicalDeviceRayTracingPropertiesKHR</a>::<code>shaderGroupHandleSize</code> {times} <code>groupCount</code></span>"
},
{
"vuid": "VUID-vkGetRayTracingShaderGroupHandlesKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetRayTracingShaderGroupHandlesKHR-pipeline-parameter",
"text": " <code>pipeline</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipeline\">VkPipeline</a> handle"
},
{
"vuid": "VUID-vkGetRayTracingShaderGroupHandlesKHR-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-vkGetRayTracingShaderGroupHandlesKHR-dataSize-arraylength",
"text": " <code>dataSize</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkGetRayTracingShaderGroupHandlesKHR-pipeline-parent",
"text": " <code>pipeline</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
],
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_KHR_pipeline_library)": [
{
"vuid": "VUID-vkGetRayTracingShaderGroupHandlesKHR-pipeline-03482",
"text": " <code>pipeline</code> <strong class=\"purple\">must</strong> have not been created with <code>VK_PIPELINE_CREATE_LIBRARY_BIT_KHR</code>"
}
]
},
"vkGetRayTracingCaptureReplayShaderGroupHandlesKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_KHR_ray_tracing)": [
{
"vuid": "VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-firstGroup-04051",
"text": " <code>firstGroup</code> <strong class=\"purple\">must</strong> be less than the number of shader groups in <code>pipeline</code>"
},
{
"vuid": "VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-firstGroup-03483",
"text": " The sum of <code>firstGroup</code> and <code>groupCount</code> <strong class=\"purple\">must</strong> be less than or equal to the number of shader groups in <code>pipeline</code>"
},
{
"vuid": "VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-dataSize-03484",
"text": " <code>dataSize</code> <strong class=\"purple\">must</strong> be at least <span class=\"eq\"><a href=\"#VkPhysicalDeviceRayTracingPropertiesKHR\">VkPhysicalDeviceRayTracingPropertiesKHR</a>::<code>shaderGroupHandleCaptureReplaySize</code> {times} <code>groupCount</code></span>"
},
{
"vuid": "VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-rayTracingShaderGroupHandleCaptureReplay-03485",
"text": " <code>VkPhysicalDeviceRayTracingFeaturesKHR</code>::<code>rayTracingShaderGroupHandleCaptureReplay</code> <strong class=\"purple\">must</strong> be enabled to call this function"
},
{
"vuid": "VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-pipeline-parameter",
"text": " <code>pipeline</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipeline\">VkPipeline</a> handle"
},
{
"vuid": "VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-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-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-dataSize-arraylength",
"text": " <code>dataSize</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-pipeline-parent",
"text": " <code>pipeline</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkCompileDeferredNV": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_NV_ray_tracing)": [
{
"vuid": "VUID-vkCompileDeferredNV-pipeline-02237",
"text": " <code>pipeline</code> <strong class=\"purple\">must</strong> have been created with <code>VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV</code>"
},
{
"vuid": "VUID-vkCompileDeferredNV-shader-02238",
"text": " <code>shader</code> <strong class=\"purple\">must</strong> not have been called as a deferred compile before"
},
{
"vuid": "VUID-vkCompileDeferredNV-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkCompileDeferredNV-pipeline-parameter",
"text": " <code>pipeline</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipeline\">VkPipeline</a> handle"
},
{
"vuid": "VUID-vkCompileDeferredNV-pipeline-parent",
"text": " <code>pipeline</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"VkPipelineCreationFeedbackCreateInfoEXT": {
"(VK_EXT_pipeline_creation_feedback)": [
{
"vuid": "VUID-VkPipelineCreationFeedbackCreateInfoEXT-pipelineStageCreationFeedbackCount-02668",
"text": " When chained to <a href=\"#VkGraphicsPipelineCreateInfo\">VkGraphicsPipelineCreateInfo</a>, <a href=\"#VkPipelineCreationFeedbackEXT\">VkPipelineCreationFeedbackEXT</a>::<code>pipelineStageCreationFeedbackCount</code> <strong class=\"purple\">must</strong> equal <a href=\"#VkGraphicsPipelineCreateInfo\">VkGraphicsPipelineCreateInfo</a>::<code>stageCount</code>"
},
{
"vuid": "VUID-VkPipelineCreationFeedbackCreateInfoEXT-pipelineStageCreationFeedbackCount-02669",
"text": " When chained to <a href=\"#VkComputePipelineCreateInfo\">VkComputePipelineCreateInfo</a>, <a href=\"#VkPipelineCreationFeedbackEXT\">VkPipelineCreationFeedbackEXT</a>::<code>pipelineStageCreationFeedbackCount</code> <strong class=\"purple\">must</strong> equal 1"
},
{
"vuid": "VUID-VkPipelineCreationFeedbackCreateInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT</code>"
},
{
"vuid": "VUID-VkPipelineCreationFeedbackCreateInfoEXT-pPipelineCreationFeedback-parameter",
"text": " <code>pPipelineCreationFeedback</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkPipelineCreationFeedbackEXT\">VkPipelineCreationFeedbackEXT</a> structure"
},
{
"vuid": "VUID-VkPipelineCreationFeedbackCreateInfoEXT-pPipelineStageCreationFeedbacks-parameter",
"text": " <code>pPipelineStageCreationFeedbacks</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pipelineStageCreationFeedbackCount</code> <a href=\"#VkPipelineCreationFeedbackEXT\">VkPipelineCreationFeedbackEXT</a> structures"
},
{
"vuid": "VUID-VkPipelineCreationFeedbackCreateInfoEXT-pipelineStageCreationFeedbackCount-arraylength",
"text": " <code>pipelineStageCreationFeedbackCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
],
"(VK_EXT_pipeline_creation_feedback)+(VK_KHR_ray_tracing)": [
{
"vuid": "VUID-VkPipelineCreationFeedbackCreateInfoEXT-pipelineStageCreationFeedbackCount-02670",
"text": " When chained to <a href=\"#VkRayTracingPipelineCreateInfoKHR\">VkRayTracingPipelineCreateInfoKHR</a>, <a href=\"#VkPipelineCreationFeedbackEXT\">VkPipelineCreationFeedbackEXT</a>::<code>pipelineStageCreationFeedbackCount</code> <strong class=\"purple\">must</strong> equal <a href=\"#VkRayTracingPipelineCreateInfoKHR\">VkRayTracingPipelineCreateInfoKHR</a>::<code>stageCount</code>"
}
],
"(VK_EXT_pipeline_creation_feedback)+(VK_NV_ray_tracing)": [
{
"vuid": "VUID-VkPipelineCreationFeedbackCreateInfoEXT-pipelineStageCreationFeedbackCount-02969",
"text": " When chained to <a href=\"#VkRayTracingPipelineCreateInfoNV\">VkRayTracingPipelineCreateInfoNV</a>, <a href=\"#VkPipelineCreationFeedbackEXT\">VkPipelineCreationFeedbackEXT</a>::<code>pipelineStageCreationFeedbackCount</code> <strong class=\"purple\">must</strong> equal <a href=\"#VkRayTracingPipelineCreateInfoNV\">VkRayTracingPipelineCreateInfoNV</a>::<code>stageCount</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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceMemoryProperties-pMemoryProperties-parameter",
"text": " <code>pMemoryProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkPhysicalDeviceMemoryProperties\">VkPhysicalDeviceMemoryProperties</a> 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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceMemoryProperties2-pMemoryProperties-parameter",
"text": " <code>pMemoryProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkPhysicalDeviceMemoryProperties2\">VkPhysicalDeviceMemoryProperties2</a> 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> or a pointer to a valid instance of <a href=\"#VkPhysicalDeviceMemoryBudgetPropertiesEXT\">VkPhysicalDeviceMemoryBudgetPropertiesEXT</a>"
},
{
"vuid": "VUID-VkPhysicalDeviceMemoryProperties2-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
}
]
},
"VkPhysicalDeviceMemoryBudgetPropertiesEXT": {
"(VK_EXT_memory_budget)": [
{
"vuid": "VUID-VkPhysicalDeviceMemoryBudgetPropertiesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT</code>"
}
]
},
"vkAllocateMemory": {
"core": [
{
"vuid": "VUID-vkAllocateMemory-pAllocateInfo-01713",
"text": " <code>pAllocateInfo-&gt;allocationSize</code> <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkPhysicalDeviceMemoryProperties\">VkPhysicalDeviceMemoryProperties</a>::<code>memoryHeaps</code>[memindex].size where <code>memindex</code> = <a href=\"#VkPhysicalDeviceMemoryProperties\">VkPhysicalDeviceMemoryProperties</a>::<code>memoryTypes</code>[pAllocateInfo-&gt;memoryTypeIndex].heapIndex 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-&gt;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-maxMemoryAllocationCount-04101",
"text": " There <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceLimits</code>::<code>maxMemoryAllocationCount</code> device memory allocations currently allocated on the device."
},
{
"vuid": "VUID-vkAllocateMemory-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkAllocateMemory-pAllocateInfo-parameter",
"text": " <code>pAllocateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkMemoryAllocateInfo\">VkMemoryAllocateInfo</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkAllocateMemory-pMemory-parameter",
"text": " <code>pMemory</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkDeviceMemory\">VkDeviceMemory</a> handle"
}
],
"(VK_AMD_device_coherent_memory)": [
{
"vuid": "VUID-vkAllocateMemory-deviceCoherentMemory-02790",
"text": " If the <a href=\"#features-deviceCoherentMemory\"><code>deviceCoherentMemory</code></a> feature is not enabled, <code>pAllocateInfo-&gt;memoryTypeIndex</code> <strong class=\"purple\">must</strong> not identify a memory type supporting <code>VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD</code>"
}
]
},
"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 includes a <code>VkExportMemoryAllocateInfo</code> structure, 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.externalMemoryFeatures</code> or <code>VkExternalBufferProperties</code>::<code>externalMemoryProperties.externalMemoryFeatures</code>, the <code>pNext</code> chain <strong class=\"purple\">must</strong> include a 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 includes a <a href=\"#VkExportMemoryAllocateInfo\">VkExportMemoryAllocateInfo</a> structure, it <strong class=\"purple\">must</strong> not include a <a href=\"#VkExportMemoryAllocateInfoNV\">VkExportMemoryAllocateInfoNV</a> or <a href=\"#VkExportMemoryWin32HandleInfoNV\">VkExportMemoryWin32HandleInfoNV</a> structure"
}
],
"(VK_KHR_external_memory_win32+VK_NV_external_memory_win32)": [
{
"vuid": "VUID-VkMemoryAllocateInfo-pNext-00641",
"text": " If the <code>pNext</code> chain includes a <a href=\"#VkImportMemoryWin32HandleInfoKHR\">VkImportMemoryWin32HandleInfoKHR</a> structure, it <strong class=\"purple\">must</strong> not include a <a href=\"#VkImportMemoryWin32HandleInfoNV\">VkImportMemoryWin32HandleInfoNV</a> structure"
}
],
"(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 <code>VkDedicatedAllocationMemoryAllocateInfoNV</code> structure 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_EXT_external_memory_host)+(VK_NV_dedicated_allocation)": [
{
"vuid": "VUID-VkMemoryAllocateInfo-pNext-02805",
"text": " If the parameters define an import operation and the external handle is a host pointer, the <code>pNext</code> chain <strong class=\"purple\">must</strong> not include a <a href=\"#VkDedicatedAllocationMemoryAllocateInfoNV\">VkDedicatedAllocationMemoryAllocateInfoNV</a> structure with either its <code>image</code> or <code>buffer</code> field set to a value other than <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
}
],
"(VK_EXT_external_memory_host)+(VK_KHR_dedicated_allocation)": [
{
"vuid": "VUID-VkMemoryAllocateInfo-pNext-02806",
"text": " If the parameters define an import operation and the external handle is a host pointer, the <code>pNext</code> chain <strong class=\"purple\">must</strong> not include a <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a> structure with either its <code>image</code> or <code>buffer</code> field set to a value other than <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
}
],
"(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-VkMemoryAllocateInfo-allocationSize-02383",
"text": " If the parameters define an import operation and the external handle type is <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID</code>, <code>allocationSize</code> <strong class=\"purple\">must</strong> be the size returned by <a href=\"#vkGetAndroidHardwareBufferPropertiesANDROID\">vkGetAndroidHardwareBufferPropertiesANDROID</a> for the Android hardware buffer"
},
{
"vuid": "VUID-VkMemoryAllocateInfo-pNext-02384",
"text": " If the parameters define an import operation and the external handle type is <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID</code>, and the <code>pNext</code> chain does not include a <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a> structure or <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>::<code>image</code> is <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, the Android hardware buffer <strong class=\"purple\">must</strong> have a <code>AHardwareBuffer_Desc</code>::<code>format</code> of <code>AHARDWAREBUFFER_FORMAT_BLOB</code> and a <code>AHardwareBuffer_Desc</code>::<code>usage</code> that includes <code>AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER</code>"
},
{
"vuid": "VUID-VkMemoryAllocateInfo-memoryTypeIndex-02385",
"text": " If the parameters define an import operation and the external handle type is <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID</code>, <code>memoryTypeIndex</code> <strong class=\"purple\">must</strong> be one of those returned by <a href=\"#vkGetAndroidHardwareBufferPropertiesANDROID\">vkGetAndroidHardwareBufferPropertiesANDROID</a> for the Android hardware buffer"
},
{
"vuid": "VUID-VkMemoryAllocateInfo-pNext-01874",
"text": " If the parameters do not define an import operation, and the <code>pNext</code> chain includes a <code>VkExportMemoryAllocateInfo</code> structure 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> chain includes a <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a> structure 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-02386",
"text": " If the parameters define an import operation, the external handle is an Android hardware buffer, and the <code>pNext</code> chain includes a <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a> with <code>image</code> that is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, the Android hardware buffer&#8217;s <code>AHardwareBuffer</code>::<code>usage</code> <strong class=\"purple\">must</strong> include at least one of <code>AHARDWAREBUFFER_USAGE_GPU_FRAMEBUFFER</code> or <code>AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE</code>"
},
{
"vuid": "VUID-VkMemoryAllocateInfo-pNext-02387",
"text": " If the parameters define an import operation, the external handle is an Android hardware buffer, and the <code>pNext</code> chain includes a <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a> with <code>image</code> that is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, the format of <code>image</code> <strong class=\"purple\">must</strong> be <code>VK_FORMAT_UNDEFINED</code> or the format returned by <a href=\"#vkGetAndroidHardwareBufferPropertiesANDROID\">vkGetAndroidHardwareBufferPropertiesANDROID</a> in <a href=\"#VkAndroidHardwareBufferFormatPropertiesANDROID\">VkAndroidHardwareBufferFormatPropertiesANDROID</a>::<code>format</code> for the Android hardware buffer"
},
{
"vuid": "VUID-VkMemoryAllocateInfo-pNext-02388",
"text": " If the parameters define an import operation, the external handle is an Android hardware buffer, and the <code>pNext</code> chain includes a <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a> structure with <code>image</code> that is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, the width, height, and array layer dimensions of <code>image</code> and the Android hardware buffer&#8217;s <code>AHardwareBuffer_Desc</code> <strong class=\"purple\">must</strong> be identical"
},
{
"vuid": "VUID-VkMemoryAllocateInfo-pNext-02389",
"text": " If the parameters define an import operation, the external handle is an Android hardware buffer, and the <code>pNext</code> chain includes a <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a> structure with <code>image</code> that is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, and the Android hardware buffer&#8217;s <code>AHardwareBuffer</code>::<code>usage</code> includes <code>AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE</code>, the <code>image</code> <strong class=\"purple\">must</strong> have a complete mipmap chain"
},
{
"vuid": "VUID-VkMemoryAllocateInfo-pNext-02586",
"text": " If the parameters define an import operation, the external handle is an Android hardware buffer, and the <code>pNext</code> chain includes a <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a> structure with <code>image</code> that is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, and the Android hardware buffer&#8217;s <code>AHardwareBuffer</code>::<code>usage</code> does not include <code>AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE</code>, the <code>image</code> <strong class=\"purple\">must</strong> have exactly one mipmap level"
},
{
"vuid": "VUID-VkMemoryAllocateInfo-pNext-02390",
"text": " If the parameters define an import operation, the external handle is an Android hardware buffer, and the <code>pNext</code> chain includes a <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a> structure with <code>image</code> that is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, each bit set in the usage of <code>image</code> <strong class=\"purple\">must</strong> be listed in <a href=\"#memory-external-android-hardware-buffer-usage\">AHardwareBuffer Usage Equivalence</a>, and if there is a corresponding <code>AHARDWAREBUFFER_USAGE</code> bit listed that bit <strong class=\"purple\">must</strong> be included in the Android hardware buffer&#8217;s <code>AHardwareBuffer_Desc</code>::<code>usage</code>"
}
],
"(VK_VERSION_1_2,VK_KHR_buffer_device_address)": [
{
"vuid": "VUID-VkMemoryAllocateInfo-opaqueCaptureAddress-03329",
"text": " If <a href=\"#VkMemoryOpaqueCaptureAddressAllocateInfo\">VkMemoryOpaqueCaptureAddressAllocateInfo</a>::<code>opaqueCaptureAddress</code> is not zero, <code>VkMemoryAllocateFlagsInfo</code>::<code>flags</code> <strong class=\"purple\">must</strong> include <code>VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT</code>"
},
{
"vuid": "VUID-VkMemoryAllocateInfo-flags-03330",
"text": " If <code>VkMemoryAllocateFlagsInfo</code>::<code>flags</code> includes <code>VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT</code>, the <a href=\"#features-bufferDeviceAddressCaptureReplay\">bufferDeviceAddressCaptureReplay</a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-VkMemoryAllocateInfo-flags-03331",
"text": " If <code>VkMemoryAllocateFlagsInfo</code>::<code>flags</code> includes <code>VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT</code>, the <a href=\"#features-bufferDeviceAddress\">bufferDeviceAddress</a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-VkMemoryAllocateInfo-opaqueCaptureAddress-03333",
"text": " If the parameters define an import operation, <a href=\"#VkMemoryOpaqueCaptureAddressAllocateInfo\">VkMemoryOpaqueCaptureAddressAllocateInfo</a>::<code>opaqueCaptureAddress</code> <strong class=\"purple\">must</strong> be zero"
}
],
"(VK_VERSION_1_2,VK_KHR_buffer_device_address)+(VK_EXT_external_memory_host)": [
{
"vuid": "VUID-VkMemoryAllocateInfo-pNext-03332",
"text": " If the <code>pNext</code> chain includes a <code>VkImportMemoryHostPointerInfoEXT</code> structure, <a href=\"#VkMemoryOpaqueCaptureAddressAllocateInfo\">VkMemoryOpaqueCaptureAddressAllocateInfo</a>::<code>opaqueCaptureAddress</code> <strong class=\"purple\">must</strong> be zero"
}
],
"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>, <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>, <a href=\"#VkMemoryOpaqueCaptureAddressAllocateInfo\">VkMemoryOpaqueCaptureAddressAllocateInfo</a>, or <a href=\"#VkMemoryPriorityAllocateInfoEXT\">VkMemoryPriorityAllocateInfoEXT</a>"
},
{
"vuid": "VUID-VkMemoryAllocateInfo-sType-unique",
"text": " The <code>sType</code> value of each struct 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-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 <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>::<code>flags</code>"
},
{
"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 <a href=\"#VkImage\">VkImage</a> 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 <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-VkMemoryDedicatedAllocateInfo-commonparent",
"text": " Both of <code>buffer</code>, and <code>image</code> that are valid handles of non-ignored parameters <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(VK_VERSION_1_1,VK_KHR_dedicated_allocation)+!(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"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-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"
}
],
"(VK_VERSION_1_1,VK_KHR_dedicated_allocation)+(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-VkMemoryDedicatedAllocateInfo-image-02964",
"text": " If <code>image</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a> and the memory is not an imported Android Hardware Buffer, <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-buffer-02965",
"text": " If <code>buffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a> and the memory is not an imported Android Hardware Buffer, <code>VkMemoryAllocateInfo</code>::<code>allocationSize</code> <strong class=\"purple\">must</strong> equal the <code>VkMemoryRequirements</code>::<code>size</code> of the buffer"
}
],
"(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 <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 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> <strong class=\"purple\">must</strong> 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 <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_FD_BIT</code>, 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-VkMemoryDedicatedAllocateInfo-buffer-01879",
"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_FD_BIT</code>, 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"
}
],
"(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 <a href=\"#VkDedicatedAllocationImageCreateInfoNV\">VkDedicatedAllocationImageCreateInfoNV</a>::<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 <a href=\"#VkDedicatedAllocationBufferCreateInfoNV\">VkDedicatedAllocationBufferCreateInfoNV</a>::<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 <a href=\"#VkImage\">VkImage</a> 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 <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-commonparent",
"text": " Both of <code>buffer</code>, and <code>image</code> that are valid handles of non-ignored parameters <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(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"
}
]
},
"VkMemoryPriorityAllocateInfoEXT": {
"(VK_EXT_memory_priority)": [
{
"vuid": "VUID-VkMemoryPriorityAllocateInfoEXT-priority-02602",
"text": " <code>priority</code> <strong class=\"purple\">must</strong> be between <code>0</code> and <code>1</code>, inclusive"
},
{
"vuid": "VUID-VkMemoryPriorityAllocateInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT</code>"
}
]
},
"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>, a <code>VkExportMemoryWin32HandleInfoKHR</code> structure <strong class=\"purple\">must</strong> not be included 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> <strong class=\"purple\">must</strong> 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetMemoryWin32HandleKHR-pGetWin32HandleInfo-parameter",
"text": " <code>pGetWin32HandleInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkMemoryGetWin32HandleInfoKHR\">VkMemoryGetWin32HandleInfoKHR</a> 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 <a href=\"#VkDeviceMemory\">VkDeviceMemory</a> 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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkMemoryWin32HandlePropertiesKHR\">VkMemoryWin32HandlePropertiesKHR</a> structure"
}
]
},
"VkMemoryWin32HandlePropertiesKHR": {
"(VK_KHR_external_memory_win32)": [
{
"vuid": "VUID-VkMemoryWin32HandlePropertiesKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR</code>"
},
{
"vuid": "VUID-VkMemoryWin32HandlePropertiesKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
},
"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 <a href=\"#external-memory-handle-types-compatibility\">External memory handle types compatibility</a>"
},
{
"vuid": "VUID-VkImportMemoryFdInfoKHR-fd-01520",
"text": " <code>fd</code> <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-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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetMemoryFdKHR-pGetFdInfo-parameter",
"text": " <code>pGetFdInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkMemoryGetFdInfoKHR\">VkMemoryGetFdInfoKHR</a> structure"
},
{
"vuid": "VUID-vkGetMemoryFdKHR-pFd-parameter",
"text": " <code>pFd</code> <strong class=\"purple\">must</strong> be a valid pointer to an <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 <a href=\"#VkDeviceMemory\">VkDeviceMemory</a> 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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkMemoryFdPropertiesKHR\">VkMemoryFdPropertiesKHR</a> structure"
}
]
},
"VkMemoryFdPropertiesKHR": {
"(VK_KHR_external_memory_fd)": [
{
"vuid": "VUID-VkMemoryFdPropertiesKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR</code>"
},
{
"vuid": "VUID-VkMemoryFdPropertiesKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
},
"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=\"#VkExternalMemoryProperties\">VkExternalMemoryProperties</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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkMemoryHostPointerPropertiesEXT\">VkMemoryHostPointerPropertiesEXT</a> 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 <code>AHardwareBuffer_Desc</code>::<code>usage</code> compatible with Vulkan as described in <a href=\"#memory-external-android-hardware-buffer\">Android Hardware Buffers</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 an <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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetMemoryAndroidHardwareBufferANDROID-pInfo-parameter",
"text": " <code>pInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkMemoryGetAndroidHardwareBufferInfoANDROID\">VkMemoryGetAndroidHardwareBufferInfoANDROID</a> structure"
},
{
"vuid": "VUID-vkGetMemoryAndroidHardwareBufferANDROID-pBuffer-parameter",
"text": " <code>pBuffer</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid pointer to an <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=\"#VkExportMemoryAllocateInfo\">VkExportMemoryAllocateInfo</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>"
},
{
"vuid": "VUID-VkMemoryGetAndroidHardwareBufferInfoANDROID-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID</code>"
},
{
"vuid": "VUID-VkMemoryGetAndroidHardwareBufferInfoANDROID-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkMemoryGetAndroidHardwareBufferInfoANDROID-memory-parameter",
"text": " <code>memory</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDeviceMemory\">VkDeviceMemory</a> handle"
}
]
},
"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>* flags in its <code>AHardwareBuffer_Desc</code>::<code>usage</code>"
},
{
"vuid": "VUID-vkGetAndroidHardwareBufferPropertiesANDROID-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkAndroidHardwareBufferPropertiesANDROID\">VkAndroidHardwareBufferPropertiesANDROID</a> structure"
}
]
},
"VkAndroidHardwareBufferPropertiesANDROID": {
"(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-VkAndroidHardwareBufferPropertiesANDROID-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID</code>"
},
{
"vuid": "VUID-VkAndroidHardwareBufferPropertiesANDROID-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=\"#VkAndroidHardwareBufferFormatPropertiesANDROID\">VkAndroidHardwareBufferFormatPropertiesANDROID</a>"
},
{
"vuid": "VUID-VkAndroidHardwareBufferPropertiesANDROID-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
}
]
},
"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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetMemoryWin32HandleNV-memory-parameter",
"text": " <code>memory</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDeviceMemory\">VkDeviceMemory</a> 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"
}
]
},
"VkMemoryOpaqueCaptureAddressAllocateInfo": {
"(VK_VERSION_1_2,VK_KHR_buffer_device_address)": [
{
"vuid": "VUID-VkMemoryOpaqueCaptureAddressAllocateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO</code>"
}
]
},
"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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkDeviceMemory\">VkDeviceMemory</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> 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 host 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkMapMemory-memory-parameter",
"text": " <code>memory</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDeviceMemory\">VkDeviceMemory</a> 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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkMappedMemoryRange\">VkMappedMemoryRange</a> 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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkMappedMemoryRange\">VkMappedMemoryRange</a> 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 host 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 <a href=\"#VkDeviceMemory\">VkDeviceMemory</a> handle"
}
]
},
"vkUnmapMemory": {
"core": [
{
"vuid": "VUID-vkUnmapMemory-memory-00689",
"text": " <code>memory</code> <strong class=\"purple\">must</strong> be currently host mapped"
},
{
"vuid": "VUID-vkUnmapMemory-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkUnmapMemory-memory-parameter",
"text": " <code>memory</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDeviceMemory\">VkDeviceMemory</a> 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetDeviceMemoryCommitment-memory-parameter",
"text": " <code>memory</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDeviceMemory\">VkDeviceMemory</a> 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 <code>remoteDeviceIndex</code>"
},
{
"vuid": "VUID-vkGetDeviceGroupPeerMemoryFeatures-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> 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"
}
]
},
"vkGetDeviceMemoryOpaqueCaptureAddress": {
"(VK_VERSION_1_2,VK_KHR_buffer_device_address)": [
{
"vuid": "VUID-vkGetDeviceMemoryOpaqueCaptureAddress-None-03334",
"text": " The <a href=\"#features-bufferDeviceAddress\">bufferDeviceAddress</a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkGetDeviceMemoryOpaqueCaptureAddress-device-03335",
"text": " If <code>device</code> was created with multiple physical devices, then the <a href=\"#features-bufferDeviceAddressMultiDevice\">bufferDeviceAddressMultiDevice</a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkGetDeviceMemoryOpaqueCaptureAddress-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetDeviceMemoryOpaqueCaptureAddress-pInfo-parameter",
"text": " <code>pInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkDeviceMemoryOpaqueCaptureAddressInfo\">VkDeviceMemoryOpaqueCaptureAddressInfo</a> structure"
}
]
},
"VkDeviceMemoryOpaqueCaptureAddressInfo": {
"(VK_VERSION_1_2,VK_KHR_buffer_device_address)": [
{
"vuid": "VUID-VkDeviceMemoryOpaqueCaptureAddressInfo-memory-03336",
"text": " <code>memory</code> <strong class=\"purple\">must</strong> have been allocated with <code>VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT</code>"
},
{
"vuid": "VUID-VkDeviceMemoryOpaqueCaptureAddressInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO</code>"
},
{
"vuid": "VUID-VkDeviceMemoryOpaqueCaptureAddressInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkDeviceMemoryOpaqueCaptureAddressInfo-memory-parameter",
"text": " <code>memory</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDeviceMemory\">VkDeviceMemory</a> handle"
}
]
},
"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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkCreateBuffer-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkBufferCreateInfo\">VkBufferCreateInfo</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateBuffer-pBuffer-parameter",
"text": " <code>pBuffer</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkBuffer\">VkBuffer</a> 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 <a href=\"#features-sparseBinding\">sparse bindings</a> 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 <a href=\"#features-sparseResidencyBuffer\">sparse buffer residency</a> 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 <a href=\"#features-sparseResidencyAliased\">sparse aliased residency</a> 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=\"#VkBufferDeviceAddressCreateInfoEXT\">VkBufferDeviceAddressCreateInfoEXT</a>, <a href=\"#VkBufferOpaqueCaptureAddressCreateInfo\">VkBufferOpaqueCaptureAddressCreateInfo</a>, <a href=\"#VkDedicatedAllocationBufferCreateInfoNV\">VkDedicatedAllocationBufferCreateInfoNV</a>, or <a href=\"#VkExternalMemoryBufferCreateInfo\">VkExternalMemoryBufferCreateInfo</a>"
},
{
"vuid": "VUID-VkBufferCreateInfo-sType-unique",
"text": " The <code>sType</code> value of each struct 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 includes a <a href=\"#VkExternalMemoryBufferCreateInfo\">VkExternalMemoryBufferCreateInfo</a> structure, 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-&gt;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 includes a <a href=\"#VkDedicatedAllocationBufferCreateInfoNV\">VkDedicatedAllocationBufferCreateInfoNV</a> structure, 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>"
}
],
"(VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address)+(VK_EXT_buffer_device_address)": [
{
"vuid": "VUID-VkBufferCreateInfo-deviceAddress-02604",
"text": " If <a href=\"#VkBufferDeviceAddressCreateInfoEXT\">VkBufferDeviceAddressCreateInfoEXT</a>::<code>deviceAddress</code> is not zero, <code>flags</code> <strong class=\"purple\">must</strong> include <code>VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT</code>"
}
],
"(VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address)+(VK_VERSION_1_2,VK_KHR_buffer_device_address)": [
{
"vuid": "VUID-VkBufferCreateInfo-opaqueCaptureAddress-03337",
"text": " If <a href=\"#VkBufferOpaqueCaptureAddressCreateInfo\">VkBufferOpaqueCaptureAddressCreateInfo</a>::<code>opaqueCaptureAddress</code> is not zero, <code>flags</code> <strong class=\"purple\">must</strong> include <code>VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT</code>"
}
],
"(VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address)": [
{
"vuid": "VUID-VkBufferCreateInfo-flags-03338",
"text": " If <code>flags</code> includes <code>VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT</code>, the <a href=\"#features-bufferDeviceAddressCaptureReplay\">bufferDeviceAddressCaptureReplay</a> or <a href=\"#features-bufferDeviceAddressCaptureReplayEXT\"><code>VkPhysicalDeviceBufferDeviceAddressFeaturesEXT</code>::<code>bufferDeviceAddressCaptureReplay</code></a> feature <strong class=\"purple\">must</strong> be enabled"
}
]
},
"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"
}
]
},
"VkBufferOpaqueCaptureAddressCreateInfo": {
"(VK_VERSION_1_2,VK_KHR_buffer_device_address)": [
{
"vuid": "VUID-VkBufferOpaqueCaptureAddressCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO</code>"
}
]
},
"VkBufferDeviceAddressCreateInfoEXT": {
"(VK_EXT_buffer_device_address)": [
{
"vuid": "VUID-VkBufferDeviceAddressCreateInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT</code>"
}
]
},
"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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkBuffer\">VkBuffer</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkCreateBufferView-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkBufferViewCreateInfo\">VkBufferViewCreateInfo</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateBufferView-pView-parameter",
"text": " <code>pView</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkBufferView\">VkBufferView</a> 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-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 an integer multiple of the texel block size of <code>format</code>"
},
{
"vuid": "VUID-VkBufferViewCreateInfo-range-00930",
"text": " If <code>range</code> is not equal to <code>VK_WHOLE_SIZE</code>, the number of texel buffer elements given by <span class=\"eq\">({lfloor}<code>range</code> / (texel block size){rfloor} {times} (texels per block))</span> where texel block size and texels per block are as defined in the <a href=\"#formats-compatibility\">Compatible Formats</a> table for <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-range-04059",
"text": " If <code>range</code> is equal to <code>VK_WHOLE_SIZE</code>, the number of texel buffer elements given by <span class=\"eq\">({lfloor}(size - <code>offset</code>) / (texel block size){rfloor} {times} (texels per block))</span> where size is the size of <code>buffer</code>, and texel block size and texels per block are as defined in the <a href=\"#formats-compatibility\">Compatible Formats</a> table for <code>format</code>, <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxTexelBufferElements</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 <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-VkBufferViewCreateInfo-format-parameter",
"text": " <code>format</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFormat\">VkFormat</a> value"
}
],
"!(VK_EXT_texel_buffer_alignment)": [
{
"vuid": "VUID-VkBufferViewCreateInfo-offset-00926",
"text": " <code>offset</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceLimits</code>::<code>minTexelBufferOffsetAlignment</code>"
}
],
"(VK_EXT_texel_buffer_alignment)": [
{
"vuid": "VUID-VkBufferViewCreateInfo-offset-02749",
"text": " If the <a href=\"#features-texelBufferAlignment\">texelBufferAlignment</a> feature is not enabled, <code>offset</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceLimits</code>::<code>minTexelBufferOffsetAlignment</code>"
},
{
"vuid": "VUID-VkBufferViewCreateInfo-buffer-02750",
"text": " If the <a href=\"#features-texelBufferAlignment\">texelBufferAlignment</a> feature is enabled and if <code>buffer</code> was created with <code>usage</code> containing <code>VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT</code>, <code>offset</code> <strong class=\"purple\">must</strong> be a multiple of the lesser of <a href=\"#VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT\">VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT</a>::<code>storageTexelBufferOffsetAlignmentBytes</code> or, if <a href=\"#VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT\">VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT</a>::<code>storageTexelBufferOffsetSingleTexelAlignment</code> is <code>VK_TRUE</code>, the size of a texel of the requested <code>format</code>. If the size of a texel is a multiple of three bytes, then the size of a single component of <code>format</code> is used instead"
},
{
"vuid": "VUID-VkBufferViewCreateInfo-buffer-02751",
"text": " If the <a href=\"#features-texelBufferAlignment\">texelBufferAlignment</a> feature is enabled and if <code>buffer</code> was created with <code>usage</code> containing <code>VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT</code>, <code>offset</code> <strong class=\"purple\">must</strong> be a multiple of the lesser of <a href=\"#VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT\">VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT</a>::<code>uniformTexelBufferOffsetAlignmentBytes</code> or, if <a href=\"#VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT\">VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT</a>::<code>uniformTexelBufferOffsetSingleTexelAlignment</code> is <code>VK_TRUE</code>, the size of a texel of the requested <code>format</code>. If the size of a texel is a multiple of three bytes, then the size of a single component of <code>format</code> is used instead"
}
]
},
"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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkBufferView\">VkBufferView</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkCreateImage-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateImage-pImage-parameter",
"text": " <code>pImage</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkImage\">VkImage</a> handle"
}
]
},
"VkImageCreateInfo": {
"core": [
{
"vuid": "VUID-VkImageCreateInfo-imageCreateMaxMipLevels-02251",
"text": " Each of the following values (as described in <a href=\"#resources-image-creation-limits\">Image Creation Limits</a>) <strong class=\"purple\">must</strong> not be undefined <code>imageCreateMaxMipLevels</code>, <code>imageCreateMaxArrayLayers</code>, <code>imageCreateMaxExtent</code>, and <code>imageCreateSampleCounts</code>"
},
{
"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.width</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-extent-00945",
"text": " <code>extent.height</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-extent-00946",
"text": " <code>extent.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-extent-02252",
"text": " <code>extent.width</code> <strong class=\"purple\">must</strong> be less than or equal to <code>imageCreateMaxExtent.width</code> (as defined in <a href=\"#resources-image-creation-limits\">Image Creation Limits</a>)"
},
{
"vuid": "VUID-VkImageCreateInfo-extent-02253",
"text": " <code>extent.height</code> <strong class=\"purple\">must</strong> be less than or equal to <code>imageCreateMaxExtent.height</code> (as defined in <a href=\"#resources-image-creation-limits\">Image Creation Limits</a>)"
},
{
"vuid": "VUID-VkImageCreateInfo-extent-02254",
"text": " <code>extent.depth</code> <strong class=\"purple\">must</strong> be less than or equal to <code>imageCreateMaxExtent.depth</code> (as defined in <a href=\"#resources-image-creation-limits\">Image Creation Limits</a>)"
},
{
"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-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 the number of levels in the complete mipmap chain based on <span class=\"eq\"><code>extent.width</code></span>, <span class=\"eq\"><code>extent.height</code></span>, and <span class=\"eq\"><code>extent.depth</code></span>"
},
{
"vuid": "VUID-VkImageCreateInfo-mipLevels-02255",
"text": " <code>mipLevels</code> <strong class=\"purple\">must</strong> be less than or equal to <code>imageCreateMaxMipLevels</code> (as defined in <a href=\"#resources-image-creation-limits\">Image Creation Limits</a>)"
},
{
"vuid": "VUID-VkImageCreateInfo-arrayLayers-02256",
"text": " <code>arrayLayers</code> <strong class=\"purple\">must</strong> be less than or equal to <code>imageCreateMaxArrayLayers</code> (as defined in <a href=\"#resources-image-creation-limits\">Image Creation Limits</a>)"
},
{
"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-02257",
"text": " If <code>samples</code> is not <code>VK_SAMPLE_COUNT_1_BIT</code>, then <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>mipLevels</code> <strong class=\"purple\">must</strong> be equal to <code>1</code>, and <code>imageCreateMaybeLinear</code> (as defined in <a href=\"#resources-image-creation-limits\">Image Creation Limits</a>) <strong class=\"purple\">must</strong> be <code>false</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-02258",
"text": " <code>samples</code> <strong class=\"purple\">must</strong> be a bit value that is set in <code>imageCreateSampleCounts</code> (as defined in <a href=\"#resources-image-creation-limits\">Image Creation Limits</a>)"
},
{
"vuid": "VUID-VkImageCreateInfo-usage-00968",
"text": " If the <a href=\"#features-shaderStorageImageMultisample\">multisampled storage images</a> 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 <a href=\"#features-sparseBinding\">sparse bindings</a> 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 <a href=\"#features-sparseResidencyAliased\">sparse aliased residency</a> 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 <a href=\"#features-sparseResidencyImage2D\">sparse residency for 2D images</a> 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 <a href=\"#features-sparseResidencyImage3D\">sparse residency for 3D images</a> 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 <a href=\"#features-sparseResidency2Samples\">sparse residency for images with 2 samples</a> 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 <a href=\"#features-sparseResidency4Samples\">sparse residency for images with 4 samples</a> 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 <a href=\"#features-sparseResidency8Samples\">sparse residency for images with 8 samples</a> 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 <a href=\"#features-sparseResidency16Samples\">sparse residency for images with 16 samples</a> 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=\"#VkImageDrmFormatModifierExplicitCreateInfoEXT\">VkImageDrmFormatModifierExplicitCreateInfoEXT</a>, <a href=\"#VkImageDrmFormatModifierListCreateInfoEXT\">VkImageDrmFormatModifierListCreateInfoEXT</a>, <a href=\"#VkImageFormatListCreateInfo\">VkImageFormatListCreateInfo</a>, <a href=\"#VkImageStencilUsageCreateInfo\">VkImageStencilUsageCreateInfo</a>, or <a href=\"#VkImageSwapchainCreateInfoKHR\">VkImageSwapchainCreateInfoKHR</a>"
},
{
"vuid": "VUID-VkImageCreateInfo-sType-unique",
"text": " The <code>sType</code> value of each struct 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_ANDROID_external_memory_android_hardware_buffer)": [
{
"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-01974",
"text": " If the <code>pNext</code> chain includes a <a href=\"#VkExternalFormatANDROID\">VkExternalFormatANDROID</a> structure, and its <code>externalFormat</code> member 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 include a <a href=\"#VkExternalFormatANDROID\">VkExternalFormatANDROID</a> structure, or does and its <code>externalFormat</code> member is <code>0</code>, the <code>format</code> <strong class=\"purple\">must</strong> not be <code>VK_FORMAT_UNDEFINED</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-pNext-02393",
"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>, <code>imageType</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_TYPE_2D</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-pNext-02394",
"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>, <code>mipLevels</code> <strong class=\"purple\">must</strong> either be <code>1</code> or equal to the number of levels in the complete mipmap chain based on <span class=\"eq\"><code>extent.width</code></span>, <span class=\"eq\"><code>extent.height</code></span>, and <span class=\"eq\"><code>extent.depth</code></span>"
},
{
"vuid": "VUID-VkImageCreateInfo-pNext-02396",
"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>, <code>flags</code> <strong class=\"purple\">must</strong> not include <code>VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-pNext-02397",
"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>, <code>usage</code> <strong class=\"purple\">must</strong> not include any usages except <code>VK_IMAGE_USAGE_SAMPLED_BIT</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-pNext-02398",
"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>, <code>tiling</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_TILING_OPTIMAL</code>"
}
],
"(VK_EXT_fragment_density_map)": [
{
"vuid": "VUID-VkImageCreateInfo-flags-02557",
"text": " If <code>flags</code> contains <code>VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT</code>, <code>imageType</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_TYPE_2D</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-samples-02558",
"text": " If <code>samples</code> is not <code>VK_SAMPLE_COUNT_1_BIT</code>, <code>usage</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-usage-02559",
"text": " If <code>usage</code> includes <code>VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT</code>, <code>extent.width</code> <strong class=\"purple\">must</strong> be less than or equal to \\(\\left\\lceil{\\frac{maxFramebufferWidth}{minFragmentDensityTexelSize_{width}}}\\right\\rceil\\)"
},
{
"vuid": "VUID-VkImageCreateInfo-usage-02560",
"text": " If <code>usage</code> includes <code>VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT</code>, <code>extent.height</code> <strong class=\"purple\">must</strong> be less than or equal to \\(\\left\\lceil{\\frac{maxFramebufferHeight}{minFragmentDensityTexelSize_{height}}}\\right\\rceil\\)"
},
{
"vuid": "VUID-VkImageCreateInfo-flags-02565",
"text": " If <code>flags</code> contains <code>VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT</code>, <code>tiling</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_TILING_OPTIMAL</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-flags-02566",
"text": " If <code>flags</code> contains <code>VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT</code>, <code>imageType</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_TYPE_2D</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-flags-02567",
"text": " If <code>flags</code> contains <code>VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT</code>, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-flags-02568",
"text": " If <code>flags</code> contains <code>VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT</code>, <code>mipLevels</code> <strong class=\"purple\">must</strong> be <code>1</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 includes a <a href=\"#VkExternalMemoryImageCreateInfoNV\">VkExternalMemoryImageCreateInfoNV</a> structure, it <strong class=\"purple\">must</strong> not contain a <a href=\"#VkExternalMemoryImageCreateInfo\">VkExternalMemoryImageCreateInfo</a> structure"
}
],
"(VK_VERSION_1_1,VK_KHR_external_memory)": [
{
"vuid": "VUID-VkImageCreateInfo-pNext-00990",
"text": " If the <code>pNext</code> chain includes a <a href=\"#VkExternalMemoryImageCreateInfo\">VkExternalMemoryImageCreateInfo</a> structure, 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 a <a href=\"#VkPhysicalDeviceExternalImageFormatInfo\">VkPhysicalDeviceExternalImageFormatInfo</a> structure included 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 includes a <a href=\"#VkExternalMemoryImageCreateInfoNV\">VkExternalMemoryImageCreateInfoNV</a> structure, 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-02259",
"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>imageCreateMaybeLinear</code> (as defined in <a href=\"#resources-image-creation-limits\">Image Creation Limits</a>) <strong class=\"purple\">must</strong> be <code>false</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 <a href=\"#appendix-compressedtex-bc\">block-compressed image format</a>, an <a href=\"#appendix-compressedtex-etc2\">ETC compressed image format</a>, or an <a href=\"#appendix-compressedtex-astc\">ASTC compressed image format</a>"
},
{
"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-02561",
"text": " If the image <code>format</code> is one of those listed in <a href=\"#formats-requiring-sampler-ycbcr-conversion\">Formats requiring sampler YC<sub>B</sub>C<sub>R</sub> conversion for <code>VK_IMAGE_ASPECT_COLOR_BIT</code> image views</a>, then <code>mipLevels</code> <strong class=\"purple\">must</strong> be 1"
},
{
"vuid": "VUID-VkImageCreateInfo-format-02562",
"text": " If the image <code>format</code> is one of those listed in <a href=\"#formats-requiring-sampler-ycbcr-conversion\">Formats requiring sampler YC<sub>B</sub>C<sub>R</sub> conversion for <code>VK_IMAGE_ASPECT_COLOR_BIT</code> image views</a>, <code>samples</code> <strong class=\"purple\">must</strong> be <code>VK_SAMPLE_COUNT_1_BIT</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-format-02563",
"text": " If the image <code>format</code> is one of those listed in <a href=\"#formats-requiring-sampler-ycbcr-conversion\">Formats requiring sampler YC<sub>B</sub>C<sub>R</sub> conversion for <code>VK_IMAGE_ASPECT_COLOR_BIT</code> image views</a>, <code>imageType</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_TYPE_2D</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-imageCreateFormatFeatures-02260",
"text": " If <code>format</code> is a <em>multi-planar</em> format, and if <code>imageCreateFormatFeatures</code> (as defined in <a href=\"#resources-image-creation-limits\">Image Creation Limits</a>) does not contain <code>VK_FORMAT_FEATURE_DISJOINT_BIT</code>, then <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_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)+(VK_EXT_ycbcr_image_arrays)": [
{
"vuid": "VUID-VkImageCreateInfo-format-02653",
"text": " If the image <code>format</code> is one of those listed in <a href=\"#formats-requiring-sampler-ycbcr-conversion\">Formats requiring sampler YC<sub>B</sub>C<sub>R</sub> conversion for <code>VK_IMAGE_ASPECT_COLOR_BIT</code> image views</a>, and the <code>ycbcrImageArrays</code> feature is not enabled, <code>arrayLayers</code> <strong class=\"purple\">must</strong> be 1"
}
],
"(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)+!(VK_EXT_ycbcr_image_arrays)": [
{
"vuid": "VUID-VkImageCreateInfo-format-02564",
"text": " If the image <code>format</code> is one of those listed in <a href=\"#formats-requiring-sampler-ycbcr-conversion\">Formats requiring sampler YC<sub>B</sub>C<sub>R</sub> conversion for <code>VK_IMAGE_ASPECT_COLOR_BIT</code> image views</a>, <code>arrayLayers</code> <strong class=\"purple\">must</strong> be 1"
}
],
"(VK_EXT_image_drm_format_modifier)": [
{
"vuid": "VUID-VkImageCreateInfo-tiling-02261",
"text": " If <code>tiling</code> is <code>VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT</code>, then the <code>pNext</code> chain <strong class=\"purple\">must</strong> include exactly one of <a href=\"#VkImageDrmFormatModifierListCreateInfoEXT\">VkImageDrmFormatModifierListCreateInfoEXT</a> or <a href=\"#VkImageDrmFormatModifierExplicitCreateInfoEXT\">VkImageDrmFormatModifierExplicitCreateInfoEXT</a> structures"
},
{
"vuid": "VUID-VkImageCreateInfo-pNext-02262",
"text": " If the <code>pNext</code> chain includes a <a href=\"#VkImageDrmFormatModifierListCreateInfoEXT\">VkImageDrmFormatModifierListCreateInfoEXT</a> or <a href=\"#VkImageDrmFormatModifierExplicitCreateInfoEXT\">VkImageDrmFormatModifierExplicitCreateInfoEXT</a> structure, then <code>tiling</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-tiling-02353",
"text": " If <code>tiling</code> is <code>VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT</code> and <code>flags</code> contains <code>VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT</code>, then the <code>pNext</code> chain <strong class=\"purple\">must</strong> include a <a href=\"#VkImageFormatListCreateInfo\">VkImageFormatListCreateInfo</a> structure with non-zero <code>viewFormatCount</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"
}
],
"(VK_EXT_separate_stencil_usage)": [
{
"vuid": "VUID-VkImageCreateInfo-format-02795",
"text": " If <code>format</code> is a depth-stencil format, <code>usage</code> includes <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code>, and the <code>pNext</code> chain includes a <a href=\"#VkImageStencilUsageCreateInfo\">VkImageStencilUsageCreateInfo</a> structure, then its <a href=\"#VkImageStencilUsageCreateInfo\">VkImageStencilUsageCreateInfo</a>::<code>stencilUsage</code> member <strong class=\"purple\">must</strong> also include <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-format-02796",
"text": " If <code>format</code> is a depth-stencil format, <code>usage</code> does not include <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code>, and the <code>pNext</code> chain includes a <a href=\"#VkImageStencilUsageCreateInfo\">VkImageStencilUsageCreateInfo</a> structure, then its <a href=\"#VkImageStencilUsageCreateInfo\">VkImageStencilUsageCreateInfo</a>::<code>stencilUsage</code> member <strong class=\"purple\">must</strong> also not include <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-format-02797",
"text": " If <code>format</code> is a depth-stencil format, <code>usage</code> includes <code>VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT</code>, and the <code>pNext</code> chain includes a <a href=\"#VkImageStencilUsageCreateInfo\">VkImageStencilUsageCreateInfo</a> structure, then its <a href=\"#VkImageStencilUsageCreateInfo\">VkImageStencilUsageCreateInfo</a>::<code>stencilUsage</code> member <strong class=\"purple\">must</strong> also include <code>VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-format-02798",
"text": " If <code>format</code> is a depth-stencil format, <code>usage</code> does not include <code>VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT</code>, and the <code>pNext</code> chain includes a <a href=\"#VkImageStencilUsageCreateInfo\">VkImageStencilUsageCreateInfo</a> structure, then its <a href=\"#VkImageStencilUsageCreateInfo\">VkImageStencilUsageCreateInfo</a>::<code>stencilUsage</code> member <strong class=\"purple\">must</strong> also not include <code>VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-Format-02536",
"text": " If <code>Format</code> is a depth-stencil format and the <code>pNext</code> chain includes a <a href=\"#VkImageStencilUsageCreateInfo\">VkImageStencilUsageCreateInfo</a> structure with its <code>stencilUsage</code> member including <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-format-02537",
"text": " If <code>format</code> is a depth-stencil format and the <code>pNext</code> chain includes a <a href=\"#VkImageStencilUsageCreateInfo\">VkImageStencilUsageCreateInfo</a> structure with its <code>stencilUsage</code> member including <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-format-02538",
"text": " If the <a href=\"#features-shaderStorageImageMultisample\">multisampled storage images</a> feature is not enabled, <code>format</code> is a depth-stencil format and the <code>pNext</code> chain includes a <a href=\"#VkImageStencilUsageCreateInfo\">VkImageStencilUsageCreateInfo</a> structure with its <code>stencilUsage</code> including <code>VK_IMAGE_USAGE_STORAGE_BIT</code>, <code>samples</code> <strong class=\"purple\">must</strong> be <code>VK_SAMPLE_COUNT_1_BIT</code>"
}
],
"(VK_NV_corner_sampled_image)": [
{
"vuid": "VUID-VkImageCreateInfo-flags-02050",
"text": " If <code>flags</code> contains <code>VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV</code>, <code>imageType</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_TYPE_2D</code> or <code>VK_IMAGE_TYPE_3D</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-flags-02051",
"text": " If <code>flags</code> contains <code>VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV</code>, it <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT</code> and the <code>format</code> <strong class=\"purple\">must</strong> not be a depth/stencil format"
},
{
"vuid": "VUID-VkImageCreateInfo-flags-02052",
"text": " If <code>flags</code> contains <code>VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV</code> and <code>imageType</code> is <code>VK_IMAGE_TYPE_2D</code>, <code>extent.width</code> and <code>extent.height</code> <strong class=\"purple\">must</strong> be greater than <code>1</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-flags-02053",
"text": " If <code>flags</code> contains <code>VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV</code> and <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 greater than <code>1</code>"
}
],
"(VK_NV_shading_rate_image)": [
{
"vuid": "VUID-VkImageCreateInfo-imageType-02082",
"text": " If <code>usage</code> includes <code>VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV</code>, <code>imageType</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_TYPE_2D</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-samples-02083",
"text": " If <code>usage</code> includes <code>VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV</code>, <code>samples</code> <strong class=\"purple\">must</strong> be <code>VK_SAMPLE_COUNT_1_BIT</code>"
},
{
"vuid": "VUID-VkImageCreateInfo-tiling-02084",
"text": " If <code>usage</code> includes <code>VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV</code>, <code>tiling</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_TILING_OPTIMAL</code>"
}
]
},
"VkImageStencilUsageCreateInfo": {
"(VK_EXT_separate_stencil_usage)": [
{
"vuid": "VUID-VkImageStencilUsageCreateInfo-stencilUsage-02539",
"text": " If <code>stencilUsage</code> includes <code>VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT</code>, it <strong class=\"purple\">must</strong> not include bits other than <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code> or <code>VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT</code>"
},
{
"vuid": "VUID-VkImageStencilUsageCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkImageStencilUsageCreateInfo-stencilUsage-parameter",
"text": " <code>stencilUsage</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageUsageFlagBits\">VkImageUsageFlagBits</a> values"
},
{
"vuid": "VUID-VkImageStencilUsageCreateInfo-stencilUsage-requiredbitmask",
"text": " <code>stencilUsage</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
}
]
},
"VkDedicatedAllocationImageCreateInfoNV": {
"(VK_NV_dedicated_allocation)": [
{
"vuid": "VUID-VkDedicatedAllocationImageCreateInfoNV-dedicatedAllocation-00994",
"text": " If <code>dedicatedAllocation</code> is <code>VK_TRUE</code>, <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>::<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 <a href=\"#swapchain-wsi-image-create-info\">implied image creation parameters</a> 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 <a href=\"#VkSwapchainKHR\">VkSwapchainKHR</a> handle"
}
]
},
"VkImageFormatListCreateInfo": {
"(VK_VERSION_1_2,VK_KHR_image_format_list)": [
{
"vuid": "VUID-VkImageFormatListCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkImageFormatListCreateInfo-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"
}
]
},
"VkImageDrmFormatModifierListCreateInfoEXT": {
"(VK_EXT_image_drm_format_modifier)": [
{
"vuid": "VUID-VkImageDrmFormatModifierListCreateInfoEXT-pDrmFormatModifiers-02263",
"text": " Each <em>modifier</em> in <code>pDrmFormatModifiers</code> <strong class=\"purple\">must</strong> be compatible with the parameters in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> and its <code>pNext</code> chain, as determined by querying <a href=\"#VkPhysicalDeviceImageFormatInfo2\">VkPhysicalDeviceImageFormatInfo2</a> extended with <a href=\"#VkPhysicalDeviceImageDrmFormatModifierInfoEXT\">VkPhysicalDeviceImageDrmFormatModifierInfoEXT</a>"
},
{
"vuid": "VUID-VkImageDrmFormatModifierListCreateInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT</code>"
},
{
"vuid": "VUID-VkImageDrmFormatModifierListCreateInfoEXT-pDrmFormatModifiers-parameter",
"text": " <code>pDrmFormatModifiers</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>drmFormatModifierCount</code> <code>uint64_t</code> values"
},
{
"vuid": "VUID-VkImageDrmFormatModifierListCreateInfoEXT-drmFormatModifierCount-arraylength",
"text": " <code>drmFormatModifierCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"VkImageDrmFormatModifierExplicitCreateInfoEXT": {
"(VK_EXT_image_drm_format_modifier)": [
{
"vuid": "VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-drmFormatModifier-02264",
"text": " <code>drmFormatModifier</code> <strong class=\"purple\">must</strong> be compatible with the parameters in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> and its <code>pNext</code> chain, as determined by querying <a href=\"#VkPhysicalDeviceImageFormatInfo2\">VkPhysicalDeviceImageFormatInfo2</a> extended with <a href=\"#VkPhysicalDeviceImageDrmFormatModifierInfoEXT\">VkPhysicalDeviceImageDrmFormatModifierInfoEXT</a>"
},
{
"vuid": "VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-drmFormatModifierPlaneCount-02265",
"text": " <code>drmFormatModifierPlaneCount</code> <strong class=\"purple\">must</strong> be equal to the <a href=\"#VkDrmFormatModifierPropertiesEXT\">VkDrmFormatModifierPropertiesEXT</a>::<code>drmFormatModifierPlaneCount</code> associated with <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>::<code>format</code> and <code>drmFormatModifier</code>, as found by querying <a href=\"#VkDrmFormatModifierPropertiesListEXT\">VkDrmFormatModifierPropertiesListEXT</a>"
},
{
"vuid": "VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-size-02267",
"text": " For each element of <code>pPlaneLayouts</code>, <code>size</code> <strong class=\"purple\">must</strong> be 0"
},
{
"vuid": "VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-arrayPitch-02268",
"text": " For each element of <code>pPlaneLayouts</code>, <code>arrayPitch</code> <strong class=\"purple\">must</strong> be 0 if <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>::<code>arrayLayers</code> is 1"
},
{
"vuid": "VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-depthPitch-02269",
"text": " For each element of <code>pPlaneLayouts</code>, <code>depthPitch</code> <strong class=\"purple\">must</strong> be 0 if <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>::<code>extent.depth</code> is 1"
},
{
"vuid": "VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT</code>"
},
{
"vuid": "VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-pPlaneLayouts-parameter",
"text": " If <code>drmFormatModifierPlaneCount</code> is not <code>0</code>, <code>pPlaneLayouts</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>drmFormatModifierPlaneCount</code> <a href=\"#VkSubresourceLayout\">VkSubresourceLayout</a> structures"
}
]
},
"vkGetImageSubresourceLayout": {
"!(VK_EXT_image_drm_format_modifier)": [
{
"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>"
}
],
"(VK_EXT_image_drm_format_modifier)": [
{
"vuid": "VUID-vkGetImageSubresourceLayout-image-02270",
"text": " <code>image</code> <strong class=\"purple\">must</strong> have been created with <code>tiling</code> equal to <code>VK_IMAGE_TILING_LINEAR</code> or <code>VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT</code>"
},
{
"vuid": "VUID-vkGetImageSubresourceLayout-tiling-02271",
"text": " If the <code>tiling</code> of the <code>image</code> is <code>VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT</code>, then the <code>aspectMask</code> member of <code>pSubresource</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT</code> and the index <code>i</code> <strong class=\"purple\">must</strong> be less than the <a href=\"#VkDrmFormatModifierPropertiesEXT\">VkDrmFormatModifierPropertiesEXT</a>::<code>drmFormatModifierPlaneCount</code> associated with the image&#8217;s <code>format</code> and <a href=\"#VkImageDrmFormatModifierPropertiesEXT\">VkImageDrmFormatModifierPropertiesEXT</a>::<code>drmFormatModifier</code>"
}
],
"core": [
{
"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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetImageSubresourceLayout-image-parameter",
"text": " <code>image</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImage\">VkImage</a> handle"
},
{
"vuid": "VUID-vkGetImageSubresourceLayout-pSubresource-parameter",
"text": " <code>pSubresource</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkImageSubresource\">VkImageSubresource</a> structure"
},
{
"vuid": "VUID-vkGetImageSubresourceLayout-pLayout-parameter",
"text": " <code>pLayout</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkSubresourceLayout\">VkSubresourceLayout</a> 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>tiling</code> of the <code>image</code> is <code>VK_IMAGE_TILING_LINEAR</code> and its <code>format</code> is a <a href=\"#formats-requiring-sampler-ycbcr-conversion\">multi-planar format</a> 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>tiling</code> of the <code>image</code> is <code>VK_IMAGE_TILING_LINEAR</code> and its <code>format</code> is a <a href=\"#formats-requiring-sampler-ycbcr-conversion\">multi-planar format</a> 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>"
}
]
},
"vkGetImageDrmFormatModifierPropertiesEXT": {
"(VK_EXT_image_drm_format_modifier)": [
{
"vuid": "VUID-vkGetImageDrmFormatModifierPropertiesEXT-image-02272",
"text": " <code>image</code> <strong class=\"purple\">must</strong> have been created with <a href=\"#VkImageCreateInfo\"><code>tiling</code></a> equal to <code>VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT</code>"
},
{
"vuid": "VUID-vkGetImageDrmFormatModifierPropertiesEXT-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetImageDrmFormatModifierPropertiesEXT-image-parameter",
"text": " <code>image</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImage\">VkImage</a> handle"
},
{
"vuid": "VUID-vkGetImageDrmFormatModifierPropertiesEXT-pProperties-parameter",
"text": " <code>pProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkImageDrmFormatModifierPropertiesEXT\">VkImageDrmFormatModifierPropertiesEXT</a> structure"
},
{
"vuid": "VUID-vkGetImageDrmFormatModifierPropertiesEXT-image-parent",
"text": " <code>image</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"VkImageDrmFormatModifierPropertiesEXT": {
"(VK_EXT_image_drm_format_modifier)": [
{
"vuid": "VUID-VkImageDrmFormatModifierPropertiesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT</code>"
},
{
"vuid": "VUID-VkImageDrmFormatModifierPropertiesEXT-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkImage\">VkImage</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkCreateImageView-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkImageViewCreateInfo\">VkImageViewCreateInfo</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateImageView-pView-parameter",
"text": " <code>pView</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkImageView\">VkImageView</a> 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 <a href=\"#features-imageCubeArray\">image cubemap arrays</a> 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-None-02273",
"text": " The <a href=\"#resources-image-view-format-features\">format features</a> of the resultant image view <strong class=\"purple\">must</strong> contain at least one bit"
},
{
"vuid": "VUID-VkImageViewCreateInfo-usage-02274",
"text": " If <code>usage</code> contains <code>VK_IMAGE_USAGE_SAMPLED_BIT</code>, then the <a href=\"#resources-image-view-format-features\">format features</a> of the resultant image view <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT</code>"
},
{
"vuid": "VUID-VkImageViewCreateInfo-usage-02275",
"text": " If <code>usage</code> contains <code>VK_IMAGE_USAGE_STORAGE_BIT</code>, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT</code>"
},
{
"vuid": "VUID-VkImageViewCreateInfo-usage-02276",
"text": " If <code>usage</code> contains <code>VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT</code>, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT</code>"
},
{
"vuid": "VUID-VkImageViewCreateInfo-usage-02277",
"text": " If <code>usage</code> contains <code>VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT</code>, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT</code>"
},
{
"vuid": "VUID-VkImageViewCreateInfo-usage-02652",
"text": " If <code>usage</code> contains <code>VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT</code>, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain at least one of <code>VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT</code> or <code>VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT</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-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 <a href=\"#resources-image-views-compatibility\">compatibility table</a>"
},
{
"vuid": "VUID-VkImageViewCreateInfo-viewType-02960",
"text": " If <code>viewType</code> is <code>VK_IMAGE_VIEW_TYPE_CUBE</code> and <code>subresourceRange.layerCount</code> is not <code>VK_REMAINING_ARRAY_LAYERS</code>, <code>subresourceRange.layerCount</code> <strong class=\"purple\">must</strong> be <code>6</code>"
},
{
"vuid": "VUID-VkImageViewCreateInfo-viewType-02961",
"text": " If <code>viewType</code> is <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code> and <code>subresourceRange.layerCount</code> is not <code>VK_REMAINING_ARRAY_LAYERS</code>, <code>subresourceRange.layerCount</code> <strong class=\"purple\">must</strong> be a multiple of <code>6</code>"
},
{
"vuid": "VUID-VkImageViewCreateInfo-viewType-02962",
"text": " If <code>viewType</code> is <code>VK_IMAGE_VIEW_TYPE_CUBE</code> and <code>subresourceRange.layerCount</code> is <code>VK_REMAINING_ARRAY_LAYERS</code>, the remaining number of layers <strong class=\"purple\">must</strong> be <code>6</code>"
},
{
"vuid": "VUID-VkImageViewCreateInfo-viewType-02963",
"text": " If <code>viewType</code> is <code>VK_IMAGE_VIEW_TYPE_CUBE_ARRAY</code> and <code>subresourceRange.layerCount</code> is <code>VK_REMAINING_ARRAY_LAYERS</code>, the remaining number of layers <strong class=\"purple\">must</strong> be a multiple of <code>6</code>"
},
{
"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=\"#VkImageViewASTCDecodeModeEXT\">VkImageViewASTCDecodeModeEXT</a>, <a href=\"#VkImageViewUsageCreateInfo\">VkImageViewUsageCreateInfo</a>, or <a href=\"#VkSamplerYcbcrConversionInfo\">VkSamplerYcbcrConversionInfo</a>"
},
{
"vuid": "VUID-VkImageViewCreateInfo-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkImageViewCreateInfo-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkImageViewCreateFlagBits\">VkImageViewCreateFlagBits</a> values"
},
{
"vuid": "VUID-VkImageViewCreateInfo-image-parameter",
"text": " <code>image</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImage\">VkImage</a> 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 <a href=\"#VkComponentMapping\">VkComponentMapping</a> structure"
},
{
"vuid": "VUID-VkImageViewCreateInfo-subresourceRange-parameter",
"text": " <code>subresourceRange</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageSubresourceRange\">VkImageSubresourceRange</a> 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.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.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.layerCount</code> <strong class=\"purple\">must</strong> be non-zero and <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-VkImageViewCreateInfo-image-02724",
"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.baseArrayLayer</code> <strong class=\"purple\">must</strong> be less than the depth computed from <code>baseMipLevel</code> and <code>extent.depth</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created, according to the formula defined in <a href=\"#resources-image-miplevel-sizing\">Image Miplevel Sizing</a>"
},
{
"vuid": "VUID-VkImageViewCreateInfo-subresourceRange-02725",
"text": " If <code>subresourceRange.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.layerCount</code> <strong class=\"purple\">must</strong> be non-zero and <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 depth computed from <code>baseMipLevel</code> and <code>extent.depth</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>image</code> was created, according to the formula defined in <a href=\"#resources-image-miplevel-sizing\">Image Miplevel Sizing</a>"
}
],
"!(VK_EXT_fragment_density_map)+!(VK_NV_shading_rate_image)": [
{
"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>"
}
],
"!(VK_EXT_fragment_density_map)+(VK_NV_shading_rate_image)": [
{
"vuid": "VUID-VkImageViewCreateInfo-image-02085",
"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>, <code>VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT</code>, or <code>VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV</code>"
}
],
"(VK_EXT_fragment_density_map)+!(VK_NV_shading_rate_image)": [
{
"vuid": "VUID-VkImageViewCreateInfo-image-02569",
"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>, <code>VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT</code>, or <code>VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT</code>"
}
],
"(VK_EXT_fragment_density_map)+(VK_NV_shading_rate_image)": [
{
"vuid": "VUID-VkImageViewCreateInfo-image-02570",
"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>, <code>VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT</code>, <code>VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV</code>, or <code>VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT</code>"
}
],
"(VK_EXT_fragment_density_map)": [
{
"vuid": "VUID-VkImageViewCreateInfo-image-02571",
"text": " If <code>image</code> was created with <code>usage</code> containing <code>VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT</code>, <code>subresourceRange.levelCount</code> <strong class=\"purple\">must</strong> be <code>1</code>"
},
{
"vuid": "VUID-VkImageViewCreateInfo-flags-02572",
"text": " If <a href=\"#features-fragmentdensitymapdynamic\">dynamic fragment density map</a> feature is not enabled, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT</code>"
},
{
"vuid": "VUID-VkImageViewCreateInfo-image-02573",
"text": " If <a href=\"#features-fragmentdensitymapdynamic\">dynamic fragment density map</a> feature is not enabled and <code>image</code> was created with <code>usage</code> containing <code>VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT</code>, <code>flags</code> <strong class=\"purple\">must</strong> not contain any of <code>VK_IMAGE_CREATE_PROTECTED_BIT</code>, <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>"
}
],
"!(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-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 <a href=\"#formats-compatibility-classes\">Format Compatibility Classes</a>"
}
],
"(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 <a href=\"#formats-compatibility-classes\">Format Compatibility Classes</a>"
}
],
"!(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 <a href=\"#formats-requiring-sampler-ycbcr-conversion\">multi-planar</a> 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 <a href=\"#formats-compatibility-classes\">Format Compatibility Classes</a>"
}
],
"(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 <a href=\"#formats-requiring-sampler-ycbcr-conversion\">multi-planar</a> 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 <a href=\"#formats-compatibility-classes\">Format Compatibility Classes</a>"
}
],
"(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_VERSION_1_2,VK_KHR_image_format_list)": [
{
"vuid": "VUID-VkImageViewCreateInfo-pNext-01585",
"text": " If a <a href=\"#VkImageFormatListCreateInfo\">VkImageFormatListCreateInfo</a> structure was included in the <code>pNext</code> chain of the <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> structure used when creating <code>image</code> and <a href=\"#VkImageFormatListCreateInfo\">VkImageFormatListCreateInfo</a>::<code>viewFormatCount</code> is not zero then <code>format</code> <strong class=\"purple\">must</strong> be one of the formats in <a href=\"#VkImageFormatListCreateInfo\">VkImageFormatListCreateInfo</a>::<code>pViewFormats</code>"
},
{
"vuid": "VUID-VkImageViewCreateInfo-pNext-04082",
"text": " If a <a href=\"#VkImageFormatListCreateInfo\">VkImageFormatListCreateInfo</a> structure was included in the <code>pNext</code> chain of the <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> structure used when creating <code>image</code> and <a href=\"#VkImageFormatListCreateInfo\">VkImageFormatListCreateInfo</a>::<code>viewFormatCount</code> is not zero then all of the formats in <a href=\"#VkImageFormatListCreateInfo\">VkImageFormatListCreateInfo</a>::<code>pViewFormats</code> <strong class=\"purple\">must</strong> be compatible with the <code>format</code> as described in the <a href=\"#formats-compatibility\">compatibility table</a>"
},
{
"vuid": "VUID-VkImageViewCreateInfo-flags-04083",
"text": " If <code>flags</code> dose not contain <code>VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT</code> and the <code>pNext</code> chain include a <a href=\"#VkImageFormatListCreateInfo\">VkImageFormatListCreateInfo</a> structure then <a href=\"#VkImageFormatListCreateInfo\">VkImageFormatListCreateInfo</a>::<code>viewFormatCount</code> <strong class=\"purple\">must</strong> be <code>0</code> or <code>1</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 <a href=\"#formats-requiring-sampler-ycbcr-conversion\">multi-planar</a> 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 <a href=\"#formats-compatible-planes\">Compatible formats of planes of multi-planar formats</a>"
},
{
"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 <a href=\"#formats-requiring-sampler-ycbcr-conversion\">multi-planar</a> 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 includes a <a href=\"#VkSamplerYcbcrConversionInfo\">VkSamplerYcbcrConversionInfo</a> structure with a <code>conversion</code> value other than <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, all members of <code>components</code> <strong class=\"purple\">must</strong> have the <a href=\"#resources-image-views-identity-mappings\">identity swizzle</a>"
}
],
"!(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-VkImageViewCreateInfo-image-01019",
"text": " If <code>image</code> was not created with the <code>VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT</code> flag, <code>format</code> <strong class=\"purple\">must</strong> be identical to the <code>format</code> used to create <code>image</code>"
}
],
"(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-VkImageViewCreateInfo-image-02399",
"text": " If <code>image</code> has an <a href=\"#memory-external-android-hardware-buffer-external-formats\">external format</a>, <code>format</code> <strong class=\"purple\">must</strong> be <code>VK_FORMAT_UNDEFINED</code>"
},
{
"vuid": "VUID-VkImageViewCreateInfo-image-02400",
"text": " If <code>image</code> has an <a href=\"#memory-external-android-hardware-buffer-external-formats\">external format</a>, the <code>pNext</code> chain <strong class=\"purple\">must</strong> include a <a href=\"#VkSamplerYcbcrConversionInfo\">VkSamplerYcbcrConversionInfo</a> structure with a <code>conversion</code> object created with the same external format as <code>image</code>"
},
{
"vuid": "VUID-VkImageViewCreateInfo-image-02401",
"text": " If <code>image</code> has an <a href=\"#memory-external-android-hardware-buffer-external-formats\">external format</a>, all members of <code>components</code> <strong class=\"purple\">must</strong> be the <a href=\"#resources-image-views-identity-mappings\">identity swizzle</a>"
}
],
"(VK_NV_shading_rate_image)": [
{
"vuid": "VUID-VkImageViewCreateInfo-image-02086",
"text": " If <code>image</code> was created with <code>usage</code> containing <code>VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV</code>, <code>viewType</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_VIEW_TYPE_2D</code> or <code>VK_IMAGE_VIEW_TYPE_2D_ARRAY</code>"
},
{
"vuid": "VUID-VkImageViewCreateInfo-image-02087",
"text": " If <code>image</code> was created with <code>usage</code> containing <code>VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV</code>, <code>format</code> <strong class=\"purple\">must</strong> be <code>VK_FORMAT_R8_UINT</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_maintenance2)+!(VK_EXT_separate_stencil_usage)": [
{
"vuid": "VUID-VkImageViewCreateInfo-pNext-02661",
"text": " If the <code>pNext</code> chain includes a <a href=\"#VkImageViewUsageCreateInfo\">VkImageViewUsageCreateInfo</a> structure, its <code>usage</code> member <strong class=\"purple\">must</strong> not include any bits that were not set in the <code>usage</code> member of the <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> structure used to create <code>image</code>"
}
],
"(VK_VERSION_1_1,VK_KHR_maintenance2)+(VK_EXT_separate_stencil_usage)": [
{
"vuid": "VUID-VkImageViewCreateInfo-pNext-02662",
"text": " If the <code>pNext</code> chain includes a <a href=\"#VkImageViewUsageCreateInfo\">VkImageViewUsageCreateInfo</a> structure, and <code>image</code> was not created with a <a href=\"#VkImageStencilUsageCreateInfo\">VkImageStencilUsageCreateInfo</a> structure included in the <code>pNext</code> chain of <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>, its <code>usage</code> member <strong class=\"purple\">must</strong> not include any bits that were not set in the <code>usage</code> member of the <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> structure used to create <code>image</code>"
},
{
"vuid": "VUID-VkImageViewCreateInfo-pNext-02663",
"text": " If the <code>pNext</code> chain includes a <a href=\"#VkImageViewUsageCreateInfo\">VkImageViewUsageCreateInfo</a> structure, <code>image</code> was created with a <a href=\"#VkImageStencilUsageCreateInfo\">VkImageStencilUsageCreateInfo</a> structure included in the <code>pNext</code> chain of <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>, and <code>subResourceRange.aspectMask</code> includes <code>VK_IMAGE_ASPECT_STENCIL_BIT</code>, the <code>usage</code> member of the <a href=\"#VkImageViewUsageCreateInfo\">VkImageViewUsageCreateInfo</a> instance <strong class=\"purple\">must</strong> not include any bits that were not set in the <code>usage</code> member of the <a href=\"#VkImageStencilUsageCreateInfo\">VkImageStencilUsageCreateInfo</a> structure used to create <code>image</code>"
},
{
"vuid": "VUID-VkImageViewCreateInfo-pNext-02664",
"text": " If the <code>pNext</code> chain includes a <a href=\"#VkImageViewUsageCreateInfo\">VkImageViewUsageCreateInfo</a> structure, <code>image</code> was created with a <a href=\"#VkImageStencilUsageCreateInfo\">VkImageStencilUsageCreateInfo</a> structure included in the <code>pNext</code> chain of <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>, and <code>subResourceRange.aspectMask</code> includes bits other than <code>VK_IMAGE_ASPECT_STENCIL_BIT</code>, the <code>usage</code> member of the <a href=\"#VkImageViewUsageCreateInfo\">VkImageViewUsageCreateInfo</a> structure <strong class=\"purple\">must</strong> not include any bits that were not set in the <code>usage</code> member of the <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> structure used to create <code>image</code>"
}
]
},
"VkImageViewUsageCreateInfo": {
"(VK_VERSION_1_1,VK_KHR_maintenance2)": [
{
"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>"
}
],
"(VK_EXT_image_drm_format_modifier)": [
{
"vuid": "VUID-VkImageSubresourceRange-aspectMask-02278",
"text": " <code>aspectMask</code> <strong class=\"purple\">must</strong> not include <code>VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT</code> for any index <code>i</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"
}
]
},
"VkImageViewASTCDecodeModeEXT": {
"(VK_EXT_astc_decode_mode)": [
{
"vuid": "VUID-VkImageViewASTCDecodeModeEXT-decodeMode-02230",
"text": " <code>decodeMode</code> <strong class=\"purple\">must</strong> be one of <code>VK_FORMAT_R16G16B16A16_SFLOAT</code>, <code>VK_FORMAT_R8G8B8A8_UNORM</code>, or <code>VK_FORMAT_E5B9G9R9_UFLOAT_PACK32</code>"
},
{
"vuid": "VUID-VkImageViewASTCDecodeModeEXT-decodeMode-02231",
"text": " If the <a href=\"#features-astc-decodeModeSharedExponent\"><code>decodeModeSharedExponent</code></a> feature is not enabled, <code>decodeMode</code> <strong class=\"purple\">must</strong> not be <code>VK_FORMAT_E5B9G9R9_UFLOAT_PACK32</code>"
},
{
"vuid": "VUID-VkImageViewASTCDecodeModeEXT-decodeMode-02232",
"text": " If <code>decodeMode</code> is <code>VK_FORMAT_R8G8B8A8_UNORM</code> the image view <strong class=\"purple\">must</strong> not include blocks using any of the ASTC HDR modes"
},
{
"vuid": "VUID-VkImageViewASTCDecodeModeEXT-format-04084",
"text": " <code>format</code> of the image view <strong class=\"purple\">must</strong> be one of the <a href=\"#appendix-compressedtex-astc\">ASTC Compressed Image Formats</a>"
},
{
"vuid": "VUID-VkImageViewASTCDecodeModeEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT</code>"
},
{
"vuid": "VUID-VkImageViewASTCDecodeModeEXT-decodeMode-parameter",
"text": " <code>decodeMode</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFormat\">VkFormat</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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkImageView\">VkImageView</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> 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>"
}
]
},
"vkGetImageViewHandleNVX": {
"(VK_NVX_image_view_handle)": [
{
"vuid": "VUID-vkGetImageViewHandleNVX-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetImageViewHandleNVX-pInfo-parameter",
"text": " <code>pInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkImageViewHandleInfoNVX\">VkImageViewHandleInfoNVX</a> structure"
}
]
},
"VkImageViewHandleInfoNVX": {
"(VK_NVX_image_view_handle)": [
{
"vuid": "VUID-VkImageViewHandleInfoNVX-descriptorType-02654",
"text": " <code>descriptorType</code> <strong class=\"purple\">must</strong> be <code>VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE</code>, <code>VK_DESCRIPTOR_TYPE_STORAGE_IMAGE</code>, or <code>VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER</code>"
},
{
"vuid": "VUID-VkImageViewHandleInfoNVX-sampler-02655",
"text": " <code>sampler</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSampler\">VkSampler</a> if <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER</code>"
},
{
"vuid": "VUID-VkImageViewHandleInfoNVX-imageView-02656",
"text": " If descriptorType is <code>VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE</code> or <code>VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER</code>, the image that <code>imageView</code> was created from <strong class=\"purple\">must</strong> have been created with the <code>VK_IMAGE_USAGE_SAMPLED_BIT</code> usage bit set"
},
{
"vuid": "VUID-VkImageViewHandleInfoNVX-imageView-02657",
"text": " If descriptorType is <code>VK_DESCRIPTOR_TYPE_STORAGE_IMAGE</code>, the image that <code>imageView</code> was created from <strong class=\"purple\">must</strong> have been created with the <code>VK_IMAGE_USAGE_STORAGE_BIT</code> usage bit set"
},
{
"vuid": "VUID-VkImageViewHandleInfoNVX-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX</code>"
},
{
"vuid": "VUID-VkImageViewHandleInfoNVX-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkImageViewHandleInfoNVX-imageView-parameter",
"text": " <code>imageView</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageView\">VkImageView</a> handle"
},
{
"vuid": "VUID-VkImageViewHandleInfoNVX-descriptorType-parameter",
"text": " <code>descriptorType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDescriptorType\">VkDescriptorType</a> value"
},
{
"vuid": "VUID-VkImageViewHandleInfoNVX-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 <a href=\"#VkSampler\">VkSampler</a> handle"
},
{
"vuid": "VUID-VkImageViewHandleInfoNVX-commonparent",
"text": " Both of <code>imageView</code>, and <code>sampler</code> that are valid handles of non-ignored parameters <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"vkGetImageViewAddressNVX": {
"(VK_NVX_image_view_handle)": [
{
"vuid": "VUID-vkGetImageViewAddressNVX-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetImageViewAddressNVX-imageView-parameter",
"text": " <code>imageView</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageView\">VkImageView</a> handle"
},
{
"vuid": "VUID-vkGetImageViewAddressNVX-pProperties-parameter",
"text": " <code>pProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkImageViewAddressPropertiesNVX\">VkImageViewAddressPropertiesNVX</a> structure"
},
{
"vuid": "VUID-vkGetImageViewAddressNVX-imageView-parent",
"text": " <code>imageView</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"VkImageViewAddressPropertiesNVX": {
"(VK_NVX_image_view_handle)": [
{
"vuid": "VUID-VkImageViewAddressPropertiesNVX-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX</code>"
},
{
"vuid": "VUID-VkImageViewAddressPropertiesNVX-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
},
"vkGetBufferMemoryRequirements": {
"(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-vkGetBufferMemoryRequirements-buffer-04003",
"text": " If <code>buffer</code> was created with the <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID</code> external memory handle type, then <code>buffer</code> <strong class=\"purple\">must</strong> be bound to memory"
}
],
"core": [
{
"vuid": "VUID-vkGetBufferMemoryRequirements-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetBufferMemoryRequirements-buffer-parameter",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-vkGetBufferMemoryRequirements-pMemoryRequirements-parameter",
"text": " <code>pMemoryRequirements</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkMemoryRequirements\">VkMemoryRequirements</a> 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"
}
],
"(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-vkGetImageMemoryRequirements-image-04004",
"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"
}
],
"core": [
{
"vuid": "VUID-vkGetImageMemoryRequirements-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetImageMemoryRequirements-image-parameter",
"text": " <code>image</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImage\">VkImage</a> handle"
},
{
"vuid": "VUID-vkGetImageMemoryRequirements-pMemoryRequirements-parameter",
"text": " <code>pMemoryRequirements</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkMemoryRequirements\">VkMemoryRequirements</a> 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetBufferMemoryRequirements2-pInfo-parameter",
"text": " <code>pInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkBufferMemoryRequirementsInfo2\">VkBufferMemoryRequirementsInfo2</a> structure"
},
{
"vuid": "VUID-vkGetBufferMemoryRequirements2-pMemoryRequirements-parameter",
"text": " <code>pMemoryRequirements</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkMemoryRequirements2\">VkMemoryRequirements2</a> structure"
}
]
},
"VkBufferMemoryRequirementsInfo2": {
"(VK_VERSION_1_1,VK_KHR_get_memory_requirements2)+(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-VkBufferMemoryRequirementsInfo2-buffer-04005",
"text": " If <code>buffer</code> was created with the <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID</code> external memory handle type, then <code>buffer</code> <strong class=\"purple\">must</strong> be bound to memory"
}
],
"(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 <a href=\"#VkBuffer\">VkBuffer</a> 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetImageMemoryRequirements2-pInfo-parameter",
"text": " <code>pInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkImageMemoryRequirementsInfo2\">VkImageMemoryRequirementsInfo2</a> structure"
},
{
"vuid": "VUID-vkGetImageMemoryRequirements2-pMemoryRequirements-parameter",
"text": " <code>pMemoryRequirements</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkMemoryRequirements2\">VkMemoryRequirements2</a> 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> included 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> included 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_EXT_image_drm_format_modifier)": [
{
"vuid": "VUID-VkImageMemoryRequirementsInfo2-image-02279",
"text": " If <code>image</code> was created with <code>VK_IMAGE_CREATE_DISJOINT_BIT</code> and with <code>VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT</code>, then there <strong class=\"purple\">must</strong> be a <a href=\"#VkImagePlaneMemoryRequirementsInfo\">VkImagePlaneMemoryRequirementsInfo</a> included in the <code>pNext</code> chain of the <a href=\"#VkImageMemoryRequirementsInfo2\">VkImageMemoryRequirementsInfo2</a> structure"
},
{
"vuid": "VUID-VkImageMemoryRequirementsInfo2-image-02280",
"text": " If <code>image</code> was created with a single-plane format and with any <code>tiling</code> other than <code>VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT</code>, then there <strong class=\"purple\">must</strong> not be a <a href=\"#VkImagePlaneMemoryRequirementsInfo\">VkImagePlaneMemoryRequirementsInfo</a> included 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_EXT_image_drm_format_modifier)": [
{
"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> included 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-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkImageMemoryRequirementsInfo2-image-parameter",
"text": " <code>image</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImage\">VkImage</a> handle"
}
]
},
"VkImagePlaneMemoryRequirementsInfo": {
"(VK_VERSION_1_1,VK_KHR_get_memory_requirements2)+(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-VkImagePlaneMemoryRequirementsInfo-planeAspect-02281",
"text": " If the image&#8217;s <code>tiling</code> is <code>VK_IMAGE_TILING_LINEAR</code> or <code>VK_IMAGE_TILING_OPTIMAL</code>, then <code>planeAspect</code> <strong class=\"purple\">must</strong> be a single valid <em>format plane</em> for the image (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"
}
],
"(VK_VERSION_1_1,VK_KHR_get_memory_requirements2)+(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)+(VK_EXT_image_drm_format_modifier)": [
{
"vuid": "VUID-VkImagePlaneMemoryRequirementsInfo-planeAspect-02282",
"text": " If the image&#8217;s <code>tiling</code> is <code>VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT</code>, then <code>planeAspect</code> <strong class=\"purple\">must</strong> be a single valid <em>memory plane</em> for the image (that is, <code>aspectMask</code> <strong class=\"purple\">must</strong> specify a plane index that is less than the <a href=\"#VkDrmFormatModifierPropertiesEXT\">VkDrmFormatModifierPropertiesEXT</a>::<code>drmFormatModifierPlaneCount</code> associated with the image&#8217;s <code>format</code> and <a href=\"#VkImageDrmFormatModifierPropertiesEXT\">VkImageDrmFormatModifierPropertiesEXT</a>::<code>drmFormatModifier</code>)"
}
]
},
"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>"
},
{
"vuid": "VUID-VkMemoryRequirements2-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
}
]
},
"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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkBindBufferMemory-buffer-parameter",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-vkBindBufferMemory-memory-parameter",
"text": " <code>memory</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDeviceMemory\">VkDeviceMemory</a> 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 a <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a> structure in its <code>pNext</code> chain, and <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>::<code>buffer</code> was not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, 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"
}
],
"(VK_VERSION_1_1,VK_KHR_external_memory)": [
{
"vuid": "VUID-vkBindBufferMemory-memory-02726",
"text": " If the value of <a href=\"#VkExportMemoryAllocateInfo\">VkExportMemoryAllocateInfo</a>::<code>handleTypes</code> used to allocate <code>memory</code> is not <code>0</code>, it <strong class=\"purple\">must</strong> include at least one of the handles set in <a href=\"#VkExternalMemoryBufferCreateInfo\">VkExternalMemoryBufferCreateInfo</a>::<code>handleTypes</code> when <code>buffer</code> was created"
}
],
"(VK_VERSION_1_1,VK_KHR_external_memory)+!(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-vkBindBufferMemory-memory-02727",
"text": " If <code>memory</code> was created by a memory import operation, the external handle type of the imported memory <strong class=\"purple\">must</strong> also have been set in <a href=\"#VkExternalMemoryBufferCreateInfo\">VkExternalMemoryBufferCreateInfo</a>::<code>handleTypes</code> when <code>buffer</code> was created"
}
],
"(VK_VERSION_1_1,VK_KHR_external_memory)+(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-vkBindBufferMemory-memory-02985",
"text": " If <code>memory</code> was created by a memory import operation, that is not <a href=\"#VkImportAndroidHardwareBufferInfoANDROID\">VkImportAndroidHardwareBufferInfoANDROID</a> with a non-<code>NULL</code> <code>buffer</code> value, the external handle type of the imported memory <strong class=\"purple\">must</strong> also have been set in <a href=\"#VkExternalMemoryBufferCreateInfo\">VkExternalMemoryBufferCreateInfo</a>::<code>handleTypes</code> when <code>buffer</code> was created"
},
{
"vuid": "VUID-vkBindBufferMemory-memory-02986",
"text": " If <code>memory</code> was created with the <a href=\"#VkImportAndroidHardwareBufferInfoANDROID\">VkImportAndroidHardwareBufferInfoANDROID</a> memory import operation with a non-<code>NULL</code> <code>buffer</code> value, <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID</code> <strong class=\"purple\">must</strong> also have been set in <a href=\"#VkExternalMemoryBufferCreateInfo\">VkExternalMemoryBufferCreateInfo</a>::<code>handleTypes</code> when <code>buffer</code> was created"
}
],
"(VK_VERSION_1_2,VK_KHR_buffer_device_address)": [
{
"vuid": "VUID-vkBindBufferMemory-bufferDeviceAddress-03339",
"text": " If the <a href=\"#VkPhysicalDeviceBufferDeviceAddressFeatures\">VkPhysicalDeviceBufferDeviceAddressFeatures</a>::<code>bufferDeviceAddress</code> feature is enabled and <code>buffer</code> was created with the <code>VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT</code> bit set, <code>memory</code> <strong class=\"purple\">must</strong> have been allocated with the <code>VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT</code> bit set"
}
]
},
"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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkBindBufferMemoryInfo\">VkBindBufferMemoryInfo</a> 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-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkBindBufferMemoryInfo-buffer-parameter",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-VkBindBufferMemoryInfo-memory-parameter",
"text": " <code>memory</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDeviceMemory\">VkDeviceMemory</a> 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 <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(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 a <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a> structure in its <code>pNext</code> chain, and <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>::<code>buffer</code> was not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, 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 <a href=\"#VkBindBufferMemoryDeviceGroupInfo\">VkBindBufferMemoryDeviceGroupInfo</a> structure, all instances of <code>memory</code> specified by <a href=\"#VkBindBufferMemoryDeviceGroupInfo\">VkBindBufferMemoryDeviceGroupInfo</a>::<code>pDeviceIndices</code> <strong class=\"purple\">must</strong> have been allocated"
}
],
"(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_VERSION_1_1,VK_KHR_external_memory)": [
{
"vuid": "VUID-VkBindBufferMemoryInfo-handleTypes-02791",
"text": " If the value of <a href=\"#VkExportMemoryAllocateInfo\">VkExportMemoryAllocateInfo</a>::<code>handleTypes</code> used to allocate <code>memory</code> is not <code>0</code>, it <strong class=\"purple\">must</strong> include at least one of the handles set in <a href=\"#VkExternalMemoryBufferCreateInfo\">VkExternalMemoryBufferCreateInfo</a>::<code>handleTypes</code> when <code>buffer</code> was created"
}
],
"(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_VERSION_1_1,VK_KHR_external_memory)+!(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-VkBindBufferMemoryInfo-memory-02792",
"text": " If <code>memory</code> was created by a memory import operation, the external handle type of the imported memory <strong class=\"purple\">must</strong> also have been set in <a href=\"#VkExternalMemoryBufferCreateInfo\">VkExternalMemoryBufferCreateInfo</a>::<code>handleTypes</code> when <code>buffer</code> was created"
}
],
"(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_VERSION_1_1,VK_KHR_external_memory)+(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-VkBindBufferMemoryInfo-memory-02987",
"text": " If <code>memory</code> was created by a memory import operation, that is not <a href=\"#VkImportAndroidHardwareBufferInfoANDROID\">VkImportAndroidHardwareBufferInfoANDROID</a> with a non-<code>NULL</code> <code>buffer</code> value, the external handle type of the imported memory <strong class=\"purple\">must</strong> also have been set in <a href=\"#VkExternalMemoryBufferCreateInfo\">VkExternalMemoryBufferCreateInfo</a>::<code>handleTypes</code> when <code>buffer</code> was created"
},
{
"vuid": "VUID-VkBindBufferMemoryInfo-memory-02988",
"text": " If <code>memory</code> was created with the <a href=\"#VkImportAndroidHardwareBufferInfoANDROID\">VkImportAndroidHardwareBufferInfoANDROID</a> memory import operation with a non-<code>NULL</code> <code>buffer</code> value, <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID</code> <strong class=\"purple\">must</strong> also have been set in <a href=\"#VkExternalMemoryBufferCreateInfo\">VkExternalMemoryBufferCreateInfo</a>::<code>handleTypes</code> when <code>buffer</code> was created"
}
],
"(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_KHR_buffer_device_address)": [
{
"vuid": "VUID-VkBindBufferMemoryInfo-bufferDeviceAddress-02838",
"text": " If the <a href=\"#VkPhysicalDeviceBufferDeviceAddressFeaturesKHR\">VkPhysicalDeviceBufferDeviceAddressFeaturesKHR</a>::<code>bufferDeviceAddress</code> feature is enabled and <code>buffer</code> was created with the <code>VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_KHR</code> bit set, <code>memory</code> <strong class=\"purple\">must</strong> have been allocated with the <code>VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR</code> bit set"
}
]
},
"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 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>"
},
{
"vuid": "VUID-vkBindImageMemory-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkBindImageMemory-image-parameter",
"text": " <code>image</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImage\">VkImage</a> handle"
},
{
"vuid": "VUID-vkBindImageMemory-memory-parameter",
"text": " <code>memory</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDeviceMemory\">VkDeviceMemory</a> 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>"
}
],
"(VK_VERSION_1_1,VK_KHR_dedicated_allocation)+!(VK_NV_dedicated_allocation_image_aliasing)": [
{
"vuid": "VUID-vkBindImageMemory-memory-01509",
"text": " If the <code>VkMemoryAllocateInfo</code> provided when <code>memory</code> was allocated included a <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a> structure in its <code>pNext</code> chain, and <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>::<code>image</code> was not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, 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_dedicated_allocation)+(VK_NV_dedicated_allocation_image_aliasing)": [
{
"vuid": "VUID-vkBindImageMemory-memory-02628",
"text": " If the <a href=\"#features-dedicatedAllocationImageAliasing\">dedicated allocation image aliasing</a> feature is not enabled, and the <code>VkMemoryAllocateInfo</code> provided when <code>memory</code> was allocated included a <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a> structure in its <code>pNext</code> chain, and <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>::<code>image</code> was not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, 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"
},
{
"vuid": "VUID-vkBindImageMemory-memory-02629",
"text": " If the <a href=\"#features-dedicatedAllocationImageAliasing\">dedicated allocation image aliasing</a> feature is enabled, and the <code>VkMemoryAllocateInfo</code> provided when <code>memory</code> was allocated included a <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a> structure in its <code>pNext</code> chain, and <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>::<code>image</code> was not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, then <code>memoryOffset</code> <strong class=\"purple\">must</strong> be zero, and <code>image</code> <strong class=\"purple\">must</strong> be either equal to <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>::<code>image</code> or an image that was created using the same parameters in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>, with the exception that <code>extent</code> and <code>arrayLayers</code> <strong class=\"purple\">may</strong> differ subject to the following restrictions: every dimension in the <code>extent</code> parameter of the image being bound <strong class=\"purple\">must</strong> be equal to or smaller than the original image for which the allocation was created; and the <code>arrayLayers</code> parameter of the image being bound <strong class=\"purple\">must</strong> be equal to or smaller than the original image for which the allocation was created"
}
],
"(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"
}
],
"(VK_VERSION_1_1,VK_KHR_external_memory)": [
{
"vuid": "VUID-vkBindImageMemory-memory-02728",
"text": " If the value of <a href=\"#VkExportMemoryAllocateInfo\">VkExportMemoryAllocateInfo</a>::<code>handleTypes</code> used to allocate <code>memory</code> is not <code>0</code>, it <strong class=\"purple\">must</strong> include at least one of the handles set in <a href=\"#VkExternalMemoryImageCreateInfo\">VkExternalMemoryImageCreateInfo</a>::<code>handleTypes</code> when <code>image</code> was created"
}
],
"(VK_VERSION_1_1,VK_KHR_external_memory)+!(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-vkBindImageMemory-memory-02729",
"text": " If <code>memory</code> was created by a memory import operation, the external handle type of the imported memory <strong class=\"purple\">must</strong> also have been set in <a href=\"#VkExternalMemoryImageCreateInfo\">VkExternalMemoryImageCreateInfo</a>::<code>handleTypes</code> when <code>image</code> was created"
}
],
"(VK_VERSION_1_1,VK_KHR_external_memory)+(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-vkBindImageMemory-memory-02989",
"text": " If <code>memory</code> was created by a memory import operation, that is not <a href=\"#VkImportAndroidHardwareBufferInfoANDROID\">VkImportAndroidHardwareBufferInfoANDROID</a> with a non-<code>NULL</code> <code>buffer</code> value, the external handle type of the imported memory <strong class=\"purple\">must</strong> also have been set in <a href=\"#VkExternalMemoryImageCreateInfo\">VkExternalMemoryImageCreateInfo</a>::<code>handleTypes</code> when <code>image</code> was created"
},
{
"vuid": "VUID-vkBindImageMemory-memory-02990",
"text": " If <code>memory</code> was created with the <a href=\"#VkImportAndroidHardwareBufferInfoANDROID\">VkImportAndroidHardwareBufferInfoANDROID</a> memory import operation with a non-<code>NULL</code> <code>buffer</code> value, <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID</code> <strong class=\"purple\">must</strong> also have been set in <a href=\"#VkExternalMemoryImageCreateInfo\">VkExternalMemoryImageCreateInfo</a>::<code>handleTypes</code> when <code>image</code> was created"
}
]
},
"vkBindImageMemory2": {
"(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-vkBindImageMemory2-pBindInfos-02858",
"text": " If any <a href=\"#VkBindImageMemoryInfo\">VkBindImageMemoryInfo</a>::image was created with <code>VK_IMAGE_CREATE_DISJOINT_BIT</code> then all planes of <a href=\"#VkBindImageMemoryInfo\">VkBindImageMemoryInfo</a>::image <strong class=\"purple\">must</strong> be bound individually in separate <code>pBindInfos</code>"
},
{
"vuid": "VUID-vkBindImageMemory2-pBindInfos-04006",
"text": " <code>pBindInfos</code> <strong class=\"purple\">must</strong> not refer to the same image subresource more than once"
}
],
"(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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkBindImageMemoryInfo\">VkBindImageMemoryInfo</a> 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": " The <code>sType</code> value of each struct 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 <a href=\"#VkImage\">VkImage</a> handle"
},
{
"vuid": "VUID-VkBindImageMemoryInfo-commonparent",
"text": " Both of <code>image</code>, and <code>memory</code> that are valid handles of non-ignored parameters <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(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 a <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 a <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 a <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 a <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 a <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 where <a href=\"#VkBindImagePlaneMemoryInfo\">VkBindImagePlaneMemoryInfo</a>::<code>planeAspect</code> corresponds to the <a href=\"#VkImagePlaneMemoryRequirementsInfo\">VkImagePlaneMemoryRequirementsInfo</a>::<code>planeAspect</code> in the <a href=\"#VkImageMemoryRequirementsInfo2\">VkImageMemoryRequirementsInfo2</a> structure&#8217;s <code>pNext</code> chain"
},
{
"vuid": "VUID-VkBindImageMemoryInfo-pNext-01620",
"text": " If the <code>pNext</code> chain includes a <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 where <a href=\"#VkBindImagePlaneMemoryInfo\">VkBindImagePlaneMemoryInfo</a>::<code>planeAspect</code> corresponds to the <a href=\"#VkImagePlaneMemoryRequirementsInfo\">VkImagePlaneMemoryRequirementsInfo</a>::<code>planeAspect</code> in the <a href=\"#VkImageMemoryRequirementsInfo2\">VkImageMemoryRequirementsInfo2</a> structure&#8217;s <code>pNext</code> chain"
},
{
"vuid": "VUID-VkBindImageMemoryInfo-pNext-01621",
"text": " If the <code>pNext</code> chain includes a <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 where <a href=\"#VkBindImagePlaneMemoryInfo\">VkBindImagePlaneMemoryInfo</a>::<code>planeAspect</code> corresponds to the <a href=\"#VkImagePlaneMemoryRequirementsInfo\">VkImagePlaneMemoryRequirementsInfo</a>::<code>planeAspect</code> in the <a href=\"#VkImageMemoryRequirementsInfo2\">VkImageMemoryRequirementsInfo2</a> structure&#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"
}
],
"(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_VERSION_1_1,VK_KHR_dedicated_allocation)+!(VK_NV_dedicated_allocation_image_aliasing)": [
{
"vuid": "VUID-VkBindImageMemoryInfo-memory-01903",
"text": " If the <code>VkMemoryAllocateInfo</code> provided when <code>memory</code> was allocated included a <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a> structure in its <code>pNext</code> chain, and <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>::<code>image</code> was not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, 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_VERSION_1_1,VK_KHR_dedicated_allocation)+(VK_NV_dedicated_allocation_image_aliasing)": [
{
"vuid": "VUID-VkBindImageMemoryInfo-memory-02630",
"text": " If the <a href=\"#features-dedicatedAllocationImageAliasing\">dedicated allocation image aliasing</a> feature is not enabled, and the <code>VkMemoryAllocateInfo</code> provided when <code>memory</code> was allocated included a <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a> structure in its <code>pNext</code> chain, and <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>::<code>image</code> was not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, 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"
},
{
"vuid": "VUID-VkBindImageMemoryInfo-memory-02631",
"text": " If the <a href=\"#features-dedicatedAllocationImageAliasing\">dedicated allocation image aliasing</a> feature is enabled, and the <code>VkMemoryAllocateInfo</code> provided when <code>memory</code> was allocated included a <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a> structure in its <code>pNext</code> chain, and <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>::<code>image</code> was not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, then <code>memoryOffset</code> <strong class=\"purple\">must</strong> be zero, and <code>image</code> <strong class=\"purple\">must</strong> be either equal to <a href=\"#VkMemoryDedicatedAllocateInfo\">VkMemoryDedicatedAllocateInfo</a>::<code>image</code> or an image that was created using the same parameters in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>, with the exception that <code>extent</code> and <code>arrayLayers</code> <strong class=\"purple\">may</strong> differ subject to the following restrictions: every dimension in the <code>extent</code> parameter of the image being bound <strong class=\"purple\">must</strong> be equal to or smaller than the original image for which the allocation was created; and the <code>arrayLayers</code> parameter of the image being bound <strong class=\"purple\">must</strong> be equal to or smaller than the original image for which the allocation was created"
}
],
"(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 <a href=\"#VkDeviceMemory\">VkDeviceMemory</a> 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 <a href=\"#VkBindImageMemoryDeviceGroupInfo\">VkBindImageMemoryDeviceGroupInfo</a> structure, 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 <a href=\"#VkBindImageMemoryDeviceGroupInfo\">VkBindImageMemoryDeviceGroupInfo</a> structure, 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 <a href=\"#VkBindImageMemoryDeviceGroupInfo\">VkBindImageMemoryDeviceGroupInfo</a> structure, 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 <a href=\"#VkBindImageMemoryDeviceGroupInfo\">VkBindImageMemoryDeviceGroupInfo</a> structure, 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 <a href=\"#VkBindImageMemorySwapchainInfoKHR\">VkBindImageMemorySwapchainInfoKHR</a> structure containing the same swapchain handle"
},
{
"vuid": "VUID-VkBindImageMemoryInfo-pNext-01631",
"text": " If the <code>pNext</code> chain includes a <a href=\"#VkBindImageMemorySwapchainInfoKHR\">VkBindImageMemorySwapchainInfoKHR</a> structure, <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 a <a href=\"#VkBindImageMemorySwapchainInfoKHR\">VkBindImageMemorySwapchainInfoKHR</a> structure, <code>memory</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDeviceMemory\">VkDeviceMemory</a> handle"
}
],
"(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_VERSION_1_1,VK_KHR_external_memory)": [
{
"vuid": "VUID-VkBindImageMemoryInfo-handleTypes-02793",
"text": " If the value of <a href=\"#VkExportMemoryAllocateInfo\">VkExportMemoryAllocateInfo</a>::<code>handleTypes</code> used to allocate <code>memory</code> is not <code>0</code>, it <strong class=\"purple\">must</strong> include at least one of the handles set in <a href=\"#VkExternalMemoryImageCreateInfo\">VkExternalMemoryImageCreateInfo</a>::<code>handleTypes</code> when <code>image</code> was created"
}
],
"(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_VERSION_1_1,VK_KHR_external_memory)+!(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-VkBindImageMemoryInfo-memory-02794",
"text": " If <code>memory</code> was created by a memory import operation, the external handle type of the imported memory <strong class=\"purple\">must</strong> also have been set in <a href=\"#VkExternalMemoryImageCreateInfo\">VkExternalMemoryImageCreateInfo</a>::<code>handleTypes</code> when <code>image</code> was created"
}
],
"(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_VERSION_1_1,VK_KHR_external_memory)+(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-VkBindImageMemoryInfo-memory-02991",
"text": " If <code>memory</code> was created by a memory import operation, that is not <a href=\"#VkImportAndroidHardwareBufferInfoANDROID\">VkImportAndroidHardwareBufferInfoANDROID</a> with a non-<code>NULL</code> <code>buffer</code> value, the external handle type of the imported memory <strong class=\"purple\">must</strong> also have been set in <a href=\"#VkExternalMemoryImageCreateInfo\">VkExternalMemoryImageCreateInfo</a>::<code>handleTypes</code> when <code>image</code> was created"
},
{
"vuid": "VUID-VkBindImageMemoryInfo-memory-02992",
"text": " If <code>memory</code> was created with the <a href=\"#VkImportAndroidHardwareBufferInfoANDROID\">VkImportAndroidHardwareBufferInfoANDROID</a> memory import operation with a non-<code>NULL</code> <code>buffer</code> value, <code>VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID</code> <strong class=\"purple\">must</strong> also have been set in <a href=\"#VkExternalMemoryImageCreateInfo\">VkExternalMemoryImageCreateInfo</a>::<code>handleTypes</code> when <code>image</code> was created"
}
]
},
"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> &#43; <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> &#43; <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> <a href=\"#VkRect2D\">VkRect2D</a> 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 <a href=\"#VkSwapchainKHR\">VkSwapchainKHR</a> handle"
}
]
},
"VkBindImagePlaneMemoryInfo": {
"(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-VkBindImagePlaneMemoryInfo-planeAspect-02283",
"text": " If the image&#8217;s <code>tiling</code> is <code>VK_IMAGE_TILING_LINEAR</code> or <code>VK_IMAGE_TILING_OPTIMAL</code>, then <code>planeAspect</code> <strong class=\"purple\">must</strong> be a single valid <em>format plane</em> for the image (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-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"
}
],
"(VK_VERSION_1_1,VK_KHR_bind_memory2)+(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)+(VK_EXT_image_drm_format_modifier)": [
{
"vuid": "VUID-VkBindImagePlaneMemoryInfo-planeAspect-02284",
"text": " If the image&#8217;s <code>tiling</code> is <code>VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT</code>, then <code>planeAspect</code> <strong class=\"purple\">must</strong> be a single valid <em>memory plane</em> for the image (that is, <code>aspectMask</code> <strong class=\"purple\">must</strong> specify a plane index that is less than the <a href=\"#VkDrmFormatModifierPropertiesEXT\">VkDrmFormatModifierPropertiesEXT</a>::<code>drmFormatModifierPlaneCount</code> associated with the image&#8217;s <code>format</code> and <a href=\"#VkImageDrmFormatModifierPropertiesEXT\">VkImageDrmFormatModifierPropertiesEXT</a>::<code>drmFormatModifier</code>)"
}
]
},
"vkCreateAccelerationStructureNV": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_NV_ray_tracing)": [
{
"vuid": "VUID-vkCreateAccelerationStructureNV-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkCreateAccelerationStructureNV-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkAccelerationStructureCreateInfoNV\">VkAccelerationStructureCreateInfoNV</a> structure"
},
{
"vuid": "VUID-vkCreateAccelerationStructureNV-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateAccelerationStructureNV-pAccelerationStructure-parameter",
"text": " <code>pAccelerationStructure</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkAccelerationStructureNV\">VkAccelerationStructureNV</a> handle"
}
]
},
"VkAccelerationStructureCreateInfoNV": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_NV_ray_tracing)": [
{
"vuid": "VUID-VkAccelerationStructureCreateInfoNV-compactedSize-02421",
"text": " If <code>compactedSize</code> is not <code>0</code> then both <code>info.geometryCount</code> and <code>info.instanceCount</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkAccelerationStructureCreateInfoNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV</code>"
},
{
"vuid": "VUID-VkAccelerationStructureCreateInfoNV-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkAccelerationStructureCreateInfoNV-info-parameter",
"text": " <code>info</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAccelerationStructureInfoNV\">VkAccelerationStructureInfoNV</a> structure"
}
]
},
"VkAccelerationStructureInfoNV": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_NV_ray_tracing)": [
{
"vuid": "VUID-VkAccelerationStructureInfoNV-geometryCount-02422",
"text": " <code>geometryCount</code> <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkPhysicalDeviceRayTracingPropertiesNV\">VkPhysicalDeviceRayTracingPropertiesNV</a>::<code>maxGeometryCount</code>"
},
{
"vuid": "VUID-VkAccelerationStructureInfoNV-instanceCount-02423",
"text": " <code>instanceCount</code> <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkPhysicalDeviceRayTracingPropertiesNV\">VkPhysicalDeviceRayTracingPropertiesNV</a>::<code>maxInstanceCount</code>"
},
{
"vuid": "VUID-VkAccelerationStructureInfoNV-maxTriangleCount-02424",
"text": " The total number of triangles in all geometries <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkPhysicalDeviceRayTracingPropertiesNV\">VkPhysicalDeviceRayTracingPropertiesNV</a>::<code>maxTriangleCount</code>"
},
{
"vuid": "VUID-VkAccelerationStructureInfoNV-type-02425",
"text": " If <code>type</code> is <code>VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_NV</code> then <code>geometryCount</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkAccelerationStructureInfoNV-type-02426",
"text": " If <code>type</code> is <code>VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV</code> then <code>instanceCount</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkAccelerationStructureInfoNV-type-02786",
"text": " If <code>type</code> is <code>VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV</code> then the <code>geometryType</code> member of each geometry in <code>pGeometries</code> <strong class=\"purple\">must</strong> be the same"
},
{
"vuid": "VUID-VkAccelerationStructureInfoNV-flags-02592",
"text": " If <code>flags</code> has the <code>VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_NV</code> bit set, then it <strong class=\"purple\">must</strong> not have the <code>VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_NV</code> bit set"
},
{
"vuid": "VUID-VkAccelerationStructureInfoNV-scratch-02781",
"text": " <code>scratch</code> <strong class=\"purple\">must</strong> have been created with <code>VK_BUFFER_USAGE_RAY_TRACING_BIT_NV</code> usage flag"
},
{
"vuid": "VUID-VkAccelerationStructureInfoNV-instanceData-02782",
"text": " If <code>instanceData</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>instanceData</code> <strong class=\"purple\">must</strong> have been created with <code>VK_BUFFER_USAGE_RAY_TRACING_BIT_NV</code> usage flag"
},
{
"vuid": "VUID-VkAccelerationStructureInfoNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV</code>"
},
{
"vuid": "VUID-VkAccelerationStructureInfoNV-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkAccelerationStructureInfoNV-type-parameter",
"text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAccelerationStructureTypeNV\">VkAccelerationStructureTypeNV</a> value"
},
{
"vuid": "VUID-VkAccelerationStructureInfoNV-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkBuildAccelerationStructureFlagBitsNV\">VkBuildAccelerationStructureFlagBitsNV</a> values"
},
{
"vuid": "VUID-VkAccelerationStructureInfoNV-pGeometries-parameter",
"text": " If <code>geometryCount</code> is not <code>0</code>, <code>pGeometries</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>geometryCount</code> valid <a href=\"#VkGeometryNV\">VkGeometryNV</a> structures"
}
]
},
"vkCreateAccelerationStructureKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_KHR_ray_tracing)": [
{
"vuid": "VUID-vkCreateAccelerationStructureKHR-rayTracing-03487",
"text": " The <a href=\"#features-raytracing\"><code>rayTracing</code></a> or <a href=\"#features-rayQuery\"><code>rayQuery</code></a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkCreateAccelerationStructureKHR-deviceAddress-03488",
"text": " If <a href=\"#VkAccelerationStructureCreateInfoKHR\">VkAccelerationStructureCreateInfoKHR</a>::<code>deviceAddress</code> is not zero, the <a href=\"#features-raytracing-ascapturereplay\"><code>rayTracingAccelerationStructureCaptureReplay</code></a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkCreateAccelerationStructureKHR-device-03489",
"text": " If <code>device</code> was created with multiple physical devices, then the <a href=\"#features-bufferDeviceAddressMultiDevice\">bufferDeviceAddressMultiDevice</a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkCreateAccelerationStructureKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkCreateAccelerationStructureKHR-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkAccelerationStructureCreateInfoKHR\">VkAccelerationStructureCreateInfoKHR</a> structure"
},
{
"vuid": "VUID-vkCreateAccelerationStructureKHR-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateAccelerationStructureKHR-pAccelerationStructure-parameter",
"text": " <code>pAccelerationStructure</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkAccelerationStructureKHR\">VkAccelerationStructureKHR</a> handle"
}
]
},
"VkAccelerationStructureCreateInfoKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_KHR_ray_tracing)": [
{
"vuid": "VUID-VkAccelerationStructureCreateInfoKHR-compactedSize-03490",
"text": " If <code>compactedSize</code> is not <code>0</code> then <code>maxGeometryCount</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkAccelerationStructureCreateInfoKHR-compactedSize-02993",
"text": " If <code>compactedSize</code> is <code>0</code> then <code>maxGeometryCount</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-VkAccelerationStructureCreateInfoKHR-type-03491",
"text": " If <code>type</code> is <code>VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR</code> then <code>maxGeometryCount</code> <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkPhysicalDeviceRayTracingPropertiesKHR\">VkPhysicalDeviceRayTracingPropertiesKHR</a>::<code>maxGeometryCount</code>"
},
{
"vuid": "VUID-VkAccelerationStructureCreateInfoKHR-type-03492",
"text": " If <code>type</code> is <code>VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR</code> then the <code>maxPrimitiveCount</code> member of each element of the <code>pGeometryInfos</code> array <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkPhysicalDeviceRayTracingPropertiesKHR\">VkPhysicalDeviceRayTracingPropertiesKHR</a>::<code>maxInstanceCount</code>"
},
{
"vuid": "VUID-VkAccelerationStructureCreateInfoKHR-maxPrimitiveCount-03493",
"text": " The total number of triangles in all geometries <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkPhysicalDeviceRayTracingPropertiesKHR\">VkPhysicalDeviceRayTracingPropertiesKHR</a>::<code>maxPrimitiveCount</code>"
},
{
"vuid": "VUID-VkAccelerationStructureCreateInfoKHR-maxPrimitiveCount-03494",
"text": " The total number of AABBs in all geometries <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkPhysicalDeviceRayTracingPropertiesKHR\">VkPhysicalDeviceRayTracingPropertiesKHR</a>::<code>maxPrimitiveCount</code>"
},
{
"vuid": "VUID-VkAccelerationStructureCreateInfoKHR-type-03495",
"text": " If <code>type</code> is <code>VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR</code> and <code>compactedSize</code> is <code>0</code>, <code>maxGeometryCount</code> <strong class=\"purple\">must</strong> be <code>1</code>"
},
{
"vuid": "VUID-VkAccelerationStructureCreateInfoKHR-type-03496",
"text": " If <code>type</code> is <code>VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR</code> and <code>compactedSize</code> is <code>0</code>, the <code>geometryType</code> member of elements of <code>pGeometryInfos</code> <strong class=\"purple\">must</strong> be <code>VK_GEOMETRY_TYPE_INSTANCES_KHR</code>"
},
{
"vuid": "VUID-VkAccelerationStructureCreateInfoKHR-type-03497",
"text": " If <code>type</code> is <code>VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR</code> and <code>compactedSize</code> is <code>0</code>, the <code>geometryType</code> member of elements of <code>pGeometryInfos</code> <strong class=\"purple\">must</strong> not be <code>VK_GEOMETRY_TYPE_INSTANCES_KHR</code>"
},
{
"vuid": "VUID-VkAccelerationStructureCreateInfoKHR-type-03498",
"text": " If <code>type</code> is <code>VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR</code> then the <code>geometryType</code> member of each geometry in <code>pGeometryInfos</code> <strong class=\"purple\">must</strong> be the same"
},
{
"vuid": "VUID-VkAccelerationStructureCreateInfoKHR-flags-03499",
"text": " If <code>flags</code> has the <code>VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR</code> bit set, then it <strong class=\"purple\">must</strong> not have the <code>VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR</code> bit set"
},
{
"vuid": "VUID-VkAccelerationStructureCreateInfoKHR-deviceAddress-03500",
"text": " If <code>deviceAddress</code> is not <code>0</code>, <a href=\"#VkPhysicalDeviceRayTracingFeaturesKHR\">VkPhysicalDeviceRayTracingFeaturesKHR</a>::<code>rayTracingAccelerationStructureCaptureReplay</code> <strong class=\"purple\">must</strong> be <code>VK_TRUE</code>"
},
{
"vuid": "VUID-VkAccelerationStructureCreateInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR</code>"
},
{
"vuid": "VUID-VkAccelerationStructureCreateInfoKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkAccelerationStructureCreateInfoKHR-type-parameter",
"text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAccelerationStructureTypeKHR\">VkAccelerationStructureTypeKHR</a> value"
},
{
"vuid": "VUID-VkAccelerationStructureCreateInfoKHR-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkBuildAccelerationStructureFlagBitsKHR\">VkBuildAccelerationStructureFlagBitsKHR</a> values"
},
{
"vuid": "VUID-VkAccelerationStructureCreateInfoKHR-pGeometryInfos-parameter",
"text": " If <code>maxGeometryCount</code> is not <code>0</code>, <code>pGeometryInfos</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>maxGeometryCount</code> valid <a href=\"#VkAccelerationStructureCreateGeometryTypeInfoKHR\">VkAccelerationStructureCreateGeometryTypeInfoKHR</a> structures"
}
]
},
"VkAccelerationStructureCreateGeometryTypeInfoKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_KHR_ray_tracing)": [
{
"vuid": "VUID-VkAccelerationStructureCreateGeometryTypeInfoKHR-geometryType-03501",
"text": " If <code>geometryType</code> is <code>VK_GEOMETRY_TYPE_TRIANGLES_KHR</code>, <code>vertexFormat</code> <strong class=\"purple\">must</strong> support the <code>VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR</code> in <a href=\"#VkFormatProperties\">VkFormatProperties</a>::<code>bufferFeatures</code> as returned by <a href=\"#vkGetPhysicalDeviceFormatProperties2\">vkGetPhysicalDeviceFormatProperties2</a>"
},
{
"vuid": "VUID-VkAccelerationStructureCreateGeometryTypeInfoKHR-geometryType-03502",
"text": " If <code>geometryType</code> is <code>VK_GEOMETRY_TYPE_TRIANGLES_KHR</code>, <code>indexType</code> <strong class=\"purple\">must</strong> be <code>VK_INDEX_TYPE_UINT16</code>, <code>VK_INDEX_TYPE_UINT32</code>, or <code>VK_INDEX_TYPE_NONE_KHR</code>"
},
{
"vuid": "VUID-VkAccelerationStructureCreateGeometryTypeInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR</code>"
},
{
"vuid": "VUID-VkAccelerationStructureCreateGeometryTypeInfoKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkAccelerationStructureCreateGeometryTypeInfoKHR-geometryType-parameter",
"text": " <code>geometryType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkGeometryTypeKHR\">VkGeometryTypeKHR</a> value"
},
{
"vuid": "VUID-VkAccelerationStructureCreateGeometryTypeInfoKHR-indexType-parameter",
"text": " <code>indexType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkIndexType\">VkIndexType</a> value"
},
{
"vuid": "VUID-VkAccelerationStructureCreateGeometryTypeInfoKHR-vertexFormat-parameter",
"text": " If <code>vertexFormat</code> is not <code>0</code>, <code>vertexFormat</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFormat\">VkFormat</a> value"
}
]
},
"VkGeometryNV": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_NV_ray_tracing)": [
{
"vuid": "VUID-VkGeometryNV-geometryType-03503",
"text": " <code>geometryType</code> <strong class=\"purple\">must</strong> be <code>VK_GEOMETRY_TYPE_TRIANGLES_NV</code> or <code>VK_GEOMETRY_TYPE_AABBS_NV</code>"
},
{
"vuid": "VUID-VkGeometryNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_GEOMETRY_NV</code>"
},
{
"vuid": "VUID-VkGeometryNV-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkGeometryNV-geometryType-parameter",
"text": " <code>geometryType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkGeometryTypeKHR\">VkGeometryTypeKHR</a> value"
},
{
"vuid": "VUID-VkGeometryNV-geometry-parameter",
"text": " <code>geometry</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkGeometryDataNV\">VkGeometryDataNV</a> structure"
},
{
"vuid": "VUID-VkGeometryNV-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkGeometryFlagBitsKHR\">VkGeometryFlagBitsKHR</a> values"
}
]
},
"VkGeometryDataNV": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_NV_ray_tracing)": [
{
"vuid": "VUID-VkGeometryDataNV-triangles-parameter",
"text": " <code>triangles</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkGeometryTrianglesNV\">VkGeometryTrianglesNV</a> structure"
},
{
"vuid": "VUID-VkGeometryDataNV-aabbs-parameter",
"text": " <code>aabbs</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkGeometryAABBNV\">VkGeometryAABBNV</a> structure"
}
]
},
"VkGeometryTrianglesNV": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_NV_ray_tracing)": [
{
"vuid": "VUID-VkGeometryTrianglesNV-vertexOffset-02428",
"text": " <code>vertexOffset</code> <strong class=\"purple\">must</strong> be less than the size of <code>vertexData</code>"
},
{
"vuid": "VUID-VkGeometryTrianglesNV-vertexOffset-02429",
"text": " <code>vertexOffset</code> <strong class=\"purple\">must</strong> be a multiple of the component size of <code>vertexFormat</code>"
},
{
"vuid": "VUID-VkGeometryTrianglesNV-vertexFormat-02430",
"text": " <code>vertexFormat</code> <strong class=\"purple\">must</strong> be one of <code>VK_FORMAT_R32G32B32_SFLOAT</code>, <code>VK_FORMAT_R32G32_SFLOAT</code>, <code>VK_FORMAT_R16G16B16_SFLOAT</code>, <code>VK_FORMAT_R16G16_SFLOAT</code>, <code>VK_FORMAT_R16G16_SNORM</code>, or <code>VK_FORMAT_R16G16B16_SNORM</code>"
},
{
"vuid": "VUID-VkGeometryTrianglesNV-indexOffset-02431",
"text": " <code>indexOffset</code> <strong class=\"purple\">must</strong> be less than the size of <code>indexData</code>"
},
{
"vuid": "VUID-VkGeometryTrianglesNV-indexOffset-02432",
"text": " <code>indexOffset</code> <strong class=\"purple\">must</strong> be a multiple of the element size of <code>indexType</code>"
},
{
"vuid": "VUID-VkGeometryTrianglesNV-indexType-02433",
"text": " <code>indexType</code> <strong class=\"purple\">must</strong> be <code>VK_INDEX_TYPE_UINT16</code>, <code>VK_INDEX_TYPE_UINT32</code>, or <code>VK_INDEX_TYPE_NONE_NV</code>"
},
{
"vuid": "VUID-VkGeometryTrianglesNV-indexData-02434",
"text": " <code>indexData</code> <strong class=\"purple\">must</strong> be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a> if <code>indexType</code> is <code>VK_INDEX_TYPE_NONE_NV</code>"
},
{
"vuid": "VUID-VkGeometryTrianglesNV-indexData-02435",
"text": " <code>indexData</code> <strong class=\"purple\">must</strong> be a valid <code>VkBuffer</code> handle if <code>indexType</code> is not <code>VK_INDEX_TYPE_NONE_NV</code>"
},
{
"vuid": "VUID-VkGeometryTrianglesNV-indexCount-02436",
"text": " <code>indexCount</code> <strong class=\"purple\">must</strong> be <code>0</code> if <code>indexType</code> is <code>VK_INDEX_TYPE_NONE_NV</code>"
},
{
"vuid": "VUID-VkGeometryTrianglesNV-transformOffset-02437",
"text": " <code>transformOffset</code> <strong class=\"purple\">must</strong> be less than the size of <code>transformData</code>"
},
{
"vuid": "VUID-VkGeometryTrianglesNV-transformOffset-02438",
"text": " <code>transformOffset</code> <strong class=\"purple\">must</strong> be a multiple of <code>16</code>"
},
{
"vuid": "VUID-VkGeometryTrianglesNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV</code>"
},
{
"vuid": "VUID-VkGeometryTrianglesNV-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkGeometryTrianglesNV-vertexData-parameter",
"text": " If <code>vertexData</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>vertexData</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-VkGeometryTrianglesNV-vertexFormat-parameter",
"text": " <code>vertexFormat</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFormat\">VkFormat</a> value"
},
{
"vuid": "VUID-VkGeometryTrianglesNV-indexData-parameter",
"text": " If <code>indexData</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>indexData</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-VkGeometryTrianglesNV-indexType-parameter",
"text": " <code>indexType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkIndexType\">VkIndexType</a> value"
},
{
"vuid": "VUID-VkGeometryTrianglesNV-transformData-parameter",
"text": " If <code>transformData</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>transformData</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-VkGeometryTrianglesNV-commonparent",
"text": " Each of <code>indexData</code>, <code>transformData</code>, and <code>vertexData</code> that are valid handles of non-ignored parameters <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"VkGeometryAABBNV": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_NV_ray_tracing)": [
{
"vuid": "VUID-VkGeometryAABBNV-offset-02439",
"text": " <code>offset</code> <strong class=\"purple\">must</strong> be less than the size of <code>aabbData</code>"
},
{
"vuid": "VUID-VkGeometryAABBNV-offset-02440",
"text": " <code>offset</code> <strong class=\"purple\">must</strong> be a multiple of <code>8</code>"
},
{
"vuid": "VUID-VkGeometryAABBNV-stride-02441",
"text": " <code>stride</code> <strong class=\"purple\">must</strong> be a multiple of <code>8</code>"
},
{
"vuid": "VUID-VkGeometryAABBNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_GEOMETRY_AABB_NV</code>"
},
{
"vuid": "VUID-VkGeometryAABBNV-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkGeometryAABBNV-aabbData-parameter",
"text": " If <code>aabbData</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>aabbData</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
}
]
},
"vkDestroyAccelerationStructureKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)": [
{
"vuid": "VUID-vkDestroyAccelerationStructureKHR-accelerationStructure-02442",
"text": " All submitted commands that refer to <code>accelerationStructure</code> <strong class=\"purple\">must</strong> have completed execution"
},
{
"vuid": "VUID-vkDestroyAccelerationStructureKHR-accelerationStructure-02443",
"text": " If <code>VkAllocationCallbacks</code> were provided when <code>accelerationStructure</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
},
{
"vuid": "VUID-vkDestroyAccelerationStructureKHR-accelerationStructure-02444",
"text": " If no <code>VkAllocationCallbacks</code> were provided when <code>accelerationStructure</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-vkDestroyAccelerationStructureKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkDestroyAccelerationStructureKHR-accelerationStructure-parameter",
"text": " If <code>accelerationStructure</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>accelerationStructure</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAccelerationStructureKHR\">VkAccelerationStructureKHR</a> handle"
},
{
"vuid": "VUID-vkDestroyAccelerationStructureKHR-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkDestroyAccelerationStructureKHR-accelerationStructure-parent",
"text": " If <code>accelerationStructure</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkGetAccelerationStructureMemoryRequirementsNV": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_NV_ray_tracing)": [
{
"vuid": "VUID-vkGetAccelerationStructureMemoryRequirementsNV-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetAccelerationStructureMemoryRequirementsNV-pInfo-parameter",
"text": " <code>pInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkAccelerationStructureMemoryRequirementsInfoNV\">VkAccelerationStructureMemoryRequirementsInfoNV</a> structure"
},
{
"vuid": "VUID-vkGetAccelerationStructureMemoryRequirementsNV-pMemoryRequirements-parameter",
"text": " <code>pMemoryRequirements</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkMemoryRequirements2KHR\">VkMemoryRequirements2KHR</a> structure"
}
]
},
"VkAccelerationStructureMemoryRequirementsInfoNV": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_NV_ray_tracing)": [
{
"vuid": "VUID-VkAccelerationStructureMemoryRequirementsInfoNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV</code>"
},
{
"vuid": "VUID-VkAccelerationStructureMemoryRequirementsInfoNV-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkAccelerationStructureMemoryRequirementsInfoNV-type-parameter",
"text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAccelerationStructureMemoryRequirementsTypeNV\">VkAccelerationStructureMemoryRequirementsTypeNV</a> value"
},
{
"vuid": "VUID-VkAccelerationStructureMemoryRequirementsInfoNV-accelerationStructure-parameter",
"text": " <code>accelerationStructure</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAccelerationStructureNV\">VkAccelerationStructureNV</a> handle"
}
]
},
"vkGetAccelerationStructureMemoryRequirementsKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_KHR_ray_tracing)": [
{
"vuid": "VUID-vkGetAccelerationStructureMemoryRequirementsKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetAccelerationStructureMemoryRequirementsKHR-pInfo-parameter",
"text": " <code>pInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkAccelerationStructureMemoryRequirementsInfoKHR\">VkAccelerationStructureMemoryRequirementsInfoKHR</a> structure"
},
{
"vuid": "VUID-vkGetAccelerationStructureMemoryRequirementsKHR-pMemoryRequirements-parameter",
"text": " <code>pMemoryRequirements</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkMemoryRequirements2\">VkMemoryRequirements2</a> structure"
}
]
},
"VkAccelerationStructureMemoryRequirementsInfoKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_KHR_ray_tracing)": [
{
"vuid": "VUID-VkAccelerationStructureMemoryRequirementsInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_KHR</code>"
},
{
"vuid": "VUID-VkAccelerationStructureMemoryRequirementsInfoKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkAccelerationStructureMemoryRequirementsInfoKHR-type-parameter",
"text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAccelerationStructureMemoryRequirementsTypeKHR\">VkAccelerationStructureMemoryRequirementsTypeKHR</a> value"
},
{
"vuid": "VUID-VkAccelerationStructureMemoryRequirementsInfoKHR-buildType-parameter",
"text": " <code>buildType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAccelerationStructureBuildTypeKHR\">VkAccelerationStructureBuildTypeKHR</a> value"
},
{
"vuid": "VUID-VkAccelerationStructureMemoryRequirementsInfoKHR-accelerationStructure-parameter",
"text": " <code>accelerationStructure</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAccelerationStructureKHR\">VkAccelerationStructureKHR</a> handle"
}
]
},
"vkBindAccelerationStructureMemoryKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)": [
{
"vuid": "VUID-vkBindAccelerationStructureMemoryKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkBindAccelerationStructureMemoryKHR-pBindInfos-parameter",
"text": " <code>pBindInfos</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>bindInfoCount</code> valid <a href=\"#VkBindAccelerationStructureMemoryInfoKHR\">VkBindAccelerationStructureMemoryInfoKHR</a> structures"
},
{
"vuid": "VUID-vkBindAccelerationStructureMemoryKHR-bindInfoCount-arraylength",
"text": " <code>bindInfoCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"VkBindAccelerationStructureMemoryInfoKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)": [
{
"vuid": "VUID-VkBindAccelerationStructureMemoryInfoKHR-accelerationStructure-02450",
"text": " <code>accelerationStructure</code> <strong class=\"purple\">must</strong> not already be backed by a memory object"
},
{
"vuid": "VUID-VkBindAccelerationStructureMemoryInfoKHR-memoryOffset-02451",
"text": " <code>memoryOffset</code> <strong class=\"purple\">must</strong> be less than the size of <code>memory</code>"
},
{
"vuid": "VUID-VkBindAccelerationStructureMemoryInfoKHR-memory-02593",
"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=\"#vkGetAccelerationStructureMemoryRequirementsKHR\">vkGetAccelerationStructureMemoryRequirementsKHR</a> with <code>accelerationStructure</code> and <code>type</code> of <code>VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR</code>"
},
{
"vuid": "VUID-VkBindAccelerationStructureMemoryInfoKHR-memoryOffset-02594",
"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=\"#vkGetAccelerationStructureMemoryRequirementsKHR\">vkGetAccelerationStructureMemoryRequirementsKHR</a> with <code>accelerationStructure</code> and <code>type</code> of <code>VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR</code>"
},
{
"vuid": "VUID-VkBindAccelerationStructureMemoryInfoKHR-size-02595",
"text": " The <code>size</code> member of the <code>VkMemoryRequirements</code> structure returned from a call to <a href=\"#vkGetAccelerationStructureMemoryRequirementsKHR\">vkGetAccelerationStructureMemoryRequirementsKHR</a> with <code>accelerationStructure</code> and <code>type</code> of <code>VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR</code> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>memory</code> minus <code>memoryOffset</code>"
},
{
"vuid": "VUID-VkBindAccelerationStructureMemoryInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR</code>"
},
{
"vuid": "VUID-VkBindAccelerationStructureMemoryInfoKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkBindAccelerationStructureMemoryInfoKHR-accelerationStructure-parameter",
"text": " <code>accelerationStructure</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAccelerationStructureKHR\">VkAccelerationStructureKHR</a> handle"
},
{
"vuid": "VUID-VkBindAccelerationStructureMemoryInfoKHR-memory-parameter",
"text": " <code>memory</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDeviceMemory\">VkDeviceMemory</a> handle"
},
{
"vuid": "VUID-VkBindAccelerationStructureMemoryInfoKHR-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-VkBindAccelerationStructureMemoryInfoKHR-commonparent",
"text": " Both of <code>accelerationStructure</code>, and <code>memory</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"vkGetAccelerationStructureHandleNV": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_NV_ray_tracing)": [
{
"vuid": "VUID-vkGetAccelerationStructureHandleNV-dataSize-02240",
"text": " <code>dataSize</code> <strong class=\"purple\">must</strong> be large enough to contain the result of the query, as described above"
},
{
"vuid": "VUID-vkGetAccelerationStructureHandleNV-accelerationStructure-02787",
"text": " <code>accelerationStructure</code> <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object via <a href=\"#vkBindAccelerationStructureMemoryKHR\">vkBindAccelerationStructureMemoryKHR</a>"
},
{
"vuid": "VUID-vkGetAccelerationStructureHandleNV-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetAccelerationStructureHandleNV-accelerationStructure-parameter",
"text": " <code>accelerationStructure</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAccelerationStructureKHR\">VkAccelerationStructureKHR</a> handle"
},
{
"vuid": "VUID-vkGetAccelerationStructureHandleNV-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-vkGetAccelerationStructureHandleNV-dataSize-arraylength",
"text": " <code>dataSize</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkGetAccelerationStructureHandleNV-accelerationStructure-parent",
"text": " <code>accelerationStructure</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkGetAccelerationStructureDeviceAddressKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_KHR_ray_tracing)": [
{
"vuid": "VUID-vkGetAccelerationStructureDeviceAddressKHR-device-03504",
"text": " If <code>device</code> was created with multiple physical devices, then the <a href=\"#features-bufferDeviceAddressMultiDevice\">bufferDeviceAddressMultiDevice</a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkGetAccelerationStructureDeviceAddressKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetAccelerationStructureDeviceAddressKHR-pInfo-parameter",
"text": " <code>pInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkAccelerationStructureDeviceAddressInfoKHR\">VkAccelerationStructureDeviceAddressInfoKHR</a> structure"
}
]
},
"VkAccelerationStructureDeviceAddressInfoKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_KHR_ray_tracing)": [
{
"vuid": "VUID-VkAccelerationStructureDeviceAddressInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR</code>"
},
{
"vuid": "VUID-VkAccelerationStructureDeviceAddressInfoKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkAccelerationStructureDeviceAddressInfoKHR-accelerationStructure-parameter",
"text": " <code>accelerationStructure</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAccelerationStructureKHR\">VkAccelerationStructureKHR</a> handle"
}
]
},
"vkCreateSampler": {
"core": [
{
"vuid": "VUID-vkCreateSampler-maxSamplerAllocationCount-04110",
"text": " There <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceLimits</code>::<code>maxSamplerAllocationCount</code> VkSampler objects currently created on the device."
},
{
"vuid": "VUID-vkCreateSampler-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkCreateSampler-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkSamplerCreateInfo\">VkSamplerCreateInfo</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateSampler-pSampler-parameter",
"text": " <code>pSampler</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkSampler\">VkSampler</a> 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 <a href=\"#features-samplerAnisotropy\">anisotropic sampling</a> 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-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=\"#VkSamplerCustomBorderColorCreateInfoEXT\">VkSamplerCustomBorderColorCreateInfoEXT</a>, <a href=\"#VkSamplerReductionModeCreateInfo\">VkSamplerReductionModeCreateInfo</a>, or <a href=\"#VkSamplerYcbcrConversionInfo\">VkSamplerYcbcrConversionInfo</a>"
},
{
"vuid": "VUID-VkSamplerCreateInfo-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkSamplerCreateInfo-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkSamplerCreateFlagBits\">VkSamplerCreateFlagBits</a> values"
},
{
"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 <a href=\"#samplers-YCbCr-conversion\">sampler {YCbCr} conversion</a> is enabled and the <a href=\"#potential-format-features\">potential format features</a> of the sampler {YCbCr} conversion do not support <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT</code>, <code>minFilter</code> and <code>magFilter</code> <strong class=\"purple\">must</strong> be equal to the sampler {YCbCr} conversion&#8217;s <code>chromaFilter</code>"
},
{
"vuid": "VUID-VkSamplerCreateInfo-addressModeU-01646",
"text": " If <a href=\"#samplers-YCbCr-conversion\">sampler {YCbCr} conversion</a> 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_VERSION_1_2,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</code> if <a href=\"#samplers-YCbCr-conversion\">sampler {YCbCr} conversion</a> is enabled"
}
],
"(VK_VERSION_1_2,VK_KHR_sampler_mirror_clamp_to_edge)": [
{
"vuid": "VUID-VkSamplerCreateInfo-addressModeU-01079",
"text": " If ifdef::VK_VERSION_1_2[<a href=\"#features-samplerMirrorClampToEdge\">samplerMirrorClampToEdge</a> is not enabled, and 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>"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)": [
{
"vuid": "VUID-VkSamplerCreateInfo-magFilter-01081",
"text": " If either <code>magFilter</code> or <code>minFilter</code> is <code>VK_FILTER_CUBIC_EXT</code>, <code>anisotropyEnable</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
}
],
"(VK_IMG_filter_cubic+VK_EXT_sampler_filter_minmax)+!(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-VkSamplerCreateInfo-magFilter-01422",
"text": " If either <code>magFilter</code> or <code>minFilter</code> is <code>VK_FILTER_CUBIC_EXT</code>, the <code>reductionMode</code> member of <a href=\"#VkSamplerReductionModeCreateInfo\">VkSamplerReductionModeCreateInfo</a> <strong class=\"purple\">must</strong> be <code>VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE</code>"
}
],
"(VK_VERSION_1_2,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=\"#VkSamplerReductionModeCreateInfo\">VkSamplerReductionModeCreateInfo</a> <strong class=\"purple\">must</strong> be <code>VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE</code>"
}
],
"(VK_EXT_fragment_density_map)": [
{
"vuid": "VUID-VkSamplerCreateInfo-flags-02574",
"text": " If <code>flags</code> includes <code>VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT</code>, then <code>minFilter</code> and <code>magFilter</code> <strong class=\"purple\">must</strong> be equal"
},
{
"vuid": "VUID-VkSamplerCreateInfo-flags-02575",
"text": " If <code>flags</code> includes <code>VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT</code>, then <code>mipmapMode</code> <strong class=\"purple\">must</strong> be <code>VK_SAMPLER_MIPMAP_MODE_NEAREST</code>"
},
{
"vuid": "VUID-VkSamplerCreateInfo-flags-02576",
"text": " If <code>flags</code> includes <code>VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT</code>, then <code>minLod</code> and <code>maxLod</code> <strong class=\"purple\">must</strong> be zero"
},
{
"vuid": "VUID-VkSamplerCreateInfo-flags-02577",
"text": " If <code>flags</code> includes <code>VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT</code>, then <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-flags-02578",
"text": " If <code>flags</code> includes <code>VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT</code>, then <code>anisotropyEnable</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
},
{
"vuid": "VUID-VkSamplerCreateInfo-flags-02579",
"text": " If <code>flags</code> includes <code>VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT</code>, then <code>compareEnable</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
},
{
"vuid": "VUID-VkSamplerCreateInfo-flags-02580",
"text": " If <code>flags</code> includes <code>VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT</code>, then <code>unnormalizedCoordinates</code> <strong class=\"purple\">must</strong> be <code>VK_FALSE</code>"
}
],
"(VK_EXT_custom_border_color)": [
{
"vuid": "VUID-VkSamplerCreateInfo-borderColor-04011",
"text": " If <code>borderColor</code> is set to one of <code>VK_BORDER_COLOR_FLOAT_CUSTOM_EXT</code> or <code>VK_BORDER_COLOR_INT_CUSTOM_EXT</code>, then a <a href=\"#VkSamplerCustomBorderColorCreateInfoEXT\">VkSamplerCustomBorderColorCreateInfoEXT</a> <strong class=\"purple\">must</strong> be present in the <code>pNext</code> chain"
},
{
"vuid": "VUID-VkSamplerCreateInfo-customBorderColors-04085",
"text": " If the <a href=\"#features-customBorderColors\"><code>customBorderColors</code></a> feature is not enabled, <code>borderColor</code> <strong class=\"purple\">must</strong> not be set to <code>VK_BORDER_COLOR_FLOAT_CUSTOM_EXT</code> or <code>VK_BORDER_COLOR_INT_CUSTOM_EXT</code>"
},
{
"vuid": "VUID-VkSamplerCreateInfo-None-04012",
"text": " The maximum number of samplers with custom border colors which <strong class=\"purple\">can</strong> be simultaneously created on a device is implementation-dependent and specified by the <a href=\"#limits-maxCustomBorderColorSamplers\">maxCustomBorderColorSamplers</a> member of the <a href=\"#VkPhysicalDeviceCustomBorderColorPropertiesEXT\">VkPhysicalDeviceCustomBorderColorPropertiesEXT</a> structure"
}
]
},
"VkSamplerReductionModeCreateInfo": {
"(VK_VERSION_1_2,VK_EXT_sampler_filter_minmax)": [
{
"vuid": "VUID-VkSamplerReductionModeCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkSamplerReductionModeCreateInfo-reductionMode-parameter",
"text": " <code>reductionMode</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSamplerReductionMode\">VkSamplerReductionMode</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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkSampler\">VkSampler</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> 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 <a href=\"#VkSamplerYcbcrConversion\">VkSamplerYcbcrConversion</a> handle"
}
]
},
"vkCreateSamplerYcbcrConversion": {
"(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-vkCreateSamplerYcbcrConversion-None-01648",
"text": " The <a href=\"#features-sampler-YCbCr-conversion\">sampler {YCbCr} conversion feature</a> <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkCreateSamplerYcbcrConversion-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkCreateSamplerYcbcrConversion-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkSamplerYcbcrConversionCreateInfo\">VkSamplerYcbcrConversionCreateInfo</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateSamplerYcbcrConversion-pYcbcrConversion-parameter",
"text": " <code>pYcbcrConversion</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkSamplerYcbcrConversion\">VkSamplerYcbcrConversion</a> handle"
}
]
},
"VkSamplerYcbcrConversionCreateInfo": {
"(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)+!(VK_ANDROID_external_memory_android_hardware_buffer)": [
{
"vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-format-04060",
"text": " <code>format</code> <strong class=\"purple\">must</strong> represent unsigned normalized values (i.e. the format must be a <code>UNORM</code> format)"
}
],
"(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>"
},
{
"vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-format-04061",
"text": " If an external format conversion is not being created, <code>format</code> <strong class=\"purple\">must</strong> represent unsigned normalized values (i.e. the format must be a <code>UNORM</code> format)"
}
],
"(VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-format-01650",
"text": " The <a href=\"#potential-format-features\">potential format features</a> of the sampler {YCbCr} conversion <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 <a href=\"#potential-format-features\">potential format features</a> of the sampler {YCbCr} conversion do 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 <a href=\"#potential-format-features\">potential format features</a> of the sampler {YCbCr} conversion do 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-components-02581",
"text": " If the format has a <code>_422</code> or <code>_420</code> suffix, then <code>components.g</code> <strong class=\"purple\">must</strong> be the <a href=\"#resources-image-views-identity-mappings\">identity swizzle</a>"
},
{
"vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-components-02582",
"text": " If the format has a <code>_422</code> or <code>_420</code> suffix, then <code>components.a</code> <strong class=\"purple\">must</strong> be the <a href=\"#resources-image-views-identity-mappings\">identity swizzle</a>, <code>VK_COMPONENT_SWIZZLE_ONE</code>, or <code>VK_COMPONENT_SWIZZLE_ZERO</code>"
},
{
"vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-components-02583",
"text": " If the format has a <code>_422</code> or <code>_420</code> suffix, then <code>components.r</code> <strong class=\"purple\">must</strong> be the <a href=\"#resources-image-views-identity-mappings\">identity swizzle</a> or <code>VK_COMPONENT_SWIZZLE_B</code>"
},
{
"vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-components-02584",
"text": " If the format has a <code>_422</code> or <code>_420</code> suffix, then <code>components.b</code> <strong class=\"purple\">must</strong> be the <a href=\"#resources-image-views-identity-mappings\">identity swizzle</a> or <code>VK_COMPONENT_SWIZZLE_R</code>"
},
{
"vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-components-02585",
"text": " If the format has a <code>_422</code> or <code>_420</code> suffix, and if either <code>components.r</code> or <code>components.b</code> is the <a href=\"#resources-image-views-identity-mappings\">identity swizzle</a>, both values <strong class=\"purple\">must</strong> be the identity swizzle"
},
{
"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 <a href=\"#textures-conversion-to-rgba\">conversion to RGBA</a>"
},
{
"vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-ycbcrRange-02748",
"text": " If <code>ycbcrRange</code> is <code>VK_SAMPLER_YCBCR_RANGE_ITU_NARROW</code> then the R, G and B channels obtained by applying the <code>component</code> swizzle to <code>format</code> <strong class=\"purple\">must</strong> each have a bit-depth greater than or equal to 8"
},
{
"vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-forceExplicitReconstruction-01656",
"text": " If the <a href=\"#potential-format-features\">potential format features</a> of the sampler {YCbCr} conversion do 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 <code>VK_FALSE</code>"
},
{
"vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-chromaFilter-01657",
"text": " If the <a href=\"#potential-format-features\">potential format features</a> of the sampler {YCbCr} conversion do not support <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT</code>, <code>chromaFilter</code> <strong class=\"purple\">must</strong> not be <code>VK_FILTER_LINEAR</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-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"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 <a href=\"#VkComponentMapping\">VkComponentMapping</a> 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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkSamplerYcbcrConversion\">VkSamplerYcbcrConversion</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> 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>"
}
]
},
"VkSamplerCustomBorderColorCreateInfoEXT": {
"(VK_EXT_custom_border_color)": [
{
"vuid": "VUID-VkSamplerCustomBorderColorCreateInfoEXT-format-04013",
"text": " If provided <code>format</code> is not <code>VK_FORMAT_UNDEFINED</code> then the <a href=\"#VkSamplerCreateInfo\">VkSamplerCreateInfo</a>::<code>borderColor</code> type <strong class=\"purple\">must</strong> match the sampled type of the provided <code>format</code>, as shown in the <em>SPIR-V Sampled Type</em> column of the <a href=\"#formats-numericformat\">Interpretation of Numeric Format</a> table"
},
{
"vuid": "VUID-VkSamplerCustomBorderColorCreateInfoEXT-format-04014",
"text": " If the <a href=\"#features-customBorderColorWithoutFormat\">customBorderColorWithoutFormat</a> feature is not enabled then <code>format</code> <strong class=\"purple\">must</strong> not be <code>VK_FORMAT_UNDEFINED</code>"
},
{
"vuid": "VUID-VkSamplerCustomBorderColorCreateInfoEXT-format-04015",
"text": " If the sampler is used to sample an image view of <code>VK_FORMAT_B4G4R4A4_UNORM_PACK16</code>, <code>VK_FORMAT_B5G6R5_UNORM_PACK16</code>, or <code>VK_FORMAT_B5G5R5A1_UNORM_PACK16</code> format then <code>format</code> <strong class=\"purple\">must</strong> not be <code>VK_FORMAT_UNDEFINED</code>"
},
{
"vuid": "VUID-VkSamplerCustomBorderColorCreateInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT</code>"
},
{
"vuid": "VUID-VkSamplerCustomBorderColorCreateInfoEXT-format-parameter",
"text": " <code>format</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFormat\">VkFormat</a> value"
}
]
},
"vkCreateDescriptorSetLayout": {
"core": [
{
"vuid": "VUID-vkCreateDescriptorSetLayout-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkCreateDescriptorSetLayout-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkDescriptorSetLayoutCreateInfo\">VkDescriptorSetLayoutCreateInfo</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateDescriptorSetLayout-pSetLayout-parameter",
"text": " <code>pSetLayout</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkDescriptorSetLayout\">VkDescriptorSetLayout</a> 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=\"#VkDescriptorSetLayoutBindingFlagsCreateInfo\">VkDescriptorSetLayoutBindingFlagsCreateInfo</a>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutCreateInfo-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"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 <a href=\"#VkDescriptorSetLayoutBinding\">VkDescriptorSetLayoutBinding</a> 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_KHR_push_descriptor)+(VK_EXT_inline_uniform_block)": [
{
"vuid": "VUID-VkDescriptorSetLayoutCreateInfo-flags-02208",
"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_INLINE_UNIFORM_BLOCK_EXT</code>"
}
],
"(VK_VERSION_1_2,VK_EXT_descriptor_indexing)": [
{
"vuid": "VUID-VkDescriptorSetLayoutCreateInfo-flags-03000",
"text": " If any binding has the <code>VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT</code> bit set, <code>flags</code> <strong class=\"purple\">must</strong> include <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT</code>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutCreateInfo-descriptorType-03001",
"text": " If any binding has the <code>VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT</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"
}
],
"(VK_EXT_inline_uniform_block)": [
{
"vuid": "VUID-VkDescriptorSetLayoutBinding-descriptorType-02209",
"text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT</code> then <code>descriptorCount</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutBinding-descriptorType-02210",
"text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT</code> then <code>descriptorCount</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceInlineUniformBlockPropertiesEXT</code>::<code>maxInlineUniformBlockSize</code>"
}
],
"(VK_EXT_custom_border_color)": [
{
"vuid": "VUID-VkDescriptorSetLayoutBinding-pImmutableSamplers-04009",
"text": " The sampler objects indicated by <code>pImmutableSamplers</code> <strong class=\"purple\">must</strong> not have a <code>borderColor</code> with one of the values <code>VK_BORDER_COLOR_FLOAT_CUSTOM_EXT</code> or <code>VK_BORDER_COLOR_INT_CUSTOM_EXT</code>"
}
]
},
"VkDescriptorSetLayoutBindingFlagsCreateInfo": {
"(VK_VERSION_1_2,VK_EXT_descriptor_indexing)": [
{
"vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-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-VkDescriptorSetLayoutBindingFlagsCreateInfo-pBindingFlags-03004",
"text": " If an element of <code>pBindingFlags</code> includes <code>VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT</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-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingUniformBufferUpdateAfterBind-03005",
"text": " If <a href=\"#VkPhysicalDeviceDescriptorIndexingFeatures\">VkPhysicalDeviceDescriptorIndexingFeatures</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</code>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingSampledImageUpdateAfterBind-03006",
"text": " If <a href=\"#VkPhysicalDeviceDescriptorIndexingFeatures\">VkPhysicalDeviceDescriptorIndexingFeatures</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</code>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingStorageImageUpdateAfterBind-03007",
"text": " If <a href=\"#VkPhysicalDeviceDescriptorIndexingFeatures\">VkPhysicalDeviceDescriptorIndexingFeatures</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</code>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingStorageBufferUpdateAfterBind-03008",
"text": " If <a href=\"#VkPhysicalDeviceDescriptorIndexingFeatures\">VkPhysicalDeviceDescriptorIndexingFeatures</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</code>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingUniformTexelBufferUpdateAfterBind-03009",
"text": " If <a href=\"#VkPhysicalDeviceDescriptorIndexingFeatures\">VkPhysicalDeviceDescriptorIndexingFeatures</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</code>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingStorageTexelBufferUpdateAfterBind-03010",
"text": " If <a href=\"#VkPhysicalDeviceDescriptorIndexingFeatures\">VkPhysicalDeviceDescriptorIndexingFeatures</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</code>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-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</code>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingUpdateUnusedWhilePending-03012",
"text": " If <a href=\"#VkPhysicalDeviceDescriptorIndexingFeatures\">VkPhysicalDeviceDescriptorIndexingFeatures</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</code>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingPartiallyBound-03013",
"text": " If <a href=\"#VkPhysicalDeviceDescriptorIndexingFeatures\">VkPhysicalDeviceDescriptorIndexingFeatures</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</code>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingVariableDescriptorCount-03014",
"text": " If <a href=\"#VkPhysicalDeviceDescriptorIndexingFeatures\">VkPhysicalDeviceDescriptorIndexingFeatures</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</code>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-pBindingFlags-03015",
"text": " If an element of <code>pBindingFlags</code> includes <code>VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT</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-VkDescriptorSetLayoutBindingFlagsCreateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO</code>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-pBindingFlags-parameter",
"text": " If <code>bindingCount</code> is not <code>0</code>, and <code>pBindingFlags</code> is not <code>NULL</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=\"#VkDescriptorBindingFlagBits\">VkDescriptorBindingFlagBits</a> values"
}
],
"(VK_VERSION_1_2,VK_EXT_descriptor_indexing)+(VK_KHR_push_descriptor)": [
{
"vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-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</code>, <code>VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT</code>, or <code>VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT</code>"
}
],
"(VK_VERSION_1_2,VK_EXT_descriptor_indexing)+(VK_EXT_inline_uniform_block)": [
{
"vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingInlineUniformBlockUpdateAfterBind-02211",
"text": " If <a href=\"#VkPhysicalDeviceInlineUniformBlockFeaturesEXT\">VkPhysicalDeviceInlineUniformBlockFeaturesEXT</a>::<code>descriptorBindingInlineUniformBlockUpdateAfterBind</code> is not enabled, all bindings with descriptor type <code>VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT</code> <strong class=\"purple\">must</strong> not use <code>VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT</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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetDescriptorSetLayoutSupport-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkDescriptorSetLayoutCreateInfo\">VkDescriptorSetLayoutCreateInfo</a> structure"
},
{
"vuid": "VUID-vkGetDescriptorSetLayoutSupport-pSupport-parameter",
"text": " <code>pSupport</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkDescriptorSetLayoutSupport\">VkDescriptorSetLayoutSupport</a> 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=\"#VkDescriptorSetVariableDescriptorCountLayoutSupport\">VkDescriptorSetVariableDescriptorCountLayoutSupport</a>"
},
{
"vuid": "VUID-VkDescriptorSetLayoutSupport-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
}
]
},
"VkDescriptorSetVariableDescriptorCountLayoutSupport": {
"(VK_VERSION_1_2,VK_EXT_descriptor_indexing)": [
{
"vuid": "VUID-VkDescriptorSetVariableDescriptorCountLayoutSupport-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT</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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkDescriptorSetLayout\">VkDescriptorSetLayout</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkCreatePipelineLayout-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkPipelineLayoutCreateInfo\">VkPipelineLayoutCreateInfo</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreatePipelineLayout-pPipelineLayout-parameter",
"text": " <code>pPipelineLayout</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkPipelineLayout\">VkPipelineLayout</a> 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 <a href=\"#VkDescriptorSetLayout\">VkDescriptorSetLayout</a> 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 <a href=\"#VkPushConstantRange\">VkPushConstantRange</a> structures"
}
],
"!(VK_VERSION_1_2,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_VERSION_1_2,VK_EXT_descriptor_indexing)+(VK_EXT_inline_uniform_block)": [
{
"vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-02212",
"text": " The total number of bindings with a <code>descriptorType</code> of <code>VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT</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>VkPhysicalDeviceInlineUniformBlockPropertiesEXT</code>::<code>maxPerStageDescriptorInlineUniformBlocks</code>"
},
{
"vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-02213",
"text": " The total number of bindings with a <code>descriptorType</code> of <code>VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT</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>VkPhysicalDeviceInlineUniformBlockPropertiesEXT</code>::<code>maxDescriptorSetInlineUniformBlocks</code>"
}
],
"(VK_VERSION_1_2,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</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</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</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</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</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</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>VkPhysicalDeviceDescriptorIndexingProperties</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>VkPhysicalDeviceDescriptorIndexingProperties</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>VkPhysicalDeviceDescriptorIndexingProperties</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>VkPhysicalDeviceDescriptorIndexingProperties</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>VkPhysicalDeviceDescriptorIndexingProperties</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>VkPhysicalDeviceDescriptorIndexingProperties</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</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</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</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</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</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</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</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</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>VkPhysicalDeviceDescriptorIndexingProperties</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>VkPhysicalDeviceDescriptorIndexingProperties</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>VkPhysicalDeviceDescriptorIndexingProperties</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>VkPhysicalDeviceDescriptorIndexingProperties</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>VkPhysicalDeviceDescriptorIndexingProperties</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>VkPhysicalDeviceDescriptorIndexingProperties</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>VkPhysicalDeviceDescriptorIndexingProperties</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>VkPhysicalDeviceDescriptorIndexingProperties</code>::<code>maxDescriptorSetUpdateAfterBindInputAttachments</code>"
}
],
"(VK_VERSION_1_2,VK_EXT_descriptor_indexing)+(VK_EXT_inline_uniform_block)": [
{
"vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-02214",
"text": " The total number of bindings in descriptor set layouts created without the <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT</code> bit set with a <code>descriptorType</code> of <code>VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT</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>VkPhysicalDeviceInlineUniformBlockPropertiesEXT</code>::<code>maxPerStageDescriptorInlineUniformBlocks</code>"
},
{
"vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-02215",
"text": " The total number of bindings with a <code>descriptorType</code> of <code>VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT</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>VkPhysicalDeviceInlineUniformBlockPropertiesEXT</code>::<code>maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks</code>"
},
{
"vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-02216",
"text": " The total number of bindings in descriptor set layouts created without the <code>VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT</code> bit set with a <code>descriptorType</code> of <code>VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT</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>VkPhysicalDeviceInlineUniformBlockPropertiesEXT</code>::<code>maxDescriptorSetInlineUniformBlocks</code>"
},
{
"vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-02217",
"text": " The total number of bindings with a <code>descriptorType</code> of <code>VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT</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>VkPhysicalDeviceInlineUniformBlockPropertiesEXT</code>::<code>maxDescriptorSetUpdateAfterBindInlineUniformBlocks</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"
}
],
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)": [
{
"vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-02381",
"text": " The total number of bindings with a <code>descriptorType</code> of <code>VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR</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>VkPhysicalDeviceRayTracingPropertiesKHR</code>::<code>maxDescriptorSetAccelerationStructures</code>"
}
]
},
"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-pipelineLayout-02004",
"text": " <code>pipelineLayout</code> <strong class=\"purple\">must</strong> not have been passed to any <code>vkCmd*</code> command for any command buffers that are still in the <a href=\"#commandbuffers-lifecycle\">recording state</a> when <code>vkDestroyPipelineLayout</code> is called"
},
{
"vuid": "VUID-vkDestroyPipelineLayout-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkPipelineLayout\">VkPipelineLayout</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkCreateDescriptorPool-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkDescriptorPoolCreateInfo\">VkDescriptorPoolCreateInfo</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateDescriptorPool-pDescriptorPool-parameter",
"text": " <code>pDescriptorPool</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkDescriptorPool\">VkDescriptorPool</a> 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> or a pointer to a valid instance of <a href=\"#VkDescriptorPoolInlineUniformBlockCreateInfoEXT\">VkDescriptorPoolInlineUniformBlockCreateInfoEXT</a>"
},
{
"vuid": "VUID-VkDescriptorPoolCreateInfo-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"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 <a href=\"#VkDescriptorPoolSize\">VkDescriptorPoolSize</a> structures"
},
{
"vuid": "VUID-VkDescriptorPoolCreateInfo-poolSizeCount-arraylength",
"text": " <code>poolSizeCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"VkDescriptorPoolInlineUniformBlockCreateInfoEXT": {
"(VK_EXT_inline_uniform_block)": [
{
"vuid": "VUID-VkDescriptorPoolInlineUniformBlockCreateInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT</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"
}
],
"(VK_EXT_inline_uniform_block)": [
{
"vuid": "VUID-VkDescriptorPoolSize-type-02218",
"text": " If <code>type</code> is <code>VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT</code> then <code>descriptorCount</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
}
]
},
"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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkDescriptorPool\">VkDescriptorPool</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkAllocateDescriptorSets-pAllocateInfo-parameter",
"text": " <code>pAllocateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkDescriptorSetAllocateInfo\">VkDescriptorSetAllocateInfo</a> 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-&gt;descriptorSetCount</code> <a href=\"#VkDescriptorSet\">VkDescriptorSet</a> handles"
},
{
"vuid": "VUID-vkAllocateDescriptorSets-pAllocateInfo::descriptorSetCount-arraylength",
"text": " The value referenced by <code>pAllocateInfo-&gt;descriptorSetCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"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_VERSION_1_2,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</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</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=\"#VkDescriptorSetVariableDescriptorCountAllocateInfo\">VkDescriptorSetVariableDescriptorCountAllocateInfo</a>"
},
{
"vuid": "VUID-VkDescriptorSetAllocateInfo-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkDescriptorSetAllocateInfo-descriptorPool-parameter",
"text": " <code>descriptorPool</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDescriptorPool\">VkDescriptorPool</a> 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 <a href=\"#VkDescriptorSetLayout\">VkDescriptorSetLayout</a> 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 <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"VkDescriptorSetVariableDescriptorCountAllocateInfo": {
"(VK_VERSION_1_2,VK_EXT_descriptor_indexing)": [
{
"vuid": "VUID-VkDescriptorSetVariableDescriptorCountAllocateInfo-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-VkDescriptorSetVariableDescriptorCountAllocateInfo-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-VkDescriptorSetVariableDescriptorCountAllocateInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO</code>"
},
{
"vuid": "VUID-VkDescriptorSetVariableDescriptorCountAllocateInfo-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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkFreeDescriptorSets-descriptorPool-parameter",
"text": " <code>descriptorPool</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDescriptorPool\">VkDescriptorPool</a> 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkResetDescriptorPool-descriptorPool-parameter",
"text": " <code>descriptorPool</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDescriptorPool\">VkDescriptorPool</a> 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_VERSION_1_2,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 <a href=\"#commandbuffers-lifecycle\">pending state</a>"
}
],
"(VK_VERSION_1_2,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</code> or <code>VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT</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 <a href=\"#commandbuffers-lifecycle\">pending state</a>"
}
],
"core": [
{
"vuid": "VUID-vkUpdateDescriptorSets-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkWriteDescriptorSet\">VkWriteDescriptorSet</a> 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 <a href=\"#VkCopyDescriptorSet\">VkCopyDescriptorSet</a> 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 <a href=\"#descriptorsets-updates-consecutive\">consecutive binding updates</a>"
},
{
"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-02994",
"text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER</code> or <code>VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER</code>, each element of <code>pTexelBufferView</code> <strong class=\"purple\">must</strong> be either a valid <code>VkBufferView</code> handle or <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-VkWriteDescriptorSet-descriptorType-02995",
"text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER</code> or <code>VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER</code> and the <a href=\"#features-nullDescriptor\">nullDescriptor</a> feature is not enabled, each element of <code>pTexelBufferView</code> <strong class=\"purple\">must</strong> not be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"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-02996",
"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> member of each element of <code>pImageInfo</code> <strong class=\"purple\">must</strong> be either a valid <code>VkImageView</code> handle or <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-VkWriteDescriptorSet-descriptorType-02997",
"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> and the <a href=\"#features-nullDescriptor\">nullDescriptor</a> feature is not enabled, the <code>imageView</code> member of each element of <code>pImageInfo</code> <strong class=\"purple\">must</strong> not be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"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 a member of the list given in <a href=\"#descriptorsets-sampledimage\">Sampled Image</a> or <a href=\"#descriptorsets-combinedimagesampler\">Combined Image Sampler</a>, corresponding to its type"
},
{
"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-descriptorType-02752",
"text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_SAMPLER</code>, then <code>dstSet</code> <strong class=\"purple\">must</strong> not have been allocated with a layout that included immutable samplers for <code>dstBinding</code>"
},
{
"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": " 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=\"#VkWriteDescriptorSetAccelerationStructureKHR\">VkWriteDescriptorSetAccelerationStructureKHR</a> or <a href=\"#VkWriteDescriptorSetInlineUniformBlockEXT\">VkWriteDescriptorSetInlineUniformBlockEXT</a>"
},
{
"vuid": "VUID-VkWriteDescriptorSet-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"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 of non-ignored parameters <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(VK_EXT_inline_uniform_block)": [
{
"vuid": "VUID-VkWriteDescriptorSet-descriptorType-02219",
"text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT</code>, <code>dstArrayElement</code> <strong class=\"purple\">must</strong> be an integer multiple of <code>4</code>"
},
{
"vuid": "VUID-VkWriteDescriptorSet-descriptorType-02220",
"text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT</code>, <code>descriptorCount</code> <strong class=\"purple\">must</strong> be an integer multiple of <code>4</code>"
},
{
"vuid": "VUID-VkWriteDescriptorSet-descriptorType-02221",
"text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT</code>, the <code>pNext</code> chain <strong class=\"purple\">must</strong> include a <a href=\"#VkWriteDescriptorSetInlineUniformBlockEXT\">VkWriteDescriptorSetInlineUniformBlockEXT</a> structure whose <code>dataSize</code> member equals <code>descriptorCount</code>"
}
],
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)": [
{
"vuid": "VUID-VkWriteDescriptorSet-descriptorType-02382",
"text": " If <code>descriptorType</code> is <code>VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR</code>, the <code>pNext</code> chain <strong class=\"purple\">must</strong> include a <a href=\"#VkWriteDescriptorSetAccelerationStructureKHR\">VkWriteDescriptorSetAccelerationStructureKHR</a> structure whose <code>accelerationStructureCount</code> member equals <code>descriptorCount</code>"
}
],
"(VK_VULKAN_1_1,VK_KHR_sampler_ycbcr_conversion)": [
{
"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-02738",
"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>, and the corresponding immutable sampler <strong class=\"purple\">must</strong> have been created with an <em>identically defined</em> <code>VkSamplerYcbcrConversionInfo</code> object"
},
{
"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 an immutable sampler that enables <a href=\"#samplers-YCbCr-conversion\">sampler {YCbCr} conversion</a> <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"
}
],
"(VK_VERSION_1_2,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=\"#VkDescriptorBindingFlagBits\">VkDescriptorBindingFlagBits</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-02998",
"text": " If the <a href=\"#features-nullDescriptor\">nullDescriptor</a> feature is not enabled, <code>buffer</code> <strong class=\"purple\">must</strong> not be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-VkDescriptorBufferInfo-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 <a href=\"#VkBuffer\">VkBuffer</a> handle"
}
],
"(VK_EXT_robustness2)": [
{
"vuid": "VUID-VkDescriptorBufferInfo-buffer-02999",
"text": " If <code>buffer</code> is <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>offset</code> <strong class=\"purple\">must</strong> be zero and <code>range</code> <strong class=\"purple\">must</strong> be <code>VK_WHOLE_SIZE</code>"
}
]
},
"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 as defined by the <a href=\"#resources-image-layouts-matching-rule\">image layout matching rules</a>"
},
{
"vuid": "VUID-VkDescriptorImageInfo-commonparent",
"text": " Both of <code>imageView</code>, and <code>sampler</code> that are valid handles of non-ignored parameters <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(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 <a href=\"#formats-requiring-sampler-ycbcr-conversion\">multi-planar format</a>, 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>"
}
]
},
"VkWriteDescriptorSetInlineUniformBlockEXT": {
"(VK_EXT_inline_uniform_block)": [
{
"vuid": "VUID-VkWriteDescriptorSetInlineUniformBlockEXT-dataSize-02222",
"text": " <code>dataSize</code> <strong class=\"purple\">must</strong> be an integer multiple of <code>4</code>"
},
{
"vuid": "VUID-VkWriteDescriptorSetInlineUniformBlockEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT</code>"
},
{
"vuid": "VUID-VkWriteDescriptorSetInlineUniformBlockEXT-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-VkWriteDescriptorSetInlineUniformBlockEXT-dataSize-arraylength",
"text": " <code>dataSize</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"VkWriteDescriptorSetAccelerationStructureKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)": [
{
"vuid": "VUID-VkWriteDescriptorSetAccelerationStructureKHR-accelerationStructureCount-02236",
"text": " <code>accelerationStructureCount</code> <strong class=\"purple\">must</strong> be equal to <code>descriptorCount</code> in the extended structure"
},
{
"vuid": "VUID-VkWriteDescriptorSetAccelerationStructureKHR-pAccelerationStructures-02764",
"text": " Each acceleration structure in <code>pAccelerationStructures</code> <strong class=\"purple\">must</strong> have been created with <code>VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR</code>"
},
{
"vuid": "VUID-VkWriteDescriptorSetAccelerationStructureKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR</code>"
},
{
"vuid": "VUID-VkWriteDescriptorSetAccelerationStructureKHR-pAccelerationStructures-parameter",
"text": " <code>pAccelerationStructures</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>accelerationStructureCount</code> valid <a href=\"#VkAccelerationStructureKHR\">VkAccelerationStructureKHR</a> handles"
},
{
"vuid": "VUID-VkWriteDescriptorSetAccelerationStructureKHR-accelerationStructureCount-arraylength",
"text": " <code>accelerationStructureCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</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 <a href=\"#descriptorsets-updates-consecutive\">consecutive binding updates</a>"
},
{
"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 <a href=\"#descriptorsets-updates-consecutive\">consecutive binding updates</a>"
},
{
"vuid": "VUID-VkCopyDescriptorSet-dstBinding-02632",
"text": " The type of <code>dstBinding</code> within <code>dstSet</code> <strong class=\"purple\">must</strong> be equal to the type of <code>srcBinding</code> within <code>srcSet</code>"
},
{
"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 <a href=\"#descriptorsets-updates-consecutive\">consecutive binding updates</a>"
},
{
"vuid": "VUID-VkCopyDescriptorSet-dstBinding-02753",
"text": " If the descriptor type of the descriptor set binding specified by <code>dstBinding</code> is <code>VK_DESCRIPTOR_TYPE_SAMPLER</code>, then <code>dstSet</code> <strong class=\"purple\">must</strong> not have been allocated with a layout that included immutable samplers for <code>dstBinding</code>"
},
{
"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 <a href=\"#VkDescriptorSet\">VkDescriptorSet</a> handle"
},
{
"vuid": "VUID-VkCopyDescriptorSet-dstSet-parameter",
"text": " <code>dstSet</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDescriptorSet\">VkDescriptorSet</a> 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 <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(VK_EXT_inline_uniform_block)": [
{
"vuid": "VUID-VkCopyDescriptorSet-srcBinding-02223",
"text": " If the descriptor type of the descriptor set binding specified by <code>srcBinding</code> is <code>VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT</code>, <code>srcArrayElement</code> <strong class=\"purple\">must</strong> be an integer multiple of <code>4</code>"
},
{
"vuid": "VUID-VkCopyDescriptorSet-dstBinding-02224",
"text": " If the descriptor type of the descriptor set binding specified by <code>dstBinding</code> is <code>VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT</code>, <code>dstArrayElement</code> <strong class=\"purple\">must</strong> be an integer multiple of <code>4</code>"
},
{
"vuid": "VUID-VkCopyDescriptorSet-srcBinding-02225",
"text": " If the descriptor type of the descriptor set binding specified by either <code>srcBinding</code> or <code>dstBinding</code> is <code>VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT</code>, <code>descriptorCount</code> <strong class=\"purple\">must</strong> be an integer multiple of <code>4</code>"
}
],
"(VK_VERSION_1_2,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</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</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</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</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</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</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</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</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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkCreateDescriptorUpdateTemplate-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkDescriptorUpdateTemplateCreateInfo\">VkDescriptorUpdateTemplateCreateInfo</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateDescriptorUpdateTemplate-pDescriptorUpdateTemplate-parameter",
"text": " <code>pDescriptorUpdateTemplate</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkDescriptorUpdateTemplate\">VkDescriptorUpdateTemplate</a> 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 <a href=\"#VkDescriptorUpdateTemplateEntry\">VkDescriptorUpdateTemplateEntry</a> 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-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 of non-ignored parameters <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(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 <a href=\"#descriptorsets-updates-consecutive\">consecutive binding updates</a>"
},
{
"vuid": "VUID-VkDescriptorUpdateTemplateEntry-descriptorType-parameter",
"text": " <code>descriptorType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDescriptorType\">VkDescriptorType</a> value"
}
],
"(VK_VERSION_1_1,VK_KHR_descriptor_update_template)+(VK_EXT_inline_uniform_block)": [
{
"vuid": "VUID-VkDescriptorUpdateTemplateEntry-descriptor-02226",
"text": " If <code>descriptor</code> type is <code>VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT</code>, <code>dstArrayElement</code> <strong class=\"purple\">must</strong> be an integer multiple of <code>4</code>"
},
{
"vuid": "VUID-VkDescriptorUpdateTemplateEntry-descriptor-02227",
"text": " If <code>descriptor</code> type is <code>VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT</code>, <code>descriptorCount</code> <strong class=\"purple\">must</strong> be an integer multiple of <code>4</code>"
}
]
},
"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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkDescriptorUpdateTemplate\">VkDescriptorUpdateTemplate</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> 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 containing 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkUpdateDescriptorSetWithTemplate-descriptorSet-parameter",
"text": " <code>descriptorSet</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDescriptorSet\">VkDescriptorSet</a> handle"
},
{
"vuid": "VUID-vkUpdateDescriptorSetWithTemplate-descriptorUpdateTemplate-parameter",
"text": " <code>descriptorUpdateTemplate</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDescriptorUpdateTemplate\">VkDescriptorUpdateTemplate</a> 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 <a href=\"#VkPipelineLayoutCreateInfo\">VkPipelineLayoutCreateInfo</a>::<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-pDescriptorSets-01979",
"text": " For each dynamic uniform or storage buffer binding in <code>pDescriptorSets</code>, the sum of the effective offset, as defined above, and the range of the binding <strong class=\"purple\">must</strong> be less than or equal to the size of the buffer"
},
{
"vuid": "VUID-vkCmdBindDescriptorSets-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> 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 <a href=\"#VkPipelineLayout\">VkPipelineLayout</a> 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 <a href=\"#VkDescriptorSet\">VkDescriptorSet</a> 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 <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"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 <a href=\"#VkPipelineLayoutCreateInfo\">VkPipelineLayoutCreateInfo</a>::<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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> 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 <a href=\"#VkPipelineLayout\">VkPipelineLayout</a> 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 <a href=\"#VkWriteDescriptorSet\">VkWriteDescriptorSet</a> structures"
},
{
"vuid": "VUID-vkCmdPushDescriptorSetKHR-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"vkCmdPushDescriptorSetWithTemplateKHR": {
"(VK_KHR_push_descriptor)+(VK_VERSION_1_1,VK_KHR_descriptor_update_template)": [
{
"vuid": "VUID-vkCmdPushDescriptorSetWithTemplateKHR-commandBuffer-00366",
"text": " The <code>pipelineBindPoint</code> 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 containing 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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdPushDescriptorSetWithTemplateKHR-descriptorUpdateTemplate-parameter",
"text": " <code>descriptorUpdateTemplate</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDescriptorUpdateTemplate\">VkDescriptorUpdateTemplate</a> handle"
},
{
"vuid": "VUID-vkCmdPushDescriptorSetWithTemplateKHR-layout-parameter",
"text": " <code>layout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipelineLayout\">VkPipelineLayout</a> handle"
},
{
"vuid": "VUID-vkCmdPushDescriptorSetWithTemplateKHR-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdPushConstants-layout-parameter",
"text": " <code>layout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipelineLayout\">VkPipelineLayout</a> 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 <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"vkGetBufferDeviceAddress": {
"(VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address)": [
{
"vuid": "VUID-vkGetBufferDeviceAddress-bufferDeviceAddress-03324",
"text": " The <a href=\"#features-bufferDeviceAddress\">bufferDeviceAddress</a> or <a href=\"#features-bufferDeviceAddressEXT\"><code>VkPhysicalDeviceBufferDeviceAddressFeaturesEXT</code>::<code>bufferDeviceAddress</code></a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkGetBufferDeviceAddress-device-03325",
"text": " If <code>device</code> was created with multiple physical devices, then the <a href=\"#features-bufferDeviceAddressMultiDevice\">bufferDeviceAddressMultiDevice</a> or <a href=\"#features-bufferDeviceAddressMultiDeviceEXT\"><code>VkPhysicalDeviceBufferDeviceAddressFeaturesEXT</code>::<code>bufferDeviceAddressMultiDevice</code></a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkGetBufferDeviceAddress-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetBufferDeviceAddress-pInfo-parameter",
"text": " <code>pInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkBufferDeviceAddressInfo\">VkBufferDeviceAddressInfo</a> structure"
}
]
},
"VkBufferDeviceAddressInfo": {
"(VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address)": [
{
"vuid": "VUID-VkBufferDeviceAddressInfo-buffer-02600",
"text": " If <code>buffer</code> is non-sparse and was not created with the <code>VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT</code> flag, then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
},
{
"vuid": "VUID-VkBufferDeviceAddressInfo-buffer-02601",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> have been created with <code>VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT</code>"
},
{
"vuid": "VUID-VkBufferDeviceAddressInfo-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO</code>"
},
{
"vuid": "VUID-VkBufferDeviceAddressInfo-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkBufferDeviceAddressInfo-buffer-parameter",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
}
]
},
"vkGetBufferOpaqueCaptureAddress": {
"(VK_VERSION_1_2,VK_KHR_buffer_device_address)": [
{
"vuid": "VUID-vkGetBufferOpaqueCaptureAddress-None-03326",
"text": " The <a href=\"#features-bufferDeviceAddress\">bufferDeviceAddress</a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkGetBufferOpaqueCaptureAddress-device-03327",
"text": " If <code>device</code> was created with multiple physical devices, then the <a href=\"#features-bufferDeviceAddressMultiDevice\">bufferDeviceAddressMultiDevice</a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkGetBufferOpaqueCaptureAddress-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetBufferOpaqueCaptureAddress-pInfo-parameter",
"text": " <code>pInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkBufferDeviceAddressInfo\">VkBufferDeviceAddressInfo</a> structure"
}
]
},
"vkCreateQueryPool": {
"core": [
{
"vuid": "VUID-vkCreateQueryPool-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkCreateQueryPool-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkQueryPoolCreateInfo\">VkQueryPoolCreateInfo</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateQueryPool-pQueryPool-parameter",
"text": " <code>pQueryPool</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkQueryPool\">VkQueryPool</a> handle"
}
]
},
"VkQueryPoolCreateInfo": {
"core": [
{
"vuid": "VUID-VkQueryPoolCreateInfo-queryType-00791",
"text": " If the <a href=\"#features-pipelineStatisticsQuery\">pipeline statistics queries</a> 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-queryCount-02763",
"text": " <code>queryCount</code> <strong class=\"purple\">must</strong> be greater than 0"
},
{
"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": " 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=\"#VkQueryPoolPerformanceCreateInfoKHR\">VkQueryPoolPerformanceCreateInfoKHR</a> or <a href=\"#VkQueryPoolPerformanceQueryCreateInfoINTEL\">VkQueryPoolPerformanceQueryCreateInfoINTEL</a>"
},
{
"vuid": "VUID-VkQueryPoolCreateInfo-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"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"
}
],
"(VK_KHR_performance_query)": [
{
"vuid": "VUID-VkQueryPoolCreateInfo-queryType-03222",
"text": " If <code>queryType</code> is <code>VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR</code>, the <code>pNext</code> chain <strong class=\"purple\">must</strong> include a structure of type <a href=\"#VkQueryPoolPerformanceCreateInfoKHR\">VkQueryPoolPerformanceCreateInfoKHR</a>"
}
]
},
"VkQueryPoolPerformanceCreateInfoKHR": {
"(VK_KHR_performance_query)": [
{
"vuid": "VUID-VkQueryPoolPerformanceCreateInfoKHR-queueFamilyIndex-03236",
"text": " <code>queueFamilyIndex</code> <strong class=\"purple\">must</strong> be a valid queue family index of the device"
},
{
"vuid": "VUID-VkQueryPoolPerformanceCreateInfoKHR-performanceCounterQueryPools-03237",
"text": " The <a href=\"#features-features-performanceCounterQueryPools\"><code>performanceCounterQueryPools</code></a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-VkQueryPoolPerformanceCreateInfoKHR-pCounterIndices-03321",
"text": " Each element of <code>pCounterIndices</code> <strong class=\"purple\">must</strong> be in the range of counters reported by <code>vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR</code> for the queue family specified in <code>queueFamilyIndex</code>"
},
{
"vuid": "VUID-VkQueryPoolPerformanceCreateInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR</code>"
},
{
"vuid": "VUID-VkQueryPoolPerformanceCreateInfoKHR-pCounterIndices-parameter",
"text": " <code>pCounterIndices</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>counterIndexCount</code> <code>uint32_t</code> values"
},
{
"vuid": "VUID-VkQueryPoolPerformanceCreateInfoKHR-counterIndexCount-arraylength",
"text": " <code>counterIndexCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR": {
"(VK_KHR_performance_query)": [
{
"vuid": "VUID-vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR-pPerformanceQueryCreateInfo-parameter",
"text": " <code>pPerformanceQueryCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkQueryPoolPerformanceCreateInfoKHR\">VkQueryPoolPerformanceCreateInfoKHR</a> structure"
},
{
"vuid": "VUID-vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR-pNumPasses-parameter",
"text": " <code>pNumPasses</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> 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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkQueryPool\">VkQueryPool</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> 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-None-02841",
"text": " All queries used by the command <strong class=\"purple\">must</strong> not be active"
},
{
"vuid": "VUID-vkCmdResetQueryPool-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdResetQueryPool-queryPool-parameter",
"text": " <code>queryPool</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkQueryPool\">VkQueryPool</a> handle"
},
{
"vuid": "VUID-vkCmdResetQueryPool-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(VK_KHR_performance_query)": [
{
"vuid": "VUID-vkCmdResetQueryPool-firstQuery-02862",
"text": " If <code>queryPool</code> was created with <code>VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR</code>, this command <strong class=\"purple\">must</strong> not be recorded in a command buffer that, either directly or through secondary command buffers, also contains begin commands for a query from the set of queries <span class=\"eq\">[<code>firstQuery</code>, <code>firstQuery</code> &#43; <code>queryCount</code> - 1]</span>"
}
]
},
"vkResetQueryPool": {
"(VK_VERSION_1_2,VK_EXT_host_query_reset)": [
{
"vuid": "VUID-vkResetQueryPool-None-02665",
"text": " The <a href=\"#features-hostQueryReset\">hostQueryReset</a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkResetQueryPool-firstQuery-02666",
"text": " <code>firstQuery</code> <strong class=\"purple\">must</strong> be less than the number of queries in <code>queryPool</code>"
},
{
"vuid": "VUID-vkResetQueryPool-firstQuery-02667",
"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-vkResetQueryPool-firstQuery-02741",
"text": " Submitted commands that refer to the range specified by <code>firstQuery</code> and <code>queryCount</code> in <code>queryPool</code> <strong class=\"purple\">must</strong> have completed execution"
},
{
"vuid": "VUID-vkResetQueryPool-firstQuery-02742",
"text": " The range of queries specified by <code>firstQuery</code> and <code>queryCount</code> in <code>queryPool</code> <strong class=\"purple\">must</strong> not be in use by calls to <a href=\"#vkGetQueryPoolResults\">vkGetQueryPoolResults</a> or <code>vkResetQueryPool</code> in other threads"
},
{
"vuid": "VUID-vkResetQueryPool-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkResetQueryPool-queryPool-parameter",
"text": " <code>queryPool</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkQueryPool\">VkQueryPool</a> handle"
},
{
"vuid": "VUID-vkResetQueryPool-queryPool-parent",
"text": " <code>queryPool</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</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 <a href=\"#queries-operation-active\">active</a> 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-02804",
"text": " The <code>queryType</code> used to create <code>queryPool</code> <strong class=\"purple\">must</strong> not be <code>VK_QUERY_TYPE_TIMESTAMP</code>"
},
{
"vuid": "VUID-vkCmdBeginQuery-queryType-00800",
"text": " If the <a href=\"#features-occlusionQueryPrecise\">precise occlusion queries</a> 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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdBeginQuery-queryPool-parameter",
"text": " <code>queryPool</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkQueryPool\">VkQueryPool</a> 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 <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(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 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>"
}
],
"(VK_EXT_transform_feedback)": [
{
"vuid": "VUID-vkCmdBeginQuery-queryType-02327",
"text": " If the <code>queryType</code> used to create <code>queryPool</code> was <code>VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT</code> the <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdBeginQuery-queryType-02328",
"text": " If the <code>queryType</code> used to create <code>queryPool</code> was <code>VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT</code> then <code>VkPhysicalDeviceTransformFeedbackPropertiesEXT</code>::<code>transformFeedbackQueries</code> <strong class=\"purple\">must</strong> be supported"
}
],
"(VK_KHR_performance_query)": [
{
"vuid": "VUID-vkCmdBeginQuery-queryPool-03223",
"text": " If <code>queryPool</code> was created with a <code>queryType</code> of <code>VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR</code>, the <a href=\"#profiling-lock\">profiling lock</a> <strong class=\"purple\">must</strong> have been held before <a href=\"#vkBeginCommandBuffer\">vkBeginCommandBuffer</a> was called on <code>commandBuffer</code>"
},
{
"vuid": "VUID-vkCmdBeginQuery-queryPool-03224",
"text": " If <code>queryPool</code> was created with a <code>queryType</code> of <code>VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR</code> and one of the counters used to create <code>queryPool</code> was <code>VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR</code>, the query begin <strong class=\"purple\">must</strong> be the first recorded command in <code>commandBuffer</code>"
},
{
"vuid": "VUID-vkCmdBeginQuery-queryPool-03225",
"text": " If <code>queryPool</code> was created with a <code>queryType</code> of <code>VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR</code> and one of the counters used to create <code>queryPool</code> was <code>VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR</code>, the begin command <strong class=\"purple\">must</strong> not be recorded within a render pass instance"
},
{
"vuid": "VUID-vkCmdBeginQuery-queryPool-03226",
"text": " If <code>queryPool</code> was created with a <code>queryType</code> of <code>VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR</code> and another query pool with a <code>queryType</code> <code>VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR</code> has been used within <code>commandBuffer</code>, its parent primary command buffer or secondary command buffer recorded within the same parent primary command buffer as <code>commandBuffer</code>, the <a href=\"#features-features-performanceCounterMultipleQueryPools\"><code>performanceCounterMultipleQueryPools</code></a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkCmdBeginQuery-None-02863",
"text": " If <code>queryPool</code> was created with a <code>queryType</code> of <code>VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR</code>, this command <strong class=\"purple\">must</strong> not be recorded in a command buffer that, either directly or through secondary command buffers, also contains a <code>vkCmdResetQueryPool</code> command affecting the same query"
}
]
},
"vkCmdBeginQueryIndexedEXT": {
"core": [
{
"vuid": "VUID-vkCmdBeginQueryIndexedEXT-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 <a href=\"#queries-operation-active\">active</a> within <code>commandBuffer</code>"
},
{
"vuid": "VUID-vkCmdBeginQueryIndexedEXT-None-00807",
"text": " All queries used by the command <strong class=\"purple\">must</strong> be unavailable"
},
{
"vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryType-02804",
"text": " The <code>queryType</code> used to create <code>queryPool</code> <strong class=\"purple\">must</strong> not be <code>VK_QUERY_TYPE_TIMESTAMP</code>"
},
{
"vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryType-00800",
"text": " If the <a href=\"#features-occlusionQueryPrecise\">precise occlusion queries</a> 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-vkCmdBeginQueryIndexedEXT-query-00802",
"text": " <code>query</code> <strong class=\"purple\">must</strong> be less than the number of queries in <code>queryPool</code>"
},
{
"vuid": "VUID-vkCmdBeginQueryIndexedEXT-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-vkCmdBeginQueryIndexedEXT-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-vkCmdBeginQueryIndexedEXT-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-vkCmdBeginQueryIndexedEXT-queryType-02338",
"text": " If the <code>queryType</code> used to create <code>queryPool</code> was <code>VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT</code> the <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryType-02339",
"text": " If the <code>queryType</code> used to create <code>queryPool</code> was <code>VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT</code> the <code>index</code> parameter <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceTransformFeedbackPropertiesEXT</code>::<code>maxTransformFeedbackStreams</code>"
},
{
"vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryType-02340",
"text": " If the <code>queryType</code> used to create <code>queryPool</code> was not <code>VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT</code> the <code>index</code> <strong class=\"purple\">must</strong> be zero"
},
{
"vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryType-02341",
"text": " If the <code>queryType</code> used to create <code>queryPool</code> was <code>VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT</code> then <code>VkPhysicalDeviceTransformFeedbackPropertiesEXT</code>::<code>transformFeedbackQueries</code> <strong class=\"purple\">must</strong> be supported"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdBeginQueryIndexedEXT-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-vkCmdBeginQueryIndexedEXT-query-00808",
"text": " If 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>"
}
],
"(VK_KHR_performance_query)": [
{
"vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryPool-03223",
"text": " If <code>queryPool</code> was created with a <code>queryType</code> of <code>VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR</code>, the <a href=\"#profiling-lock\">profiling lock</a> <strong class=\"purple\">must</strong> have been held before <a href=\"#vkBeginCommandBuffer\">vkBeginCommandBuffer</a> was called on <code>commandBuffer</code>"
},
{
"vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryPool-03224",
"text": " If <code>queryPool</code> was created with a <code>queryType</code> of <code>VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR</code> and one of the counters used to create <code>queryPool</code> was <code>VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR</code>, the query begin <strong class=\"purple\">must</strong> be the first recorded command in <code>commandBuffer</code>"
},
{
"vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryPool-03225",
"text": " If <code>queryPool</code> was created with a <code>queryType</code> of <code>VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR</code> and one of the counters used to create <code>queryPool</code> was <code>VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR</code>, the begin command <strong class=\"purple\">must</strong> not be recorded within a render pass instance"
},
{
"vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryPool-03226",
"text": " If <code>queryPool</code> was created with a <code>queryType</code> of <code>VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR</code> and another query pool with a <code>queryType</code> <code>VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR</code> has been used within <code>commandBuffer</code>, its parent primary command buffer or secondary command buffer recorded within the same parent primary command buffer as <code>commandBuffer</code>, the <a href=\"#features-features-performanceCounterMultipleQueryPools\"><code>performanceCounterMultipleQueryPools</code></a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkCmdBeginQueryIndexedEXT-None-02863",
"text": " If <code>queryPool</code> was created with a <code>queryType</code> of <code>VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR</code>, this command <strong class=\"purple\">must</strong> not be recorded in a command buffer that, either directly or through secondary command buffers, also contains a <code>vkCmdResetQueryPool</code> command affecting the same query"
}
],
"(VK_EXT_transform_feedback)": [
{
"vuid": "VUID-vkCmdBeginQueryIndexedEXT-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryPool-parameter",
"text": " <code>queryPool</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkQueryPool\">VkQueryPool</a> handle"
},
{
"vuid": "VUID-vkCmdBeginQueryIndexedEXT-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkQueryControlFlagBits\">VkQueryControlFlagBits</a> values"
},
{
"vuid": "VUID-vkCmdBeginQueryIndexedEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdBeginQueryIndexedEXT-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-vkCmdBeginQueryIndexedEXT-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 <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"vkCmdEndQuery": {
"core": [
{
"vuid": "VUID-vkCmdEndQuery-None-01923",
"text": " All queries used by the command <strong class=\"purple\">must</strong> be <a href=\"#queries-operation-active\">active</a>"
},
{
"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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdEndQuery-queryPool-parameter",
"text": " <code>queryPool</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkQueryPool\">VkQueryPool</a> handle"
},
{
"vuid": "VUID-vkCmdEndQuery-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(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>"
}
],
"(VK_KHR_performance_query)": [
{
"vuid": "VUID-vkCmdEndQuery-queryPool-03227",
"text": " If <code>queryPool</code> was created with a <code>queryType</code> of <code>VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR</code> and one or more of the counters used to create <code>queryPool</code> was <code>VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR</code>, the <a href=\"#vkCmdEndQuery\">vkCmdEndQuery</a> <strong class=\"purple\">must</strong> be the last recorded command in <code>commandBuffer</code>"
},
{
"vuid": "VUID-vkCmdEndQuery-queryPool-03228",
"text": " If <code>queryPool</code> was created with a <code>queryType</code> of <code>VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR</code> and one or more of the counters used to create <code>queryPool</code> was <code>VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR</code>, the <a href=\"#vkCmdEndQuery\">vkCmdEndQuery</a> <strong class=\"purple\">must</strong> not be recorded within a render pass instance"
}
]
},
"vkCmdEndQueryIndexedEXT": {
"(VK_EXT_transform_feedback)": [
{
"vuid": "VUID-vkCmdEndQueryIndexedEXT-None-02342",
"text": " All queries used by the command <strong class=\"purple\">must</strong> be <a href=\"#queries-operation-active\">active</a>"
},
{
"vuid": "VUID-vkCmdEndQueryIndexedEXT-query-02343",
"text": " <code>query</code> <strong class=\"purple\">must</strong> be less than the number of queries in <code>queryPool</code>"
},
{
"vuid": "VUID-vkCmdEndQueryIndexedEXT-queryType-02346",
"text": " If the <code>queryType</code> used to create <code>queryPool</code> was <code>VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT</code> the <code>index</code> parameter <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceTransformFeedbackPropertiesEXT</code>::<code>maxTransformFeedbackStreams</code>"
},
{
"vuid": "VUID-vkCmdEndQueryIndexedEXT-queryType-02347",
"text": " If the <code>queryType</code> used to create <code>queryPool</code> was not <code>VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT</code> the <code>index</code> <strong class=\"purple\">must</strong> be zero"
},
{
"vuid": "VUID-vkCmdEndQueryIndexedEXT-queryType-02723",
"text": " If the <code>queryType</code> used to create <code>queryPool</code> was <code>VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT</code> <code>index</code> <strong class=\"purple\">must</strong> equal the <code>index</code> used to begin the query"
},
{
"vuid": "VUID-vkCmdEndQueryIndexedEXT-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdEndQueryIndexedEXT-queryPool-parameter",
"text": " <code>queryPool</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkQueryPool\">VkQueryPool</a> handle"
},
{
"vuid": "VUID-vkCmdEndQueryIndexedEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdEndQueryIndexedEXT-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-vkCmdEndQueryIndexedEXT-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 <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(VK_EXT_transform_feedback)+(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdEndQueryIndexedEXT-commandBuffer-02344",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> not be a protected command buffer"
}
],
"(VK_EXT_transform_feedback)+(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-vkCmdEndQueryIndexedEXT-query-02345",
"text": " If <code>vkCmdEndQueryIndexedEXT</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-02827",
"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 <a href=\"#queries-operation-memorylayout\">here</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetQueryPoolResults-queryPool-parameter",
"text": " <code>queryPool</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkQueryPool\">VkQueryPool</a> 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>"
}
],
"(VK_KHR_performance_query)": [
{
"vuid": "VUID-vkGetQueryPoolResults-flags-02828",
"text": " If <code>VK_QUERY_RESULT_64_BIT</code> is not set in <code>flags</code> and the <code>queryType</code> used to create <code>queryPool</code> was not <code>VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR</code>, then <code>pData</code> and <code>stride</code> <strong class=\"purple\">must</strong> be multiples of <code>4</code>"
},
{
"vuid": "VUID-vkGetQueryPoolResults-queryType-03229",
"text": " If the <code>queryType</code> used to create <code>queryPool</code> was <code>VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR</code>, then <code>pData</code> and <code>stride</code> <strong class=\"purple\">must</strong> be multiples of the size of <a href=\"#VkPerformanceCounterResultKHR\">VkPerformanceCounterResultKHR</a>"
},
{
"vuid": "VUID-vkGetQueryPoolResults-queryType-03230",
"text": " If the <code>queryType</code> used to create <code>queryPool</code> was <code>VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR</code>, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_QUERY_RESULT_WITH_AVAILABILITY_BIT</code>, <code>VK_QUERY_RESULT_PARTIAL_BIT</code> or <code>VK_QUERY_RESULT_64_BIT</code>"
},
{
"vuid": "VUID-vkGetQueryPoolResults-queryType-03231",
"text": " If the <code>queryType</code> used to create <code>queryPool</code> was <code>VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR</code>, the <code>queryPool</code> <strong class=\"purple\">must</strong> have been recorded once for each pass as retrieved via a call to <a href=\"#vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR\">vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR</a>"
}
]
},
"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 <a href=\"#queries-operation-memorylayout\">here</a>"
},
{
"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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdCopyQueryPoolResults-queryPool-parameter",
"text": " <code>queryPool</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkQueryPool\">VkQueryPool</a> handle"
},
{
"vuid": "VUID-vkCmdCopyQueryPoolResults-dstBuffer-parameter",
"text": " <code>dstBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> 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 <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(VK_KHR_performance_query)": [
{
"vuid": "VUID-vkCmdCopyQueryPoolResults-queryType-03232",
"text": " If the <code>queryType</code> used to create <code>queryPool</code> was <code>VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR</code>, <a href=\"#VkPhysicalDevicePerformanceQueryPropertiesKHR\">VkPhysicalDevicePerformanceQueryPropertiesKHR</a>::<code>allowCommandBufferQueryCopies</code> <strong class=\"purple\">must</strong> be <code>VK_TRUE</code>"
},
{
"vuid": "VUID-vkCmdCopyQueryPoolResults-queryType-03233",
"text": " If the <code>queryType</code> used to create <code>queryPool</code> was <code>VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR</code>, <code>flags</code> <strong class=\"purple\">must</strong> not contain <code>VK_QUERY_RESULT_WITH_AVAILABILITY_BIT</code>, <code>VK_QUERY_RESULT_PARTIAL_BIT</code> or <code>VK_QUERY_RESULT_64_BIT</code>"
},
{
"vuid": "VUID-vkCmdCopyQueryPoolResults-queryType-03234",
"text": " If the <code>queryType</code> used to create <code>queryPool</code> was <code>VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR</code>, the <code>queryPool</code> <strong class=\"purple\">must</strong> have been submitted once for each pass as retrieved via a call to <a href=\"#vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR\">vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR</a>"
}
],
"(VK_INTEL_performance_query)": [
{
"vuid": "VUID-vkCmdCopyQueryPoolResults-queryType-02734",
"text": " <a href=\"#vkCmdCopyQueryPoolResults\">vkCmdCopyQueryPoolResults</a> <strong class=\"purple\">must</strong> not be called if the <code>queryType</code> used to create <code>queryPool</code> was <code>VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL</code>"
}
]
},
"vkCmdWriteTimestamp": {
"core": [
{
"vuid": "VUID-vkCmdWriteTimestamp-pipelineStage-04074",
"text": " <code>pipelineStage</code> <strong class=\"purple\">must</strong> be a <a href=\"#synchronization-pipeline-stages-supported\">valid stage</a> for the queue family that was used to create the command pool that <code>commandBuffer</code> was allocated from"
},
{
"vuid": "VUID-vkCmdWriteTimestamp-pipelineStage-04075",
"text": " If the <a href=\"#features-geometryShader\">geometry shaders</a> feature is not enabled, <code>pipelineStage</code> <strong class=\"purple\">must</strong> not be <code>VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT</code>"
},
{
"vuid": "VUID-vkCmdWriteTimestamp-pipelineStage-04076",
"text": " If the <a href=\"#features-tessellationShader\">tessellation shaders</a> feature is not enabled, <code>pipelineStage</code> <strong class=\"purple\">must</strong> not be <code>VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT</code> or <code>VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT</code>"
},
{
"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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> 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 <a href=\"#VkQueryPool\">VkQueryPool</a> handle"
},
{
"vuid": "VUID-vkCmdWriteTimestamp-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(VK_EXT_conditional_rendering)": [
{
"vuid": "VUID-vkCmdWriteTimestamp-pipelineStage-04077",
"text": " If the <a href=\"#features-conditionalRendering\">conditional rendering</a> feature is not enabled, <code>pipelineStage</code> <strong class=\"purple\">must</strong> not be <code>VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT</code>"
}
],
"(VK_EXT_fragment_density_map)": [
{
"vuid": "VUID-vkCmdWriteTimestamp-pipelineStage-04078",
"text": " If the <a href=\"#features-fragmentDensityMap\">fragment density map</a> feature is not enabled, <code>pipelineStage</code> <strong class=\"purple\">must</strong> not be <code>VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT</code>"
}
],
"(VK_EXT_transform_feedback)": [
{
"vuid": "VUID-vkCmdWriteTimestamp-pipelineStage-04079",
"text": " If the <a href=\"#features-transformFeedback\">transform feedback</a> feature is not enabled, <code>pipelineStage</code> <strong class=\"purple\">must</strong> not be <code>VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT</code>"
}
],
"(VK_NV_mesh_shader)": [
{
"vuid": "VUID-vkCmdWriteTimestamp-pipelineStage-04080",
"text": " If the <a href=\"#features-meshShader\">mesh shaders</a> feature is not enabled, <code>pipelineStage</code> <strong class=\"purple\">must</strong> not be <code>VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV</code> or <code>VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV</code>"
}
],
"(VK_NV_shading_rate_image)": [
{
"vuid": "VUID-vkCmdWriteTimestamp-pipelineStage-04081",
"text": " If the <a href=\"#features-shadingRateImage\">shading rate image</a> feature is not enabled, <code>pipelineStage</code> <strong class=\"purple\">must</strong> not be <code>VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV</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>"
}
]
},
"vkAcquireProfilingLockKHR": {
"(VK_KHR_performance_query)": [
{
"vuid": "VUID-vkAcquireProfilingLockKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkAcquireProfilingLockKHR-pInfo-parameter",
"text": " <code>pInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkAcquireProfilingLockInfoKHR\">VkAcquireProfilingLockInfoKHR</a> structure"
}
]
},
"VkAcquireProfilingLockInfoKHR": {
"(VK_KHR_performance_query)": [
{
"vuid": "VUID-VkAcquireProfilingLockInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR</code>"
},
{
"vuid": "VUID-VkAcquireProfilingLockInfoKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkAcquireProfilingLockInfoKHR-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
}
]
},
"vkReleaseProfilingLockKHR": {
"(VK_KHR_performance_query)": [
{
"vuid": "VUID-vkReleaseProfilingLockKHR-device-03235",
"text": " The profiling lock of <code>device</code> <strong class=\"purple\">must</strong> have been held via a previous successful call to <a href=\"#vkAcquireProfilingLockKHR\">vkAcquireProfilingLockKHR</a>"
},
{
"vuid": "VUID-vkReleaseProfilingLockKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
}
]
},
"vkInitializePerformanceApiINTEL": {
"(VK_INTEL_performance_query)+(VK_INTEL_performance_query)": [
{
"vuid": "VUID-vkInitializePerformanceApiINTEL-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkInitializePerformanceApiINTEL-pInitializeInfo-parameter",
"text": " <code>pInitializeInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkInitializePerformanceApiInfoINTEL\">VkInitializePerformanceApiInfoINTEL</a> structure"
}
]
},
"VkInitializePerformanceApiInfoINTEL": {
"(VK_INTEL_performance_query)+(VK_INTEL_performance_query)": [
{
"vuid": "VUID-VkInitializePerformanceApiInfoINTEL-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL</code>"
},
{
"vuid": "VUID-VkInitializePerformanceApiInfoINTEL-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
},
"vkUninitializePerformanceApiINTEL": {
"(VK_INTEL_performance_query)+(VK_INTEL_performance_query)": [
{
"vuid": "VUID-vkUninitializePerformanceApiINTEL-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
}
]
},
"vkGetPerformanceParameterINTEL": {
"(VK_INTEL_performance_query)+(VK_INTEL_performance_query)": [
{
"vuid": "VUID-vkGetPerformanceParameterINTEL-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetPerformanceParameterINTEL-parameter-parameter",
"text": " <code>parameter</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPerformanceParameterTypeINTEL\">VkPerformanceParameterTypeINTEL</a> value"
},
{
"vuid": "VUID-vkGetPerformanceParameterINTEL-pValue-parameter",
"text": " <code>pValue</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkPerformanceValueINTEL\">VkPerformanceValueINTEL</a> structure"
}
]
},
"VkPerformanceValueINTEL": {
"(VK_INTEL_performance_query)+(VK_INTEL_performance_query)": [
{
"vuid": "VUID-VkPerformanceValueINTEL-type-parameter",
"text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPerformanceValueTypeINTEL\">VkPerformanceValueTypeINTEL</a> value"
},
{
"vuid": "VUID-VkPerformanceValueINTEL-valueString-parameter",
"text": " If <code>type</code> is <code>VK_PERFORMANCE_VALUE_TYPE_STRING_INTEL</code>, the <code>valueString</code> member of <code>data</code> <strong class=\"purple\">must</strong> be a null-terminated UTF-8 string"
}
]
},
"VkQueryPoolPerformanceQueryCreateInfoINTEL": {
"(VK_INTEL_performance_query)+(VK_INTEL_performance_query)": [
{
"vuid": "VUID-VkQueryPoolPerformanceQueryCreateInfoINTEL-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL</code>"
},
{
"vuid": "VUID-VkQueryPoolPerformanceQueryCreateInfoINTEL-performanceCountersSampling-parameter",
"text": " <code>performanceCountersSampling</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkQueryPoolSamplingModeINTEL\">VkQueryPoolSamplingModeINTEL</a> value"
}
]
},
"vkCmdSetPerformanceMarkerINTEL": {
"(VK_INTEL_performance_query)+(VK_INTEL_performance_query)": [
{
"vuid": "VUID-vkCmdSetPerformanceMarkerINTEL-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdSetPerformanceMarkerINTEL-pMarkerInfo-parameter",
"text": " <code>pMarkerInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkPerformanceMarkerInfoINTEL\">VkPerformanceMarkerInfoINTEL</a> structure"
},
{
"vuid": "VUID-vkCmdSetPerformanceMarkerINTEL-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdSetPerformanceMarkerINTEL-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"
}
]
},
"VkPerformanceMarkerInfoINTEL": {
"(VK_INTEL_performance_query)+(VK_INTEL_performance_query)": [
{
"vuid": "VUID-VkPerformanceMarkerInfoINTEL-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL</code>"
},
{
"vuid": "VUID-VkPerformanceMarkerInfoINTEL-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
},
"vkCmdSetPerformanceStreamMarkerINTEL": {
"(VK_INTEL_performance_query)+(VK_INTEL_performance_query)": [
{
"vuid": "VUID-vkCmdSetPerformanceStreamMarkerINTEL-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdSetPerformanceStreamMarkerINTEL-pMarkerInfo-parameter",
"text": " <code>pMarkerInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkPerformanceStreamMarkerInfoINTEL\">VkPerformanceStreamMarkerInfoINTEL</a> structure"
},
{
"vuid": "VUID-vkCmdSetPerformanceStreamMarkerINTEL-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdSetPerformanceStreamMarkerINTEL-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"
}
]
},
"VkPerformanceStreamMarkerInfoINTEL": {
"(VK_INTEL_performance_query)+(VK_INTEL_performance_query)": [
{
"vuid": "VUID-VkPerformanceStreamMarkerInfoINTEL-marker-02735",
"text": " The value written by the application into <code>marker</code> <strong class=\"purple\">must</strong> only used the valid bits as reported by <a href=\"#vkGetPerformanceParameterINTEL\">vkGetPerformanceParameterINTEL</a> with the <code>VK_PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL</code>"
},
{
"vuid": "VUID-VkPerformanceStreamMarkerInfoINTEL-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL</code>"
},
{
"vuid": "VUID-VkPerformanceStreamMarkerInfoINTEL-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
},
"vkCmdSetPerformanceOverrideINTEL": {
"(VK_INTEL_performance_query)+(VK_INTEL_performance_query)": [
{
"vuid": "VUID-vkCmdSetPerformanceOverrideINTEL-pOverrideInfo-02736",
"text": " <code>pOverrideInfo</code> <strong class=\"purple\">must</strong> not be used with a <a href=\"#VkPerformanceOverrideTypeINTEL\">VkPerformanceOverrideTypeINTEL</a> that is not reported available by <code>vkGetPerformanceParameterINTEL</code>"
},
{
"vuid": "VUID-vkCmdSetPerformanceOverrideINTEL-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdSetPerformanceOverrideINTEL-pOverrideInfo-parameter",
"text": " <code>pOverrideInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkPerformanceOverrideInfoINTEL\">VkPerformanceOverrideInfoINTEL</a> structure"
},
{
"vuid": "VUID-vkCmdSetPerformanceOverrideINTEL-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdSetPerformanceOverrideINTEL-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"
}
]
},
"VkPerformanceOverrideInfoINTEL": {
"(VK_INTEL_performance_query)+(VK_INTEL_performance_query)": [
{
"vuid": "VUID-VkPerformanceOverrideInfoINTEL-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL</code>"
},
{
"vuid": "VUID-VkPerformanceOverrideInfoINTEL-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkPerformanceOverrideInfoINTEL-type-parameter",
"text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPerformanceOverrideTypeINTEL\">VkPerformanceOverrideTypeINTEL</a> value"
}
]
},
"vkAcquirePerformanceConfigurationINTEL": {
"(VK_INTEL_performance_query)+(VK_INTEL_performance_query)": [
{
"vuid": "VUID-vkAcquirePerformanceConfigurationINTEL-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkAcquirePerformanceConfigurationINTEL-pAcquireInfo-parameter",
"text": " <code>pAcquireInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkPerformanceConfigurationAcquireInfoINTEL\">VkPerformanceConfigurationAcquireInfoINTEL</a> structure"
},
{
"vuid": "VUID-vkAcquirePerformanceConfigurationINTEL-pConfiguration-parameter",
"text": " <code>pConfiguration</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkPerformanceConfigurationINTEL\">VkPerformanceConfigurationINTEL</a> handle"
}
]
},
"VkPerformanceConfigurationAcquireInfoINTEL": {
"(VK_INTEL_performance_query)+(VK_INTEL_performance_query)": [
{
"vuid": "VUID-VkPerformanceConfigurationAcquireInfoINTEL-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL</code>"
},
{
"vuid": "VUID-VkPerformanceConfigurationAcquireInfoINTEL-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkPerformanceConfigurationAcquireInfoINTEL-type-parameter",
"text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPerformanceConfigurationTypeINTEL\">VkPerformanceConfigurationTypeINTEL</a> value"
}
]
},
"vkQueueSetPerformanceConfigurationINTEL": {
"(VK_INTEL_performance_query)+(VK_INTEL_performance_query)": [
{
"vuid": "VUID-vkQueueSetPerformanceConfigurationINTEL-queue-parameter",
"text": " <code>queue</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkQueue\">VkQueue</a> handle"
},
{
"vuid": "VUID-vkQueueSetPerformanceConfigurationINTEL-configuration-parameter",
"text": " <code>configuration</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPerformanceConfigurationINTEL\">VkPerformanceConfigurationINTEL</a> handle"
},
{
"vuid": "VUID-vkQueueSetPerformanceConfigurationINTEL-commonparent",
"text": " Both of <code>configuration</code>, and <code>queue</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"vkReleasePerformanceConfigurationINTEL": {
"(VK_INTEL_performance_query)+(VK_INTEL_performance_query)": [
{
"vuid": "VUID-vkReleasePerformanceConfigurationINTEL-configuration-02737",
"text": " <code>configuration</code> <strong class=\"purple\">must</strong> not be released before all command buffers submitted while the configuration was set are in <a href=\"#commandbuffers-lifecycle\">pending state</a>"
},
{
"vuid": "VUID-vkReleasePerformanceConfigurationINTEL-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkReleasePerformanceConfigurationINTEL-configuration-parameter",
"text": " <code>configuration</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPerformanceConfigurationINTEL\">VkPerformanceConfigurationINTEL</a> handle"
},
{
"vuid": "VUID-vkReleasePerformanceConfigurationINTEL-configuration-parent",
"text": " <code>configuration</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkCmdClearColorImage": {
"(VK_VERSION_1_1,VK_KHR_maintenance1)": [
{
"vuid": "VUID-vkCmdClearColorImage-image-01993",
"text": " The <a href=\"#resources-image-format-features\">format features</a> of <code>image</code> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_TRANSFER_DST_BIT</code>"
}
],
"core": [
{
"vuid": "VUID-vkCmdClearColorImage-image-00002",
"text": " <code>image</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_TRANSFER_DST_BIT</code> usage flag"
},
{
"vuid": "VUID-vkCmdClearColorImage-image-00003",
"text": " If <code>image</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
},
{
"vuid": "VUID-vkCmdClearColorImage-imageLayout-00004",
"text": " <code>imageLayout</code> <strong class=\"purple\">must</strong> specify the layout of the image subresource ranges of <code>image</code> specified in <code>pRanges</code> at the time this command is executed on a <code>VkDevice</code>"
},
{
"vuid": "VUID-vkCmdClearColorImage-aspectMask-02498",
"text": " The <a href=\"#VkImageSubresourceRange\">VkImageSubresourceRange</a>::<code>aspectMask</code> members of the elements of the <code>pRanges</code> array <strong class=\"purple\">must</strong> each only include <code>VK_IMAGE_ASPECT_COLOR_BIT</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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdClearColorImage-image-parameter",
"text": " <code>image</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImage\">VkImage</a> 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 <a href=\"#VkClearColorValue\">VkClearColorValue</a> 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 <a href=\"#VkImageSubresourceRange\">VkImageSubresourceRange</a> structures"
},
{
"vuid": "VUID-vkCmdClearColorImage-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(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 <a href=\"#formats-requiring-sampler-ycbcr-conversion\">Formats requiring sampler YC<sub>B</sub>C<sub>R</sub> conversion for <code>VK_IMAGE_ASPECT_COLOR_BIT</code> image views</a>"
}
],
"!(VK_KHR_shared_presentable_image)": [
{
"vuid": "VUID-vkCmdClearColorImage-imageLayout-00005",
"text": " <code>imageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL</code> or <code>VK_IMAGE_LAYOUT_GENERAL</code>"
}
],
"(VK_KHR_shared_presentable_image)": [
{
"vuid": "VUID-vkCmdClearColorImage-imageLayout-01394",
"text": " <code>imageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL</code>, <code>VK_IMAGE_LAYOUT_GENERAL</code>, or <code>VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdClearColorImage-commandBuffer-01805",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, then <code>image</code> <strong class=\"purple\">must</strong> not be a protected image"
},
{
"vuid": "VUID-vkCmdClearColorImage-commandBuffer-01806",
"text": " If <code>commandBuffer</code> is a protected command buffer, then <code>image</code> <strong class=\"purple\">must</strong> not be an unprotected image"
}
]
},
"vkCmdClearDepthStencilImage": {
"(VK_VERSION_1_1,VK_KHR_maintenance1)": [
{
"vuid": "VUID-vkCmdClearDepthStencilImage-image-01994",
"text": " The <a href=\"#resources-image-format-features\">format features</a> of <code>image</code> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_TRANSFER_DST_BIT</code>"
}
],
"!(VK_VERSION_1_2,VK_EXT_separate_stencil_usage)": [
{
"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"
}
],
"(VK_VERSION_1_2,VK_EXT_separate_stencil_usage)": [
{
"vuid": "VUID-vkCmdClearDepthStencilImage-pRanges-02658",
"text": " If the <code>aspect</code> member of any element of <code>pRanges</code> includes <code>VK_IMAGE_ASPECT_STENCIL_BIT</code>, and <code>image</code> was created with <a href=\"#VkImageStencilUsageCreateInfo\">separate stencil usage</a>, <code>VK_IMAGE_USAGE_TRANSFER_DST_BIT</code> <strong class=\"purple\">must</strong> have been included in the <a href=\"#VkImageStencilUsageCreateInfo\">VkImageStencilUsageCreateInfo</a>::<code>stencilUsage</code> used to create <code>image</code>"
},
{
"vuid": "VUID-vkCmdClearDepthStencilImage-pRanges-02659",
"text": " If the <code>aspect</code> member of any element of <code>pRanges</code> includes <code>VK_IMAGE_ASPECT_STENCIL_BIT</code>, and <code>image</code> was not created with <a href=\"#VkImageStencilUsageCreateInfo\">separate stencil usage</a>, <code>VK_IMAGE_USAGE_TRANSFER_DST_BIT</code> <strong class=\"purple\">must</strong> have been included in the <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>::<code>usage</code> used to create <code>image</code>"
},
{
"vuid": "VUID-vkCmdClearDepthStencilImage-pRanges-02660",
"text": " If the <code>aspect</code> member of any element of <code>pRanges</code> includes <code>VK_IMAGE_ASPECT_DEPTH_BIT</code>, <code>VK_IMAGE_USAGE_TRANSFER_DST_BIT</code> <strong class=\"purple\">must</strong> have been included in the <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>::<code>usage</code> used to create <code>image</code>"
}
],
"core": [
{
"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-aspectMask-02824",
"text": " The <a href=\"#VkImageSubresourceRange\">VkImageSubresourceRange</a>::<code>aspectMask</code> member of each element of the <code>pRanges</code> array <strong class=\"purple\">must</strong> not include bits other than <code>VK_IMAGE_ASPECT_DEPTH_BIT</code> or <code>VK_IMAGE_ASPECT_STENCIL_BIT</code>"
},
{
"vuid": "VUID-vkCmdClearDepthStencilImage-image-02825",
"text": " If the <code>image</code>&#8217;s format does not have a stencil component, then the <a href=\"#VkImageSubresourceRange\">VkImageSubresourceRange</a>::<code>aspectMask</code> member of each element of the <code>pRanges</code> array <strong class=\"purple\">must</strong> not include the <code>VK_IMAGE_ASPECT_STENCIL_BIT</code> bit"
},
{
"vuid": "VUID-vkCmdClearDepthStencilImage-image-02826",
"text": " If the <code>image</code>&#8217;s format does not have a depth component, then the <a href=\"#VkImageSubresourceRange\">VkImageSubresourceRange</a>::<code>aspectMask</code> member of each element of the <code>pRanges</code> array <strong class=\"purple\">must</strong> not include the <code>VK_IMAGE_ASPECT_DEPTH_BIT</code> bit"
},
{
"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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdClearDepthStencilImage-image-parameter",
"text": " <code>image</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImage\">VkImage</a> 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 <a href=\"#VkClearDepthStencilValue\">VkClearDepthStencilValue</a> 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 <a href=\"#VkImageSubresourceRange\">VkImageSubresourceRange</a> structures"
},
{
"vuid": "VUID-vkCmdClearDepthStencilImage-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(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-02501",
"text": " If the <code>aspectMask</code> member of any element of <code>pAttachments</code> contains <code>VK_IMAGE_ASPECT_COLOR_BIT</code>, then the <code>colorAttachment</code> member of that element <strong class=\"purple\">must</strong> either refer to a color attachment which is <code>VK_ATTACHMENT_UNUSED</code>, or <strong class=\"purple\">must</strong> be a valid color attachment"
},
{
"vuid": "VUID-vkCmdClearAttachments-aspectMask-02502",
"text": " If the <code>aspectMask</code> member of any element of <code>pAttachments</code> contains <code>VK_IMAGE_ASPECT_DEPTH_BIT</code>, then the current subpass' depth/stencil attachment <strong class=\"purple\">must</strong> either be <code>VK_ATTACHMENT_UNUSED</code>, or <strong class=\"purple\">must</strong> have a depth component"
},
{
"vuid": "VUID-vkCmdClearAttachments-aspectMask-02503",
"text": " If the <code>aspectMask</code> member of any element of <code>pAttachments</code> contains <code>VK_IMAGE_ASPECT_STENCIL_BIT</code>, then the current subpass' depth/stencil attachment <strong class=\"purple\">must</strong> either be <code>VK_ATTACHMENT_UNUSED</code>, or <strong class=\"purple\">must</strong> have a stencil component"
},
{
"vuid": "VUID-vkCmdClearAttachments-rect-02682",
"text": " The <code>rect</code> member of each element of <code>pRects</code> <strong class=\"purple\">must</strong> have an <code>extent.width</code> greater than <code>0</code>"
},
{
"vuid": "VUID-vkCmdClearAttachments-rect-02683",
"text": " The <code>rect</code> member of each element of <code>pRects</code> <strong class=\"purple\">must</strong> have an <code>extent.height</code> greater than <code>0</code>"
},
{
"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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> 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 <a href=\"#VkClearAttachment\">VkClearAttachment</a> 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> <a href=\"#VkClearRect\">VkClearRect</a> structures"
},
{
"vuid": "VUID-vkCmdClearAttachments-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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)": [
{
"vuid": "VUID-vkCmdClearAttachments-commandBuffer-02504",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, then each attachment to be cleared <strong class=\"purple\">must</strong> not be a protected image"
},
{
"vuid": "VUID-vkCmdClearAttachments-commandBuffer-02505",
"text": " If <code>commandBuffer</code> is a protected command buffer, then each attachment to be cleared <strong class=\"purple\">must</strong> not be an unprotected image"
}
],
"(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_EXT_image_drm_format_modifier)": [
{
"vuid": "VUID-VkClearAttachment-aspectMask-02246",
"text": " <code>aspectMask</code> <strong class=\"purple\">must</strong> not include <code>VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT</code> for any index <code>i</code>"
}
]
},
"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-02506",
"text": " <code>depth</code> <strong class=\"purple\">must</strong> be between <code>0.0</code> and <code>1.0</code>, inclusive"
}
]
},
"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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdFillBuffer-dstBuffer-parameter",
"text": " <code>dstBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdFillBuffer-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a>"
}
],
"!(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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdUpdateBuffer-dstBuffer-parameter",
"text": " <code>dstBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> 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 <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(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": {
"(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"
}
],
"core": [
{
"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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdCopyBuffer-srcBuffer-parameter",
"text": " <code>srcBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdCopyBuffer-dstBuffer-parameter",
"text": " <code>dstBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> 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> valid <a href=\"#VkBufferCopy\">VkBufferCopy</a> structures"
},
{
"vuid": "VUID-vkCmdCopyBuffer-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"VkBufferCopy": {
"core": [
{
"vuid": "VUID-VkBufferCopy-size-01988",
"text": " The <code>size</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"vkCmdCopyImage": {
"(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"
}
],
"core": [
{
"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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdCopyImage-srcImage-parameter",
"text": " <code>srcImage</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImage\">VkImage</a> 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 <a href=\"#VkImage\">VkImage</a> 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 <a href=\"#VkImageCopy\">VkImageCopy</a> structures"
},
{
"vuid": "VUID-vkCmdCopyImage-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(VK_VERSION_1_1,VK_KHR_maintenance1)": [
{
"vuid": "VUID-vkCmdCopyImage-srcImage-01995",
"text": " The <a href=\"#resources-image-format-features\">format features</a> of <code>srcImage</code> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_TRANSFER_SRC_BIT</code>"
},
{
"vuid": "VUID-vkCmdCopyImage-dstImage-01996",
"text": " The <a href=\"#resources-image-format-features\">format features</a> of <code>dstImage</code> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_TRANSFER_DST_BIT</code>"
}
],
"!(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 <a href=\"#copies-images-format-compatibility\">above</a>"
}
],
"(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 <a href=\"#formats-requiring-sampler-ycbcr-conversion\"><em>multi-planar format</em></a>, 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 <a href=\"#copies-images-format-compatibility\">above</a>"
},
{
"vuid": "VUID-vkCmdCopyImage-None-01549",
"text": " In a copy to or from a plane of a <a href=\"#formats-requiring-sampler-ycbcr-conversion\">multi-planar image</a>, the <a href=\"#VkFormat\">VkFormat</a> of the image and plane <strong class=\"purple\">must</strong> be compatible according to <a href=\"#formats-compatible-planes\">the description of compatible planes</a> for the plane being copied"
}
],
"!(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_EXT_fragment_density_map)": [
{
"vuid": "VUID-vkCmdCopyImage-dstImage-02542",
"text": " <code>dstImage</code> and <code>srcImage</code> <strong class=\"purple\">must</strong> not have been created with <code>flags</code> containing <code>VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT</code>"
}
]
},
"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 <a href=\"#formats-requiring-sampler-ycbcr-conversion\">multi-planar image format</a> 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 <a href=\"#formats-requiring-sampler-ycbcr-conversion\">two planes</a> 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 <a href=\"#formats-requiring-sampler-ycbcr-conversion\">three planes</a> 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 <a href=\"#formats-requiring-sampler-ycbcr-conversion\">two planes</a> 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 <a href=\"#formats-requiring-sampler-ycbcr-conversion\">three planes</a> 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 <a href=\"#formats-requiring-sampler-ycbcr-conversion\">multi-planar image format</a> 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 <a href=\"#formats-requiring-sampler-ycbcr-conversion\">multi-planar image format</a> 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 <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 <a href=\"#VkImageSubresourceLayers\">VkImageSubresourceLayers</a> structure"
},
{
"vuid": "VUID-VkImageCopy-dstSubresource-parameter",
"text": " <code>dstSubresource</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageSubresourceLayers\">VkImageSubresourceLayers</a> 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>"
}
],
"(VK_EXT_image_drm_format_modifier)": [
{
"vuid": "VUID-VkImageSubresourceLayers-aspectMask-02247",
"text": " <code>aspectMask</code> <strong class=\"purple\">must</strong> not include <code>VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT</code> for any index <code>i</code>"
}
]
},
"vkCmdCopyBufferToImage": {
"(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"
}
],
"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 <a href=\"#copies-buffers-images-addressing\">Buffer and Image Addressing</a>, 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-04052",
"text": " If the queue family used to create the <a href=\"#VkCommandPool\">VkCommandPool</a> which <code>commandBuffer</code> was allocated from does not support <code>VK_QUEUE_GRAPHICS_BIT</code> or <code>VK_QUEUE_COMPUTE_BIT</code>, the <code>bufferOffset</code> member of any element of <code>pRegions</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-vkCmdCopyBufferToImage-dstImage-04053",
"text": " If <code>dstImage</code> has a depth/stencil format, the <code>bufferOffset</code> member of any element of <code>pRegions</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-vkCmdCopyBufferToImage-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdCopyBufferToImage-srcBuffer-parameter",
"text": " <code>srcBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdCopyBufferToImage-dstImage-parameter",
"text": " <code>dstImage</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImage\">VkImage</a> 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 <a href=\"#VkBufferImageCopy\">VkBufferImageCopy</a> structures"
},
{
"vuid": "VUID-vkCmdCopyBufferToImage-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(VK_VERSION_1_1,VK_KHR_maintenance1)": [
{
"vuid": "VUID-vkCmdCopyBufferToImage-dstImage-01997",
"text": " The <a href=\"#resources-image-format-features\">format features</a> of <code>dstImage</code> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_TRANSFER_DST_BIT</code>"
}
],
"!(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_EXT_fragment_density_map)": [
{
"vuid": "VUID-vkCmdCopyBufferToImage-dstImage-02543",
"text": " <code>dstImage</code> <strong class=\"purple\">must</strong> not have been created with <code>flags</code> containing <code>VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT</code>"
}
]
},
"vkCmdCopyImageToBuffer": {
"(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"
}
],
"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 <a href=\"#copies-buffers-images-addressing\">Buffer and Image Addressing</a>, 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-04054",
"text": " If the queue family used to create the <a href=\"#VkCommandPool\">VkCommandPool</a> which <code>commandBuffer</code> was allocated from does not support <code>VK_QUEUE_GRAPHICS_BIT</code> or <code>VK_QUEUE_COMPUTE_BIT</code>, the <code>bufferOffset</code> member of any element of <code>pRegions</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-vkCmdCopyImageToBuffer-srcImage-04055",
"text": " If <code>srcImage</code> has a depth/stencil format, the <code>bufferOffset</code> member of any element of <code>pRegions</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-vkCmdCopyImageToBuffer-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdCopyImageToBuffer-srcImage-parameter",
"text": " <code>srcImage</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImage\">VkImage</a> 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 <a href=\"#VkBuffer\">VkBuffer</a> 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 <a href=\"#VkBufferImageCopy\">VkBufferImageCopy</a> structures"
},
{
"vuid": "VUID-vkCmdCopyImageToBuffer-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(VK_VERSION_1_1,VK_KHR_maintenance1)": [
{
"vuid": "VUID-vkCmdCopyImageToBuffer-srcImage-01998",
"text": " The <a href=\"#resources-image-format-features\">format features</a> of <code>srcImage</code> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_TRANSFER_SRC_BIT</code>"
}
],
"!(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_EXT_fragment_density_map)": [
{
"vuid": "VUID-vkCmdCopyImageToBuffer-srcImage-02544",
"text": " <code>srcImage</code> <strong class=\"purple\">must</strong> not have been created with <code>flags</code> containing <code>VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT</code>"
}
]
},
"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 texel block 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 <a href=\"#formats-requiring-sampler-ycbcr-conversion\">multi-planar format</a>, then <code>bufferOffset</code> <strong class=\"purple\">must</strong> be a multiple of the format&#8217;s texel block size"
},
{
"vuid": "VUID-VkBufferImageCopy-bufferOffset-01559",
"text": " If the calling command&#8217;s <code>VkImage</code> parameter&#8217;s format is a <a href=\"#formats-requiring-sampler-ycbcr-conversion\">multi-planar format</a>, 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 <a href=\"#formats-compatible-planes\">Compatible formats of planes of multi-planar formats</a>"
},
{
"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 <a href=\"#formats-requiring-sampler-ycbcr-conversion\">multi-planar format</a>, 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-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-imageSubresource-parameter",
"text": " <code>imageSubresource</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageSubresourceLayers\">VkImageSubresourceLayers</a> structure"
}
],
"!(VK_EXT_depth_range_unrestricted)": [
{
"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>"
}
]
},
"vkCmdBlitImage": {
"(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"
}
],
"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-01999",
"text": " The <a href=\"#resources-image-format-features\">format features</a> of <code>srcImage</code> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_BLIT_SRC_BIT</code>"
},
{
"vuid": "VUID-vkCmdBlitImage-srcImage-00219",
"text": " <code>srcImage</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_USAGE_TRANSFER_SRC_BIT</code> usage flag"
},
{
"vuid": "VUID-vkCmdBlitImage-srcImage-00220",
"text": " If <code>srcImage</code> is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
},
{
"vuid": "VUID-vkCmdBlitImage-srcImageLayout-00221",
"text": " <code>srcImageLayout</code> <strong class=\"purple\">must</strong> specify the layout of the image subresources of <code>srcImage</code> specified in <code>pRegions</code> at the time this command is executed on a <code>VkDevice</code>"
},
{
"vuid": "VUID-vkCmdBlitImage-dstImage-02000",
"text": " The <a href=\"#resources-image-format-features\">format features</a> of <code>dstImage</code> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_BLIT_DST_BIT</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-00229",
"text": " If either of <code>srcImage</code> or <code>dstImage</code> was created with a signed integer <a href=\"#VkFormat\">VkFormat</a>, the other <strong class=\"purple\">must</strong> also have been created with a signed integer <a href=\"#VkFormat\">VkFormat</a>"
},
{
"vuid": "VUID-vkCmdBlitImage-srcImage-00230",
"text": " If either of <code>srcImage</code> or <code>dstImage</code> was created with an unsigned integer <a href=\"#VkFormat\">VkFormat</a>, the other <strong class=\"purple\">must</strong> also have been created with an unsigned integer <a href=\"#VkFormat\">VkFormat</a>"
},
{
"vuid": "VUID-vkCmdBlitImage-srcImage-00231",
"text": " If either of <code>srcImage</code> or <code>dstImage</code> was created with a depth/stencil format, the other <strong class=\"purple\">must</strong> have exactly the same format"
},
{
"vuid": "VUID-vkCmdBlitImage-srcImage-00232",
"text": " If <code>srcImage</code> was created with a depth/stencil format, <code>filter</code> <strong class=\"purple\">must</strong> be <code>VK_FILTER_NEAREST</code>"
},
{
"vuid": "VUID-vkCmdBlitImage-srcImage-00233",
"text": " <code>srcImage</code> <strong class=\"purple\">must</strong> have been created with a <code>samples</code> value of <code>VK_SAMPLE_COUNT_1_BIT</code>"
},
{
"vuid": "VUID-vkCmdBlitImage-dstImage-00234",
"text": " <code>dstImage</code> <strong class=\"purple\">must</strong> have been created with a <code>samples</code> value of <code>VK_SAMPLE_COUNT_1_BIT</code>"
},
{
"vuid": "VUID-vkCmdBlitImage-filter-02001",
"text": " If <code>filter</code> is <code>VK_FILTER_LINEAR</code>, then the <a href=\"#resources-image-format-features\">format features</a> of <code>srcImage</code> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdBlitImage-srcImage-parameter",
"text": " <code>srcImage</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImage\">VkImage</a> 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 <a href=\"#VkImage\">VkImage</a> 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 <a href=\"#VkImageBlit\">VkImageBlit</a> 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 <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(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 <a href=\"#formats-requiring-sampler-ycbcr-conversion\">Formats requiring sampler YC<sub>B</sub>C<sub>R</sub> conversion for <code>VK_IMAGE_ASPECT_COLOR_BIT</code> image views</a>"
},
{
"vuid": "VUID-vkCmdBlitImage-dstImage-01562",
"text": " <code>dstImage</code> <strong class=\"purple\">must</strong> not use a format listed in <a href=\"#formats-requiring-sampler-ycbcr-conversion\">Formats requiring sampler YC<sub>B</sub>C<sub>R</sub> conversion for <code>VK_IMAGE_ASPECT_COLOR_BIT</code> image views</a>"
}
],
"!(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_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdBlitImage-filter-02002",
"text": " If <code>filter</code> is <code>VK_FILTER_CUBIC_EXT</code>, then the <a href=\"#resources-image-format-features\">format features</a> of <code>srcImage</code> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT</code>"
},
{
"vuid": "VUID-vkCmdBlitImage-filter-00237",
"text": " If <code>filter</code> is <code>VK_FILTER_CUBIC_EXT</code>, <code>srcImage</code> <strong class=\"purple\">must</strong> have a <a href=\"#VkImageType\">VkImageType</a> of <code>VK_IMAGE_TYPE_2D</code>"
}
],
"(VK_EXT_fragment_density_map)": [
{
"vuid": "VUID-vkCmdBlitImage-dstImage-02545",
"text": " <code>dstImage</code> and <code>srcImage</code> <strong class=\"purple\">must</strong> not have been created with <code>flags</code> containing <code>VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT</code>"
}
]
},
"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].x and <code>srcOffset</code>[1].x <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].y and <code>srcOffset</code>[1].y <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].z and <code>srcOffset</code>[1].z <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].x and <code>dstOffset</code>[1].x <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].y and <code>dstOffset</code>[1].y <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].z and <code>dstOffset</code>[1].z <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 <a href=\"#VkImageSubresourceLayers\">VkImageSubresourceLayers</a> structure"
},
{
"vuid": "VUID-VkImageBlit-dstSubresource-parameter",
"text": " <code>dstSubresource</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageSubresourceLayers\">VkImageSubresourceLayers</a> structure"
}
]
},
"vkCmdResolveImage": {
"(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"
}
],
"core": [
{
"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-02003",
"text": " The <a href=\"#resources-image-format-features\">format features</a> of <code>dstImage</code> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT</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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdResolveImage-srcImage-parameter",
"text": " <code>srcImage</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImage\">VkImage</a> 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 <a href=\"#VkImage\">VkImage</a> 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 <a href=\"#VkImageResolve\">VkImageResolve</a> structures"
},
{
"vuid": "VUID-vkCmdResolveImage-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a>"
}
],
"!(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_EXT_fragment_density_map)": [
{
"vuid": "VUID-vkCmdResolveImage-dstImage-02546",
"text": " <code>dstImage</code> and <code>srcImage</code> <strong class=\"purple\">must</strong> not have been created with <code>flags</code> containing <code>VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT</code>"
}
]
},
"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 <a href=\"#VkImageSubresourceLayers\">VkImageSubresourceLayers</a> structure"
},
{
"vuid": "VUID-VkImageResolve-dstSubresource-parameter",
"text": " <code>dstSubresource</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageSubresourceLayers\">VkImageSubresourceLayers</a> structure"
}
]
},
"vkCmdWriteBufferMarkerAMD": {
"core": [
{
"vuid": "VUID-vkCmdWriteBufferMarkerAMD-pipelineStage-04074",
"text": " <code>pipelineStage</code> <strong class=\"purple\">must</strong> be a <a href=\"#synchronization-pipeline-stages-supported\">valid stage</a> for the queue family that was used to create the command pool that <code>commandBuffer</code> was allocated from"
},
{
"vuid": "VUID-vkCmdWriteBufferMarkerAMD-pipelineStage-04075",
"text": " If the <a href=\"#features-geometryShader\">geometry shaders</a> feature is not enabled, <code>pipelineStage</code> <strong class=\"purple\">must</strong> not be <code>VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT</code>"
},
{
"vuid": "VUID-vkCmdWriteBufferMarkerAMD-pipelineStage-04076",
"text": " If the <a href=\"#features-tessellationShader\">tessellation shaders</a> feature is not enabled, <code>pipelineStage</code> <strong class=\"purple\">must</strong> not be <code>VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT</code> or <code>VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT</code>"
},
{
"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>"
}
],
"(VK_EXT_conditional_rendering)": [
{
"vuid": "VUID-vkCmdWriteBufferMarkerAMD-pipelineStage-04077",
"text": " If the <a href=\"#features-conditionalRendering\">conditional rendering</a> feature is not enabled, <code>pipelineStage</code> <strong class=\"purple\">must</strong> not be <code>VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT</code>"
}
],
"(VK_EXT_fragment_density_map)": [
{
"vuid": "VUID-vkCmdWriteBufferMarkerAMD-pipelineStage-04078",
"text": " If the <a href=\"#features-fragmentDensityMap\">fragment density map</a> feature is not enabled, <code>pipelineStage</code> <strong class=\"purple\">must</strong> not be <code>VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT</code>"
}
],
"(VK_EXT_transform_feedback)": [
{
"vuid": "VUID-vkCmdWriteBufferMarkerAMD-pipelineStage-04079",
"text": " If the <a href=\"#features-transformFeedback\">transform feedback</a> feature is not enabled, <code>pipelineStage</code> <strong class=\"purple\">must</strong> not be <code>VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT</code>"
}
],
"(VK_NV_mesh_shader)": [
{
"vuid": "VUID-vkCmdWriteBufferMarkerAMD-pipelineStage-04080",
"text": " If the <a href=\"#features-meshShader\">mesh shaders</a> feature is not enabled, <code>pipelineStage</code> <strong class=\"purple\">must</strong> not be <code>VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV</code> or <code>VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV</code>"
}
],
"(VK_NV_shading_rate_image)": [
{
"vuid": "VUID-vkCmdWriteBufferMarkerAMD-pipelineStage-04081",
"text": " If the <a href=\"#features-shadingRateImage\">shading rate image</a> feature is not enabled, <code>pipelineStage</code> <strong class=\"purple\">must</strong> not be <code>VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV</code>"
}
],
"(VK_AMD_buffer_marker)": [
{
"vuid": "VUID-vkCmdWriteBufferMarkerAMD-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> 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 <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdWriteBufferMarkerAMD-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"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 <a href=\"#features-geometryShader\">geometry shaders</a> 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 <a href=\"#features-tessellationShader\">tessellation shaders</a> 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"
}
]
},
"vkCmdSetPrimitiveTopologyEXT": {
"(VK_EXT_extended_dynamic_state)": [
{
"vuid": "VUID-vkCmdSetPrimitiveTopologyEXT-None-03347",
"text": " The <a href=\"#features-extendedDynamicState\">extendedDynamicState</a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkCmdSetPrimitiveTopologyEXT-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdSetPrimitiveTopologyEXT-primitiveTopology-parameter",
"text": " <code>primitiveTopology</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPrimitiveTopology\">VkPrimitiveTopology</a> value"
},
{
"vuid": "VUID-vkCmdSetPrimitiveTopologyEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdSetPrimitiveTopologyEXT-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
}
]
},
"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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdBindIndexBuffer-buffer-parameter",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> 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 <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)": [
{
"vuid": "VUID-vkCmdBindIndexBuffer-indexType-02507",
"text": " <code>indexType</code> <strong class=\"purple\">must</strong> not be <code>VK_INDEX_TYPE_NONE_KHR</code>"
}
],
"(VK_EXT_index_type_uint8)": [
{
"vuid": "VUID-vkCmdBindIndexBuffer-indexType-02765",
"text": " If <code>indexType</code> is <code>VK_INDEX_TYPE_UINT8_EXT</code>, the <a href=\"#features-indexTypeUint8\">indexTypeUint8</a> feature <strong class=\"purple\">must</strong> be enabled"
}
]
},
"vkCmdDraw": {
"core": [
{
"vuid": "VUID-vkCmdDraw-None-02690",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_LINEAR</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT</code>"
},
{
"vuid": "VUID-vkCmdDraw-None-02691",
"text": " If a <code>VkImageView</code> is accessed using atomic operations as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT</code>"
},
{
"vuid": "VUID-vkCmdDraw-None-02697",
"text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdDraw-None-02698",
"text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a push constant value <strong class=\"purple\">must</strong> have been set for the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdDraw-None-02699",
"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 <code>VkPipeline</code> bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdDraw-None-02700",
"text": " A valid pipeline <strong class=\"purple\">must</strong> be bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdDraw-commandBuffer-02701",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command requires any dynamic state, that state <strong class=\"purple\">must</strong> have been set for <code>commandBuffer</code>, and done so after any previously bound pipeline with the corresponding state not specified as dynamic"
},
{
"vuid": "VUID-vkCmdDraw-None-02859",
"text": " There <strong class=\"purple\">must</strong> not have been any calls to dynamic state setting commands for any state not specified as dynamic in the <code>VkPipeline</code> object bound to the pipeline bind point used by this command, since that pipeline was bound"
},
{
"vuid": "VUID-vkCmdDraw-None-02702",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-02703",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-02704",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-02705",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdDraw-None-02706",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdDraw-None-04115",
"text": " If a <code>VkImageView</code> is accessed using <code>OpImageWrite</code> as a result of this command, then the <code>Type</code> of the <code>Texel</code> operand of that instruction <strong class=\"purple\">must</strong> have at least as many components as the image view&#8217;s format."
},
{
"vuid": "VUID-vkCmdDraw-renderPass-02684",
"text": " The current render pass <strong class=\"purple\">must</strong> be <a href=\"#renderpass-compatibility\">compatible</a> 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-02685",
"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-02686",
"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-02687",
"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-None-04007",
"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 either valid or <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a> buffers bound"
},
{
"vuid": "VUID-vkCmdDraw-None-04008",
"text": " If the <a href=\"#features-nullDescriptor\">nullDescriptor</a> feature is not enabled, all vertex input bindings accessed via vertex input variables declared in the vertex shader entry point&#8217;s interface <strong class=\"purple\">must</strong> not be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-vkCmdDraw-None-02721",
"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 <a href=\"#fxvertex-input\">Vertex Input Description</a>"
},
{
"vuid": "VUID-vkCmdDraw-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdDraw-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdDraw-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdDraw-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDraw-None-02692",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT</code>"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)+!(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDraw-None-02693",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</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_IMG_filter_cubic,VK_EXT_filter_cubic)+(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDraw-filterCubic-02694",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubic</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
},
{
"vuid": "VUID-vkCmdDraw-filterCubicMinmax-02695",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> with a reduction mode of either <code>VK_SAMPLER_REDUCTION_MODE_MIN</code> or <code>VK_SAMPLER_REDUCTION_MODE_MAX</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering together with minmax filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubicMinmax</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
}
],
"(VK_NV_corner_sampled_image)": [
{
"vuid": "VUID-vkCmdDraw-flags-02696",
"text": " Any <a href=\"#VkImage\">VkImage</a> created with a <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>::<code>flags</code> containing <code>VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV</code> sampled as a result of this command <strong class=\"purple\">must</strong> only be sampled using a <a href=\"#VkSamplerAddressMode\">VkSamplerAddressMode</a> of <code>VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdDraw-commandBuffer-02707",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, any resource accessed by the <code>VkPipeline</code> object bound to the pipeline bind point used by this command <strong class=\"purple\">must</strong> not be a protected resource"
},
{
"vuid": "VUID-vkCmdDraw-commandBuffer-02712",
"text": " If <code>commandBuffer</code> is a protected command buffer, any resource written to by the <code>VkPipeline</code> object bound to the pipeline bind point used by this command <strong class=\"purple\">must</strong> not be an unprotected resource"
},
{
"vuid": "VUID-vkCmdDraw-commandBuffer-02713",
"text": " If <code>commandBuffer</code> is a protected command buffer, pipeline stages other than the framebuffer-space and compute stages in the <code>VkPipeline</code> object bound to the pipeline bind point <strong class=\"purple\">must</strong> not write to any resource"
}
],
"(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-vkCmdDraw-maxMultiviewInstanceIndex-02688",
"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_EXT_sample_locations)": [
{
"vuid": "VUID-vkCmdDraw-sampleLocationsEnable-02689",
"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"
}
],
"(VK_EXT_extended_dynamic_state)": [
{
"vuid": "VUID-vkCmdDraw-viewportCount-03417",
"text": " If the bound graphics pipeline state was created with the <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> dynamic state enabled, but not the <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> dynamic state enabled, then then <a href=\"#vkCmdSetViewportWithCountEXT\">vkCmdSetViewportWithCountEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>viewportCount</code> parameter of <code>vkCmdSetViewportWithCountEXT</code> <strong class=\"purple\">must</strong> match the <code>VkPipelineViewportStateCreateInfo</code>::<code>scissorCount</code> of the pipeline"
},
{
"vuid": "VUID-vkCmdDraw-scissorCount-03418",
"text": " If the bound graphics pipeline state was created with the <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> dynamic state enabled, but not the <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> dynamic state enabled, then then <a href=\"#vkCmdSetScissorWithCountEXT\">vkCmdSetScissorWithCountEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>scissorCount</code> parameter of <code>vkCmdSetScissorWithCountEXT</code> <strong class=\"purple\">must</strong> match the <code>VkPipelineViewportStateCreateInfo</code>::<code>viewportCount</code> of the pipeline"
},
{
"vuid": "VUID-vkCmdDraw-viewportCount-03419",
"text": " If the bound graphics pipeline state was created with both the <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> and <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> dynamic states enabled then both <a href=\"#vkCmdSetViewportWithCountEXT\">vkCmdSetViewportWithCountEXT</a> and <a href=\"#vkCmdSetScissorWithCountEXT\">vkCmdSetScissorWithCountEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>viewportCount</code> parameter of <code>vkCmdSetViewportWithCountEXT</code> <strong class=\"purple\">must</strong> match the <code>scissorCount</code> parameter of <code>vkCmdSetScissorWithCountEXT</code>"
},
{
"vuid": "VUID-vkCmdDraw-primitiveTopology-03420",
"text": " If the bound graphics pipeline state was created with the <code>VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT</code> dynamic state enabled then <a href=\"#vkCmdSetPrimitiveTopologyEXT\">vkCmdSetPrimitiveTopologyEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>primitiveTopology</code> parameter of <code>vkCmdSetPrimitiveTopologyEXT</code> <strong class=\"purple\">must</strong> be of the same <a href=\"#drawing-primitive-topology-class\">topology class</a> as the pipeline <a href=\"#VkPipelineInputAssemblyStateCreateInfo\">VkPipelineInputAssemblyStateCreateInfo</a>::<code>topology</code> state"
}
]
},
"vkCmdDrawIndexed": {
"core": [
{
"vuid": "VUID-vkCmdDrawIndexed-None-02690",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_LINEAR</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexed-None-02691",
"text": " If a <code>VkImageView</code> is accessed using atomic operations as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexed-None-02697",
"text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdDrawIndexed-None-02698",
"text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a push constant value <strong class=\"purple\">must</strong> have been set for the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdDrawIndexed-None-02699",
"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 <code>VkPipeline</code> bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdDrawIndexed-None-02700",
"text": " A valid pipeline <strong class=\"purple\">must</strong> be bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdDrawIndexed-commandBuffer-02701",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command requires any dynamic state, that state <strong class=\"purple\">must</strong> have been set for <code>commandBuffer</code>, and done so after any previously bound pipeline with the corresponding state not specified as dynamic"
},
{
"vuid": "VUID-vkCmdDrawIndexed-None-02859",
"text": " There <strong class=\"purple\">must</strong> not have been any calls to dynamic state setting commands for any state not specified as dynamic in the <code>VkPipeline</code> object bound to the pipeline bind point used by this command, since that pipeline was bound"
},
{
"vuid": "VUID-vkCmdDrawIndexed-None-02702",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-02703",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-02704",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-02705",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdDrawIndexed-None-02706",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdDrawIndexed-None-04115",
"text": " If a <code>VkImageView</code> is accessed using <code>OpImageWrite</code> as a result of this command, then the <code>Type</code> of the <code>Texel</code> operand of that instruction <strong class=\"purple\">must</strong> have at least as many components as the image view&#8217;s format."
},
{
"vuid": "VUID-vkCmdDrawIndexed-renderPass-02684",
"text": " The current render pass <strong class=\"purple\">must</strong> be <a href=\"#renderpass-compatibility\">compatible</a> 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-02685",
"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-02686",
"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-02687",
"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-None-04007",
"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 either valid or <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a> buffers bound"
},
{
"vuid": "VUID-vkCmdDrawIndexed-None-04008",
"text": " If the <a href=\"#features-nullDescriptor\">nullDescriptor</a> feature is not enabled, all vertex input bindings accessed via vertex input variables declared in the vertex shader entry point&#8217;s interface <strong class=\"purple\">must</strong> not be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-vkCmdDrawIndexed-None-02721",
"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 <a href=\"#fxvertex-input\">Vertex Input Description</a>"
},
{
"vuid": "VUID-vkCmdDrawIndexed-indexSize-00463",
"text": " <span class=\"eq\">(<code>indexSize</code> {times} (<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-vkCmdDrawIndexed-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdDrawIndexed-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdDrawIndexed-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdDrawIndexed-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDrawIndexed-None-02692",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT</code>"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)+!(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDrawIndexed-None-02693",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</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_IMG_filter_cubic,VK_EXT_filter_cubic)+(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDrawIndexed-filterCubic-02694",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubic</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexed-filterCubicMinmax-02695",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> with a reduction mode of either <code>VK_SAMPLER_REDUCTION_MODE_MIN</code> or <code>VK_SAMPLER_REDUCTION_MODE_MAX</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering together with minmax filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubicMinmax</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
}
],
"(VK_NV_corner_sampled_image)": [
{
"vuid": "VUID-vkCmdDrawIndexed-flags-02696",
"text": " Any <a href=\"#VkImage\">VkImage</a> created with a <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>::<code>flags</code> containing <code>VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV</code> sampled as a result of this command <strong class=\"purple\">must</strong> only be sampled using a <a href=\"#VkSamplerAddressMode\">VkSamplerAddressMode</a> of <code>VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdDrawIndexed-commandBuffer-02707",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, any resource accessed by the <code>VkPipeline</code> object bound to the pipeline bind point used by this command <strong class=\"purple\">must</strong> not be a protected resource"
},
{
"vuid": "VUID-vkCmdDrawIndexed-commandBuffer-02712",
"text": " If <code>commandBuffer</code> is a protected command buffer, any resource written to by the <code>VkPipeline</code> object bound to the pipeline bind point used by this command <strong class=\"purple\">must</strong> not be an unprotected resource"
},
{
"vuid": "VUID-vkCmdDrawIndexed-commandBuffer-02713",
"text": " If <code>commandBuffer</code> is a protected command buffer, pipeline stages other than the framebuffer-space and compute stages in the <code>VkPipeline</code> object bound to the pipeline bind point <strong class=\"purple\">must</strong> not write to any resource"
}
],
"(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-vkCmdDrawIndexed-maxMultiviewInstanceIndex-02688",
"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_EXT_sample_locations)": [
{
"vuid": "VUID-vkCmdDrawIndexed-sampleLocationsEnable-02689",
"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"
}
],
"(VK_EXT_extended_dynamic_state)": [
{
"vuid": "VUID-vkCmdDrawIndexed-viewportCount-03417",
"text": " If the bound graphics pipeline state was created with the <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> dynamic state enabled, but not the <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> dynamic state enabled, then then <a href=\"#vkCmdSetViewportWithCountEXT\">vkCmdSetViewportWithCountEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>viewportCount</code> parameter of <code>vkCmdSetViewportWithCountEXT</code> <strong class=\"purple\">must</strong> match the <code>VkPipelineViewportStateCreateInfo</code>::<code>scissorCount</code> of the pipeline"
},
{
"vuid": "VUID-vkCmdDrawIndexed-scissorCount-03418",
"text": " If the bound graphics pipeline state was created with the <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> dynamic state enabled, but not the <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> dynamic state enabled, then then <a href=\"#vkCmdSetScissorWithCountEXT\">vkCmdSetScissorWithCountEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>scissorCount</code> parameter of <code>vkCmdSetScissorWithCountEXT</code> <strong class=\"purple\">must</strong> match the <code>VkPipelineViewportStateCreateInfo</code>::<code>viewportCount</code> of the pipeline"
},
{
"vuid": "VUID-vkCmdDrawIndexed-viewportCount-03419",
"text": " If the bound graphics pipeline state was created with both the <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> and <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> dynamic states enabled then both <a href=\"#vkCmdSetViewportWithCountEXT\">vkCmdSetViewportWithCountEXT</a> and <a href=\"#vkCmdSetScissorWithCountEXT\">vkCmdSetScissorWithCountEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>viewportCount</code> parameter of <code>vkCmdSetViewportWithCountEXT</code> <strong class=\"purple\">must</strong> match the <code>scissorCount</code> parameter of <code>vkCmdSetScissorWithCountEXT</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexed-primitiveTopology-03420",
"text": " If the bound graphics pipeline state was created with the <code>VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT</code> dynamic state enabled then <a href=\"#vkCmdSetPrimitiveTopologyEXT\">vkCmdSetPrimitiveTopologyEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>primitiveTopology</code> parameter of <code>vkCmdSetPrimitiveTopologyEXT</code> <strong class=\"purple\">must</strong> be of the same <a href=\"#drawing-primitive-topology-class\">topology class</a> as the pipeline <a href=\"#VkPipelineInputAssemblyStateCreateInfo\">VkPipelineInputAssemblyStateCreateInfo</a>::<code>topology</code> state"
}
]
},
"vkCmdDrawIndirect": {
"core": [
{
"vuid": "VUID-vkCmdDrawIndirect-None-02690",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_LINEAR</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirect-None-02691",
"text": " If a <code>VkImageView</code> is accessed using atomic operations as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirect-None-02697",
"text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdDrawIndirect-None-02698",
"text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a push constant value <strong class=\"purple\">must</strong> have been set for the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdDrawIndirect-None-02699",
"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 <code>VkPipeline</code> bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdDrawIndirect-None-02700",
"text": " A valid pipeline <strong class=\"purple\">must</strong> be bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdDrawIndirect-commandBuffer-02701",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command requires any dynamic state, that state <strong class=\"purple\">must</strong> have been set for <code>commandBuffer</code>, and done so after any previously bound pipeline with the corresponding state not specified as dynamic"
},
{
"vuid": "VUID-vkCmdDrawIndirect-None-02859",
"text": " There <strong class=\"purple\">must</strong> not have been any calls to dynamic state setting commands for any state not specified as dynamic in the <code>VkPipeline</code> object bound to the pipeline bind point used by this command, since that pipeline was bound"
},
{
"vuid": "VUID-vkCmdDrawIndirect-None-02702",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-02703",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-02704",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-02705",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdDrawIndirect-None-02706",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdDrawIndirect-None-04115",
"text": " If a <code>VkImageView</code> is accessed using <code>OpImageWrite</code> as a result of this command, then the <code>Type</code> of the <code>Texel</code> operand of that instruction <strong class=\"purple\">must</strong> have at least as many components as the image view&#8217;s format."
},
{
"vuid": "VUID-vkCmdDrawIndirect-renderPass-02684",
"text": " The current render pass <strong class=\"purple\">must</strong> be <a href=\"#renderpass-compatibility\">compatible</a> 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-02685",
"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-02686",
"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-02687",
"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-None-04007",
"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 either valid or <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a> buffers bound"
},
{
"vuid": "VUID-vkCmdDrawIndirect-None-04008",
"text": " If the <a href=\"#features-nullDescriptor\">nullDescriptor</a> feature is not enabled, all vertex input bindings accessed via vertex input variables declared in the vertex shader entry point&#8217;s interface <strong class=\"purple\">must</strong> not be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-vkCmdDrawIndirect-None-02721",
"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 <a href=\"#fxvertex-input\">Vertex Input Description</a>"
},
{
"vuid": "VUID-vkCmdDrawIndirect-buffer-02708",
"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-02709",
"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-02710",
"text": " <code>offset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirect-drawCount-02718",
"text": " If the <a href=\"#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-drawCount-02719",
"text": " <code>drawCount</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxDrawIndirectCount</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirect-firstInstance-00478",
"text": " If the <a href=\"#features-drawIndirectFirstInstance\">drawIndirectFirstInstance</a> 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-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-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-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdDrawIndirect-buffer-parameter",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdDrawIndirect-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDrawIndirect-None-02692",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT</code>"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)+!(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDrawIndirect-None-02693",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</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_IMG_filter_cubic,VK_EXT_filter_cubic)+(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDrawIndirect-filterCubic-02694",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubic</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirect-filterCubicMinmax-02695",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> with a reduction mode of either <code>VK_SAMPLER_REDUCTION_MODE_MIN</code> or <code>VK_SAMPLER_REDUCTION_MODE_MAX</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering together with minmax filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubicMinmax</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
}
],
"(VK_NV_corner_sampled_image)": [
{
"vuid": "VUID-vkCmdDrawIndirect-flags-02696",
"text": " Any <a href=\"#VkImage\">VkImage</a> created with a <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>::<code>flags</code> containing <code>VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV</code> sampled as a result of this command <strong class=\"purple\">must</strong> only be sampled using a <a href=\"#VkSamplerAddressMode\">VkSamplerAddressMode</a> of <code>VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdDrawIndirect-commandBuffer-02707",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, any resource accessed by the <code>VkPipeline</code> object bound to the pipeline bind point used by this command <strong class=\"purple\">must</strong> not be a protected resource"
},
{
"vuid": "VUID-vkCmdDrawIndirect-commandBuffer-02711",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> not be a protected command buffer"
}
],
"(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-vkCmdDrawIndirect-maxMultiviewInstanceIndex-02688",
"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_EXT_sample_locations)": [
{
"vuid": "VUID-vkCmdDrawIndirect-sampleLocationsEnable-02689",
"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"
}
],
"(VK_EXT_extended_dynamic_state)": [
{
"vuid": "VUID-vkCmdDrawIndirect-viewportCount-03417",
"text": " If the bound graphics pipeline state was created with the <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> dynamic state enabled, but not the <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> dynamic state enabled, then then <a href=\"#vkCmdSetViewportWithCountEXT\">vkCmdSetViewportWithCountEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>viewportCount</code> parameter of <code>vkCmdSetViewportWithCountEXT</code> <strong class=\"purple\">must</strong> match the <code>VkPipelineViewportStateCreateInfo</code>::<code>scissorCount</code> of the pipeline"
},
{
"vuid": "VUID-vkCmdDrawIndirect-scissorCount-03418",
"text": " If the bound graphics pipeline state was created with the <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> dynamic state enabled, but not the <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> dynamic state enabled, then then <a href=\"#vkCmdSetScissorWithCountEXT\">vkCmdSetScissorWithCountEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>scissorCount</code> parameter of <code>vkCmdSetScissorWithCountEXT</code> <strong class=\"purple\">must</strong> match the <code>VkPipelineViewportStateCreateInfo</code>::<code>viewportCount</code> of the pipeline"
},
{
"vuid": "VUID-vkCmdDrawIndirect-viewportCount-03419",
"text": " If the bound graphics pipeline state was created with both the <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> and <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> dynamic states enabled then both <a href=\"#vkCmdSetViewportWithCountEXT\">vkCmdSetViewportWithCountEXT</a> and <a href=\"#vkCmdSetScissorWithCountEXT\">vkCmdSetScissorWithCountEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>viewportCount</code> parameter of <code>vkCmdSetViewportWithCountEXT</code> <strong class=\"purple\">must</strong> match the <code>scissorCount</code> parameter of <code>vkCmdSetScissorWithCountEXT</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirect-primitiveTopology-03420",
"text": " If the bound graphics pipeline state was created with the <code>VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT</code> dynamic state enabled then <a href=\"#vkCmdSetPrimitiveTopologyEXT\">vkCmdSetPrimitiveTopologyEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>primitiveTopology</code> parameter of <code>vkCmdSetPrimitiveTopologyEXT</code> <strong class=\"purple\">must</strong> be of the same <a href=\"#drawing-primitive-topology-class\">topology class</a> as the pipeline <a href=\"#VkPipelineInputAssemblyStateCreateInfo\">VkPipelineInputAssemblyStateCreateInfo</a>::<code>topology</code> state"
}
]
},
"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 <a href=\"#fxvertex-input\">Vertex Input Description</a>"
},
{
"vuid": "VUID-VkDrawIndirectCommand-firstInstance-00501",
"text": " If the <a href=\"#features-drawIndirectFirstInstance\">drawIndirectFirstInstance</a> feature is not enabled, <code>firstInstance</code> <strong class=\"purple\">must</strong> be <code>0</code>"
}
]
},
"vkCmdDrawIndirectCount": {
"core": [
{
"vuid": "VUID-vkCmdDrawIndirectCount-None-02690",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_LINEAR</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirectCount-None-02691",
"text": " If a <code>VkImageView</code> is accessed using atomic operations as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirectCount-None-02697",
"text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdDrawIndirectCount-None-02698",
"text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a push constant value <strong class=\"purple\">must</strong> have been set for the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdDrawIndirectCount-None-02699",
"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 <code>VkPipeline</code> bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdDrawIndirectCount-None-02700",
"text": " A valid pipeline <strong class=\"purple\">must</strong> be bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdDrawIndirectCount-commandBuffer-02701",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command requires any dynamic state, that state <strong class=\"purple\">must</strong> have been set for <code>commandBuffer</code>, and done so after any previously bound pipeline with the corresponding state not specified as dynamic"
},
{
"vuid": "VUID-vkCmdDrawIndirectCount-None-02859",
"text": " There <strong class=\"purple\">must</strong> not have been any calls to dynamic state setting commands for any state not specified as dynamic in the <code>VkPipeline</code> object bound to the pipeline bind point used by this command, since that pipeline was bound"
},
{
"vuid": "VUID-vkCmdDrawIndirectCount-None-02702",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-vkCmdDrawIndirectCount-None-02703",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-vkCmdDrawIndirectCount-None-02704",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-vkCmdDrawIndirectCount-None-02705",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdDrawIndirectCount-None-02706",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdDrawIndirectCount-None-04115",
"text": " If a <code>VkImageView</code> is accessed using <code>OpImageWrite</code> as a result of this command, then the <code>Type</code> of the <code>Texel</code> operand of that instruction <strong class=\"purple\">must</strong> have at least as many components as the image view&#8217;s format."
},
{
"vuid": "VUID-vkCmdDrawIndirectCount-renderPass-02684",
"text": " The current render pass <strong class=\"purple\">must</strong> be <a href=\"#renderpass-compatibility\">compatible</a> 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-vkCmdDrawIndirectCount-subpass-02685",
"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-vkCmdDrawIndirectCount-None-02686",
"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-vkCmdDrawIndirectCount-None-02687",
"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-vkCmdDrawIndirectCount-None-04007",
"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 either valid or <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a> buffers bound"
},
{
"vuid": "VUID-vkCmdDrawIndirectCount-None-04008",
"text": " If the <a href=\"#features-nullDescriptor\">nullDescriptor</a> feature is not enabled, all vertex input bindings accessed via vertex input variables declared in the vertex shader entry point&#8217;s interface <strong class=\"purple\">must</strong> not be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-vkCmdDrawIndirectCount-None-02721",
"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 <a href=\"#fxvertex-input\">Vertex Input Description</a>"
},
{
"vuid": "VUID-vkCmdDrawIndirectCount-buffer-02708",
"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-vkCmdDrawIndirectCount-buffer-02709",
"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-vkCmdDrawIndirectCount-offset-02710",
"text": " <code>offset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirectCount-countBuffer-02714",
"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-vkCmdDrawIndirectCount-countBuffer-02715",
"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-vkCmdDrawIndirectCount-countBufferOffset-02716",
"text": " <code>countBufferOffset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirectCount-countBuffer-02717",
"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-vkCmdDrawIndirectCount-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-vkCmdDrawIndirectCount-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-vkCmdDrawIndirectCount-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-vkCmdDrawIndirectCount-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>"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDrawIndirectCount-None-02692",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT</code>"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)+!(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDrawIndirectCount-None-02693",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</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_IMG_filter_cubic,VK_EXT_filter_cubic)+(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDrawIndirectCount-filterCubic-02694",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubic</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirectCount-filterCubicMinmax-02695",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> with a reduction mode of either <code>VK_SAMPLER_REDUCTION_MODE_MIN</code> or <code>VK_SAMPLER_REDUCTION_MODE_MAX</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering together with minmax filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubicMinmax</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
}
],
"(VK_NV_corner_sampled_image)": [
{
"vuid": "VUID-vkCmdDrawIndirectCount-flags-02696",
"text": " Any <a href=\"#VkImage\">VkImage</a> created with a <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>::<code>flags</code> containing <code>VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV</code> sampled as a result of this command <strong class=\"purple\">must</strong> only be sampled using a <a href=\"#VkSamplerAddressMode\">VkSamplerAddressMode</a> of <code>VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdDrawIndirectCount-commandBuffer-02707",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, any resource accessed by the <code>VkPipeline</code> object bound to the pipeline bind point used by this command <strong class=\"purple\">must</strong> not be a protected resource"
},
{
"vuid": "VUID-vkCmdDrawIndirectCount-commandBuffer-02711",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> not be a protected command buffer"
}
],
"(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-vkCmdDrawIndirectCount-maxMultiviewInstanceIndex-02688",
"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_EXT_sample_locations)": [
{
"vuid": "VUID-vkCmdDrawIndirectCount-sampleLocationsEnable-02689",
"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"
}
],
"(VK_EXT_extended_dynamic_state)": [
{
"vuid": "VUID-vkCmdDrawIndirectCount-viewportCount-03417",
"text": " If the bound graphics pipeline state was created with the <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> dynamic state enabled, but not the <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> dynamic state enabled, then then <a href=\"#vkCmdSetViewportWithCountEXT\">vkCmdSetViewportWithCountEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>viewportCount</code> parameter of <code>vkCmdSetViewportWithCountEXT</code> <strong class=\"purple\">must</strong> match the <code>VkPipelineViewportStateCreateInfo</code>::<code>scissorCount</code> of the pipeline"
},
{
"vuid": "VUID-vkCmdDrawIndirectCount-scissorCount-03418",
"text": " If the bound graphics pipeline state was created with the <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> dynamic state enabled, but not the <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> dynamic state enabled, then then <a href=\"#vkCmdSetScissorWithCountEXT\">vkCmdSetScissorWithCountEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>scissorCount</code> parameter of <code>vkCmdSetScissorWithCountEXT</code> <strong class=\"purple\">must</strong> match the <code>VkPipelineViewportStateCreateInfo</code>::<code>viewportCount</code> of the pipeline"
},
{
"vuid": "VUID-vkCmdDrawIndirectCount-viewportCount-03419",
"text": " If the bound graphics pipeline state was created with both the <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> and <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> dynamic states enabled then both <a href=\"#vkCmdSetViewportWithCountEXT\">vkCmdSetViewportWithCountEXT</a> and <a href=\"#vkCmdSetScissorWithCountEXT\">vkCmdSetScissorWithCountEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>viewportCount</code> parameter of <code>vkCmdSetViewportWithCountEXT</code> <strong class=\"purple\">must</strong> match the <code>scissorCount</code> parameter of <code>vkCmdSetScissorWithCountEXT</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirectCount-primitiveTopology-03420",
"text": " If the bound graphics pipeline state was created with the <code>VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT</code> dynamic state enabled then <a href=\"#vkCmdSetPrimitiveTopologyEXT\">vkCmdSetPrimitiveTopologyEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>primitiveTopology</code> parameter of <code>vkCmdSetPrimitiveTopologyEXT</code> <strong class=\"purple\">must</strong> be of the same <a href=\"#drawing-primitive-topology-class\">topology class</a> as the pipeline <a href=\"#VkPipelineInputAssemblyStateCreateInfo\">VkPipelineInputAssemblyStateCreateInfo</a>::<code>topology</code> state"
}
],
"(VK_VERSION_1_2)": [
{
"vuid": "VUID-vkCmdDrawIndirectCount-None-02836",
"text": " If <a href=\"#features-drawIndirectCount\">drawIndirectCount</a> is not enabled this function <strong class=\"purple\">must</strong> not be used"
}
],
"(VK_VERSION_1_2,VK_KHR_draw_indirect_count)": [
{
"vuid": "VUID-vkCmdDrawIndirectCount-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdDrawIndirectCount-buffer-parameter",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdDrawIndirectCount-countBuffer-parameter",
"text": " <code>countBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdDrawIndirectCount-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdDrawIndirectCount-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdDrawIndirectCount-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
},
{
"vuid": "VUID-vkCmdDrawIndirectCount-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 <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"vkCmdDrawIndexedIndirect": {
"core": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-None-02690",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_LINEAR</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-None-02691",
"text": " If a <code>VkImageView</code> is accessed using atomic operations as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-None-02697",
"text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-None-02698",
"text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a push constant value <strong class=\"purple\">must</strong> have been set for the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-None-02699",
"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 <code>VkPipeline</code> bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-None-02700",
"text": " A valid pipeline <strong class=\"purple\">must</strong> be bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02701",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command requires any dynamic state, that state <strong class=\"purple\">must</strong> have been set for <code>commandBuffer</code>, and done so after any previously bound pipeline with the corresponding state not specified as dynamic"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-None-02859",
"text": " There <strong class=\"purple\">must</strong> not have been any calls to dynamic state setting commands for any state not specified as dynamic in the <code>VkPipeline</code> object bound to the pipeline bind point used by this command, since that pipeline was bound"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-None-02702",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-02703",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-02704",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-02705",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-None-02706",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-None-04115",
"text": " If a <code>VkImageView</code> is accessed using <code>OpImageWrite</code> as a result of this command, then the <code>Type</code> of the <code>Texel</code> operand of that instruction <strong class=\"purple\">must</strong> have at least as many components as the image view&#8217;s format."
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-renderPass-02684",
"text": " The current render pass <strong class=\"purple\">must</strong> be <a href=\"#renderpass-compatibility\">compatible</a> 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-02685",
"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-02686",
"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-02687",
"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-None-04007",
"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 either valid or <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a> buffers bound"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-None-04008",
"text": " If the <a href=\"#features-nullDescriptor\">nullDescriptor</a> feature is not enabled, all vertex input bindings accessed via vertex input variables declared in the vertex shader entry point&#8217;s interface <strong class=\"purple\">must</strong> not be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-None-02721",
"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 <a href=\"#fxvertex-input\">Vertex Input Description</a>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-buffer-02708",
"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-02709",
"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-02710",
"text": " <code>offset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-drawCount-02718",
"text": " If the <a href=\"#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-drawCount-02719",
"text": " <code>drawCount</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxDrawIndirectCount</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-firstInstance-00530",
"text": " If the <a href=\"#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-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-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-buffer-parameter",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-None-02692",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT</code>"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)+!(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-None-02693",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</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_IMG_filter_cubic,VK_EXT_filter_cubic)+(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-filterCubic-02694",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubic</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-filterCubicMinmax-02695",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> with a reduction mode of either <code>VK_SAMPLER_REDUCTION_MODE_MIN</code> or <code>VK_SAMPLER_REDUCTION_MODE_MAX</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering together with minmax filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubicMinmax</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
}
],
"(VK_NV_corner_sampled_image)": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-flags-02696",
"text": " Any <a href=\"#VkImage\">VkImage</a> created with a <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>::<code>flags</code> containing <code>VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV</code> sampled as a result of this command <strong class=\"purple\">must</strong> only be sampled using a <a href=\"#VkSamplerAddressMode\">VkSamplerAddressMode</a> of <code>VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02707",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, any resource accessed by the <code>VkPipeline</code> object bound to the pipeline bind point used by this command <strong class=\"purple\">must</strong> not be a protected resource"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02711",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> not be a protected command buffer"
}
],
"(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-maxMultiviewInstanceIndex-02688",
"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_EXT_sample_locations)": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-sampleLocationsEnable-02689",
"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"
}
],
"(VK_EXT_extended_dynamic_state)": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-viewportCount-03417",
"text": " If the bound graphics pipeline state was created with the <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> dynamic state enabled, but not the <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> dynamic state enabled, then then <a href=\"#vkCmdSetViewportWithCountEXT\">vkCmdSetViewportWithCountEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>viewportCount</code> parameter of <code>vkCmdSetViewportWithCountEXT</code> <strong class=\"purple\">must</strong> match the <code>VkPipelineViewportStateCreateInfo</code>::<code>scissorCount</code> of the pipeline"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-scissorCount-03418",
"text": " If the bound graphics pipeline state was created with the <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> dynamic state enabled, but not the <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> dynamic state enabled, then then <a href=\"#vkCmdSetScissorWithCountEXT\">vkCmdSetScissorWithCountEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>scissorCount</code> parameter of <code>vkCmdSetScissorWithCountEXT</code> <strong class=\"purple\">must</strong> match the <code>VkPipelineViewportStateCreateInfo</code>::<code>viewportCount</code> of the pipeline"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-viewportCount-03419",
"text": " If the bound graphics pipeline state was created with both the <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> and <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> dynamic states enabled then both <a href=\"#vkCmdSetViewportWithCountEXT\">vkCmdSetViewportWithCountEXT</a> and <a href=\"#vkCmdSetScissorWithCountEXT\">vkCmdSetScissorWithCountEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>viewportCount</code> parameter of <code>vkCmdSetViewportWithCountEXT</code> <strong class=\"purple\">must</strong> match the <code>scissorCount</code> parameter of <code>vkCmdSetScissorWithCountEXT</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-primitiveTopology-03420",
"text": " If the bound graphics pipeline state was created with the <code>VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT</code> dynamic state enabled then <a href=\"#vkCmdSetPrimitiveTopologyEXT\">vkCmdSetPrimitiveTopologyEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>primitiveTopology</code> parameter of <code>vkCmdSetPrimitiveTopologyEXT</code> <strong class=\"purple\">must</strong> be of the same <a href=\"#drawing-primitive-topology-class\">topology class</a> as the pipeline <a href=\"#VkPipelineInputAssemblyStateCreateInfo\">VkPipelineInputAssemblyStateCreateInfo</a>::<code>topology</code> state"
}
],
"(VK_VERSION_1_2)": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirect-None-02837",
"text": " If <a href=\"#features-drawIndirectCount\">drawIndirectCount</a> is not enabled this function <strong class=\"purple\">must</strong> not be used"
}
]
},
"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 <a href=\"#fxvertex-input\">Vertex Input Description</a>"
},
{
"vuid": "VUID-VkDrawIndexedIndirectCommand-indexSize-00553",
"text": " <span class=\"eq\">(<code>indexSize</code> {times} (<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 <a href=\"#features-drawIndirectFirstInstance\">drawIndirectFirstInstance</a> feature is not enabled, <code>firstInstance</code> <strong class=\"purple\">must</strong> be <code>0</code>"
}
]
},
"vkCmdDrawIndexedIndirectCount": {
"core": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-02690",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_LINEAR</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-02691",
"text": " If a <code>VkImageView</code> is accessed using atomic operations as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-02697",
"text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-02698",
"text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a push constant value <strong class=\"purple\">must</strong> have been set for the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-02699",
"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 <code>VkPipeline</code> bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-02700",
"text": " A valid pipeline <strong class=\"purple\">must</strong> be bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02701",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command requires any dynamic state, that state <strong class=\"purple\">must</strong> have been set for <code>commandBuffer</code>, and done so after any previously bound pipeline with the corresponding state not specified as dynamic"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-02859",
"text": " There <strong class=\"purple\">must</strong> not have been any calls to dynamic state setting commands for any state not specified as dynamic in the <code>VkPipeline</code> object bound to the pipeline bind point used by this command, since that pipeline was bound"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-02702",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-vkCmdDrawIndexedIndirectCount-None-02703",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-vkCmdDrawIndexedIndirectCount-None-02704",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-vkCmdDrawIndexedIndirectCount-None-02705",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-02706",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-04115",
"text": " If a <code>VkImageView</code> is accessed using <code>OpImageWrite</code> as a result of this command, then the <code>Type</code> of the <code>Texel</code> operand of that instruction <strong class=\"purple\">must</strong> have at least as many components as the image view&#8217;s format."
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-renderPass-02684",
"text": " The current render pass <strong class=\"purple\">must</strong> be <a href=\"#renderpass-compatibility\">compatible</a> 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-vkCmdDrawIndexedIndirectCount-subpass-02685",
"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-vkCmdDrawIndexedIndirectCount-None-02686",
"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-vkCmdDrawIndexedIndirectCount-None-02687",
"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-vkCmdDrawIndexedIndirectCount-None-04007",
"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 either valid or <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a> buffers bound"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-04008",
"text": " If the <a href=\"#features-nullDescriptor\">nullDescriptor</a> feature is not enabled, all vertex input bindings accessed via vertex input variables declared in the vertex shader entry point&#8217;s interface <strong class=\"purple\">must</strong> not be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-02721",
"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 <a href=\"#fxvertex-input\">Vertex Input Description</a>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-buffer-02708",
"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-vkCmdDrawIndexedIndirectCount-buffer-02709",
"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-vkCmdDrawIndexedIndirectCount-offset-02710",
"text": " <code>offset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02714",
"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-vkCmdDrawIndexedIndirectCount-countBuffer-02715",
"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-vkCmdDrawIndexedIndirectCount-countBufferOffset-02716",
"text": " <code>countBufferOffset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02717",
"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-vkCmdDrawIndexedIndirectCount-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-vkCmdDrawIndexedIndirectCount-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-vkCmdDrawIndexedIndirectCount-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-vkCmdDrawIndexedIndirectCount-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>"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-02692",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT</code>"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)+!(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-02693",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</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_IMG_filter_cubic,VK_EXT_filter_cubic)+(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-filterCubic-02694",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubic</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-filterCubicMinmax-02695",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> with a reduction mode of either <code>VK_SAMPLER_REDUCTION_MODE_MIN</code> or <code>VK_SAMPLER_REDUCTION_MODE_MAX</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering together with minmax filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubicMinmax</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
}
],
"(VK_NV_corner_sampled_image)": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-flags-02696",
"text": " Any <a href=\"#VkImage\">VkImage</a> created with a <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>::<code>flags</code> containing <code>VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV</code> sampled as a result of this command <strong class=\"purple\">must</strong> only be sampled using a <a href=\"#VkSamplerAddressMode\">VkSamplerAddressMode</a> of <code>VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02707",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, any resource accessed by the <code>VkPipeline</code> object bound to the pipeline bind point used by this command <strong class=\"purple\">must</strong> not be a protected resource"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02711",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> not be a protected command buffer"
}
],
"(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-maxMultiviewInstanceIndex-02688",
"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_EXT_sample_locations)": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-sampleLocationsEnable-02689",
"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"
}
],
"(VK_EXT_extended_dynamic_state)": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03417",
"text": " If the bound graphics pipeline state was created with the <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> dynamic state enabled, but not the <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> dynamic state enabled, then then <a href=\"#vkCmdSetViewportWithCountEXT\">vkCmdSetViewportWithCountEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>viewportCount</code> parameter of <code>vkCmdSetViewportWithCountEXT</code> <strong class=\"purple\">must</strong> match the <code>VkPipelineViewportStateCreateInfo</code>::<code>scissorCount</code> of the pipeline"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-scissorCount-03418",
"text": " If the bound graphics pipeline state was created with the <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> dynamic state enabled, but not the <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> dynamic state enabled, then then <a href=\"#vkCmdSetScissorWithCountEXT\">vkCmdSetScissorWithCountEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>scissorCount</code> parameter of <code>vkCmdSetScissorWithCountEXT</code> <strong class=\"purple\">must</strong> match the <code>VkPipelineViewportStateCreateInfo</code>::<code>viewportCount</code> of the pipeline"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03419",
"text": " If the bound graphics pipeline state was created with both the <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> and <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> dynamic states enabled then both <a href=\"#vkCmdSetViewportWithCountEXT\">vkCmdSetViewportWithCountEXT</a> and <a href=\"#vkCmdSetScissorWithCountEXT\">vkCmdSetScissorWithCountEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>viewportCount</code> parameter of <code>vkCmdSetViewportWithCountEXT</code> <strong class=\"purple\">must</strong> match the <code>scissorCount</code> parameter of <code>vkCmdSetScissorWithCountEXT</code>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-primitiveTopology-03420",
"text": " If the bound graphics pipeline state was created with the <code>VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT</code> dynamic state enabled then <a href=\"#vkCmdSetPrimitiveTopologyEXT\">vkCmdSetPrimitiveTopologyEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>primitiveTopology</code> parameter of <code>vkCmdSetPrimitiveTopologyEXT</code> <strong class=\"purple\">must</strong> be of the same <a href=\"#drawing-primitive-topology-class\">topology class</a> as the pipeline <a href=\"#VkPipelineInputAssemblyStateCreateInfo\">VkPipelineInputAssemblyStateCreateInfo</a>::<code>topology</code> state"
}
],
"(VK_VERSION_1_2,VK_KHR_draw_indirect_count)": [
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-buffer-parameter",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-parameter",
"text": " <code>countBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
},
{
"vuid": "VUID-vkCmdDrawIndexedIndirectCount-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 <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"vkCmdDrawIndirectByteCountEXT": {
"core": [
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-02690",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_LINEAR</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-02691",
"text": " If a <code>VkImageView</code> is accessed using atomic operations as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-02697",
"text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-02698",
"text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a push constant value <strong class=\"purple\">must</strong> have been set for the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-02699",
"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 <code>VkPipeline</code> bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-02700",
"text": " A valid pipeline <strong class=\"purple\">must</strong> be bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02701",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command requires any dynamic state, that state <strong class=\"purple\">must</strong> have been set for <code>commandBuffer</code>, and done so after any previously bound pipeline with the corresponding state not specified as dynamic"
},
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-02859",
"text": " There <strong class=\"purple\">must</strong> not have been any calls to dynamic state setting commands for any state not specified as dynamic in the <code>VkPipeline</code> object bound to the pipeline bind point used by this command, since that pipeline was bound"
},
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-02702",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-vkCmdDrawIndirectByteCountEXT-None-02703",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-vkCmdDrawIndirectByteCountEXT-None-02704",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-vkCmdDrawIndirectByteCountEXT-None-02705",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-02706",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-04115",
"text": " If a <code>VkImageView</code> is accessed using <code>OpImageWrite</code> as a result of this command, then the <code>Type</code> of the <code>Texel</code> operand of that instruction <strong class=\"purple\">must</strong> have at least as many components as the image view&#8217;s format."
},
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-renderPass-02684",
"text": " The current render pass <strong class=\"purple\">must</strong> be <a href=\"#renderpass-compatibility\">compatible</a> 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-vkCmdDrawIndirectByteCountEXT-subpass-02685",
"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-vkCmdDrawIndirectByteCountEXT-None-02686",
"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-vkCmdDrawIndirectByteCountEXT-None-02687",
"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-vkCmdDrawIndirectByteCountEXT-None-04007",
"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 either valid or <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a> buffers bound"
},
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-04008",
"text": " If the <a href=\"#features-nullDescriptor\">nullDescriptor</a> feature is not enabled, all vertex input bindings accessed via vertex input variables declared in the vertex shader entry point&#8217;s interface <strong class=\"purple\">must</strong> not be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-02721",
"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 <a href=\"#fxvertex-input\">Vertex Input Description</a>"
},
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedback-02287",
"text": " <code>VkPhysicalDeviceTransformFeedbackFeaturesEXT</code>::<code>transformFeedback</code> <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedbackDraw-02288",
"text": " The implementation <strong class=\"purple\">must</strong> support <code>VkPhysicalDeviceTransformFeedbackPropertiesEXT</code>::<code>transformFeedbackDraw</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-vertexStride-02289",
"text": " <code>vertexStride</code> <strong class=\"purple\">must</strong> be greater than 0 and less than or equal to <a href=\"#VkPhysicalDeviceLimits\">VkPhysicalDeviceLimits</a>::<code>maxTransformFeedbackBufferDataStride</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-02290",
"text": " <code>counterBuffer</code> <strong class=\"purple\">must</strong> have been created with the <code>VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT</code> bit set"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-02692",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT</code>"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)+!(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-02693",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</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_IMG_filter_cubic,VK_EXT_filter_cubic)+(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-filterCubic-02694",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubic</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-filterCubicMinmax-02695",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> with a reduction mode of either <code>VK_SAMPLER_REDUCTION_MODE_MIN</code> or <code>VK_SAMPLER_REDUCTION_MODE_MAX</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering together with minmax filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubicMinmax</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
}
],
"(VK_NV_corner_sampled_image)": [
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-flags-02696",
"text": " Any <a href=\"#VkImage\">VkImage</a> created with a <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>::<code>flags</code> containing <code>VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV</code> sampled as a result of this command <strong class=\"purple\">must</strong> only be sampled using a <a href=\"#VkSamplerAddressMode\">VkSamplerAddressMode</a> of <code>VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02707",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, any resource accessed by the <code>VkPipeline</code> object bound to the pipeline bind point used by this command <strong class=\"purple\">must</strong> not be a protected resource"
},
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02646",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> not be a protected command buffer"
}
],
"(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-maxMultiviewInstanceIndex-02688",
"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_EXT_sample_locations)": [
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-sampleLocationsEnable-02689",
"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"
}
],
"(VK_EXT_extended_dynamic_state)": [
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03417",
"text": " If the bound graphics pipeline state was created with the <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> dynamic state enabled, but not the <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> dynamic state enabled, then then <a href=\"#vkCmdSetViewportWithCountEXT\">vkCmdSetViewportWithCountEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>viewportCount</code> parameter of <code>vkCmdSetViewportWithCountEXT</code> <strong class=\"purple\">must</strong> match the <code>VkPipelineViewportStateCreateInfo</code>::<code>scissorCount</code> of the pipeline"
},
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-scissorCount-03418",
"text": " If the bound graphics pipeline state was created with the <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> dynamic state enabled, but not the <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> dynamic state enabled, then then <a href=\"#vkCmdSetScissorWithCountEXT\">vkCmdSetScissorWithCountEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>scissorCount</code> parameter of <code>vkCmdSetScissorWithCountEXT</code> <strong class=\"purple\">must</strong> match the <code>VkPipelineViewportStateCreateInfo</code>::<code>viewportCount</code> of the pipeline"
},
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03419",
"text": " If the bound graphics pipeline state was created with both the <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> and <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> dynamic states enabled then both <a href=\"#vkCmdSetViewportWithCountEXT\">vkCmdSetViewportWithCountEXT</a> and <a href=\"#vkCmdSetScissorWithCountEXT\">vkCmdSetScissorWithCountEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>viewportCount</code> parameter of <code>vkCmdSetViewportWithCountEXT</code> <strong class=\"purple\">must</strong> match the <code>scissorCount</code> parameter of <code>vkCmdSetScissorWithCountEXT</code>"
},
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-primitiveTopology-03420",
"text": " If the bound graphics pipeline state was created with the <code>VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT</code> dynamic state enabled then <a href=\"#vkCmdSetPrimitiveTopologyEXT\">vkCmdSetPrimitiveTopologyEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>primitiveTopology</code> parameter of <code>vkCmdSetPrimitiveTopologyEXT</code> <strong class=\"purple\">must</strong> be of the same <a href=\"#drawing-primitive-topology-class\">topology class</a> as the pipeline <a href=\"#VkPipelineInputAssemblyStateCreateInfo\">VkPipelineInputAssemblyStateCreateInfo</a>::<code>topology</code> state"
}
],
"(VK_EXT_transform_feedback)": [
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-parameter",
"text": " <code>counterBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
},
{
"vuid": "VUID-vkCmdDrawIndirectByteCountEXT-commonparent",
"text": " Both of <code>commandBuffer</code>, and <code>counterBuffer</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"vkCmdBeginConditionalRenderingEXT": {
"(VK_EXT_conditional_rendering)": [
{
"vuid": "VUID-vkCmdBeginConditionalRenderingEXT-None-01980",
"text": " Conditional rendering <strong class=\"purple\">must</strong> not already be <a href=\"#active-conditional-rendering\">active</a>"
},
{
"vuid": "VUID-vkCmdBeginConditionalRenderingEXT-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdBeginConditionalRenderingEXT-pConditionalRenderingBegin-parameter",
"text": " <code>pConditionalRenderingBegin</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkConditionalRenderingBeginInfoEXT\">VkConditionalRenderingBeginInfoEXT</a> structure"
},
{
"vuid": "VUID-vkCmdBeginConditionalRenderingEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdBeginConditionalRenderingEXT-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
}
]
},
"VkConditionalRenderingBeginInfoEXT": {
"(VK_EXT_conditional_rendering)": [
{
"vuid": "VUID-VkConditionalRenderingBeginInfoEXT-buffer-01981",
"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-VkConditionalRenderingBeginInfoEXT-buffer-01982",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> have been created with the <code>VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT</code> bit set"
},
{
"vuid": "VUID-VkConditionalRenderingBeginInfoEXT-offset-01983",
"text": " <code>offset</code> <strong class=\"purple\">must</strong> be less than the size of <code>buffer</code> by at least 32 bits"
},
{
"vuid": "VUID-VkConditionalRenderingBeginInfoEXT-offset-01984",
"text": " <code>offset</code> <strong class=\"purple\">must</strong> be a multiple of 4"
},
{
"vuid": "VUID-VkConditionalRenderingBeginInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT</code>"
},
{
"vuid": "VUID-VkConditionalRenderingBeginInfoEXT-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkConditionalRenderingBeginInfoEXT-buffer-parameter",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-VkConditionalRenderingBeginInfoEXT-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkConditionalRenderingFlagBitsEXT\">VkConditionalRenderingFlagBitsEXT</a> values"
}
]
},
"vkCmdEndConditionalRenderingEXT": {
"(VK_EXT_conditional_rendering)": [
{
"vuid": "VUID-vkCmdEndConditionalRenderingEXT-None-01985",
"text": " Conditional rendering <strong class=\"purple\">must</strong> be <a href=\"#active-conditional-rendering\">active</a>"
},
{
"vuid": "VUID-vkCmdEndConditionalRenderingEXT-None-01986",
"text": " If conditional rendering was made <a href=\"#active-conditional-rendering\">active</a> outside of a render pass instance, it <strong class=\"purple\">must</strong> not be ended inside a render pass instance"
},
{
"vuid": "VUID-vkCmdEndConditionalRenderingEXT-None-01987",
"text": " If conditional rendering was made <a href=\"#active-conditional-rendering\">active</a> within a subpass it <strong class=\"purple\">must</strong> be ended in the same subpass"
},
{
"vuid": "VUID-vkCmdEndConditionalRenderingEXT-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdEndConditionalRenderingEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdEndConditionalRenderingEXT-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics, or compute operations"
}
]
},
"vkCmdDrawMeshTasksNV": {
"core": [
{
"vuid": "VUID-vkCmdDrawMeshTasksNV-None-02690",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_LINEAR</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT</code>"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksNV-None-02691",
"text": " If a <code>VkImageView</code> is accessed using atomic operations as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT</code>"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksNV-None-02697",
"text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksNV-None-02698",
"text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a push constant value <strong class=\"purple\">must</strong> have been set for the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksNV-None-02699",
"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 <code>VkPipeline</code> bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksNV-None-02700",
"text": " A valid pipeline <strong class=\"purple\">must</strong> be bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksNV-commandBuffer-02701",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command requires any dynamic state, that state <strong class=\"purple\">must</strong> have been set for <code>commandBuffer</code>, and done so after any previously bound pipeline with the corresponding state not specified as dynamic"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksNV-None-02859",
"text": " There <strong class=\"purple\">must</strong> not have been any calls to dynamic state setting commands for any state not specified as dynamic in the <code>VkPipeline</code> object bound to the pipeline bind point used by this command, since that pipeline was bound"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksNV-None-02702",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-vkCmdDrawMeshTasksNV-None-02703",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-vkCmdDrawMeshTasksNV-None-02704",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-vkCmdDrawMeshTasksNV-None-02705",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksNV-None-02706",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksNV-None-04115",
"text": " If a <code>VkImageView</code> is accessed using <code>OpImageWrite</code> as a result of this command, then the <code>Type</code> of the <code>Texel</code> operand of that instruction <strong class=\"purple\">must</strong> have at least as many components as the image view&#8217;s format."
},
{
"vuid": "VUID-vkCmdDrawMeshTasksNV-renderPass-02684",
"text": " The current render pass <strong class=\"purple\">must</strong> be <a href=\"#renderpass-compatibility\">compatible</a> 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-vkCmdDrawMeshTasksNV-subpass-02685",
"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-vkCmdDrawMeshTasksNV-None-02686",
"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-vkCmdDrawMeshTasksNV-None-02687",
"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-vkCmdDrawMeshTasksNV-taskCount-02119",
"text": " <code>taskCount</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceMeshShaderPropertiesNV</code>::<code>maxDrawMeshTasksCount</code>"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDrawMeshTasksNV-None-02692",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT</code>"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)+!(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDrawMeshTasksNV-None-02693",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</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_IMG_filter_cubic,VK_EXT_filter_cubic)+(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDrawMeshTasksNV-filterCubic-02694",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubic</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksNV-filterCubicMinmax-02695",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> with a reduction mode of either <code>VK_SAMPLER_REDUCTION_MODE_MIN</code> or <code>VK_SAMPLER_REDUCTION_MODE_MAX</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering together with minmax filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubicMinmax</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
}
],
"(VK_NV_corner_sampled_image)": [
{
"vuid": "VUID-vkCmdDrawMeshTasksNV-flags-02696",
"text": " Any <a href=\"#VkImage\">VkImage</a> created with a <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>::<code>flags</code> containing <code>VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV</code> sampled as a result of this command <strong class=\"purple\">must</strong> only be sampled using a <a href=\"#VkSamplerAddressMode\">VkSamplerAddressMode</a> of <code>VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdDrawMeshTasksNV-commandBuffer-02707",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, any resource accessed by the <code>VkPipeline</code> object bound to the pipeline bind point used by this command <strong class=\"purple\">must</strong> not be a protected resource"
}
],
"(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-vkCmdDrawMeshTasksNV-maxMultiviewInstanceIndex-02688",
"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_EXT_sample_locations)": [
{
"vuid": "VUID-vkCmdDrawMeshTasksNV-sampleLocationsEnable-02689",
"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"
}
],
"(VK_EXT_extended_dynamic_state)": [
{
"vuid": "VUID-vkCmdDrawMeshTasksNV-viewportCount-03417",
"text": " If the bound graphics pipeline state was created with the <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> dynamic state enabled, but not the <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> dynamic state enabled, then then <a href=\"#vkCmdSetViewportWithCountEXT\">vkCmdSetViewportWithCountEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>viewportCount</code> parameter of <code>vkCmdSetViewportWithCountEXT</code> <strong class=\"purple\">must</strong> match the <code>VkPipelineViewportStateCreateInfo</code>::<code>scissorCount</code> of the pipeline"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksNV-scissorCount-03418",
"text": " If the bound graphics pipeline state was created with the <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> dynamic state enabled, but not the <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> dynamic state enabled, then then <a href=\"#vkCmdSetScissorWithCountEXT\">vkCmdSetScissorWithCountEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>scissorCount</code> parameter of <code>vkCmdSetScissorWithCountEXT</code> <strong class=\"purple\">must</strong> match the <code>VkPipelineViewportStateCreateInfo</code>::<code>viewportCount</code> of the pipeline"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksNV-viewportCount-03419",
"text": " If the bound graphics pipeline state was created with both the <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> and <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> dynamic states enabled then both <a href=\"#vkCmdSetViewportWithCountEXT\">vkCmdSetViewportWithCountEXT</a> and <a href=\"#vkCmdSetScissorWithCountEXT\">vkCmdSetScissorWithCountEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>viewportCount</code> parameter of <code>vkCmdSetViewportWithCountEXT</code> <strong class=\"purple\">must</strong> match the <code>scissorCount</code> parameter of <code>vkCmdSetScissorWithCountEXT</code>"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksNV-primitiveTopology-03420",
"text": " If the bound graphics pipeline state was created with the <code>VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT</code> dynamic state enabled then <a href=\"#vkCmdSetPrimitiveTopologyEXT\">vkCmdSetPrimitiveTopologyEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>primitiveTopology</code> parameter of <code>vkCmdSetPrimitiveTopologyEXT</code> <strong class=\"purple\">must</strong> be of the same <a href=\"#drawing-primitive-topology-class\">topology class</a> as the pipeline <a href=\"#VkPipelineInputAssemblyStateCreateInfo\">VkPipelineInputAssemblyStateCreateInfo</a>::<code>topology</code> state"
}
],
"(VK_NV_mesh_shader)": [
{
"vuid": "VUID-vkCmdDrawMeshTasksNV-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksNV-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksNV-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksNV-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
}
]
},
"vkCmdDrawMeshTasksIndirectNV": {
"core": [
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-02690",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_LINEAR</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT</code>"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-02691",
"text": " If a <code>VkImageView</code> is accessed using atomic operations as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT</code>"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-02697",
"text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-02698",
"text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a push constant value <strong class=\"purple\">must</strong> have been set for the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-02699",
"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 <code>VkPipeline</code> bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-02700",
"text": " A valid pipeline <strong class=\"purple\">must</strong> be bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02701",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command requires any dynamic state, that state <strong class=\"purple\">must</strong> have been set for <code>commandBuffer</code>, and done so after any previously bound pipeline with the corresponding state not specified as dynamic"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-02859",
"text": " There <strong class=\"purple\">must</strong> not have been any calls to dynamic state setting commands for any state not specified as dynamic in the <code>VkPipeline</code> object bound to the pipeline bind point used by this command, since that pipeline was bound"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-02702",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-vkCmdDrawMeshTasksIndirectNV-None-02703",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-vkCmdDrawMeshTasksIndirectNV-None-02704",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-vkCmdDrawMeshTasksIndirectNV-None-02705",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-02706",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-04115",
"text": " If a <code>VkImageView</code> is accessed using <code>OpImageWrite</code> as a result of this command, then the <code>Type</code> of the <code>Texel</code> operand of that instruction <strong class=\"purple\">must</strong> have at least as many components as the image view&#8217;s format."
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-renderPass-02684",
"text": " The current render pass <strong class=\"purple\">must</strong> be <a href=\"#renderpass-compatibility\">compatible</a> 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-vkCmdDrawMeshTasksIndirectNV-subpass-02685",
"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-vkCmdDrawMeshTasksIndirectNV-None-02686",
"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-vkCmdDrawMeshTasksIndirectNV-None-02687",
"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-vkCmdDrawMeshTasksIndirectNV-buffer-02708",
"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-vkCmdDrawMeshTasksIndirectNV-buffer-02709",
"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-vkCmdDrawMeshTasksIndirectNV-offset-02710",
"text": " <code>offset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02718",
"text": " If the <a href=\"#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-vkCmdDrawMeshTasksIndirectNV-drawCount-02719",
"text": " <code>drawCount</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxDrawIndirectCount</code>"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02146",
"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>VkDrawMeshTasksIndirectCommandNV</code>)"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02156",
"text": " If <code>drawCount</code> is equal to <code>1</code>, <span class=\"eq\">(<code>offset</code> &#43; <code>sizeof</code>(<a href=\"#VkDrawMeshTasksIndirectCommandNV\">VkDrawMeshTasksIndirectCommandNV</a>))</span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02157",
"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=\"#VkDrawMeshTasksIndirectCommandNV\">VkDrawMeshTasksIndirectCommandNV</a>))</span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-02692",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT</code>"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)+!(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-02693",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</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_IMG_filter_cubic,VK_EXT_filter_cubic)+(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-filterCubic-02694",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubic</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-filterCubicMinmax-02695",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> with a reduction mode of either <code>VK_SAMPLER_REDUCTION_MODE_MIN</code> or <code>VK_SAMPLER_REDUCTION_MODE_MAX</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering together with minmax filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubicMinmax</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
}
],
"(VK_NV_corner_sampled_image)": [
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-flags-02696",
"text": " Any <a href=\"#VkImage\">VkImage</a> created with a <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>::<code>flags</code> containing <code>VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV</code> sampled as a result of this command <strong class=\"purple\">must</strong> only be sampled using a <a href=\"#VkSamplerAddressMode\">VkSamplerAddressMode</a> of <code>VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02707",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, any resource accessed by the <code>VkPipeline</code> object bound to the pipeline bind point used by this command <strong class=\"purple\">must</strong> not be a protected resource"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02711",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> not be a protected command buffer"
}
],
"(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-maxMultiviewInstanceIndex-02688",
"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_EXT_sample_locations)": [
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-sampleLocationsEnable-02689",
"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"
}
],
"(VK_EXT_extended_dynamic_state)": [
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03417",
"text": " If the bound graphics pipeline state was created with the <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> dynamic state enabled, but not the <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> dynamic state enabled, then then <a href=\"#vkCmdSetViewportWithCountEXT\">vkCmdSetViewportWithCountEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>viewportCount</code> parameter of <code>vkCmdSetViewportWithCountEXT</code> <strong class=\"purple\">must</strong> match the <code>VkPipelineViewportStateCreateInfo</code>::<code>scissorCount</code> of the pipeline"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-scissorCount-03418",
"text": " If the bound graphics pipeline state was created with the <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> dynamic state enabled, but not the <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> dynamic state enabled, then then <a href=\"#vkCmdSetScissorWithCountEXT\">vkCmdSetScissorWithCountEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>scissorCount</code> parameter of <code>vkCmdSetScissorWithCountEXT</code> <strong class=\"purple\">must</strong> match the <code>VkPipelineViewportStateCreateInfo</code>::<code>viewportCount</code> of the pipeline"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03419",
"text": " If the bound graphics pipeline state was created with both the <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> and <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> dynamic states enabled then both <a href=\"#vkCmdSetViewportWithCountEXT\">vkCmdSetViewportWithCountEXT</a> and <a href=\"#vkCmdSetScissorWithCountEXT\">vkCmdSetScissorWithCountEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>viewportCount</code> parameter of <code>vkCmdSetViewportWithCountEXT</code> <strong class=\"purple\">must</strong> match the <code>scissorCount</code> parameter of <code>vkCmdSetScissorWithCountEXT</code>"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-primitiveTopology-03420",
"text": " If the bound graphics pipeline state was created with the <code>VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT</code> dynamic state enabled then <a href=\"#vkCmdSetPrimitiveTopologyEXT\">vkCmdSetPrimitiveTopologyEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>primitiveTopology</code> parameter of <code>vkCmdSetPrimitiveTopologyEXT</code> <strong class=\"purple\">must</strong> be of the same <a href=\"#drawing-primitive-topology-class\">topology class</a> as the pipeline <a href=\"#VkPipelineInputAssemblyStateCreateInfo\">VkPipelineInputAssemblyStateCreateInfo</a>::<code>topology</code> state"
}
],
"(VK_NV_mesh_shader)": [
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-parameter",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-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 <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"VkDrawMeshTasksIndirectCommandNV": {
"(VK_NV_mesh_shader)": [
{
"vuid": "VUID-VkDrawMeshTasksIndirectCommandNV-taskCount-02175",
"text": " <code>taskCount</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceMeshShaderPropertiesNV</code>::<code>maxDrawMeshTasksCount</code>"
}
]
},
"vkCmdDrawMeshTasksIndirectCountNV": {
"core": [
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02690",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_LINEAR</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT</code>"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02691",
"text": " If a <code>VkImageView</code> is accessed using atomic operations as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT</code>"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02697",
"text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02698",
"text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a push constant value <strong class=\"purple\">must</strong> have been set for the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02699",
"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 <code>VkPipeline</code> bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02700",
"text": " A valid pipeline <strong class=\"purple\">must</strong> be bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02701",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command requires any dynamic state, that state <strong class=\"purple\">must</strong> have been set for <code>commandBuffer</code>, and done so after any previously bound pipeline with the corresponding state not specified as dynamic"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02859",
"text": " There <strong class=\"purple\">must</strong> not have been any calls to dynamic state setting commands for any state not specified as dynamic in the <code>VkPipeline</code> object bound to the pipeline bind point used by this command, since that pipeline was bound"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02702",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-vkCmdDrawMeshTasksIndirectCountNV-None-02703",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-vkCmdDrawMeshTasksIndirectCountNV-None-02704",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-vkCmdDrawMeshTasksIndirectCountNV-None-02705",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02706",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04115",
"text": " If a <code>VkImageView</code> is accessed using <code>OpImageWrite</code> as a result of this command, then the <code>Type</code> of the <code>Texel</code> operand of that instruction <strong class=\"purple\">must</strong> have at least as many components as the image view&#8217;s format."
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-renderPass-02684",
"text": " The current render pass <strong class=\"purple\">must</strong> be <a href=\"#renderpass-compatibility\">compatible</a> 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-vkCmdDrawMeshTasksIndirectCountNV-subpass-02685",
"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-vkCmdDrawMeshTasksIndirectCountNV-None-02686",
"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-vkCmdDrawMeshTasksIndirectCountNV-None-02687",
"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-vkCmdDrawMeshTasksIndirectCountNV-buffer-02708",
"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-vkCmdDrawMeshTasksIndirectCountNV-buffer-02709",
"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-vkCmdDrawMeshTasksIndirectCountNV-offset-02710",
"text": " <code>offset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02714",
"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-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02715",
"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-vkCmdDrawMeshTasksIndirectCountNV-countBufferOffset-02716",
"text": " <code>countBufferOffset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02717",
"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-vkCmdDrawMeshTasksIndirectCountNV-stride-02182",
"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>VkDrawMeshTasksIndirectCommandNV</code>)"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxDrawCount-02183",
"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>VkDrawMeshTasksIndirectCommandNV</code>))</span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02191",
"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>VkDrawMeshTasksIndirectCommandNV</code>))</span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02192",
"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>VkDrawMeshTasksIndirectCommandNV</code>))</span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02692",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT</code>"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)+!(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02693",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</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_IMG_filter_cubic,VK_EXT_filter_cubic)+(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubic-02694",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubic</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubicMinmax-02695",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> with a reduction mode of either <code>VK_SAMPLER_REDUCTION_MODE_MIN</code> or <code>VK_SAMPLER_REDUCTION_MODE_MAX</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering together with minmax filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubicMinmax</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
}
],
"(VK_NV_corner_sampled_image)": [
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-flags-02696",
"text": " Any <a href=\"#VkImage\">VkImage</a> created with a <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>::<code>flags</code> containing <code>VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV</code> sampled as a result of this command <strong class=\"purple\">must</strong> only be sampled using a <a href=\"#VkSamplerAddressMode\">VkSamplerAddressMode</a> of <code>VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02707",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, any resource accessed by the <code>VkPipeline</code> object bound to the pipeline bind point used by this command <strong class=\"purple\">must</strong> not be a protected resource"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02711",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> not be a protected command buffer"
}
],
"(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxMultiviewInstanceIndex-02688",
"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_EXT_sample_locations)": [
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-sampleLocationsEnable-02689",
"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"
}
],
"(VK_EXT_extended_dynamic_state)": [
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03417",
"text": " If the bound graphics pipeline state was created with the <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> dynamic state enabled, but not the <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> dynamic state enabled, then then <a href=\"#vkCmdSetViewportWithCountEXT\">vkCmdSetViewportWithCountEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>viewportCount</code> parameter of <code>vkCmdSetViewportWithCountEXT</code> <strong class=\"purple\">must</strong> match the <code>VkPipelineViewportStateCreateInfo</code>::<code>scissorCount</code> of the pipeline"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-scissorCount-03418",
"text": " If the bound graphics pipeline state was created with the <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> dynamic state enabled, but not the <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> dynamic state enabled, then then <a href=\"#vkCmdSetScissorWithCountEXT\">vkCmdSetScissorWithCountEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>scissorCount</code> parameter of <code>vkCmdSetScissorWithCountEXT</code> <strong class=\"purple\">must</strong> match the <code>VkPipelineViewportStateCreateInfo</code>::<code>viewportCount</code> of the pipeline"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03419",
"text": " If the bound graphics pipeline state was created with both the <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> and <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> dynamic states enabled then both <a href=\"#vkCmdSetViewportWithCountEXT\">vkCmdSetViewportWithCountEXT</a> and <a href=\"#vkCmdSetScissorWithCountEXT\">vkCmdSetScissorWithCountEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>viewportCount</code> parameter of <code>vkCmdSetViewportWithCountEXT</code> <strong class=\"purple\">must</strong> match the <code>scissorCount</code> parameter of <code>vkCmdSetScissorWithCountEXT</code>"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitiveTopology-03420",
"text": " If the bound graphics pipeline state was created with the <code>VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT</code> dynamic state enabled then <a href=\"#vkCmdSetPrimitiveTopologyEXT\">vkCmdSetPrimitiveTopologyEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>primitiveTopology</code> parameter of <code>vkCmdSetPrimitiveTopologyEXT</code> <strong class=\"purple\">must</strong> be of the same <a href=\"#drawing-primitive-topology-class\">topology class</a> as the pipeline <a href=\"#VkPipelineInputAssemblyStateCreateInfo\">VkPipelineInputAssemblyStateCreateInfo</a>::<code>topology</code> state"
}
],
"(VK_NV_mesh_shader)": [
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-parameter",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-parameter",
"text": " <code>countBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
},
{
"vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-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 <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"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-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"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 <a href=\"#VkVertexInputBindingDescription\">VkVertexInputBindingDescription</a> 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 <a href=\"#VkVertexInputAttributeDescription\">VkVertexInputAttributeDescription</a> 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-pBuffers-04001",
"text": " If the <a href=\"#features-nullDescriptor\">nullDescriptor</a> feature is not enabled, all elements of <code>pBuffers</code> <strong class=\"purple\">must</strong> not be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-vkCmdBindVertexBuffers-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> 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 or <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a> <a href=\"#VkBuffer\">VkBuffer</a> 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 <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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> that are valid handles of non-ignored parameters <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(VK_EXT_robustness2)": [
{
"vuid": "VUID-vkCmdBindVertexBuffers-pBuffers-04002",
"text": " If an element of <code>pBuffers</code> is <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, then the corresponding element of <code>pOffsets</code> <strong class=\"purple\">must</strong> be zero"
}
]
},
"vkCmdBindVertexBuffers2EXT": {
"(VK_EXT_extended_dynamic_state)": [
{
"vuid": "VUID-vkCmdBindVertexBuffers2EXT-firstBinding-03355",
"text": " <code>firstBinding</code> <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceLimits</code>::<code>maxVertexInputBindings</code>"
},
{
"vuid": "VUID-vkCmdBindVertexBuffers2EXT-firstBinding-03356",
"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-vkCmdBindVertexBuffers2EXT-pOffsets-03357",
"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-vkCmdBindVertexBuffers2EXT-pSizes-03358",
"text": " If <code>pSizes</code> is not <code>NULL</code>, all elements of <code>pOffsets</code> plus <code>pSizes</code> <strong class=\"purple\">must</strong> be less than or equal to the size of the corresponding element in <code>pBuffers</code>"
},
{
"vuid": "VUID-vkCmdBindVertexBuffers2EXT-pBuffers-03359",
"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-vkCmdBindVertexBuffers2EXT-pBuffers-03360",
"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-vkCmdBindVertexBuffers2EXT-pBuffers-04111",
"text": " If the <a href=\"#features-nullDescriptor\">nullDescriptor</a> feature is not enabled, all elements of <code>pBuffers</code> <strong class=\"purple\">must</strong> not be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-vkCmdBindVertexBuffers2EXT-pStrides-03361",
"text": " If the bound pipeline state object was created with the <code>VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT</code> dynamic state enabled then <code>pStrides</code> <strong class=\"purple\">must</strong> not be <code>NULL</code>, otherwise <code>pStrides</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-vkCmdBindVertexBuffers2EXT-pStrides-03362",
"text": " If <code>pStrides</code> is not <code>NULL</code> each element of <code>pStrides</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxVertexInputBindingStride</code>"
},
{
"vuid": "VUID-vkCmdBindVertexBuffers2EXT-pStrides-03363",
"text": " If <code>pStrides</code> is not <code>NULL</code> each element of <code>pStrides</code> <strong class=\"purple\">must</strong> be greater than or equal to the maximum extent of of all vertex input attributes fetched from the corresponding binding, where the extent is calculated as the VkVertexInputAttributeDescription::offset plus VkVertexInputAttributeDescription::format size"
},
{
"vuid": "VUID-vkCmdBindVertexBuffers2EXT-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdBindVertexBuffers2EXT-pBuffers-parameter",
"text": " <code>pBuffers</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>bindingCount</code> valid <a href=\"#VkBuffer\">VkBuffer</a> handles"
},
{
"vuid": "VUID-vkCmdBindVertexBuffers2EXT-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-vkCmdBindVertexBuffers2EXT-pSizes-parameter",
"text": " If <code>pSizes</code> is not <code>NULL</code>, <code>pSizes</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>bindingCount</code> <code>VkDeviceSize</code> values"
},
{
"vuid": "VUID-vkCmdBindVertexBuffers2EXT-pStrides-parameter",
"text": " If <code>pStrides</code> is not <code>NULL</code>, <code>pStrides</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>bindingCount</code> <code>VkDeviceSize</code> values"
},
{
"vuid": "VUID-vkCmdBindVertexBuffers2EXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdBindVertexBuffers2EXT-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdBindVertexBuffers2EXT-bindingCount-arraylength",
"text": " If any of <code>pSizes</code>, or <code>pStrides</code> are not <code>NULL</code>, <code>bindingCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkCmdBindVertexBuffers2EXT-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 <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(VK_EXT_extended_dynamic_state)+(VK_EXT_robustness2)": [
{
"vuid": "VUID-vkCmdBindVertexBuffers2EXT-pBuffers-04112",
"text": " If an element of <code>pBuffers</code> is <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, then the corresponding element of <code>pOffsets</code> <strong class=\"purple\">must</strong> be zero"
}
]
},
"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> <a href=\"#VkVertexInputBindingDivisorDescriptionEXT\">VkVertexInputBindingDivisorDescriptionEXT</a> 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-vertexAttributeInstanceRateZeroDivisor-02228",
"text": " If the <code>vertexAttributeInstanceRateZeroDivisor</code> feature is not enabled, <code>divisor</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-VkVertexInputBindingDivisorDescriptionEXT-vertexAttributeInstanceRateDivisor-02229",
"text": " If the <code>vertexAttributeInstanceRateDivisor</code> feature is not enabled, <code>divisor</code> <strong class=\"purple\">must</strong> be <code>1</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-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"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"
}
]
},
"vkCmdBindTransformFeedbackBuffersEXT": {
"(VK_EXT_transform_feedback)": [
{
"vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-transformFeedback-02355",
"text": " <code>VkPhysicalDeviceTransformFeedbackFeaturesEXT</code>::<code>transformFeedback</code> <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-firstBinding-02356",
"text": " <code>firstBinding</code> <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceTransformFeedbackPropertiesEXT</code>::<code>maxTransformFeedbackBuffers</code>"
},
{
"vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-firstBinding-02357",
"text": " The sum of <code>firstBinding</code> and <code>bindingCount</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceTransformFeedbackPropertiesEXT</code>::<code>maxTransformFeedbackBuffers</code>"
},
{
"vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-pOffsets-02358",
"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-vkCmdBindTransformFeedbackBuffersEXT-pOffsets-02359",
"text": " All elements of <code>pOffsets</code> <strong class=\"purple\">must</strong> be a multiple of 4"
},
{
"vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-pBuffers-02360",
"text": " All elements of <code>pBuffers</code> <strong class=\"purple\">must</strong> have been created with the <code>VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT</code> flag"
},
{
"vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-pSize-02361",
"text": " If the optional <code>pSize</code> array is specified, each element of <code>pSizes</code> <strong class=\"purple\">must</strong> either be <code>VK_WHOLE_SIZE</code>, or be less than or equal to <code>VkPhysicalDeviceTransformFeedbackPropertiesEXT</code>::<code>maxTransformFeedbackBufferSize</code>"
},
{
"vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-pSizes-02362",
"text": " All elements of <code>pSizes</code> <strong class=\"purple\">must</strong> be less than or equal to the size of the corresponding buffer in <code>pBuffers</code>"
},
{
"vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-pOffsets-02363",
"text": " All elements of <code>pOffsets</code> plus <code>pSizes</code>, where the <code>pSizes</code>, element is not <code>VK_WHOLE_SIZE</code>, <strong class=\"purple\">must</strong> be less than or equal to the size of the corresponding element in <code>pBuffers</code>"
},
{
"vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-pBuffers-02364",
"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-vkCmdBindTransformFeedbackBuffersEXT-None-02365",
"text": " Transform feedback <strong class=\"purple\">must</strong> not be active when the <code>vkCmdBindTransformFeedbackBuffersEXT</code> command is recorded"
},
{
"vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-pBuffers-parameter",
"text": " <code>pBuffers</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>bindingCount</code> valid <a href=\"#VkBuffer\">VkBuffer</a> handles"
},
{
"vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-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-vkCmdBindTransformFeedbackBuffersEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-bindingCount-arraylength",
"text": " <code>bindingCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-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 <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"vkCmdBeginTransformFeedbackEXT": {
"(VK_EXT_transform_feedback)": [
{
"vuid": "VUID-vkCmdBeginTransformFeedbackEXT-transformFeedback-02366",
"text": " <code>VkPhysicalDeviceTransformFeedbackFeaturesEXT</code>::<code>transformFeedback</code> <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkCmdBeginTransformFeedbackEXT-None-02367",
"text": " Transform feedback <strong class=\"purple\">must</strong> not be active"
},
{
"vuid": "VUID-vkCmdBeginTransformFeedbackEXT-firstCounterBuffer-02368",
"text": " <code>firstCounterBuffer</code> <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceTransformFeedbackPropertiesEXT</code>::<code>maxTransformFeedbackBuffers</code>"
},
{
"vuid": "VUID-vkCmdBeginTransformFeedbackEXT-firstCounterBuffer-02369",
"text": " The sum of <code>firstCounterBuffer</code> and <code>counterBufferCount</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceTransformFeedbackPropertiesEXT</code>::<code>maxTransformFeedbackBuffers</code>"
},
{
"vuid": "VUID-vkCmdBeginTransformFeedbackEXT-counterBufferCount-02607",
"text": " If <code>counterBufferCount</code> is not <code>0</code>, and <code>pCounterBuffers</code> is not <code>NULL</code>, <code>pCounterBuffers</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>counterBufferCount</code> <code>VkBuffer</code> handles that are either valid or <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-vkCmdBeginTransformFeedbackEXT-pCounterBufferOffsets-02370",
"text": " For each buffer handle in the array, if it is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a> it <strong class=\"purple\">must</strong> reference a buffer large enough to hold 4 bytes at the corresponding offset from the <code>pCounterBufferOffsets</code> array"
},
{
"vuid": "VUID-vkCmdBeginTransformFeedbackEXT-pCounterBuffer-02371",
"text": " If <code>pCounterBuffer</code> is <code>NULL</code>, then <code>pCounterBufferOffsets</code> <strong class=\"purple\">must</strong> also be <code>NULL</code>"
},
{
"vuid": "VUID-vkCmdBeginTransformFeedbackEXT-pCounterBuffers-02372",
"text": " For each buffer handle in the <code>pCounterBuffers</code> array that is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a> it <strong class=\"purple\">must</strong> have been created with a <code>usage</code> value containing <code>VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT</code>"
},
{
"vuid": "VUID-vkCmdBeginTransformFeedbackEXT-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdBeginTransformFeedbackEXT-pCounterBufferOffsets-parameter",
"text": " If <code>counterBufferCount</code> is not <code>0</code>, and <code>pCounterBufferOffsets</code> is not <code>NULL</code>, <code>pCounterBufferOffsets</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>counterBufferCount</code> <code>VkDeviceSize</code> values"
},
{
"vuid": "VUID-vkCmdBeginTransformFeedbackEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdBeginTransformFeedbackEXT-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdBeginTransformFeedbackEXT-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
},
{
"vuid": "VUID-vkCmdBeginTransformFeedbackEXT-commonparent",
"text": " Both of <code>commandBuffer</code>, and the elements of <code>pCounterBuffers</code> that are valid handles of non-ignored parameters <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(VK_EXT_transform_feedback)+(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-vkCmdBeginTransformFeedbackEXT-None-02373",
"text": " Transform feedback <strong class=\"purple\">must</strong> not be made active in a render pass instance with multiview enabled"
}
]
},
"vkCmdEndTransformFeedbackEXT": {
"(VK_EXT_transform_feedback)": [
{
"vuid": "VUID-vkCmdEndTransformFeedbackEXT-transformFeedback-02374",
"text": " <code>VkPhysicalDeviceTransformFeedbackFeaturesEXT</code>::<code>transformFeedback</code> <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkCmdEndTransformFeedbackEXT-None-02375",
"text": " Transform feedback <strong class=\"purple\">must</strong> be active"
},
{
"vuid": "VUID-vkCmdEndTransformFeedbackEXT-firstCounterBuffer-02376",
"text": " <code>firstCounterBuffer</code> <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceTransformFeedbackPropertiesEXT</code>::<code>maxTransformFeedbackBuffers</code>"
},
{
"vuid": "VUID-vkCmdEndTransformFeedbackEXT-firstCounterBuffer-02377",
"text": " The sum of <code>firstCounterBuffer</code> and <code>counterBufferCount</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceTransformFeedbackPropertiesEXT</code>::<code>maxTransformFeedbackBuffers</code>"
},
{
"vuid": "VUID-vkCmdEndTransformFeedbackEXT-counterBufferCount-02608",
"text": " If <code>counterBufferCount</code> is not <code>0</code>, and <code>pCounterBuffers</code> is not <code>NULL</code>, <code>pCounterBuffers</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>counterBufferCount</code> <code>VkBuffer</code> handles that are either valid or <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-vkCmdEndTransformFeedbackEXT-pCounterBufferOffsets-02378",
"text": " For each buffer handle in the array, if it is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a> it <strong class=\"purple\">must</strong> reference a buffer large enough to hold 4 bytes at the corresponding offset from the <code>pCounterBufferOffsets</code> array"
},
{
"vuid": "VUID-vkCmdEndTransformFeedbackEXT-pCounterBuffer-02379",
"text": " If <code>pCounterBuffer</code> is <code>NULL</code>, then <code>pCounterBufferOffsets</code> <strong class=\"purple\">must</strong> also be <code>NULL</code>"
},
{
"vuid": "VUID-vkCmdEndTransformFeedbackEXT-pCounterBuffers-02380",
"text": " For each buffer handle in the <code>pCounterBuffers</code> array that is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a> it <strong class=\"purple\">must</strong> have been created with a <code>usage</code> value containing <code>VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT</code>"
},
{
"vuid": "VUID-vkCmdEndTransformFeedbackEXT-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdEndTransformFeedbackEXT-pCounterBufferOffsets-parameter",
"text": " If <code>counterBufferCount</code> is not <code>0</code>, and <code>pCounterBufferOffsets</code> is not <code>NULL</code>, <code>pCounterBufferOffsets</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>counterBufferCount</code> <code>VkDeviceSize</code> values"
},
{
"vuid": "VUID-vkCmdEndTransformFeedbackEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdEndTransformFeedbackEXT-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdEndTransformFeedbackEXT-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
},
{
"vuid": "VUID-vkCmdEndTransformFeedbackEXT-commonparent",
"text": " Both of <code>commandBuffer</code>, and the elements of <code>pCounterBuffers</code> that are valid handles of non-ignored parameters <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"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-pViewportSwizzles-parameter",
"text": " <code>pViewportSwizzles</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>viewportCount</code> valid <a href=\"#VkViewportSwizzleNV\">VkViewportSwizzleNV</a> structures"
},
{
"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-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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> 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> <a href=\"#VkViewportWScalingNV\">VkViewportWScalingNV</a> structures"
},
{
"vuid": "VUID-vkCmdSetViewportWScalingNV-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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-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-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-x-02821",
"text": " The <code>x</code> and <code>y</code> members of <code>offset</code> member of any element of <code>pScissors</code> <strong class=\"purple\">must</strong> be greater than or equal to <code>0</code>"
},
{
"vuid": "VUID-VkPipelineViewportStateCreateInfo-offset-02822",
"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 for any element of <code>pScissors</code>"
},
{
"vuid": "VUID-VkPipelineViewportStateCreateInfo-offset-02823",
"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 for any element of <code>pScissors</code>"
},
{
"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=\"#VkPipelineViewportCoarseSampleOrderStateCreateInfoNV\">VkPipelineViewportCoarseSampleOrderStateCreateInfoNV</a>, <a href=\"#VkPipelineViewportExclusiveScissorStateCreateInfoNV\">VkPipelineViewportExclusiveScissorStateCreateInfoNV</a>, <a href=\"#VkPipelineViewportShadingRateImageStateCreateInfoNV\">VkPipelineViewportShadingRateImageStateCreateInfoNV</a>, <a href=\"#VkPipelineViewportSwizzleStateCreateInfoNV\">VkPipelineViewportSwizzleStateCreateInfoNV</a>, or <a href=\"#VkPipelineViewportWScalingStateCreateInfoNV\">VkPipelineViewportWScalingStateCreateInfoNV</a>"
},
{
"vuid": "VUID-VkPipelineViewportStateCreateInfo-sType-unique",
"text": " The <code>sType</code> value of each struct 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 included in 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>"
}
]
},
"vkCmdSetViewportWithCountEXT": {
"(VK_EXT_extended_dynamic_state)": [
{
"vuid": "VUID-vkCmdSetViewportWithCountEXT-None-03393",
"text": " The <a href=\"#features-extendedDynamicState\">extendedDynamicState</a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkCmdSetViewportWithCountEXT-viewportCount-03394",
"text": " <code>viewportCount</code> <strong class=\"purple\">must</strong> be between <code>1</code> and <code>VkPhysicalDeviceLimits</code>::<code>maxViewports</code>, inclusive"
},
{
"vuid": "VUID-vkCmdSetViewportWithCountEXT-viewportCount-03395",
"text": " If the <a href=\"#features-multiViewport\">multiple viewports</a> feature is not enabled, <code>viewportCount</code> <strong class=\"purple\">must</strong> be <code>1</code>"
},
{
"vuid": "VUID-vkCmdSetViewportWithCountEXT-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdSetViewportWithCountEXT-pViewports-parameter",
"text": " <code>pViewports</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>viewportCount</code> valid <a href=\"#VkViewport\">VkViewport</a> structures"
},
{
"vuid": "VUID-vkCmdSetViewportWithCountEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdSetViewportWithCountEXT-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdSetViewportWithCountEXT-viewportCount-arraylength",
"text": " <code>viewportCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"vkCmdSetScissorWithCountEXT": {
"(VK_EXT_extended_dynamic_state)": [
{
"vuid": "VUID-vkCmdSetScissorWithCountEXT-None-03396",
"text": " The <a href=\"#features-extendedDynamicState\">extendedDynamicState</a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkCmdSetScissorWithCountEXT-scissorCount-03397",
"text": " <code>scissorCount</code> <strong class=\"purple\">must</strong> be between <code>1</code> and <code>VkPhysicalDeviceLimits</code>::<code>maxViewports</code>, inclusive"
},
{
"vuid": "VUID-vkCmdSetScissorWithCountEXT-scissorCount-03398",
"text": " If the <a href=\"#features-multiViewport\">multiple viewports</a> feature is not enabled, <code>scissorCount</code> <strong class=\"purple\">must</strong> be <code>1</code>"
},
{
"vuid": "VUID-vkCmdSetScissorWithCountEXT-x-03399",
"text": " The <code>x</code> and <code>y</code> members of <code>offset</code> member of any element of <code>pScissors</code> <strong class=\"purple\">must</strong> be greater than or equal to <code>0</code>"
},
{
"vuid": "VUID-vkCmdSetScissorWithCountEXT-offset-03400",
"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 for any element of <code>pScissors</code>"
},
{
"vuid": "VUID-vkCmdSetScissorWithCountEXT-offset-03401",
"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 for any element of <code>pScissors</code>"
},
{
"vuid": "VUID-vkCmdSetScissorWithCountEXT-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdSetScissorWithCountEXT-pScissors-parameter",
"text": " <code>pScissors</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>scissorCount</code> <a href=\"#VkRect2D\">VkRect2D</a> structures"
},
{
"vuid": "VUID-vkCmdSetScissorWithCountEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdSetScissorWithCountEXT-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdSetScissorWithCountEXT-scissorCount-arraylength",
"text": " <code>scissorCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"vkCmdSetViewport": {
"core": [
{
"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-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-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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> 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> valid <a href=\"#VkViewport\">VkViewport</a> structures"
},
{
"vuid": "VUID-vkCmdSetViewport-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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-02540",
"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-02541",
"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 <a href=\"#features-depthClamp\">depth clamping</a> 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>, <a href=\"#VkPipelineRasterizationDepthClipStateCreateInfoEXT\">VkPipelineRasterizationDepthClipStateCreateInfoEXT</a>, <a href=\"#VkPipelineRasterizationLineStateCreateInfoEXT\">VkPipelineRasterizationLineStateCreateInfoEXT</a>, <a href=\"#VkPipelineRasterizationStateRasterizationOrderAMD\">VkPipelineRasterizationStateRasterizationOrderAMD</a>, or <a href=\"#VkPipelineRasterizationStateStreamCreateInfoEXT\">VkPipelineRasterizationStateStreamCreateInfoEXT</a>"
},
{
"vuid": "VUID-VkPipelineRasterizationStateCreateInfo-sType-unique",
"text": " The <code>sType</code> value of each struct 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 <a href=\"#features-fillModeNonSolid\">non-solid fill modes</a> 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 <a href=\"#features-fillModeNonSolid\">non-solid fill modes</a> 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>"
}
]
},
"VkPipelineRasterizationDepthClipStateCreateInfoEXT": {
"(VK_EXT_depth_clip_enable)": [
{
"vuid": "VUID-VkPipelineRasterizationDepthClipStateCreateInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT</code>"
},
{
"vuid": "VUID-VkPipelineRasterizationDepthClipStateCreateInfoEXT-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
}
]
},
"VkPipelineMultisampleStateCreateInfo": {
"core": [
{
"vuid": "VUID-VkPipelineMultisampleStateCreateInfo-sampleShadingEnable-00784",
"text": " If the <a href=\"#features-sampleRateShading\">sample rate shading</a> 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 <a href=\"#features-alphaToOne\">alpha to one</a> 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=\"#VkPipelineCoverageReductionStateCreateInfoNV\">VkPipelineCoverageReductionStateCreateInfoNV</a>, <a href=\"#VkPipelineCoverageToColorStateCreateInfoNV\">VkPipelineCoverageToColorStateCreateInfoNV</a>, or <a href=\"#VkPipelineSampleLocationsStateCreateInfoEXT\">VkPipelineSampleLocationsStateCreateInfoEXT</a>"
},
{
"vuid": "VUID-VkPipelineMultisampleStateCreateInfo-sType-unique",
"text": " The <code>sType</code> value of each struct 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 <code>VK_NV_framebuffer_mixed_samples</code> extension is enabled, and 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>"
}
]
},
"VkPipelineRasterizationStateStreamCreateInfoEXT": {
"(VK_EXT_transform_feedback)": [
{
"vuid": "VUID-VkPipelineRasterizationStateStreamCreateInfoEXT-geometryStreams-02324",
"text": " <code>VkPhysicalDeviceTransformFeedbackFeaturesEXT</code>::<code>geometryStreams</code> <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-VkPipelineRasterizationStateStreamCreateInfoEXT-rasterizationStream-02325",
"text": " <code>rasterizationStream</code> <strong class=\"purple\">must</strong> be less than <a href=\"#VkPhysicalDeviceTransformFeedbackPropertiesEXT\">VkPhysicalDeviceTransformFeedbackPropertiesEXT</a>::<code>maxTransformFeedbackStreams</code>"
},
{
"vuid": "VUID-VkPipelineRasterizationStateStreamCreateInfoEXT-rasterizationStream-02326",
"text": " <code>rasterizationStream</code> <strong class=\"purple\">must</strong> be zero if <code>VkPhysicalDeviceTransformFeedbackPropertiesEXT</code>::<code>transformFeedbackRasterizationStreamSelect</code> is <code>VK_FALSE</code>"
},
{
"vuid": "VUID-VkPipelineRasterizationStateStreamCreateInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT</code>"
},
{
"vuid": "VUID-VkPipelineRasterizationStateStreamCreateInfoEXT-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</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 <a href=\"#VkSampleLocationsInfoEXT\">VkSampleLocationsInfoEXT</a> 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": " If <code>sampleLocationsPerPixel</code> is not <code>0</code>, <code>sampleLocationsPerPixel</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSampleCountFlagBits\">VkSampleCountFlagBits</a> value"
},
{
"vuid": "VUID-VkSampleLocationsInfoEXT-pSampleLocations-parameter",
"text": " If <code>sampleLocationsCount</code> is not <code>0</code>, <code>pSampleLocations</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>sampleLocationsCount</code> <a href=\"#VkSampleLocationEXT\">VkSampleLocationEXT</a> structures"
}
]
},
"vkCmdSetSampleLocationsEXT": {
"(VK_EXT_sample_locations)": [
{
"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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdSetSampleLocationsEXT-pSampleLocationsInfo-parameter",
"text": " <code>pSampleLocationsInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkSampleLocationsInfoEXT\">VkSampleLocationsInfoEXT</a> structure"
},
{
"vuid": "VUID-vkCmdSetSampleLocationsEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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"
}
]
},
"VkPipelineViewportShadingRateImageStateCreateInfoNV": {
"(VK_NV_shading_rate_image)": [
{
"vuid": "VUID-VkPipelineViewportShadingRateImageStateCreateInfoNV-viewportCount-02054",
"text": " If the <a href=\"#features-multiViewport\">multiple viewports</a> feature is not enabled, <code>viewportCount</code> <strong class=\"purple\">must</strong> be <code>0</code> or <code>1</code>"
},
{
"vuid": "VUID-VkPipelineViewportShadingRateImageStateCreateInfoNV-viewportCount-02055",
"text": " <code>viewportCount</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxViewports</code>"
},
{
"vuid": "VUID-VkPipelineViewportShadingRateImageStateCreateInfoNV-shadingRateImageEnable-02056",
"text": " If <code>shadingRateImageEnable</code> is <code>VK_TRUE</code>, <code>viewportCount</code> <strong class=\"purple\">must</strong> be equal to the <code>viewportCount</code> member of <a href=\"#VkPipelineViewportStateCreateInfo\">VkPipelineViewportStateCreateInfo</a>"
},
{
"vuid": "VUID-VkPipelineViewportShadingRateImageStateCreateInfoNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV</code>"
},
{
"vuid": "VUID-VkPipelineViewportShadingRateImageStateCreateInfoNV-viewportCount-arraylength",
"text": " <code>viewportCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"vkCmdBindShadingRateImageNV": {
"(VK_NV_shading_rate_image)": [
{
"vuid": "VUID-vkCmdBindShadingRateImageNV-None-02058",
"text": " The <a href=\"#features-shadingRateImage\">shading rate image</a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkCmdBindShadingRateImageNV-imageView-02059",
"text": " If <code>imageView</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, it <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageView\">VkImageView</a> handle of type <code>VK_IMAGE_VIEW_TYPE_2D</code> or <code>VK_IMAGE_VIEW_TYPE_2D_ARRAY</code>"
},
{
"vuid": "VUID-vkCmdBindShadingRateImageNV-imageView-02060",
"text": " If <code>imageView</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, it <strong class=\"purple\">must</strong> have a format of <code>VK_FORMAT_R8_UINT</code>"
},
{
"vuid": "VUID-vkCmdBindShadingRateImageNV-imageView-02061",
"text": " If <code>imageView</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, it <strong class=\"purple\">must</strong> have been created with a <code>usage</code> value including <code>VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV</code>"
},
{
"vuid": "VUID-vkCmdBindShadingRateImageNV-imageView-02062",
"text": " If <code>imageView</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <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 the subresource is accessed"
},
{
"vuid": "VUID-vkCmdBindShadingRateImageNV-imageLayout-02063",
"text": " If <code>imageView</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>imageLayout</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV</code> or <code>VK_IMAGE_LAYOUT_GENERAL</code>"
},
{
"vuid": "VUID-vkCmdBindShadingRateImageNV-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdBindShadingRateImageNV-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 <a href=\"#VkImageView\">VkImageView</a> handle"
},
{
"vuid": "VUID-vkCmdBindShadingRateImageNV-imageLayout-parameter",
"text": " <code>imageLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value"
},
{
"vuid": "VUID-vkCmdBindShadingRateImageNV-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdBindShadingRateImageNV-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdBindShadingRateImageNV-commonparent",
"text": " Both of <code>commandBuffer</code>, and <code>imageView</code> that are valid handles of non-ignored parameters <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"vkCmdSetViewportShadingRatePaletteNV": {
"(VK_NV_shading_rate_image)": [
{
"vuid": "VUID-vkCmdSetViewportShadingRatePaletteNV-None-02064",
"text": " The <a href=\"#features-shadingRateImage\">shading rate image</a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkCmdSetViewportShadingRatePaletteNV-firstViewport-02066",
"text": " <code>firstViewport</code> <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceLimits</code>::<code>maxViewports</code>"
},
{
"vuid": "VUID-vkCmdSetViewportShadingRatePaletteNV-firstViewport-02067",
"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-vkCmdSetViewportShadingRatePaletteNV-firstViewport-02068",
"text": " If the <a href=\"#features-multiViewport\">multiple viewports</a> feature is not enabled, <code>firstViewport</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-vkCmdSetViewportShadingRatePaletteNV-viewportCount-02069",
"text": " If the <a href=\"#features-multiViewport\">multiple viewports</a> feature is not enabled, <code>viewportCount</code> <strong class=\"purple\">must</strong> be <code>1</code>"
},
{
"vuid": "VUID-vkCmdSetViewportShadingRatePaletteNV-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdSetViewportShadingRatePaletteNV-pShadingRatePalettes-parameter",
"text": " <code>pShadingRatePalettes</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>viewportCount</code> valid <a href=\"#VkShadingRatePaletteNV\">VkShadingRatePaletteNV</a> structures"
},
{
"vuid": "VUID-vkCmdSetViewportShadingRatePaletteNV-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdSetViewportShadingRatePaletteNV-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdSetViewportShadingRatePaletteNV-viewportCount-arraylength",
"text": " <code>viewportCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"VkShadingRatePaletteNV": {
"(VK_NV_shading_rate_image)": [
{
"vuid": "VUID-VkShadingRatePaletteNV-shadingRatePaletteEntryCount-02071",
"text": " <code>shadingRatePaletteEntryCount</code> <strong class=\"purple\">must</strong> be between <code>1</code> and <code>VkPhysicalDeviceShadingRateImagePropertiesNV</code>::<code>shadingRatePaletteSize</code>, inclusive"
},
{
"vuid": "VUID-VkShadingRatePaletteNV-pShadingRatePaletteEntries-parameter",
"text": " <code>pShadingRatePaletteEntries</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>shadingRatePaletteEntryCount</code> valid <a href=\"#VkShadingRatePaletteEntryNV\">VkShadingRatePaletteEntryNV</a> values"
},
{
"vuid": "VUID-VkShadingRatePaletteNV-shadingRatePaletteEntryCount-arraylength",
"text": " <code>shadingRatePaletteEntryCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"VkPipelineViewportCoarseSampleOrderStateCreateInfoNV": {
"(VK_NV_shading_rate_image)": [
{
"vuid": "VUID-VkPipelineViewportCoarseSampleOrderStateCreateInfoNV-sampleOrderType-02072",
"text": " If <code>sampleOrderType</code> is not <code>VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV</code>, <code>customSamplerOrderCount</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkPipelineViewportCoarseSampleOrderStateCreateInfoNV-pCustomSampleOrders-02234",
"text": " The array <code>pCustomSampleOrders</code> <strong class=\"purple\">must</strong> not contain two structures with matching values for both the <code>shadingRate</code> and <code>sampleCount</code> members"
},
{
"vuid": "VUID-VkPipelineViewportCoarseSampleOrderStateCreateInfoNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV</code>"
},
{
"vuid": "VUID-VkPipelineViewportCoarseSampleOrderStateCreateInfoNV-sampleOrderType-parameter",
"text": " <code>sampleOrderType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCoarseSampleOrderTypeNV\">VkCoarseSampleOrderTypeNV</a> value"
},
{
"vuid": "VUID-VkPipelineViewportCoarseSampleOrderStateCreateInfoNV-pCustomSampleOrders-parameter",
"text": " If <code>customSampleOrderCount</code> is not <code>0</code>, <code>pCustomSampleOrders</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>customSampleOrderCount</code> valid <a href=\"#VkCoarseSampleOrderCustomNV\">VkCoarseSampleOrderCustomNV</a> structures"
}
]
},
"VkCoarseSampleOrderCustomNV": {
"(VK_NV_shading_rate_image)": [
{
"vuid": "VUID-VkCoarseSampleOrderCustomNV-shadingRate-02073",
"text": " <code>shadingRate</code> <strong class=\"purple\">must</strong> be a shading rate that generates fragments with more than one pixel"
},
{
"vuid": "VUID-VkCoarseSampleOrderCustomNV-sampleCount-02074",
"text": " <code>sampleCount</code> <strong class=\"purple\">must</strong> correspond to a sample count enumerated in <a href=\"#VkSampleCountFlags\">VkSampleCountFlags</a> whose corresponding bit is set in <a href=\"#VkPhysicalDeviceLimits\">VkPhysicalDeviceLimits</a>::<code>framebufferNoAttachmentsSampleCounts</code>"
},
{
"vuid": "VUID-VkCoarseSampleOrderCustomNV-sampleLocationCount-02075",
"text": " <code>sampleLocationCount</code> <strong class=\"purple\">must</strong> be equal to the product of <code>sampleCount</code>, the fragment width for <code>shadingRate</code>, and the fragment height for <code>shadingRate</code>"
},
{
"vuid": "VUID-VkCoarseSampleOrderCustomNV-sampleLocationCount-02076",
"text": " <code>sampleLocationCount</code> <strong class=\"purple\">must</strong> be less than or equal to the value of <code>VkPhysicalDeviceShadingRateImagePropertiesNV</code>::<code>shadingRateMaxCoarseSamples</code>"
},
{
"vuid": "VUID-VkCoarseSampleOrderCustomNV-pSampleLocations-02077",
"text": " The array <code>pSampleLocations</code> <strong class=\"purple\">must</strong> contain exactly one entry for every combination of valid values for <code>pixelX</code>, <code>pixelY</code>, and <code>sample</code> in the structure <a href=\"#VkCoarseSampleOrderCustomNV\">VkCoarseSampleOrderCustomNV</a>"
},
{
"vuid": "VUID-VkCoarseSampleOrderCustomNV-shadingRate-parameter",
"text": " <code>shadingRate</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkShadingRatePaletteEntryNV\">VkShadingRatePaletteEntryNV</a> value"
},
{
"vuid": "VUID-VkCoarseSampleOrderCustomNV-pSampleLocations-parameter",
"text": " <code>pSampleLocations</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>sampleLocationCount</code> <a href=\"#VkCoarseSampleLocationNV\">VkCoarseSampleLocationNV</a> structures"
},
{
"vuid": "VUID-VkCoarseSampleOrderCustomNV-sampleLocationCount-arraylength",
"text": " <code>sampleLocationCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"VkCoarseSampleLocationNV": {
"(VK_NV_shading_rate_image)": [
{
"vuid": "VUID-VkCoarseSampleLocationNV-pixelX-02078",
"text": " <code>pixelX</code> <strong class=\"purple\">must</strong> be less than the width (in pixels) of the fragment"
},
{
"vuid": "VUID-VkCoarseSampleLocationNV-pixelY-02079",
"text": " <code>pixelY</code> <strong class=\"purple\">must</strong> be less than the height (in pixels) of the fragment"
},
{
"vuid": "VUID-VkCoarseSampleLocationNV-sample-02080",
"text": " <code>sample</code> <strong class=\"purple\">must</strong> be less than the number of coverage samples in each pixel belonging to the fragment"
}
]
},
"vkCmdSetCoarseSampleOrderNV": {
"(VK_NV_shading_rate_image)": [
{
"vuid": "VUID-vkCmdSetCoarseSampleOrderNV-sampleOrderType-02081",
"text": " If <code>sampleOrderType</code> is not <code>VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV</code>, <code>customSamplerOrderCount</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-vkCmdSetCoarseSampleOrderNV-pCustomSampleOrders-02235",
"text": " The array <code>pCustomSampleOrders</code> <strong class=\"purple\">must</strong> not contain two structures with matching values for both the <code>shadingRate</code> and <code>sampleCount</code> members"
},
{
"vuid": "VUID-vkCmdSetCoarseSampleOrderNV-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdSetCoarseSampleOrderNV-sampleOrderType-parameter",
"text": " <code>sampleOrderType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCoarseSampleOrderTypeNV\">VkCoarseSampleOrderTypeNV</a> value"
},
{
"vuid": "VUID-vkCmdSetCoarseSampleOrderNV-pCustomSampleOrders-parameter",
"text": " If <code>customSampleOrderCount</code> is not <code>0</code>, <code>pCustomSampleOrders</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>customSampleOrderCount</code> valid <a href=\"#VkCoarseSampleOrderCustomNV\">VkCoarseSampleOrderCustomNV</a> structures"
},
{
"vuid": "VUID-vkCmdSetCoarseSampleOrderNV-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdSetCoarseSampleOrderNV-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
}
]
},
"VkPipelineRasterizationLineStateCreateInfoEXT": {
"(VK_EXT_line_rasterization)": [
{
"vuid": "VUID-VkPipelineRasterizationLineStateCreateInfoEXT-lineRasterizationMode-02768",
"text": " If <code>lineRasterizationMode</code> is <code>VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT</code>, then the <a href=\"#features-rectangularLines\">rectangularLines</a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-VkPipelineRasterizationLineStateCreateInfoEXT-lineRasterizationMode-02769",
"text": " If <code>lineRasterizationMode</code> is <code>VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT</code>, then the <a href=\"#features-bresenhamLines\">bresenhamLines</a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-VkPipelineRasterizationLineStateCreateInfoEXT-lineRasterizationMode-02770",
"text": " If <code>lineRasterizationMode</code> is <code>VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT</code>, then the <a href=\"#features-bresenhamLines\">smoothLines</a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-VkPipelineRasterizationLineStateCreateInfoEXT-stippledLineEnable-02771",
"text": " If <code>stippledLineEnable</code> is <code>VK_TRUE</code> and <code>lineRasterizationMode</code> is <code>VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT</code>, then the <a href=\"#features-stippledRectangularLines\">stippledRectangularLines</a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-VkPipelineRasterizationLineStateCreateInfoEXT-stippledLineEnable-02772",
"text": " If <code>stippledLineEnable</code> is <code>VK_TRUE</code> and <code>lineRasterizationMode</code> is <code>VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT</code>, then the <a href=\"#features-stippledBresenhamLines\">stippledBresenhamLines</a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-VkPipelineRasterizationLineStateCreateInfoEXT-stippledLineEnable-02773",
"text": " If <code>stippledLineEnable</code> is <code>VK_TRUE</code> and <code>lineRasterizationMode</code> is <code>VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT</code>, then the <a href=\"#features-stippledSmoothLines\">stippledSmoothLines</a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-VkPipelineRasterizationLineStateCreateInfoEXT-stippledLineEnable-02774",
"text": " If <code>stippledLineEnable</code> is <code>VK_TRUE</code> and <code>lineRasterizationMode</code> is <code>VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT</code>, then the <a href=\"#features-stippledRectangularLines\">stippledRectangularLines</a> feature <strong class=\"purple\">must</strong> be enabled and <a href=\"#VkPhysicalDeviceLimits\">VkPhysicalDeviceLimits</a>::<code>strictLines</code> <strong class=\"purple\">must</strong> be <code>VK_TRUE</code>"
},
{
"vuid": "VUID-VkPipelineRasterizationLineStateCreateInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT</code>"
},
{
"vuid": "VUID-VkPipelineRasterizationLineStateCreateInfoEXT-lineRasterizationMode-parameter",
"text": " <code>lineRasterizationMode</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkLineRasterizationModeEXT\">VkLineRasterizationModeEXT</a> value"
}
]
},
"vkCmdSetLineWidth": {
"core": [
{
"vuid": "VUID-vkCmdSetLineWidth-lineWidth-00788",
"text": " If the <a href=\"#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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdSetLineWidth-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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"
}
]
},
"vkCmdSetLineStippleEXT": {
"(VK_EXT_line_rasterization)": [
{
"vuid": "VUID-vkCmdSetLineStippleEXT-lineStippleFactor-02776",
"text": " <code>lineStippleFactor</code> <strong class=\"purple\">must</strong> be in the range <span class=\"eq\">[1,256]</span>"
},
{
"vuid": "VUID-vkCmdSetLineStippleEXT-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdSetLineStippleEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdSetLineStippleEXT-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
}
]
},
"vkCmdSetFrontFaceEXT": {
"(VK_EXT_extended_dynamic_state)": [
{
"vuid": "VUID-vkCmdSetFrontFaceEXT-None-03383",
"text": " The <a href=\"#features-extendedDynamicState\">extendedDynamicState</a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkCmdSetFrontFaceEXT-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdSetFrontFaceEXT-frontFace-parameter",
"text": " <code>frontFace</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFrontFace\">VkFrontFace</a> value"
},
{
"vuid": "VUID-vkCmdSetFrontFaceEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdSetFrontFaceEXT-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
}
]
},
"vkCmdSetCullModeEXT": {
"(VK_EXT_extended_dynamic_state)": [
{
"vuid": "VUID-vkCmdSetCullModeEXT-None-03384",
"text": " The <a href=\"#features-extendedDynamicState\">extendedDynamicState</a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkCmdSetCullModeEXT-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdSetCullModeEXT-cullMode-parameter",
"text": " <code>cullMode</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkCullModeFlagBits\">VkCullModeFlagBits</a> values"
},
{
"vuid": "VUID-vkCmdSetCullModeEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdSetCullModeEXT-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-depthBiasClamp-00790",
"text": " If the <a href=\"#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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdSetDepthBias-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 less than or equal to <code>VkPhysicalDeviceDiscardRectanglePropertiesEXT</code>::<code>maxDiscardRectangles</code>"
},
{
"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-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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> 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> <a href=\"#VkRect2D\">VkRect2D</a> structures"
},
{
"vuid": "VUID-vkCmdSetDiscardRectangleEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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-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-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-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> member of any element of <code>pScissors</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 for any element of <code>pScissors</code>"
},
{
"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 for any element of <code>pScissors</code>"
},
{
"vuid": "VUID-vkCmdSetScissor-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> 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> <a href=\"#VkRect2D\">VkRect2D</a> structures"
},
{
"vuid": "VUID-vkCmdSetScissor-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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>"
}
]
},
"VkPipelineViewportExclusiveScissorStateCreateInfoNV": {
"(VK_NV_scissor_exclusive)": [
{
"vuid": "VUID-VkPipelineViewportExclusiveScissorStateCreateInfoNV-exclusiveScissorCount-02027",
"text": " If the <a href=\"#features-multiViewport\">multiple viewports</a> feature is not enabled, <code>exclusiveScissorCount</code> <strong class=\"purple\">must</strong> be <code>0</code> or <code>1</code>"
},
{
"vuid": "VUID-VkPipelineViewportExclusiveScissorStateCreateInfoNV-exclusiveScissorCount-02028",
"text": " <code>exclusiveScissorCount</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxViewports</code>"
},
{
"vuid": "VUID-VkPipelineViewportExclusiveScissorStateCreateInfoNV-exclusiveScissorCount-02029",
"text": " <code>exclusiveScissorCount</code> <strong class=\"purple\">must</strong> be <code>0</code> or identical to the <code>viewportCount</code> member of <a href=\"#VkPipelineViewportStateCreateInfo\">VkPipelineViewportStateCreateInfo</a>"
},
{
"vuid": "VUID-VkPipelineViewportExclusiveScissorStateCreateInfoNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV</code>"
}
]
},
"vkCmdSetExclusiveScissorNV": {
"(VK_NV_scissor_exclusive)": [
{
"vuid": "VUID-vkCmdSetExclusiveScissorNV-None-02031",
"text": " The <a href=\"#features-exclusiveScissor\">exclusive scissor</a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkCmdSetExclusiveScissorNV-firstExclusiveScissor-02033",
"text": " <code>firstExclusiveScissor</code> <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceLimits</code>::<code>maxViewports</code>"
},
{
"vuid": "VUID-vkCmdSetExclusiveScissorNV-firstExclusiveScissor-02034",
"text": " The sum of <code>firstExclusiveScissor</code> and <code>exclusiveScissorCount</code> <strong class=\"purple\">must</strong> be between <code>1</code> and <code>VkPhysicalDeviceLimits</code>::<code>maxViewports</code>, inclusive"
},
{
"vuid": "VUID-vkCmdSetExclusiveScissorNV-firstExclusiveScissor-02035",
"text": " If the <a href=\"#features-multiViewport\">multiple viewports</a> feature is not enabled, <code>firstExclusiveScissor</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-vkCmdSetExclusiveScissorNV-exclusiveScissorCount-02036",
"text": " If the <a href=\"#features-multiViewport\">multiple viewports</a> feature is not enabled, <code>exclusiveScissorCount</code> <strong class=\"purple\">must</strong> be <code>1</code>"
},
{
"vuid": "VUID-vkCmdSetExclusiveScissorNV-x-02037",
"text": " The <code>x</code> and <code>y</code> members of <code>offset</code> in each member of <code>pExclusiveScissors</code> <strong class=\"purple\">must</strong> be greater than or equal to <code>0</code>"
},
{
"vuid": "VUID-vkCmdSetExclusiveScissorNV-offset-02038",
"text": " Evaluation of <span class=\"eq\">(<code>offset.x</code> &#43; <code>extent.width</code>)</span> for each member of <code>pExclusiveScissors</code> <strong class=\"purple\">must</strong> not cause a signed integer addition overflow"
},
{
"vuid": "VUID-vkCmdSetExclusiveScissorNV-offset-02039",
"text": " Evaluation of <span class=\"eq\">(<code>offset.y</code> &#43; <code>extent.height</code>)</span> for each member of <code>pExclusiveScissors</code> <strong class=\"purple\">must</strong> not cause a signed integer addition overflow"
},
{
"vuid": "VUID-vkCmdSetExclusiveScissorNV-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdSetExclusiveScissorNV-pExclusiveScissors-parameter",
"text": " <code>pExclusiveScissors</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>exclusiveScissorCount</code> <a href=\"#VkRect2D\">VkRect2D</a> structures"
},
{
"vuid": "VUID-vkCmdSetExclusiveScissorNV-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdSetExclusiveScissorNV-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
},
{
"vuid": "VUID-vkCmdSetExclusiveScissorNV-exclusiveScissorCount-arraylength",
"text": " <code>exclusiveScissorCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"VkPipelineDepthStencilStateCreateInfo": {
"core": [
{
"vuid": "VUID-VkPipelineDepthStencilStateCreateInfo-depthBoundsTestEnable-00598",
"text": " If the <a href=\"#features-depthBounds\">depth bounds testing</a> 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 <a href=\"#VkStencilOpState\">VkStencilOpState</a> structure"
},
{
"vuid": "VUID-VkPipelineDepthStencilStateCreateInfo-back-parameter",
"text": " <code>back</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkStencilOpState\">VkStencilOpState</a> structure"
}
]
},
"vkCmdSetDepthBoundsTestEnableEXT": {
"(VK_EXT_extended_dynamic_state)": [
{
"vuid": "VUID-vkCmdSetDepthBoundsTestEnableEXT-None-03349",
"text": " The <a href=\"#features-extendedDynamicState\">extendedDynamicState</a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkCmdSetDepthBoundsTestEnableEXT-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdSetDepthBoundsTestEnableEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdSetDepthBoundsTestEnableEXT-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
}
]
},
"vkCmdSetDepthBounds": {
"(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-02508",
"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-02509",
"text": " <code>maxDepthBounds</code> <strong class=\"purple\">must</strong> be between <code>0.0</code> and <code>1.0</code>, inclusive"
}
],
"core": [
{
"vuid": "VUID-vkCmdSetDepthBounds-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdSetDepthBounds-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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"
}
]
},
"vkCmdSetStencilTestEnableEXT": {
"(VK_EXT_extended_dynamic_state)": [
{
"vuid": "VUID-vkCmdSetStencilTestEnableEXT-None-03350",
"text": " The <a href=\"#features-extendedDynamicState\">extendedDynamicState</a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkCmdSetStencilTestEnableEXT-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdSetStencilTestEnableEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdSetStencilTestEnableEXT-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
}
]
},
"vkCmdSetStencilOpEXT": {
"(VK_EXT_extended_dynamic_state)": [
{
"vuid": "VUID-vkCmdSetStencilOpEXT-None-03351",
"text": " The <a href=\"#features-extendedDynamicState\">extendedDynamicState</a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkCmdSetStencilOpEXT-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdSetStencilOpEXT-faceMask-parameter",
"text": " <code>faceMask</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkStencilFaceFlagBits\">VkStencilFaceFlagBits</a> values"
},
{
"vuid": "VUID-vkCmdSetStencilOpEXT-faceMask-requiredbitmask",
"text": " <code>faceMask</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-vkCmdSetStencilOpEXT-failOp-parameter",
"text": " <code>failOp</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkStencilOp\">VkStencilOp</a> value"
},
{
"vuid": "VUID-vkCmdSetStencilOpEXT-passOp-parameter",
"text": " <code>passOp</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkStencilOp\">VkStencilOp</a> value"
},
{
"vuid": "VUID-vkCmdSetStencilOpEXT-depthFailOp-parameter",
"text": " <code>depthFailOp</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkStencilOp\">VkStencilOp</a> value"
},
{
"vuid": "VUID-vkCmdSetStencilOpEXT-compareOp-parameter",
"text": " <code>compareOp</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCompareOp\">VkCompareOp</a> value"
},
{
"vuid": "VUID-vkCmdSetStencilOpEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdSetStencilOpEXT-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
}
]
},
"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-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> 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 <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> 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 <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> 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 <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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"
}
]
},
"vkCmdSetDepthTestEnableEXT": {
"(VK_EXT_extended_dynamic_state)": [
{
"vuid": "VUID-vkCmdSetDepthTestEnableEXT-None-03352",
"text": " The <a href=\"#features-extendedDynamicState\">extendedDynamicState</a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkCmdSetDepthTestEnableEXT-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdSetDepthTestEnableEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdSetDepthTestEnableEXT-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
}
]
},
"vkCmdSetDepthCompareOpEXT": {
"(VK_EXT_extended_dynamic_state)": [
{
"vuid": "VUID-vkCmdSetDepthCompareOpEXT-None-03353",
"text": " The <a href=\"#features-extendedDynamicState\">extendedDynamicState</a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkCmdSetDepthCompareOpEXT-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdSetDepthCompareOpEXT-depthCompareOp-parameter",
"text": " <code>depthCompareOp</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCompareOp\">VkCompareOp</a> value"
},
{
"vuid": "VUID-vkCmdSetDepthCompareOpEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdSetDepthCompareOpEXT-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
}
]
},
"vkCmdSetDepthWriteEnableEXT": {
"(VK_EXT_extended_dynamic_state)": [
{
"vuid": "VUID-vkCmdSetDepthWriteEnableEXT-None-03354",
"text": " The <a href=\"#features-extendedDynamicState\">extendedDynamicState</a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkCmdSetDepthWriteEnableEXT-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdSetDepthWriteEnableEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdSetDepthWriteEnableEXT-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support graphics operations"
}
]
},
"VkPipelineRepresentativeFragmentTestStateCreateInfoNV": {
"(VK_NV_representative_fragment_test)": [
{
"vuid": "VUID-VkPipelineRepresentativeFragmentTestStateCreateInfoNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV</code>"
}
]
},
"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>"
}
]
},
"VkPipelineCoverageReductionStateCreateInfoNV": {
"(VK_NV_framebuffer_mixed_samples)+(VK_NV_coverage_reduction_mode)": [
{
"vuid": "VUID-VkPipelineCoverageReductionStateCreateInfoNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV</code>"
},
{
"vuid": "VUID-VkPipelineCoverageReductionStateCreateInfoNV-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
},
{
"vuid": "VUID-VkPipelineCoverageReductionStateCreateInfoNV-coverageReductionMode-parameter",
"text": " <code>coverageReductionMode</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCoverageReductionModeNV\">VkCoverageReductionModeNV</a> value"
}
]
},
"vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV": {
"(VK_NV_framebuffer_mixed_samples)+(VK_NV_coverage_reduction_mode)": [
{
"vuid": "VUID-vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV-pCombinationCount-parameter",
"text": " <code>pCombinationCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV-pCombinations-parameter",
"text": " If the value referenced by <code>pCombinationCount</code> is not <code>0</code>, and <code>pCombinations</code> is not <code>NULL</code>, <code>pCombinations</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pCombinationCount</code> <a href=\"#VkFramebufferMixedSamplesCombinationNV\">VkFramebufferMixedSamplesCombinationNV</a> structures"
}
]
},
"VkFramebufferMixedSamplesCombinationNV": {
"(VK_NV_framebuffer_mixed_samples)+(VK_NV_coverage_reduction_mode)": [
{
"vuid": "VUID-VkFramebufferMixedSamplesCombinationNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV</code>"
},
{
"vuid": "VUID-VkFramebufferMixedSamplesCombinationNV-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</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"
}
]
},
"VkPipelineColorBlendStateCreateInfo": {
"core": [
{
"vuid": "VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605",
"text": " If the <a href=\"#features-independentBlend\">independent blending</a> 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 <a href=\"#features-logicOp\">logic operations</a> 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-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"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 <a href=\"#VkPipelineColorBlendAttachmentState\">VkPipelineColorBlendAttachmentState</a> structures"
}
]
},
"VkPipelineColorBlendAttachmentState": {
"core": [
{
"vuid": "VUID-VkPipelineColorBlendAttachmentState-srcColorBlendFactor-00608",
"text": " If the <a href=\"#features-dualSrcBlend\">dual source blending</a> 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 <a href=\"#features-dualSrcBlend\">dual source blending</a> 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 <a href=\"#features-dualSrcBlend\">dual source blending</a> 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 <a href=\"#features-dualSrcBlend\">dual source blending</a> 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 <a href=\"#framebuffer-blend-advanced\">advanced blend operation</a>, 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 <a href=\"#framebuffer-blend-advanced\">advanced blend operation</a>, 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 <a href=\"#framebuffer-blend-advanced\">advanced blend operation</a>, 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 <a href=\"#framebuffer-blend-advanced\">advanced blend operation</a>, 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-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdSetBlendConstants-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#limits-advancedBlendNonPremultipliedSrcColor\">non-premultiplied source color</a> 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 <a href=\"#limits-advancedBlendNonPremultipliedDstColor\">non-premultiplied destination color</a> 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 <a href=\"#limits-advancedBlendCorrelatedOverlap\">correlated overlap</a> 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-None-02690",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_LINEAR</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT</code>"
},
{
"vuid": "VUID-vkCmdDispatch-None-02691",
"text": " If a <code>VkImageView</code> is accessed using atomic operations as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT</code>"
},
{
"vuid": "VUID-vkCmdDispatch-None-02697",
"text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdDispatch-None-02698",
"text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a push constant value <strong class=\"purple\">must</strong> have been set for the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdDispatch-None-02699",
"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 <code>VkPipeline</code> bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdDispatch-None-02700",
"text": " A valid pipeline <strong class=\"purple\">must</strong> be bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdDispatch-commandBuffer-02701",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command requires any dynamic state, that state <strong class=\"purple\">must</strong> have been set for <code>commandBuffer</code>, and done so after any previously bound pipeline with the corresponding state not specified as dynamic"
},
{
"vuid": "VUID-vkCmdDispatch-None-02859",
"text": " There <strong class=\"purple\">must</strong> not have been any calls to dynamic state setting commands for any state not specified as dynamic in the <code>VkPipeline</code> object bound to the pipeline bind point used by this command, since that pipeline was bound"
},
{
"vuid": "VUID-vkCmdDispatch-None-02702",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-02703",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-02704",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-02705",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdDispatch-None-02706",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdDispatch-None-04115",
"text": " If a <code>VkImageView</code> is accessed using <code>OpImageWrite</code> as a result of this command, then the <code>Type</code> of the <code>Texel</code> operand of that instruction <strong class=\"purple\">must</strong> have at least as many components as the image view&#8217;s format."
},
{
"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-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdDispatch-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdDispatch-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support compute operations"
},
{
"vuid": "VUID-vkCmdDispatch-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDispatch-None-02692",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT</code>"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)+!(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDispatch-None-02693",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</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_IMG_filter_cubic,VK_EXT_filter_cubic)+(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDispatch-filterCubic-02694",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubic</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
},
{
"vuid": "VUID-vkCmdDispatch-filterCubicMinmax-02695",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> with a reduction mode of either <code>VK_SAMPLER_REDUCTION_MODE_MIN</code> or <code>VK_SAMPLER_REDUCTION_MODE_MAX</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering together with minmax filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubicMinmax</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
}
],
"(VK_NV_corner_sampled_image)": [
{
"vuid": "VUID-vkCmdDispatch-flags-02696",
"text": " Any <a href=\"#VkImage\">VkImage</a> created with a <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>::<code>flags</code> containing <code>VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV</code> sampled as a result of this command <strong class=\"purple\">must</strong> only be sampled using a <a href=\"#VkSamplerAddressMode\">VkSamplerAddressMode</a> of <code>VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdDispatch-commandBuffer-02707",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, any resource accessed by the <code>VkPipeline</code> object bound to the pipeline bind point used by this command <strong class=\"purple\">must</strong> not be a protected resource"
},
{
"vuid": "VUID-vkCmdDispatch-commandBuffer-02712",
"text": " If <code>commandBuffer</code> is a protected command buffer, any resource written to by the <code>VkPipeline</code> object bound to the pipeline bind point used by this command <strong class=\"purple\">must</strong> not be an unprotected resource"
},
{
"vuid": "VUID-vkCmdDispatch-commandBuffer-02713",
"text": " If <code>commandBuffer</code> is a protected command buffer, pipeline stages other than the framebuffer-space and compute stages in the <code>VkPipeline</code> object bound to the pipeline bind point <strong class=\"purple\">must</strong> not write to any resource"
}
]
},
"vkCmdDispatchIndirect": {
"core": [
{
"vuid": "VUID-vkCmdDispatchIndirect-None-02690",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_LINEAR</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT</code>"
},
{
"vuid": "VUID-vkCmdDispatchIndirect-None-02691",
"text": " If a <code>VkImageView</code> is accessed using atomic operations as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT</code>"
},
{
"vuid": "VUID-vkCmdDispatchIndirect-None-02697",
"text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdDispatchIndirect-None-02698",
"text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a push constant value <strong class=\"purple\">must</strong> have been set for the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdDispatchIndirect-None-02699",
"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 <code>VkPipeline</code> bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdDispatchIndirect-None-02700",
"text": " A valid pipeline <strong class=\"purple\">must</strong> be bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdDispatchIndirect-commandBuffer-02701",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command requires any dynamic state, that state <strong class=\"purple\">must</strong> have been set for <code>commandBuffer</code>, and done so after any previously bound pipeline with the corresponding state not specified as dynamic"
},
{
"vuid": "VUID-vkCmdDispatchIndirect-None-02859",
"text": " There <strong class=\"purple\">must</strong> not have been any calls to dynamic state setting commands for any state not specified as dynamic in the <code>VkPipeline</code> object bound to the pipeline bind point used by this command, since that pipeline was bound"
},
{
"vuid": "VUID-vkCmdDispatchIndirect-None-02702",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-02703",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-02704",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-02705",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdDispatchIndirect-None-02706",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdDispatchIndirect-None-04115",
"text": " If a <code>VkImageView</code> is accessed using <code>OpImageWrite</code> as a result of this command, then the <code>Type</code> of the <code>Texel</code> operand of that instruction <strong class=\"purple\">must</strong> have at least as many components as the image view&#8217;s format."
},
{
"vuid": "VUID-vkCmdDispatchIndirect-buffer-02708",
"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-buffer-02709",
"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-02710",
"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-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdDispatchIndirect-buffer-parameter",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdDispatchIndirect-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDispatchIndirect-None-02692",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT</code>"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)+!(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDispatchIndirect-None-02693",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</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_IMG_filter_cubic,VK_EXT_filter_cubic)+(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDispatchIndirect-filterCubic-02694",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubic</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
},
{
"vuid": "VUID-vkCmdDispatchIndirect-filterCubicMinmax-02695",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> with a reduction mode of either <code>VK_SAMPLER_REDUCTION_MODE_MIN</code> or <code>VK_SAMPLER_REDUCTION_MODE_MAX</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering together with minmax filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubicMinmax</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
}
],
"(VK_NV_corner_sampled_image)": [
{
"vuid": "VUID-vkCmdDispatchIndirect-flags-02696",
"text": " Any <a href=\"#VkImage\">VkImage</a> created with a <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>::<code>flags</code> containing <code>VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV</code> sampled as a result of this command <strong class=\"purple\">must</strong> only be sampled using a <a href=\"#VkSamplerAddressMode\">VkSamplerAddressMode</a> of <code>VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdDispatchIndirect-commandBuffer-02707",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, any resource accessed by the <code>VkPipeline</code> object bound to the pipeline bind point used by this command <strong class=\"purple\">must</strong> not be a protected resource"
},
{
"vuid": "VUID-vkCmdDispatchIndirect-commandBuffer-02711",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> not be a protected command 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": {
"core": [
{
"vuid": "VUID-vkCmdDispatchBase-None-02690",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_LINEAR</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT</code>"
},
{
"vuid": "VUID-vkCmdDispatchBase-None-02691",
"text": " If a <code>VkImageView</code> is accessed using atomic operations as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT</code>"
},
{
"vuid": "VUID-vkCmdDispatchBase-None-02697",
"text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdDispatchBase-None-02698",
"text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a push constant value <strong class=\"purple\">must</strong> have been set for the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdDispatchBase-None-02699",
"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 <code>VkPipeline</code> bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdDispatchBase-None-02700",
"text": " A valid pipeline <strong class=\"purple\">must</strong> be bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdDispatchBase-commandBuffer-02701",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command requires any dynamic state, that state <strong class=\"purple\">must</strong> have been set for <code>commandBuffer</code>, and done so after any previously bound pipeline with the corresponding state not specified as dynamic"
},
{
"vuid": "VUID-vkCmdDispatchBase-None-02859",
"text": " There <strong class=\"purple\">must</strong> not have been any calls to dynamic state setting commands for any state not specified as dynamic in the <code>VkPipeline</code> object bound to the pipeline bind point used by this command, since that pipeline was bound"
},
{
"vuid": "VUID-vkCmdDispatchBase-None-02702",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-vkCmdDispatchBase-None-02703",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-vkCmdDispatchBase-None-02704",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-vkCmdDispatchBase-None-02705",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdDispatchBase-None-02706",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdDispatchBase-None-04115",
"text": " If a <code>VkImageView</code> is accessed using <code>OpImageWrite</code> as a result of this command, then the <code>Type</code> of the <code>Texel</code> operand of that instruction <strong class=\"purple\">must</strong> have at least as many components as the image view&#8217;s format."
},
{
"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"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDispatchBase-None-02692",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT</code>"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)+!(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDispatchBase-None-02693",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</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_IMG_filter_cubic,VK_EXT_filter_cubic)+(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdDispatchBase-filterCubic-02694",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubic</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
},
{
"vuid": "VUID-vkCmdDispatchBase-filterCubicMinmax-02695",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> with a reduction mode of either <code>VK_SAMPLER_REDUCTION_MODE_MIN</code> or <code>VK_SAMPLER_REDUCTION_MODE_MAX</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering together with minmax filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubicMinmax</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
}
],
"(VK_NV_corner_sampled_image)": [
{
"vuid": "VUID-vkCmdDispatchBase-flags-02696",
"text": " Any <a href=\"#VkImage\">VkImage</a> created with a <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>::<code>flags</code> containing <code>VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV</code> sampled as a result of this command <strong class=\"purple\">must</strong> only be sampled using a <a href=\"#VkSamplerAddressMode\">VkSamplerAddressMode</a> of <code>VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdDispatchBase-commandBuffer-02707",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, any resource accessed by the <code>VkPipeline</code> object bound to the pipeline bind point used by this command <strong class=\"purple\">must</strong> not be a protected resource"
}
],
"(VK_VERSION_1_1,VK_KHR_device_group)": [
{
"vuid": "VUID-vkCmdDispatchBase-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdDispatchBase-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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"
}
]
},
"vkCreateIndirectCommandsLayoutNV": {
"(VK_NV_device_generated_commands)": [
{
"vuid": "VUID-vkCreateIndirectCommandsLayoutNV-deviceGeneratedCommands-02929",
"text": " The <a href=\"#feature-device-generated-commands\"><code>VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV</code>::<code>deviceGeneratedCommands</code></a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkCreateIndirectCommandsLayoutNV-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkCreateIndirectCommandsLayoutNV-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkIndirectCommandsLayoutCreateInfoNV\">VkIndirectCommandsLayoutCreateInfoNV</a> structure"
},
{
"vuid": "VUID-vkCreateIndirectCommandsLayoutNV-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateIndirectCommandsLayoutNV-pIndirectCommandsLayout-parameter",
"text": " <code>pIndirectCommandsLayout</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkIndirectCommandsLayoutNV\">VkIndirectCommandsLayoutNV</a> handle"
}
]
},
"VkIndirectCommandsLayoutCreateInfoNV": {
"(VK_NV_device_generated_commands)": [
{
"vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-pipelineBindPoint-02930",
"text": " The <code>pipelineBindPoint</code> <strong class=\"purple\">must</strong> be <code>VK_PIPELINE_BIND_POINT_GRAPHICS</code>"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-tokenCount-02931",
"text": " <code>tokenCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code> and less than or equal to <code>VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV</code>::<code>maxIndirectCommandsTokenCount</code>"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-pTokens-02932",
"text": " If <code>pTokens</code> contains an entry of <code>VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV</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-VkIndirectCommandsLayoutCreateInfoNV-pTokens-02933",
"text": " If <code>pTokens</code> contains an entry of <code>VK_INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV</code> there <strong class=\"purple\">must</strong> be only a single element of such token type"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-pTokens-02934",
"text": " All state tokens in <code>pTokens</code> <strong class=\"purple\">must</strong> occur prior work provoking tokens (<code>VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV</code>, <code>VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV</code>, <code>VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV</code>)"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-pTokens-02935",
"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-VkIndirectCommandsLayoutCreateInfoNV-streamCount-02936",
"text": " <code>streamCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code> and less or equal to <code>VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV</code>::<code>maxIndirectCommandsStreamCount</code>"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-pStreamStrides-02937",
"text": " each element of <code>pStreamStrides</code> <strong class=\"purple\">must</strong> be greater than `0`and less than or equal to <code>VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV</code>::<code>maxIndirectCommandsStreamStride</code>. Furthermore the alignment of each token input <strong class=\"purple\">must</strong> be ensured"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV</code>"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkIndirectCommandsLayoutUsageFlagBitsNV\">VkIndirectCommandsLayoutUsageFlagBitsNV</a> values"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-flags-requiredbitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> not be <code>0</code>"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-pipelineBindPoint-parameter",
"text": " <code>pipelineBindPoint</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipelineBindPoint\">VkPipelineBindPoint</a> value"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-pTokens-parameter",
"text": " <code>pTokens</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>tokenCount</code> valid <a href=\"#VkIndirectCommandsLayoutTokenNV\">VkIndirectCommandsLayoutTokenNV</a> structures"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-pStreamStrides-parameter",
"text": " <code>pStreamStrides</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>streamCount</code> <code>uint32_t</code> values"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-tokenCount-arraylength",
"text": " <code>tokenCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-streamCount-arraylength",
"text": " <code>streamCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"vkDestroyIndirectCommandsLayoutNV": {
"(VK_NV_device_generated_commands)": [
{
"vuid": "VUID-vkDestroyIndirectCommandsLayoutNV-indirectCommandsLayout-02938",
"text": " All submitted commands that refer to <code>indirectCommandsLayout</code> <strong class=\"purple\">must</strong> have completed execution"
},
{
"vuid": "VUID-vkDestroyIndirectCommandsLayoutNV-indirectCommandsLayout-02939",
"text": " If <code>VkAllocationCallbacks</code> were provided when <code>indirectCommandsLayout</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
},
{
"vuid": "VUID-vkDestroyIndirectCommandsLayoutNV-indirectCommandsLayout-02940",
"text": " If no <code>VkAllocationCallbacks</code> were provided when <code>indirectCommandsLayout</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-vkDestroyIndirectCommandsLayoutNV-deviceGeneratedCommands-02941",
"text": " The <a href=\"#feature-device-generated-commands\"><code>VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV</code>::<code>deviceGeneratedCommands</code></a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkDestroyIndirectCommandsLayoutNV-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkDestroyIndirectCommandsLayoutNV-indirectCommandsLayout-parameter",
"text": " If <code>indirectCommandsLayout</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>indirectCommandsLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkIndirectCommandsLayoutNV\">VkIndirectCommandsLayoutNV</a> handle"
},
{
"vuid": "VUID-vkDestroyIndirectCommandsLayoutNV-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkDestroyIndirectCommandsLayoutNV-indirectCommandsLayout-parent",
"text": " If <code>indirectCommandsLayout</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"VkIndirectCommandsStreamNV": {
"(VK_NV_device_generated_commands)": [
{
"vuid": "VUID-VkIndirectCommandsStreamNV-buffer-02942",
"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-VkIndirectCommandsStreamNV-offset-02943",
"text": " The <code>offset</code> <strong class=\"purple\">must</strong> be aligned to <code>VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV</code>::<code>minIndirectCommandsBufferOffsetAlignment</code>"
},
{
"vuid": "VUID-VkIndirectCommandsStreamNV-buffer-02975",
"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-VkIndirectCommandsStreamNV-buffer-parameter",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
}
]
},
"VkBindShaderGroupIndirectCommandNV": {
"(VK_NV_device_generated_commands)": [
{
"vuid": "VUID-VkBindShaderGroupIndirectCommandNV-None-02944",
"text": " The current bound graphics pipeline, as well as the pipelines it may reference, <strong class=\"purple\">must</strong> have been created with <code>VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV</code>"
},
{
"vuid": "VUID-VkBindShaderGroupIndirectCommandNV-index-02945",
"text": " The <code>index</code> <strong class=\"purple\">must</strong> be within range of the accessible shader groups of the current bound graphics pipeline. See <a href=\"#vkCmdBindPipelineShaderGroupNV\">vkCmdBindPipelineShaderGroupNV</a> for further details"
}
]
},
"VkBindIndexBufferIndirectCommandNV": {
"(VK_NV_device_generated_commands)": [
{
"vuid": "VUID-VkBindIndexBufferIndirectCommandNV-None-02946",
"text": " The buffer&#8217;s usage flag from which the address was acquired <strong class=\"purple\">must</strong> have the <code>VK_BUFFER_USAGE_INDEX_BUFFER_BIT</code> bit set"
},
{
"vuid": "VUID-VkBindIndexBufferIndirectCommandNV-bufferAddress-02947",
"text": " The <code>bufferAddress</code> <strong class=\"purple\">must</strong> be aligned to the <code>indexType</code> used"
},
{
"vuid": "VUID-VkBindIndexBufferIndirectCommandNV-None-02948",
"text": " Each element of the buffer from which the address was acquired and that is non-sparse <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
},
{
"vuid": "VUID-VkBindIndexBufferIndirectCommandNV-indexType-parameter",
"text": " <code>indexType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkIndexType\">VkIndexType</a> value"
}
]
},
"VkBindVertexBufferIndirectCommandNV": {
"(VK_NV_device_generated_commands)": [
{
"vuid": "VUID-VkBindVertexBufferIndirectCommandNV-None-02949",
"text": " The buffer&#8217;s usage flag from which the address was acquired <strong class=\"purple\">must</strong> have the <code>VK_BUFFER_USAGE_VERTEX_BUFFER_BIT</code> bit set"
},
{
"vuid": "VUID-VkBindVertexBufferIndirectCommandNV-None-02950",
"text": " Each element of the buffer from which the address was acquired and that is non-sparse <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
}
]
},
"VkIndirectCommandsLayoutTokenNV": {
"(VK_NV_device_generated_commands)": [
{
"vuid": "VUID-VkIndirectCommandsLayoutTokenNV-stream-02951",
"text": " <code>stream</code> <strong class=\"purple\">must</strong> be smaller than <code>VkIndirectCommandsLayoutCreateInfoNV</code>::<code>streamCount</code>"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutTokenNV-offset-02952",
"text": " <code>offset</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV</code>::<code>maxIndirectCommandsTokenOffset</code>"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02976",
"text": " If <code>tokenType</code> is <code>VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV</code>, <code>vertexBindingUnit</code> <strong class=\"purple\">must</strong> stay within device supported limits for the appropriate commands"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02977",
"text": " If <code>tokenType</code> is <code>VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV</code>, <code>pushconstantPipelineLayout</code> <strong class=\"purple\">must</strong> be valid"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02978",
"text": " If <code>tokenType</code> is <code>VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV</code>, <code>pushconstantOffset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02979",
"text": " If <code>tokenType</code> is <code>VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV</code>, <code>pushconstantSize</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02980",
"text": " If <code>tokenType</code> is <code>VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV</code>, <code>pushconstantOffset</code> <strong class=\"purple\">must</strong> be less than <code>VkPhysicalDeviceLimits</code>::<code>maxPushConstantsSize</code>"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02981",
"text": " If <code>tokenType</code> is <code>VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV</code>, <code>pushconstantSize</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxPushConstantsSize</code> minus <code>pushconstantOffset</code>"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02982",
"text": " If <code>tokenType</code> is <code>VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV</code>, for each byte in the range specified by <code>pushconstantOffset</code> and <code>pushconstantSize</code> and for each shader stage in <code>pushconstantShaderStageFlags</code>, there <strong class=\"purple\">must</strong> be a push constant range in <code>pushconstantPipelineLayout</code> that includes that byte and that stage"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02983",
"text": " If <code>tokenType</code> is <code>VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV</code>, for each byte in the range specified by <code>pushconstantOffset</code> and <code>pushconstantSize</code> and for each push constant range that overlaps that byte, <code>pushconstantShaderStageFlags</code> <strong class=\"purple\">must</strong> include all stages in that push constant range&#8217;s <a href=\"#VkPushConstantRange\">VkPushConstantRange</a>::<code>pushconstantShaderStageFlags</code>"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02984",
"text": " If <code>tokenType</code> is <code>VK_INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV</code>, <code>indirectStateFlags</code> <strong class=\"purple\">must</strong> not be ´0´"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutTokenNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV</code>"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutTokenNV-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutTokenNV-tokenType-parameter",
"text": " <code>tokenType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkIndirectCommandsTokenTypeNV\">VkIndirectCommandsTokenTypeNV</a> value"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutTokenNV-pushconstantPipelineLayout-parameter",
"text": " If <code>pushconstantPipelineLayout</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>pushconstantPipelineLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipelineLayout\">VkPipelineLayout</a> handle"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutTokenNV-pushconstantShaderStageFlags-parameter",
"text": " <code>pushconstantShaderStageFlags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkShaderStageFlagBits\">VkShaderStageFlagBits</a> values"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutTokenNV-indirectStateFlags-parameter",
"text": " <code>indirectStateFlags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkIndirectStateFlagBitsNV\">VkIndirectStateFlagBitsNV</a> values"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutTokenNV-pIndexTypes-parameter",
"text": " If <code>indexTypeCount</code> is not <code>0</code>, <code>pIndexTypes</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>indexTypeCount</code> valid <a href=\"#VkIndexType\">VkIndexType</a> values"
},
{
"vuid": "VUID-VkIndirectCommandsLayoutTokenNV-pIndexTypeValues-parameter",
"text": " If <code>indexTypeCount</code> is not <code>0</code>, <code>pIndexTypeValues</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>indexTypeCount</code> <code>uint32_t</code> values"
}
]
},
"vkGetGeneratedCommandsMemoryRequirementsNV": {
"(VK_NV_device_generated_commands)": [
{
"vuid": "VUID-vkGetGeneratedCommandsMemoryRequirementsNV-deviceGeneratedCommands-02906",
"text": " The <a href=\"#feature-device-generated-commands\"><code>VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV</code>::<code>deviceGeneratedCommands</code></a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkGetGeneratedCommandsMemoryRequirementsNV-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetGeneratedCommandsMemoryRequirementsNV-pInfo-parameter",
"text": " <code>pInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkGeneratedCommandsMemoryRequirementsInfoNV\">VkGeneratedCommandsMemoryRequirementsInfoNV</a> structure"
},
{
"vuid": "VUID-vkGetGeneratedCommandsMemoryRequirementsNV-pMemoryRequirements-parameter",
"text": " <code>pMemoryRequirements</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkMemoryRequirements2\">VkMemoryRequirements2</a> structure"
}
]
},
"VkGeneratedCommandsMemoryRequirementsInfoNV": {
"(VK_NV_device_generated_commands)": [
{
"vuid": "VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-maxSequencesCount-02907",
"text": " <code>maxSequencesCount</code> <strong class=\"purple\">must</strong> be less or equal to <a href=\"#VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV\">VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV</a>::<code>maxIndirectSequenceCount</code>"
},
{
"vuid": "VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV</code>"
},
{
"vuid": "VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-pipelineBindPoint-parameter",
"text": " <code>pipelineBindPoint</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipelineBindPoint\">VkPipelineBindPoint</a> value"
},
{
"vuid": "VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-pipeline-parameter",
"text": " <code>pipeline</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipeline\">VkPipeline</a> handle"
},
{
"vuid": "VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-indirectCommandsLayout-parameter",
"text": " <code>indirectCommandsLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkIndirectCommandsLayoutNV\">VkIndirectCommandsLayoutNV</a> handle"
},
{
"vuid": "VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-commonparent",
"text": " Both of <code>indirectCommandsLayout</code>, and <code>pipeline</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"vkCmdExecuteGeneratedCommandsNV": {
"core": [
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-02690",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_LINEAR</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT</code>"
},
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-02691",
"text": " If a <code>VkImageView</code> is accessed using atomic operations as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT</code>"
},
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-02697",
"text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-02698",
"text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a push constant value <strong class=\"purple\">must</strong> have been set for the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-02699",
"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 <code>VkPipeline</code> bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-02700",
"text": " A valid pipeline <strong class=\"purple\">must</strong> be bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-commandBuffer-02701",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command requires any dynamic state, that state <strong class=\"purple\">must</strong> have been set for <code>commandBuffer</code>, and done so after any previously bound pipeline with the corresponding state not specified as dynamic"
},
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-02859",
"text": " There <strong class=\"purple\">must</strong> not have been any calls to dynamic state setting commands for any state not specified as dynamic in the <code>VkPipeline</code> object bound to the pipeline bind point used by this command, since that pipeline was bound"
},
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-02702",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-vkCmdExecuteGeneratedCommandsNV-None-02703",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-vkCmdExecuteGeneratedCommandsNV-None-02704",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-vkCmdExecuteGeneratedCommandsNV-None-02705",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-02706",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-04115",
"text": " If a <code>VkImageView</code> is accessed using <code>OpImageWrite</code> as a result of this command, then the <code>Type</code> of the <code>Texel</code> operand of that instruction <strong class=\"purple\">must</strong> have at least as many components as the image view&#8217;s format."
},
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-renderPass-02684",
"text": " The current render pass <strong class=\"purple\">must</strong> be <a href=\"#renderpass-compatibility\">compatible</a> 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-vkCmdExecuteGeneratedCommandsNV-subpass-02685",
"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-vkCmdExecuteGeneratedCommandsNV-None-02686",
"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-vkCmdExecuteGeneratedCommandsNV-None-02687",
"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-vkCmdExecuteGeneratedCommandsNV-None-04007",
"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 either valid or <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a> buffers bound"
},
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-04008",
"text": " If the <a href=\"#features-nullDescriptor\">nullDescriptor</a> feature is not enabled, all vertex input bindings accessed via vertex input variables declared in the vertex shader entry point&#8217;s interface <strong class=\"purple\">must</strong> not be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-02721",
"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 <a href=\"#fxvertex-input\">Vertex Input Description</a>"
},
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-isPreprocessed-02908",
"text": " If <code>isPreprocessed</code> is <code>VK_TRUE</code> then <a href=\"#vkCmdPreprocessGeneratedCommandsNV\">vkCmdPreprocessGeneratedCommandsNV</a> <strong class=\"purple\">must</strong> have already been executed on the device, using the same <code>pGeneratedCommandsInfo</code> content as well as the content of the input buffers it references (all except <a href=\"#VkGeneratedCommandsInfoNV\">VkGeneratedCommandsInfoNV</a>::<code>preprocessBuffer</code>). Furthermore <code>pGeneratedCommandsInfo</code>`s <code>indirectCommandsLayout</code> <strong class=\"purple\">must</strong> have been created with the <code>VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV</code> bit set"
},
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-pipeline-02909",
"text": " <code>VkGeneratedCommandsInfoNV</code>::<code>pipeline</code> <strong class=\"purple\">must</strong> match the current bound pipeline at <code>VkGeneratedCommandsInfoNV</code>::<code>pipelineBindPoint</code>"
},
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-deviceGeneratedCommands-02911",
"text": " The <a href=\"#feature-device-generated-commands\"><code>VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV</code>::<code>deviceGeneratedCommands</code></a> feature <strong class=\"purple\">must</strong> be enabled"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-02692",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT</code>"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)+!(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-02693",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</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_IMG_filter_cubic,VK_EXT_filter_cubic)+(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-filterCubic-02694",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubic</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
},
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-filterCubicMinmax-02695",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> with a reduction mode of either <code>VK_SAMPLER_REDUCTION_MODE_MIN</code> or <code>VK_SAMPLER_REDUCTION_MODE_MAX</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering together with minmax filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubicMinmax</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
}
],
"(VK_NV_corner_sampled_image)": [
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-flags-02696",
"text": " Any <a href=\"#VkImage\">VkImage</a> created with a <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>::<code>flags</code> containing <code>VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV</code> sampled as a result of this command <strong class=\"purple\">must</strong> only be sampled using a <a href=\"#VkSamplerAddressMode\">VkSamplerAddressMode</a> of <code>VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-commandBuffer-02707",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, any resource accessed by the <code>VkPipeline</code> object bound to the pipeline bind point used by this command <strong class=\"purple\">must</strong> not be a protected resource"
},
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-commandBuffer-02970",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> not be a protected command buffer"
}
],
"(VK_VERSION_1_1,VK_KHR_multiview)": [
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-maxMultiviewInstanceIndex-02688",
"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_EXT_sample_locations)": [
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-sampleLocationsEnable-02689",
"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"
}
],
"(VK_EXT_extended_dynamic_state)": [
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-viewportCount-03417",
"text": " If the bound graphics pipeline state was created with the <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> dynamic state enabled, but not the <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> dynamic state enabled, then then <a href=\"#vkCmdSetViewportWithCountEXT\">vkCmdSetViewportWithCountEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>viewportCount</code> parameter of <code>vkCmdSetViewportWithCountEXT</code> <strong class=\"purple\">must</strong> match the <code>VkPipelineViewportStateCreateInfo</code>::<code>scissorCount</code> of the pipeline"
},
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-scissorCount-03418",
"text": " If the bound graphics pipeline state was created with the <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> dynamic state enabled, but not the <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> dynamic state enabled, then then <a href=\"#vkCmdSetScissorWithCountEXT\">vkCmdSetScissorWithCountEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>scissorCount</code> parameter of <code>vkCmdSetScissorWithCountEXT</code> <strong class=\"purple\">must</strong> match the <code>VkPipelineViewportStateCreateInfo</code>::<code>viewportCount</code> of the pipeline"
},
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-viewportCount-03419",
"text": " If the bound graphics pipeline state was created with both the <code>VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT</code> and <code>VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT</code> dynamic states enabled then both <a href=\"#vkCmdSetViewportWithCountEXT\">vkCmdSetViewportWithCountEXT</a> and <a href=\"#vkCmdSetScissorWithCountEXT\">vkCmdSetScissorWithCountEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>viewportCount</code> parameter of <code>vkCmdSetViewportWithCountEXT</code> <strong class=\"purple\">must</strong> match the <code>scissorCount</code> parameter of <code>vkCmdSetScissorWithCountEXT</code>"
},
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-primitiveTopology-03420",
"text": " If the bound graphics pipeline state was created with the <code>VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT</code> dynamic state enabled then <a href=\"#vkCmdSetPrimitiveTopologyEXT\">vkCmdSetPrimitiveTopologyEXT</a> <strong class=\"purple\">must</strong> have been called in the current command buffer prior to this draw command, and the <code>primitiveTopology</code> parameter of <code>vkCmdSetPrimitiveTopologyEXT</code> <strong class=\"purple\">must</strong> be of the same <a href=\"#drawing-primitive-topology-class\">topology class</a> as the pipeline <a href=\"#VkPipelineInputAssemblyStateCreateInfo\">VkPipelineInputAssemblyStateCreateInfo</a>::<code>topology</code> state"
}
],
"(VK_EXT_transform_feedback)": [
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-02910",
"text": " Transform feedback <strong class=\"purple\">must</strong> not be active"
}
],
"(VK_NV_device_generated_commands)": [
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-pGeneratedCommandsInfo-parameter",
"text": " <code>pGeneratedCommandsInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkGeneratedCommandsInfoNV\">VkGeneratedCommandsInfoNV</a> structure"
},
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called inside of a render pass instance"
}
]
},
"VkGeneratedCommandsInfoNV": {
"(VK_NV_device_generated_commands)": [
{
"vuid": "VUID-VkGeneratedCommandsInfoNV-pipeline-02912",
"text": " The provided <code>pipeline</code> <strong class=\"purple\">must</strong> match the pipeline bound at execution time"
},
{
"vuid": "VUID-VkGeneratedCommandsInfoNV-indirectCommandsLayout-02913",
"text": " If the <code>indirectCommandsLayout</code> uses a token of <code>VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV</code>, then the <code>pipeline</code> <strong class=\"purple\">must</strong> have been created with multiple shader groups"
},
{
"vuid": "VUID-VkGeneratedCommandsInfoNV-indirectCommandsLayout-02914",
"text": " If the <code>indirectCommandsLayout</code> uses a token of <code>VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV</code>, then the <code>pipeline</code> <strong class=\"purple\">must</strong> have been created with <code>VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV</code> set in <code>VkGraphicsPipelineCreateInfo</code>::<code>flags</code>"
},
{
"vuid": "VUID-VkGeneratedCommandsInfoNV-indirectCommandsLayout-02915",
"text": " If the <code>indirectCommandsLayout</code> uses a token of <code>VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV</code>, then the <code>pipeline</code>`s <code>VkPipelineLayout</code> <strong class=\"purple\">must</strong> match the <a href=\"#VkIndirectCommandsLayoutTokenNV\">VkIndirectCommandsLayoutTokenNV</a>::<code>pushconstantPipelineLayout</code>"
},
{
"vuid": "VUID-VkGeneratedCommandsInfoNV-streamCount-02916",
"text": " <code>streamCount</code> <strong class=\"purple\">must</strong> match the <code>indirectCommandsLayout</code>&#8217;s <code>streamCount</code>"
},
{
"vuid": "VUID-VkGeneratedCommandsInfoNV-sequencesCount-02917",
"text": " <code>sequencesCount</code> <strong class=\"purple\">must</strong> be less or equal to <a href=\"#VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV\">VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV</a>::<code>maxIndirectSequenceCount</code> and <a href=\"#VkGeneratedCommandsMemoryRequirementsInfoNV\">VkGeneratedCommandsMemoryRequirementsInfoNV</a>::<code>maxSequencesCount</code> that was used to determine the <code>preprocessSize</code>"
},
{
"vuid": "VUID-VkGeneratedCommandsInfoNV-preprocessBuffer-02918",
"text": " <code>preprocessBuffer</code> <strong class=\"purple\">must</strong> have the <code>VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT</code> bit set in its usage flag"
},
{
"vuid": "VUID-VkGeneratedCommandsInfoNV-preprocessOffset-02919",
"text": " <code>preprocessOffset</code> <strong class=\"purple\">must</strong> be aligned to <a href=\"#VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV\">VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV</a>::<code>minIndirectCommandsBufferOffsetAlignment</code>"
},
{
"vuid": "VUID-VkGeneratedCommandsInfoNV-preprocessBuffer-02971",
"text": " If <code>preprocessBuffer</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-VkGeneratedCommandsInfoNV-preprocessSize-02920",
"text": " <code>preprocessSize</code> <strong class=\"purple\">must</strong> be at least equal to the memory requirement`s size returned by <a href=\"#vkGetGeneratedCommandsMemoryRequirementsNV\">vkGetGeneratedCommandsMemoryRequirementsNV</a> using the matching inputs (<code>indirectCommandsLayout</code>, &#8230;&#8203;) as within this structure"
},
{
"vuid": "VUID-VkGeneratedCommandsInfoNV-sequencesCountBuffer-02921",
"text": " <code>sequencesCountBuffer</code> <strong class=\"purple\">can</strong> be set if the actual used count of sequences is sourced from the provided buffer. In that case the <code>sequencesCount</code> serves as upper bound"
},
{
"vuid": "VUID-VkGeneratedCommandsInfoNV-sequencesCountBuffer-02922",
"text": " If <code>sequencesCountBuffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, its usage flag <strong class=\"purple\">must</strong> have the <code>VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT</code> bit set"
},
{
"vuid": "VUID-VkGeneratedCommandsInfoNV-sequencesCountBuffer-02923",
"text": " If <code>sequencesCountBuffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>sequencesCountOffset</code> <strong class=\"purple\">must</strong> be aligned to <code>VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV</code>::<code>minSequencesCountBufferOffsetAlignment</code>"
},
{
"vuid": "VUID-VkGeneratedCommandsInfoNV-sequencesCountBuffer-02972",
"text": " If <code>sequencesCountBuffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a> and is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
},
{
"vuid": "VUID-VkGeneratedCommandsInfoNV-sequencesIndexBuffer-02924",
"text": " If <code>indirectCommandsLayout</code>&#8217;s <code>VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV</code> is set, <code>sequencesIndexBuffer</code> <strong class=\"purple\">must</strong> be set otherwise it <strong class=\"purple\">must</strong> be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-VkGeneratedCommandsInfoNV-sequencesIndexBuffer-02925",
"text": " If <code>sequencesIndexBuffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, its usage flag <strong class=\"purple\">must</strong> have the <code>VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT</code> bit set"
},
{
"vuid": "VUID-VkGeneratedCommandsInfoNV-sequencesIndexBuffer-02926",
"text": " If <code>sequencesIndexBuffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>sequencesIndexOffset</code> <strong class=\"purple\">must</strong> be aligned to <code>VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV</code>::<code>minSequencesIndexBufferOffsetAlignment</code>"
},
{
"vuid": "VUID-VkGeneratedCommandsInfoNV-sequencesIndexBuffer-02973",
"text": " If <code>sequencesIndexBuffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a> and is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object"
},
{
"vuid": "VUID-VkGeneratedCommandsInfoNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV</code>"
},
{
"vuid": "VUID-VkGeneratedCommandsInfoNV-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkGeneratedCommandsInfoNV-pipelineBindPoint-parameter",
"text": " <code>pipelineBindPoint</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipelineBindPoint\">VkPipelineBindPoint</a> value"
},
{
"vuid": "VUID-VkGeneratedCommandsInfoNV-pipeline-parameter",
"text": " <code>pipeline</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPipeline\">VkPipeline</a> handle"
},
{
"vuid": "VUID-VkGeneratedCommandsInfoNV-indirectCommandsLayout-parameter",
"text": " <code>indirectCommandsLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkIndirectCommandsLayoutNV\">VkIndirectCommandsLayoutNV</a> handle"
},
{
"vuid": "VUID-VkGeneratedCommandsInfoNV-pStreams-parameter",
"text": " <code>pStreams</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>streamCount</code> valid <a href=\"#VkIndirectCommandsStreamNV\">VkIndirectCommandsStreamNV</a> structures"
},
{
"vuid": "VUID-VkGeneratedCommandsInfoNV-preprocessBuffer-parameter",
"text": " <code>preprocessBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-VkGeneratedCommandsInfoNV-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 <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-VkGeneratedCommandsInfoNV-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 <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-VkGeneratedCommandsInfoNV-streamCount-arraylength",
"text": " <code>streamCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-VkGeneratedCommandsInfoNV-commonparent",
"text": " Each of <code>indirectCommandsLayout</code>, <code>pipeline</code>, <code>preprocessBuffer</code>, <code>sequencesCountBuffer</code>, and <code>sequencesIndexBuffer</code> that are valid handles of non-ignored parameters <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"vkCmdPreprocessGeneratedCommandsNV": {
"(VK_NV_device_generated_commands)+(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdPreprocessGeneratedCommandsNV-commandBuffer-02974",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> not be a protected command buffer"
}
],
"(VK_NV_device_generated_commands)": [
{
"vuid": "VUID-vkCmdPreprocessGeneratedCommandsNV-pGeneratedCommandsInfo-02927",
"text": " <code>pGeneratedCommandsInfo</code>`s <code>indirectCommandsLayout</code> <strong class=\"purple\">must</strong> have been created with the <code>VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV</code> bit set"
},
{
"vuid": "VUID-vkCmdPreprocessGeneratedCommandsNV-deviceGeneratedCommands-02928",
"text": " The <a href=\"#feature-device-generated-commands\"><code>VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV</code>::<code>deviceGeneratedCommands</code></a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkCmdPreprocessGeneratedCommandsNV-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdPreprocessGeneratedCommandsNV-pGeneratedCommandsInfo-parameter",
"text": " <code>pGeneratedCommandsInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkGeneratedCommandsInfoNV\">VkGeneratedCommandsInfoNV</a> structure"
},
{
"vuid": "VUID-vkCmdPreprocessGeneratedCommandsNV-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdPreprocessGeneratedCommandsNV-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-vkCmdPreprocessGeneratedCommandsNV-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
}
]
},
"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 <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>::<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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> 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> <a href=\"#VkSparseImageFormatProperties\">VkSparseImageFormatProperties</a> 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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties2-pFormatInfo-parameter",
"text": " <code>pFormatInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkPhysicalDeviceSparseImageFormatInfo2\">VkPhysicalDeviceSparseImageFormatInfo2</a> 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> <a href=\"#VkSparseImageFormatProperties2\">VkSparseImageFormatProperties2</a> 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 <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>::<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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetImageSparseMemoryRequirements-image-parameter",
"text": " <code>image</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImage\">VkImage</a> 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> <a href=\"#VkSparseImageMemoryRequirements\">VkSparseImageMemoryRequirements</a> 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetImageSparseMemoryRequirements2-pInfo-parameter",
"text": " <code>pInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkImageSparseMemoryRequirementsInfo2\">VkImageSparseMemoryRequirementsInfo2</a> 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> <a href=\"#VkSparseImageMemoryRequirements2\">VkSparseImageMemoryRequirements2</a> 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 <a href=\"#VkImage\">VkImage</a> 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 <a href=\"#resources-association\">Resource Memory Association</a>"
},
{
"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 <a href=\"#VkDeviceMemory\">VkDeviceMemory</a> 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"
}
],
"(VK_VERSION_1_1,VK_KHR_external_memory)": [
{
"vuid": "VUID-VkSparseMemoryBind-memory-02730",
"text": " If <code>memory</code> was created with <a href=\"#VkExportMemoryAllocateInfo\">VkExportMemoryAllocateInfo</a>::<code>handleTypes</code> not equal to <code>0</code>, at least one handle type it contained <strong class=\"purple\">must</strong> also have been set in <a href=\"#VkExternalMemoryBufferCreateInfo\">VkExternalMemoryBufferCreateInfo</a>::<code>handleTypes</code> or <a href=\"#VkExternalMemoryImageCreateInfo\">VkExternalMemoryImageCreateInfo</a>::<code>handleTypes</code> when the resource was created"
},
{
"vuid": "VUID-VkSparseMemoryBind-memory-02731",
"text": " If <code>memory</code> was created by a memory import operation, the external handle type of the imported memory <strong class=\"purple\">must</strong> also have been set in <a href=\"#VkExternalMemoryBufferCreateInfo\">VkExternalMemoryBufferCreateInfo</a>::<code>handleTypes</code> or <a href=\"#VkExternalMemoryImageCreateInfo\">VkExternalMemoryImageCreateInfo</a>::<code>handleTypes</code> when the resource was created"
}
]
},
"VkSparseBufferMemoryBindInfo": {
"core": [
{
"vuid": "VUID-VkSparseBufferMemoryBindInfo-buffer-parameter",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> 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 <a href=\"#VkSparseMemoryBind\">VkSparseMemoryBind</a> 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 <a href=\"#VkImage\">VkImage</a> 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 <a href=\"#VkSparseMemoryBind\">VkSparseMemoryBind</a> 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-02901",
"text": " <code>image</code> <strong class=\"purple\">must</strong> have been created with <code>VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT</code> set"
},
{
"vuid": "VUID-VkSparseImageMemoryBindInfo-image-parameter",
"text": " <code>image</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImage\">VkImage</a> 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 <a href=\"#VkSparseImageMemoryBind\">VkSparseImageMemoryBind</a> 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 <a href=\"#features-sparseResidencyAliased\">sparse aliased residency</a> 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 <a href=\"#resources-association\">Resource Memory Association</a>"
},
{
"vuid": "VUID-VkSparseImageMemoryBind-subresource-01106",
"text": " <code>subresource</code> <strong class=\"purple\">must</strong> be a valid image subresource for <code>image</code> (see <a href=\"#resources-image-views\">Image Views</a>)"
},
{
"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 <a href=\"#VkImageSubresource\">VkImageSubresource</a> 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 <a href=\"#VkDeviceMemory\">VkDeviceMemory</a> 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"
}
],
"(VK_VERSION_1_1,VK_KHR_external_memory)": [
{
"vuid": "VUID-VkSparseImageMemoryBind-memory-02732",
"text": " If <code>memory</code> was created with <a href=\"#VkExportMemoryAllocateInfo\">VkExportMemoryAllocateInfo</a>::<code>handleTypes</code> not equal to <code>0</code>, at least one handle type it contained <strong class=\"purple\">must</strong> also have been set in <a href=\"#VkExternalMemoryImageCreateInfo\">VkExternalMemoryImageCreateInfo</a>::<code>handleTypes</code> when the image was created"
},
{
"vuid": "VUID-VkSparseImageMemoryBind-memory-02733",
"text": " If <code>memory</code> was created by a memory import operation, the external handle type of the imported memory <strong class=\"purple\">must</strong> also have been set in <a href=\"#VkExternalMemoryImageCreateInfo\">VkExternalMemoryImageCreateInfo</a>::<code>handleTypes</code> when <code>image</code> was created"
}
]
},
"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 wait operation referring to a binary semaphore defined by any element of the <code>pWaitSemaphores</code> member of any element of <code>pBindInfo</code> executes on <code>queue</code>, there <strong class=\"purple\">must</strong> be no other queues 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> member referring to a binary semaphore <strong class=\"purple\">must</strong> be semaphores that are signaled, or have <a href=\"#synchronization-semaphores-signaling\">semaphore signal operations</a> previously submitted for execution"
},
{
"vuid": "VUID-vkQueueBindSparse-queue-parameter",
"text": " <code>queue</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkQueue\">VkQueue</a> 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 <a href=\"#VkBindSparseInfo\">VkBindSparseInfo</a> 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 <a href=\"#VkFence\">VkFence</a> 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 of non-ignored parameters <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(VK_VERSION_1_2,VK_KHR_timeline_semaphore)": [
{
"vuid": "VUID-vkQueueBindSparse-pWaitSemaphores-03245",
"text": " All elements of the <code>pWaitSemaphores</code> member of all elements of <code>pBindInfo</code> created with a <a href=\"#VkSemaphoreType\">VkSemaphoreType</a> of <code>VK_SEMAPHORE_TYPE_BINARY</code> <strong class=\"purple\">must</strong> reference a semaphore signal operation that has been submitted for execution and any semaphore signal operations on which it depends (if any) <strong class=\"purple\">must</strong> have also been submitted for execution"
}
]
},
"VkBindSparseInfo": {
"(VK_VERSION_1_2,VK_KHR_timeline_semaphore)": [
{
"vuid": "VUID-VkBindSparseInfo-pWaitSemaphores-03246",
"text": " If any element of <code>pWaitSemaphores</code> or <code>pSignalSemaphores</code> was created with a <a href=\"#VkSemaphoreType\">VkSemaphoreType</a> of <code>VK_SEMAPHORE_TYPE_TIMELINE</code> then the <code>pNext</code> chain <strong class=\"purple\">must</strong> include a <a href=\"#VkTimelineSemaphoreSubmitInfo\">VkTimelineSemaphoreSubmitInfo</a> structure"
},
{
"vuid": "VUID-VkBindSparseInfo-pNext-03247",
"text": " If the <code>pNext</code> chain of this structure includes a <a href=\"#VkTimelineSemaphoreSubmitInfo\">VkTimelineSemaphoreSubmitInfo</a> structure and any element of <code>pWaitSemaphores</code> was created with a <a href=\"#VkSemaphoreType\">VkSemaphoreType</a> of <code>VK_SEMAPHORE_TYPE_TIMELINE</code> then its <code>waitSemaphoreValueCount</code> member <strong class=\"purple\">must</strong> equal <code>waitSemaphoreCount</code>"
},
{
"vuid": "VUID-VkBindSparseInfo-pNext-03248",
"text": " If the <code>pNext</code> chain of this structure includes a <a href=\"#VkTimelineSemaphoreSubmitInfo\">VkTimelineSemaphoreSubmitInfo</a> structure and any element of <code>pSignalSemaphores</code> was created with a <a href=\"#VkSemaphoreType\">VkSemaphoreType</a> of <code>VK_SEMAPHORE_TYPE_TIMELINE</code> then its <code>signalSemaphoreValueCount</code> member <strong class=\"purple\">must</strong> equal <code>signalSemaphoreCount</code>"
},
{
"vuid": "VUID-VkBindSparseInfo-pSignalSemaphores-03249",
"text": " For each element of <code>pSignalSemaphores</code> created with a <a href=\"#VkSemaphoreType\">VkSemaphoreType</a> of <code>VK_SEMAPHORE_TYPE_TIMELINE</code> the corresponding element of <a href=\"#VkTimelineSemaphoreSubmitInfo\">VkTimelineSemaphoreSubmitInfo</a>::pSignalSemaphoreValues <strong class=\"purple\">must</strong> have a value greater than the current value of the semaphore when the <a href=\"#synchronization-semaphores-signaling\">semaphore signal operation</a> is executed"
},
{
"vuid": "VUID-VkBindSparseInfo-pWaitSemaphores-03250",
"text": " For each element of <code>pWaitSemaphores</code> created with a <a href=\"#VkSemaphoreType\">VkSemaphoreType</a> of <code>VK_SEMAPHORE_TYPE_TIMELINE</code> the corresponding element of <a href=\"#VkTimelineSemaphoreSubmitInfo\">VkTimelineSemaphoreSubmitInfo</a>::pWaitSemaphoreValues <strong class=\"purple\">must</strong> have a value which does not differ from the current value of the semaphore or from the value of any outstanding semaphore wait or signal operation on that semaphore by more than <a href=\"#limits-maxTimelineSemaphoreValueDifference\"><code>maxTimelineSemaphoreValueDifference</code></a>"
},
{
"vuid": "VUID-VkBindSparseInfo-pSignalSemaphores-03251",
"text": " For each element of <code>pSignalSemaphores</code> created with a <a href=\"#VkSemaphoreType\">VkSemaphoreType</a> of <code>VK_SEMAPHORE_TYPE_TIMELINE</code> the corresponding element of <a href=\"#VkTimelineSemaphoreSubmitInfo\">VkTimelineSemaphoreSubmitInfo</a>::pSignalSemaphoreValues <strong class=\"purple\">must</strong> have a value which does not differ from the current value of the semaphore or from the value of any outstanding semaphore wait or signal operation on that semaphore by more than <a href=\"#limits-maxTimelineSemaphoreValueDifference\"><code>maxTimelineSemaphoreValueDifference</code></a>"
}
],
"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": " 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=\"#VkDeviceGroupBindSparseInfo\">VkDeviceGroupBindSparseInfo</a> or <a href=\"#VkTimelineSemaphoreSubmitInfo\">VkTimelineSemaphoreSubmitInfo</a>"
},
{
"vuid": "VUID-VkBindSparseInfo-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"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 <a href=\"#VkSemaphore\">VkSemaphore</a> 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 <a href=\"#VkSparseBufferMemoryBindInfo\">VkSparseBufferMemoryBindInfo</a> 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 <a href=\"#VkSparseImageOpaqueMemoryBindInfo\">VkSparseImageOpaqueMemoryBindInfo</a> 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 <a href=\"#VkSparseImageMemoryBindInfo\">VkSparseImageMemoryBindInfo</a> 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 <a href=\"#VkSemaphore\">VkSemaphore</a> 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 of non-ignored parameters <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"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 <a href=\"#VkInstance\">VkInstance</a> handle"
},
{
"vuid": "VUID-vkCreateAndroidSurfaceKHR-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkAndroidSurfaceCreateInfoKHR\">VkAndroidSurfaceCreateInfoKHR</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateAndroidSurfaceKHR-pSurface-parameter",
"text": " <code>pSurface</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkSurfaceKHR\">VkSurfaceKHR</a> 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>"
}
]
},
"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 <a href=\"#VkInstance\">VkInstance</a> handle"
},
{
"vuid": "VUID-vkCreateWaylandSurfaceKHR-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkWaylandSurfaceCreateInfoKHR\">VkWaylandSurfaceCreateInfoKHR</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateWaylandSurfaceKHR-pSurface-parameter",
"text": " <code>pSurface</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkSurfaceKHR\">VkSurfaceKHR</a> 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 <a href=\"#VkInstance\">VkInstance</a> handle"
},
{
"vuid": "VUID-vkCreateWin32SurfaceKHR-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkWin32SurfaceCreateInfoKHR\">VkWin32SurfaceCreateInfoKHR</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateWin32SurfaceKHR-pSurface-parameter",
"text": " <code>pSurface</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkSurfaceKHR\">VkSurfaceKHR</a> 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 <a href=\"#VkInstance\">VkInstance</a> handle"
},
{
"vuid": "VUID-vkCreateXcbSurfaceKHR-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkXcbSurfaceCreateInfoKHR\">VkXcbSurfaceCreateInfoKHR</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateXcbSurfaceKHR-pSurface-parameter",
"text": " <code>pSurface</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkSurfaceKHR\">VkSurfaceKHR</a> 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 <a href=\"#VkInstance\">VkInstance</a> handle"
},
{
"vuid": "VUID-vkCreateXlibSurfaceKHR-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkXlibSurfaceCreateInfoKHR\">VkXlibSurfaceCreateInfoKHR</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateXlibSurfaceKHR-pSurface-parameter",
"text": " <code>pSurface</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkSurfaceKHR\">VkSurfaceKHR</a> 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>"
}
]
},
"vkCreateImagePipeSurfaceFUCHSIA": {
"(VK_KHR_surface)+(VK_FUCHSIA_imagepipe_surface)": [
{
"vuid": "VUID-vkCreateImagePipeSurfaceFUCHSIA-instance-parameter",
"text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkInstance\">VkInstance</a> handle"
},
{
"vuid": "VUID-vkCreateImagePipeSurfaceFUCHSIA-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkImagePipeSurfaceCreateInfoFUCHSIA\">VkImagePipeSurfaceCreateInfoFUCHSIA</a> structure"
},
{
"vuid": "VUID-vkCreateImagePipeSurfaceFUCHSIA-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateImagePipeSurfaceFUCHSIA-pSurface-parameter",
"text": " <code>pSurface</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkSurfaceKHR\">VkSurfaceKHR</a> handle"
}
]
},
"VkImagePipeSurfaceCreateInfoFUCHSIA": {
"(VK_KHR_surface)+(VK_FUCHSIA_imagepipe_surface)": [
{
"vuid": "VUID-VkImagePipeSurfaceCreateInfoFUCHSIA-imagePipeHandle-00000",
"text": " <code>imagePipeHandle</code> <strong class=\"purple\">must</strong> be a valid <code>zx_handle_t</code>"
},
{
"vuid": "VUID-VkImagePipeSurfaceCreateInfoFUCHSIA-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA</code>"
},
{
"vuid": "VUID-VkImagePipeSurfaceCreateInfoFUCHSIA-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkImagePipeSurfaceCreateInfoFUCHSIA-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
}
]
},
"vkCreateStreamDescriptorSurfaceGGP": {
"(VK_KHR_surface)+(VK_GGP_stream_descriptor_surface)": [
{
"vuid": "VUID-vkCreateStreamDescriptorSurfaceGGP-instance-parameter",
"text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkInstance\">VkInstance</a> handle"
},
{
"vuid": "VUID-vkCreateStreamDescriptorSurfaceGGP-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkStreamDescriptorSurfaceCreateInfoGGP\">VkStreamDescriptorSurfaceCreateInfoGGP</a> structure"
},
{
"vuid": "VUID-vkCreateStreamDescriptorSurfaceGGP-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateStreamDescriptorSurfaceGGP-pSurface-parameter",
"text": " <code>pSurface</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkSurfaceKHR\">VkSurfaceKHR</a> handle"
}
]
},
"VkStreamDescriptorSurfaceCreateInfoGGP": {
"(VK_KHR_surface)+(VK_GGP_stream_descriptor_surface)": [
{
"vuid": "VUID-VkStreamDescriptorSurfaceCreateInfoGGP-streamDescriptor-02681",
"text": " <code>streamDescriptor</code> <strong class=\"purple\">must</strong> be a valid <code>GgpStreamDescriptor</code>"
},
{
"vuid": "VUID-VkStreamDescriptorSurfaceCreateInfoGGP-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP</code>"
},
{
"vuid": "VUID-VkStreamDescriptorSurfaceCreateInfoGGP-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkStreamDescriptorSurfaceCreateInfoGGP-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 <a href=\"#VkInstance\">VkInstance</a> handle"
},
{
"vuid": "VUID-vkCreateIOSSurfaceMVK-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkIOSSurfaceCreateInfoMVK\">VkIOSSurfaceCreateInfoMVK</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateIOSSurfaceMVK-pSurface-parameter",
"text": " <code>pSurface</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkSurfaceKHR\">VkSurfaceKHR</a> 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 <a href=\"#VkInstance\">VkInstance</a> handle"
},
{
"vuid": "VUID-vkCreateMacOSSurfaceMVK-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkMacOSSurfaceCreateInfoMVK\">VkMacOSSurfaceCreateInfoMVK</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateMacOSSurfaceMVK-pSurface-parameter",
"text": " <code>pSurface</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkSurfaceKHR\">VkSurfaceKHR</a> 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 <a href=\"#VkInstance\">VkInstance</a> handle"
},
{
"vuid": "VUID-vkCreateViSurfaceNN-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkViSurfaceCreateInfoNN\">VkViSurfaceCreateInfoNN</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateViSurfaceNN-pSurface-parameter",
"text": " <code>pSurface</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkSurfaceKHR\">VkSurfaceKHR</a> 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>"
}
]
},
"vkCreateMetalSurfaceEXT": {
"(VK_KHR_surface)+(VK_EXT_metal_surface)": [
{
"vuid": "VUID-vkCreateMetalSurfaceEXT-instance-parameter",
"text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkInstance\">VkInstance</a> handle"
},
{
"vuid": "VUID-vkCreateMetalSurfaceEXT-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkMetalSurfaceCreateInfoEXT\">VkMetalSurfaceCreateInfoEXT</a> structure"
},
{
"vuid": "VUID-vkCreateMetalSurfaceEXT-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateMetalSurfaceEXT-pSurface-parameter",
"text": " <code>pSurface</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkSurfaceKHR\">VkSurfaceKHR</a> handle"
}
]
},
"VkMetalSurfaceCreateInfoEXT": {
"(VK_KHR_surface)+(VK_EXT_metal_surface)": [
{
"vuid": "VUID-VkMetalSurfaceCreateInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT</code>"
},
{
"vuid": "VUID-VkMetalSurfaceCreateInfoEXT-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkMetalSurfaceCreateInfoEXT-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 <a href=\"#VkInstance\">VkInstance</a> 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 <a href=\"#VkSurfaceKHR\">VkSurfaceKHR</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> 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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> 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> <a href=\"#VkDisplayPropertiesKHR\">VkDisplayPropertiesKHR</a> 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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> 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> <a href=\"#VkDisplayProperties2KHR\">VkDisplayProperties2KHR</a> 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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> 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 <a href=\"#VkDisplayKHR\">VkDisplayKHR</a> handle"
},
{
"vuid": "VUID-vkAcquireXlibDisplayEXT-display-parent",
"text": " <code>display</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>physicalDevice</code>"
}
]
},
"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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> 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 <a href=\"#VkDisplayKHR\">VkDisplayKHR</a> 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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkReleaseDisplayEXT-display-parameter",
"text": " <code>display</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDisplayKHR\">VkDisplayKHR</a> handle"
},
{
"vuid": "VUID-vkReleaseDisplayEXT-display-parent",
"text": " <code>display</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>physicalDevice</code>"
}
]
},
"vkGetPhysicalDeviceDisplayPlanePropertiesKHR": {
"(VK_KHR_surface)+(VK_KHR_display)": [
{
"vuid": "VUID-vkGetPhysicalDeviceDisplayPlanePropertiesKHR-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> 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> <a href=\"#VkDisplayPlanePropertiesKHR\">VkDisplayPlanePropertiesKHR</a> 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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> 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> <a href=\"#VkDisplayPlaneProperties2KHR\">VkDisplayPlaneProperties2KHR</a> 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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> 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> <a href=\"#VkDisplayKHR\">VkDisplayKHR</a> 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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkGetDisplayModePropertiesKHR-display-parameter",
"text": " <code>display</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDisplayKHR\">VkDisplayKHR</a> 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> <a href=\"#VkDisplayModePropertiesKHR\">VkDisplayModePropertiesKHR</a> structures"
},
{
"vuid": "VUID-vkGetDisplayModePropertiesKHR-display-parent",
"text": " <code>display</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>physicalDevice</code>"
}
]
},
"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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkGetDisplayModeProperties2KHR-display-parameter",
"text": " <code>display</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDisplayKHR\">VkDisplayKHR</a> 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> <a href=\"#VkDisplayModeProperties2KHR\">VkDisplayModeProperties2KHR</a> structures"
},
{
"vuid": "VUID-vkGetDisplayModeProperties2KHR-display-parent",
"text": " <code>display</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>physicalDevice</code>"
}
]
},
"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>"
}
]
},
"VkDisplayModeParametersKHR": {
"(VK_KHR_surface)+(VK_KHR_display)": [
{
"vuid": "VUID-VkDisplayModeParametersKHR-width-01990",
"text": " The <code>width</code> member of <code>visibleRegion</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-VkDisplayModeParametersKHR-height-01991",
"text": " The <code>height</code> member of <code>visibleRegion</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-VkDisplayModeParametersKHR-refreshRate-01992",
"text": " <code>refreshRate</code> <strong class=\"purple\">must</strong> be greater than <code>0</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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkCreateDisplayModeKHR-display-parameter",
"text": " <code>display</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDisplayKHR\">VkDisplayKHR</a> handle"
},
{
"vuid": "VUID-vkCreateDisplayModeKHR-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkDisplayModeCreateInfoKHR\">VkDisplayModeCreateInfoKHR</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateDisplayModeKHR-pMode-parameter",
"text": " <code>pMode</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkDisplayModeKHR\">VkDisplayModeKHR</a> handle"
},
{
"vuid": "VUID-vkCreateDisplayModeKHR-display-parent",
"text": " <code>display</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>physicalDevice</code>"
}
]
},
"VkDisplayModeCreateInfoKHR": {
"(VK_KHR_surface)+(VK_KHR_display)": [
{
"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>"
},
{
"vuid": "VUID-VkDisplayModeCreateInfoKHR-parameters-parameter",
"text": " <code>parameters</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDisplayModeParametersKHR\">VkDisplayModeParametersKHR</a> structure"
}
]
},
"vkGetDisplayPlaneCapabilitiesKHR": {
"(VK_KHR_surface)+(VK_KHR_display)": [
{
"vuid": "VUID-vkGetDisplayPlaneCapabilitiesKHR-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkGetDisplayPlaneCapabilitiesKHR-mode-parameter",
"text": " <code>mode</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDisplayModeKHR\">VkDisplayModeKHR</a> handle"
},
{
"vuid": "VUID-vkGetDisplayPlaneCapabilitiesKHR-pCapabilities-parameter",
"text": " <code>pCapabilities</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkDisplayPlaneCapabilitiesKHR\">VkDisplayPlaneCapabilitiesKHR</a> 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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkGetDisplayPlaneCapabilities2KHR-pDisplayPlaneInfo-parameter",
"text": " <code>pDisplayPlaneInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkDisplayPlaneInfo2KHR\">VkDisplayPlaneInfo2KHR</a> structure"
},
{
"vuid": "VUID-vkGetDisplayPlaneCapabilities2KHR-pCapabilities-parameter",
"text": " <code>pCapabilities</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkDisplayPlaneCapabilities2KHR\">VkDisplayPlaneCapabilities2KHR</a> 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 <a href=\"#VkDisplayModeKHR\">VkDisplayModeKHR</a> 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkDisplayPowerControlEXT-display-parameter",
"text": " <code>display</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDisplayKHR\">VkDisplayKHR</a> handle"
},
{
"vuid": "VUID-vkDisplayPowerControlEXT-pDisplayPowerInfo-parameter",
"text": " <code>pDisplayPowerInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkDisplayPowerInfoEXT\">VkDisplayPowerInfoEXT</a> structure"
},
{
"vuid": "VUID-vkDisplayPowerControlEXT-commonparent",
"text": " Both of <code>device</code>, and <code>display</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a>"
}
]
},
"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 <a href=\"#VkInstance\">VkInstance</a> handle"
},
{
"vuid": "VUID-vkCreateDisplayPlaneSurfaceKHR-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkDisplaySurfaceCreateInfoKHR\">VkDisplaySurfaceCreateInfoKHR</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateDisplayPlaneSurfaceKHR-pSurface-parameter",
"text": " <code>pSurface</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkSurfaceKHR\">VkSurfaceKHR</a> 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 <a href=\"#VkDisplayModeKHR\">VkDisplayModeKHR</a> 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"
}
]
},
"vkCreateHeadlessSurfaceEXT": {
"(VK_KHR_surface)+(VK_EXT_headless_surface)": [
{
"vuid": "VUID-vkCreateHeadlessSurfaceEXT-instance-parameter",
"text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkInstance\">VkInstance</a> handle"
},
{
"vuid": "VUID-vkCreateHeadlessSurfaceEXT-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkHeadlessSurfaceCreateInfoEXT\">VkHeadlessSurfaceCreateInfoEXT</a> structure"
},
{
"vuid": "VUID-vkCreateHeadlessSurfaceEXT-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateHeadlessSurfaceEXT-pSurface-parameter",
"text": " <code>pSurface</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkSurfaceKHR\">VkSurfaceKHR</a> handle"
}
]
},
"VkHeadlessSurfaceCreateInfoEXT": {
"(VK_KHR_surface)+(VK_EXT_headless_surface)": [
{
"vuid": "VUID-VkHeadlessSurfaceCreateInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT</code>"
},
{
"vuid": "VUID-VkHeadlessSurfaceCreateInfoEXT-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkHeadlessSurfaceCreateInfoEXT-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
}
]
},
"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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceSupportKHR-surface-parameter",
"text": " <code>surface</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSurfaceKHR\">VkSurfaceKHR</a> 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 <a href=\"#VkInstance\">VkInstance</a>"
}
]
},
"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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> 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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> 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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceXcbPresentationSupportKHR-connection-parameter",
"text": " <code>connection</code> <strong class=\"purple\">must</strong> be a valid pointer to an <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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> 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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilitiesKHR-surface-parameter",
"text": " <code>surface</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSurfaceKHR\">VkSurfaceKHR</a> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilitiesKHR-pSurfaceCapabilities-parameter",
"text": " <code>pSurfaceCapabilities</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkSurfaceCapabilitiesKHR\">VkSurfaceCapabilitiesKHR</a> 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 <a href=\"#VkInstance\">VkInstance</a>"
}
]
},
"vkGetPhysicalDeviceSurfaceCapabilities2KHR": {
"(VK_KHR_surface)+(VK_KHR_get_surface_capabilities2)+(VK_EXT_full_screen_exclusive+VK_KHR_win32_surface)": [
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-pNext-02671",
"text": " If a <a href=\"#VkSurfaceCapabilitiesFullScreenExclusiveEXT\">VkSurfaceCapabilitiesFullScreenExclusiveEXT</a> structure is included in the <code>pNext</code> chain of <code>pSurfaceCapabilities</code>, a <a href=\"#VkSurfaceFullScreenExclusiveWin32InfoEXT\">VkSurfaceFullScreenExclusiveWin32InfoEXT</a> structure <strong class=\"purple\">must</strong> be included in the <code>pNext</code> chain of <code>pSurfaceInfo</code>"
}
],
"(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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-pSurfaceInfo-parameter",
"text": " <code>pSurfaceInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkPhysicalDeviceSurfaceInfo2KHR\">VkPhysicalDeviceSurfaceInfo2KHR</a> structure"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-pSurfaceCapabilities-parameter",
"text": " <code>pSurfaceCapabilities</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkSurfaceCapabilities2KHR\">VkSurfaceCapabilities2KHR</a> structure"
}
]
},
"VkPhysicalDeviceSurfaceInfo2KHR": {
"(VK_KHR_surface)+(VK_KHR_get_surface_capabilities2)+(VK_KHR_win32_surface+VK_EXT_full_screen_exclusive)": [
{
"vuid": "VUID-VkPhysicalDeviceSurfaceInfo2KHR-pNext-02672",
"text": " If the <code>pNext</code> chain includes a <a href=\"#VkSurfaceFullScreenExclusiveInfoEXT\">VkSurfaceFullScreenExclusiveInfoEXT</a> structure with its <code>fullScreenExclusive</code> member set to <code>VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT</code>, and <code>surface</code> was created using <a href=\"#vkCreateWin32SurfaceKHR\">vkCreateWin32SurfaceKHR</a>, a <a href=\"#VkSurfaceFullScreenExclusiveWin32InfoEXT\">VkSurfaceFullScreenExclusiveWin32InfoEXT</a> structure <strong class=\"purple\">must</strong> be included in the <code>pNext</code> chain"
}
],
"(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": " 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=\"#VkSurfaceFullScreenExclusiveInfoEXT\">VkSurfaceFullScreenExclusiveInfoEXT</a> or <a href=\"#VkSurfaceFullScreenExclusiveWin32InfoEXT\">VkSurfaceFullScreenExclusiveWin32InfoEXT</a>"
},
{
"vuid": "VUID-VkPhysicalDeviceSurfaceInfo2KHR-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkPhysicalDeviceSurfaceInfo2KHR-surface-parameter",
"text": " <code>surface</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSurfaceKHR\">VkSurfaceKHR</a> handle"
}
]
},
"VkSurfaceFullScreenExclusiveInfoEXT": {
"(VK_KHR_surface)+(VK_KHR_get_surface_capabilities2)+(VK_EXT_full_screen_exclusive)": [
{
"vuid": "VUID-VkSurfaceFullScreenExclusiveInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT</code>"
},
{
"vuid": "VUID-VkSurfaceFullScreenExclusiveInfoEXT-fullScreenExclusive-parameter",
"text": " <code>fullScreenExclusive</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFullScreenExclusiveEXT\">VkFullScreenExclusiveEXT</a> value"
}
]
},
"VkSurfaceFullScreenExclusiveWin32InfoEXT": {
"(VK_KHR_surface)+(VK_KHR_get_surface_capabilities2)+(VK_EXT_full_screen_exclusive)+(VK_KHR_win32_surface)": [
{
"vuid": "VUID-VkSurfaceFullScreenExclusiveWin32InfoEXT-hmonitor-02673",
"text": " <code>hmonitor</code> <strong class=\"purple\">must</strong> be a valid <code>HMONITOR</code>"
},
{
"vuid": "VUID-VkSurfaceFullScreenExclusiveWin32InfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT</code>"
}
]
},
"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": " 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=\"#VkDisplayNativeHdrSurfaceCapabilitiesAMD\">VkDisplayNativeHdrSurfaceCapabilitiesAMD</a>, <a href=\"#VkSharedPresentSurfaceCapabilitiesKHR\">VkSharedPresentSurfaceCapabilitiesKHR</a>, <a href=\"#VkSurfaceCapabilitiesFullScreenExclusiveEXT\">VkSurfaceCapabilitiesFullScreenExclusiveEXT</a>, or <a href=\"#VkSurfaceProtectedCapabilitiesKHR\">VkSurfaceProtectedCapabilitiesKHR</a>"
},
{
"vuid": "VUID-VkSurfaceCapabilities2KHR-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
}
]
},
"VkSurfaceProtectedCapabilitiesKHR": {
"(VK_KHR_surface)+(VK_KHR_get_surface_capabilities2)+(VK_KHR_surface_protected_capabilities)": [
{
"vuid": "VUID-VkSurfaceProtectedCapabilitiesKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR</code>"
}
]
},
"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>"
}
]
},
"VkDisplayNativeHdrSurfaceCapabilitiesAMD": {
"(VK_KHR_surface)+(VK_KHR_get_surface_capabilities2)+(VK_AMD_display_native_hdr)": [
{
"vuid": "VUID-VkDisplayNativeHdrSurfaceCapabilitiesAMD-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD</code>"
}
]
},
"VkSurfaceCapabilitiesFullScreenExclusiveEXT": {
"(VK_KHR_surface)+(VK_KHR_get_surface_capabilities2)+(VK_EXT_full_screen_exclusive)": [
{
"vuid": "VUID-VkSurfaceCapabilitiesFullScreenExclusiveEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT</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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2EXT-surface-parameter",
"text": " <code>surface</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSurfaceKHR\">VkSurfaceKHR</a> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2EXT-pSurfaceCapabilities-parameter",
"text": " <code>pSurfaceCapabilities</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkSurfaceCapabilities2EXT\">VkSurfaceCapabilities2EXT</a> 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 <a href=\"#VkInstance\">VkInstance</a>"
}
]
},
"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 <a href=\"#wsi-display-surfaces\">display surface</a>"
},
{
"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-surface-02739",
"text": " <code>surface</code> <strong class=\"purple\">must</strong> be supported by <code>physicalDevice</code>, as reported by <a href=\"#vkGetPhysicalDeviceSurfaceSupportKHR\">vkGetPhysicalDeviceSurfaceSupportKHR</a> or an equivalent platform-specific mechanism"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceFormatsKHR-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceFormatsKHR-surface-parameter",
"text": " <code>surface</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSurfaceKHR\">VkSurfaceKHR</a> 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> <a href=\"#VkSurfaceFormatKHR\">VkSurfaceFormatKHR</a> 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 <a href=\"#VkInstance\">VkInstance</a>"
}
]
},
"vkGetPhysicalDeviceSurfaceFormats2KHR": {
"(VK_KHR_surface)+(VK_KHR_get_surface_capabilities2)": [
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceFormats2KHR-pSurfaceInfo-02740",
"text": " <code>pSurfaceInfo-&gt;surface</code> <strong class=\"purple\">must</strong> be supported by <code>physicalDevice</code>, as reported by <a href=\"#vkGetPhysicalDeviceSurfaceSupportKHR\">vkGetPhysicalDeviceSurfaceSupportKHR</a> or an equivalent platform-specific mechanism"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceFormats2KHR-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfaceFormats2KHR-pSurfaceInfo-parameter",
"text": " <code>pSurfaceInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkPhysicalDeviceSurfaceInfo2KHR\">VkPhysicalDeviceSurfaceInfo2KHR</a> 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> <a href=\"#VkSurfaceFormat2KHR\">VkSurfaceFormat2KHR</a> 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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfacePresentModesKHR-surface-parameter",
"text": " <code>surface</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSurfaceKHR\">VkSurfaceKHR</a> 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 <a href=\"#VkInstance\">VkInstance</a>"
}
]
},
"vkGetPhysicalDeviceSurfacePresentModes2EXT": {
"(VK_KHR_surface)+(VK_EXT_full_screen_exclusive)": [
{
"vuid": "VUID-vkGetPhysicalDeviceSurfacePresentModes2EXT-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfacePresentModes2EXT-pSurfaceInfo-parameter",
"text": " <code>pSurfaceInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkPhysicalDeviceSurfaceInfo2KHR\">VkPhysicalDeviceSurfaceInfo2KHR</a> structure"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfacePresentModes2EXT-pPresentModeCount-parameter",
"text": " <code>pPresentModeCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
},
{
"vuid": "VUID-vkGetPhysicalDeviceSurfacePresentModes2EXT-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"
}
]
},
"vkAcquireFullScreenExclusiveModeEXT": {
"(VK_KHR_surface)+(VK_EXT_full_screen_exclusive)": [
{
"vuid": "VUID-vkAcquireFullScreenExclusiveModeEXT-swapchain-02674",
"text": " <code>swapchain</code> <strong class=\"purple\">must</strong> not be in the retired state"
},
{
"vuid": "VUID-vkAcquireFullScreenExclusiveModeEXT-swapchain-02675",
"text": " <code>swapchain</code> <strong class=\"purple\">must</strong> be a swapchain created with a <a href=\"#VkSurfaceFullScreenExclusiveInfoEXT\">VkSurfaceFullScreenExclusiveInfoEXT</a> structure, with <code>fullScreenExclusive</code> set to <code>VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT</code>"
},
{
"vuid": "VUID-vkAcquireFullScreenExclusiveModeEXT-swapchain-02676",
"text": " <code>swapchain</code> <strong class=\"purple\">must</strong> not currently have exclusive full-screen access"
},
{
"vuid": "VUID-vkAcquireFullScreenExclusiveModeEXT-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkAcquireFullScreenExclusiveModeEXT-swapchain-parameter",
"text": " <code>swapchain</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSwapchainKHR\">VkSwapchainKHR</a> handle"
},
{
"vuid": "VUID-vkAcquireFullScreenExclusiveModeEXT-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 <a href=\"#VkInstance\">VkInstance</a>"
}
]
},
"vkReleaseFullScreenExclusiveModeEXT": {
"(VK_KHR_surface)+(VK_EXT_full_screen_exclusive)": [
{
"vuid": "VUID-vkReleaseFullScreenExclusiveModeEXT-swapchain-02677",
"text": " <code>swapchain</code> <strong class=\"purple\">must</strong> not be in the retired state"
},
{
"vuid": "VUID-vkReleaseFullScreenExclusiveModeEXT-swapchain-02678",
"text": " <code>swapchain</code> <strong class=\"purple\">must</strong> be a swapchain created with a <a href=\"#VkSurfaceFullScreenExclusiveInfoEXT\">VkSurfaceFullScreenExclusiveInfoEXT</a> structure, with <code>fullScreenExclusive</code> set to <code>VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT</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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetDeviceGroupPresentCapabilitiesKHR-pDeviceGroupPresentCapabilities-parameter",
"text": " <code>pDeviceGroupPresentCapabilities</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkDeviceGroupPresentCapabilitiesKHR\">VkDeviceGroupPresentCapabilitiesKHR</a> 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetDeviceGroupSurfacePresentModesKHR-surface-parameter",
"text": " <code>surface</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSurfaceKHR\">VkSurfaceKHR</a> 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 <a href=\"#VkInstance\">VkInstance</a>"
}
]
},
"vkGetDeviceGroupSurfacePresentModes2EXT": {
"(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_VERSION_1_1,VK_KHR_device_group)+(VK_EXT_full_screen_exclusive)": [
{
"vuid": "VUID-vkGetDeviceGroupSurfacePresentModes2EXT-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetDeviceGroupSurfacePresentModes2EXT-pSurfaceInfo-parameter",
"text": " <code>pSurfaceInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkPhysicalDeviceSurfaceInfo2KHR\">VkPhysicalDeviceSurfaceInfo2KHR</a> structure"
},
{
"vuid": "VUID-vkGetDeviceGroupSurfacePresentModes2EXT-pModes-parameter",
"text": " <code>pModes</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkDeviceGroupPresentModeFlagsKHR\">VkDeviceGroupPresentModeFlagsKHR</a> value"
}
]
},
"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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkGetPhysicalDevicePresentRectanglesKHR-surface-parameter",
"text": " <code>surface</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSurfaceKHR\">VkSurfaceKHR</a> 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> <a href=\"#VkRect2D\">VkRect2D</a> 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 <a href=\"#VkInstance\">VkInstance</a>"
}
]
},
"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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetRefreshCycleDurationGOOGLE-swapchain-parameter",
"text": " <code>swapchain</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSwapchainKHR\">VkSwapchainKHR</a> handle"
},
{
"vuid": "VUID-vkGetRefreshCycleDurationGOOGLE-pDisplayTimingProperties-parameter",
"text": " <code>pDisplayTimingProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkRefreshCycleDurationGOOGLE\">VkRefreshCycleDurationGOOGLE</a> 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 <a href=\"#VkInstance\">VkInstance</a>"
}
]
},
"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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetPastPresentationTimingGOOGLE-swapchain-parameter",
"text": " <code>swapchain</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSwapchainKHR\">VkSwapchainKHR</a> 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> <a href=\"#VkPastPresentationTimingGOOGLE\">VkPastPresentationTimingGOOGLE</a> 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 <a href=\"#VkInstance\">VkInstance</a>"
}
]
},
"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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetSwapchainStatusKHR-swapchain-parameter",
"text": " <code>swapchain</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSwapchainKHR\">VkSwapchainKHR</a> 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 <a href=\"#VkInstance\">VkInstance</a>"
}
]
},
"vkCreateSwapchainKHR": {
"(VK_KHR_surface)+(VK_KHR_swapchain)": [
{
"vuid": "VUID-vkCreateSwapchainKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkCreateSwapchainKHR-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkSwapchainCreateInfoKHR\">VkSwapchainCreateInfoKHR</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateSwapchainKHR-pSwapchain-parameter",
"text": " <code>pSwapchain</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkSwapchainKHR\">VkSwapchainKHR</a> 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 <a href=\"#vkGetPhysicalDeviceSurfaceSupportKHR\">vkGetPhysicalDeviceSurfaceSupportKHR</a>"
},
{
"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": " The <a href=\"#swapchain-wsi-image-create-info\">implied image creation parameters</a> of the swapchain <strong class=\"purple\">must</strong> be supported 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>, <a href=\"#VkImageFormatListCreateInfo\">VkImageFormatListCreateInfo</a>, <a href=\"#VkSurfaceFullScreenExclusiveInfoEXT\">VkSurfaceFullScreenExclusiveInfoEXT</a>, <a href=\"#VkSurfaceFullScreenExclusiveWin32InfoEXT\">VkSurfaceFullScreenExclusiveWin32InfoEXT</a>, <a href=\"#VkSwapchainCounterCreateInfoEXT\">VkSwapchainCounterCreateInfoEXT</a>, or <a href=\"#VkSwapchainDisplayNativeHdrCreateInfoAMD\">VkSwapchainDisplayNativeHdrCreateInfoAMD</a>"
},
{
"vuid": "VUID-VkSwapchainCreateInfoKHR-sType-unique",
"text": " The <code>sType</code> value of each struct 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 <a href=\"#VkSurfaceKHR\">VkSurfaceKHR</a> 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 <a href=\"#VkSwapchainKHR\">VkSwapchainKHR</a> 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 of non-ignored parameters <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkInstance\">VkInstance</a>"
}
],
"(VK_KHR_surface)+(VK_KHR_swapchain)+!(VK_KHR_shared_presentable_image)": [
{
"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 <a href=\"#vkGetPhysicalDeviceSurfaceCapabilitiesKHR\">vkGetPhysicalDeviceSurfaceCapabilitiesKHR</a> for the surface"
},
{
"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_KHR_shared_presentable_image)": [
{
"vuid": "VUID-VkSwapchainCreateInfoKHR-presentMode-02839",
"text": " If <code>presentMode</code> is not <code>VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR</code> nor <code>VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR</code>, then <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 <a href=\"#vkGetPhysicalDeviceSurfaceCapabilitiesKHR\">vkGetPhysicalDeviceSurfaceCapabilitiesKHR</a> for the surface"
},
{
"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_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>"
}
],
"(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_KHR_swapchain_mutable_format)": [
{
"vuid": "VUID-VkSwapchainCreateInfoKHR-flags-03168",
"text": " If <code>flags</code> contains <code>VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR</code> then the <code>pNext</code> chain <strong class=\"purple\">must</strong> include a <a href=\"#VkImageFormatListCreateInfo\">VkImageFormatListCreateInfo</a> structure with a <code>viewFormatCount</code> greater than zero and <code>pViewFormats</code> <strong class=\"purple\">must</strong> have an element equal to <code>imageFormat</code>"
},
{
"vuid": "VUID-VkSwapchainCreateInfoKHR-pNext-04099",
"text": " If a <a href=\"#VkImageFormatListCreateInfo\">VkImageFormatListCreateInfo</a> structure was included in the <code>pNext</code> chain and <a href=\"#VkImageFormatListCreateInfo\">VkImageFormatListCreateInfo</a>::<code>viewFormatCount</code> is not zero then all of the formats in <a href=\"#VkImageFormatListCreateInfo\">VkImageFormatListCreateInfo</a>::<code>pViewFormats</code> <strong class=\"purple\">must</strong> be compatible with the <code>format</code> as described in the <a href=\"#formats-compatibility\">compatibility table</a>"
},
{
"vuid": "VUID-VkSwapchainCreateInfoKHR-flags-04100",
"text": " If <code>flags</code> dose not contain <code>VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR</code> and the <code>pNext</code> chain include a <a href=\"#VkImageFormatListCreateInfo\">VkImageFormatListCreateInfo</a> structure then <a href=\"#VkImageFormatListCreateInfo\">VkImageFormatListCreateInfo</a>::<code>viewFormatCount</code> <strong class=\"purple\">must</strong> be <code>0</code> or <code>1</code>"
}
],
"(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_KHR_surface_protected_capabilities)": [
{
"vuid": "VUID-VkSwapchainCreateInfoKHR-flags-03187",
"text": " If <code>flags</code> contains <code>VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR</code>, then <code>VkSurfaceProtectedCapabilitiesKHR</code>::<code>supportsProtected</code> <strong class=\"purple\">must</strong> be <code>VK_TRUE</code> in the <a href=\"#VkSurfaceProtectedCapabilitiesKHR\">VkSurfaceProtectedCapabilitiesKHR</a> structure returned by <a href=\"#vkGetPhysicalDeviceSurfaceCapabilities2KHR\">vkGetPhysicalDeviceSurfaceCapabilities2KHR</a> for <code>surface</code>"
}
],
"(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_EXT_full_screen_exclusive+VK_KHR_win32_surface)": [
{
"vuid": "VUID-VkSwapchainCreateInfoKHR-pNext-02679",
"text": " If the <code>pNext</code> chain includes a <a href=\"#VkSurfaceFullScreenExclusiveInfoEXT\">VkSurfaceFullScreenExclusiveInfoEXT</a> structure with its <code>fullScreenExclusive</code> member set to <code>VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT</code>, and <code>surface</code> was created using <a href=\"#vkCreateWin32SurfaceKHR\">vkCreateWin32SurfaceKHR</a>, a <a href=\"#VkSurfaceFullScreenExclusiveWin32InfoEXT\">VkSurfaceFullScreenExclusiveWin32InfoEXT</a> structure <strong class=\"purple\">must</strong> be included in the <code>pNext</code> chain"
}
]
},
"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>"
}
]
},
"VkSwapchainDisplayNativeHdrCreateInfoAMD": {
"(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_AMD_display_native_hdr)": [
{
"vuid": "VUID-VkSwapchainDisplayNativeHdrCreateInfoAMD-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD</code>"
},
{
"vuid": "VUID-VkSwapchainDisplayNativeHdrCreateInfoAMD-localDimmingEnable-XXXXX",
"text": " It is only valid to set <code>localDimmingEnable</code> to <code>VK_TRUE</code> if <a href=\"#VkDisplayNativeHdrSurfaceCapabilitiesAMD\">VkDisplayNativeHdrSurfaceCapabilitiesAMD</a>::<code>localDimmingSupport</code> is supported"
}
]
},
"vkSetLocalDimmingAMD": {
"(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_AMD_display_native_hdr)": [
{
"vuid": "VUID-vkSetLocalDimmingAMD-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkSetLocalDimmingAMD-swapChain-parameter",
"text": " <code>swapChain</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSwapchainKHR\">VkSwapchainKHR</a> handle"
},
{
"vuid": "VUID-vkSetLocalDimmingAMD-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 <a href=\"#VkInstance\">VkInstance</a>"
},
{
"vuid": "VUID-vkSetLocalDimmingAMD-XXXXX",
"text": " It is only valid to call <a href=\"#vkSetLocalDimmingAMD\">vkSetLocalDimmingAMD</a> if <a href=\"#VkDisplayNativeHdrSurfaceCapabilitiesAMD\">VkDisplayNativeHdrSurfaceCapabilitiesAMD</a>::<code>localDimmingSupport</code> is supported"
}
]
},
"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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetSwapchainCounterEXT-swapchain-parameter",
"text": " <code>swapchain</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSwapchainKHR\">VkSwapchainKHR</a> 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 <a href=\"#VkInstance\">VkInstance</a>"
}
]
},
"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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkSwapchainKHR\">VkSwapchainKHR</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkDestroySwapchainKHR-commonparent",
"text": " Both of <code>device</code>, and <code>swapchain</code> that are valid handles of non-ignored parameters <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkInstance\">VkInstance</a>"
}
]
},
"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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkSwapchainCreateInfoKHR\">VkSwapchainCreateInfoKHR</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> 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> <a href=\"#VkSwapchainKHR\">VkSwapchainKHR</a> 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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetSwapchainImagesKHR-swapchain-parameter",
"text": " <code>swapchain</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSwapchainKHR\">VkSwapchainKHR</a> 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> <a href=\"#VkImage\">VkImage</a> 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 <a href=\"#VkInstance\">VkInstance</a>"
}
]
},
"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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkAcquireNextImageKHR-swapchain-parameter",
"text": " <code>swapchain</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSwapchainKHR\">VkSwapchainKHR</a> 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 <a href=\"#VkSemaphore\">VkSemaphore</a> 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 <a href=\"#VkFence\">VkFence</a> 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 of non-ignored parameters <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkInstance\">VkInstance</a>"
}
],
"(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_VERSION_1_2,VK_KHR_timeline_semaphore)": [
{
"vuid": "VUID-vkAcquireNextImageKHR-semaphore-03265",
"text": " <code>semaphore</code> <strong class=\"purple\">must</strong> have a <a href=\"#VkSemaphoreType\">VkSemaphoreType</a> of <code>VK_SEMAPHORE_TYPE_BINARY</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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkAcquireNextImage2KHR-pAcquireInfo-parameter",
"text": " <code>pAcquireInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkAcquireNextImageInfoKHR\">VkAcquireNextImageInfoKHR</a> 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-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 <a href=\"#VkSwapchainKHR\">VkSwapchainKHR</a> 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 <a href=\"#VkSemaphore\">VkSemaphore</a> 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 <a href=\"#VkFence\">VkFence</a> handle"
},
{
"vuid": "VUID-VkAcquireNextImageInfoKHR-commonparent",
"text": " Each of <code>fence</code>, <code>semaphore</code>, and <code>swapchain</code> that are valid handles of non-ignored parameters <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkInstance\">VkInstance</a>"
}
],
"(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_VERSION_1_1,VK_KHR_device_group)+(VK_VERSION_1_2,VK_KHR_timeline_semaphore)": [
{
"vuid": "VUID-VkAcquireNextImageInfoKHR-semaphore-03266",
"text": " <code>semaphore</code> <strong class=\"purple\">must</strong> have a <a href=\"#VkSemaphoreType\">VkSemaphoreType</a> of <code>VK_SEMAPHORE_TYPE_BINARY</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 wait operation referring to a binary semaphore defined by the elements of the <code>pWaitSemaphores</code> member of <code>pPresentInfo</code> executes on <code>queue</code>, there <strong class=\"purple\">must</strong> be no other queues 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 <a href=\"#synchronization-semaphores-signaling\">semaphore signal operations</a> previously submitted for execution"
},
{
"vuid": "VUID-vkQueuePresentKHR-queue-parameter",
"text": " <code>queue</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkQueue\">VkQueue</a> handle"
},
{
"vuid": "VUID-vkQueuePresentKHR-pPresentInfo-parameter",
"text": " <code>pPresentInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkPresentInfoKHR\">VkPresentInfoKHR</a> 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"
}
],
"(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_VERSION_1_2,VK_KHR_timeline_semaphore)": [
{
"vuid": "VUID-vkQueuePresentKHR-pWaitSemaphores-03267",
"text": " All elements of the <code>pWaitSemaphores</code> member of <code>pPresentInfo</code> <strong class=\"purple\">must</strong> be created with a <a href=\"#VkSemaphoreType\">VkSemaphoreType</a> of <code>VK_SEMAPHORE_TYPE_BINARY</code>"
},
{
"vuid": "VUID-vkQueuePresentKHR-pWaitSemaphores-03268",
"text": " All elements of the <code>pWaitSemaphores</code> member of <code>pPresentInfo</code> <strong class=\"purple\">must</strong> reference a semaphore signal operation that has been submitted for execution and any semaphore signal operations on which it depends (if any) <strong class=\"purple\">must</strong> have also been submitted for execution"
}
]
},
"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)+(VK_VERSION_1_2,VK_KHR_timeline_semaphore)": [
{
"vuid": "VUID-VkPresentInfoKHR-pWaitSemaphores-03269",
"text": " All elements of the <code>pWaitSemaphores</code> <strong class=\"purple\">must</strong> have a <a href=\"#VkSemaphoreType\">VkSemaphoreType</a> of <code>VK_SEMAPHORE_TYPE_BINARY</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=\"#VkPresentFrameTokenGGP\">VkPresentFrameTokenGGP</a>, <a href=\"#VkPresentRegionsKHR\">VkPresentRegionsKHR</a>, or <a href=\"#VkPresentTimesInfoGOOGLE\">VkPresentTimesInfoGOOGLE</a>"
},
{
"vuid": "VUID-VkPresentInfoKHR-sType-unique",
"text": " The <code>sType</code> value of each struct 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 <a href=\"#VkSemaphore\">VkSemaphore</a> 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 <a href=\"#VkSwapchainKHR\">VkSwapchainKHR</a> 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 of non-ignored parameters <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkInstance\">VkInstance</a>"
}
]
},
"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 included in the <code>pNext</code> 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 <a href=\"#VkPresentRegionKHR\">VkPresentRegionKHR</a> 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> valid <a href=\"#VkRectLayerKHR\">VkRectLayerKHR</a> 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 <a href=\"#VkSwapchainCreateInfoKHR\">VkSwapchainCreateInfoKHR</a> structure passed to <a href=\"#vkCreateSwapchainKHR\">vkCreateSwapchainKHR</a>"
},
{
"vuid": "VUID-VkRectLayerKHR-layer-01262",
"text": " <code>layer</code> <strong class=\"purple\">must</strong> be less than the <code>imageArrayLayers</code> member of the <a href=\"#VkSwapchainCreateInfoKHR\">VkSwapchainCreateInfoKHR</a> structure passed 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 included 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> <a href=\"#VkPresentTimeGOOGLE\">VkPresentTimeGOOGLE</a> structures"
},
{
"vuid": "VUID-VkPresentTimesInfoGOOGLE-swapchainCount-arraylength",
"text": " <code>swapchainCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"VkPresentFrameTokenGGP": {
"(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_GGP_frame_token)": [
{
"vuid": "VUID-VkPresentFrameTokenGGP-frameToken-02680",
"text": " <code>frameToken</code> <strong class=\"purple\">must</strong> be a valid <code>GgpFrameToken</code>"
},
{
"vuid": "VUID-VkPresentFrameTokenGGP-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP</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 <a href=\"#VkDevice\">VkDevice</a> 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 <a href=\"#VkSwapchainKHR\">VkSwapchainKHR</a> 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 <a href=\"#VkHdrMetadataEXT\">VkHdrMetadataEXT</a> 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 <a href=\"#VkInstance\">VkInstance</a>"
}
]
},
"VkHdrMetadataEXT": {
"(VK_KHR_surface)+(VK_KHR_swapchain)+(VK_EXT_hdr_metadata)": [
{
"vuid": "VUID-VkHdrMetadataEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_HDR_METADATA_EXT</code>"
},
{
"vuid": "VUID-VkHdrMetadataEXT-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
},
"VkDeferredOperationInfoKHR": {
"(VK_KHR_deferred_host_operations)": [
{
"vuid": "VUID-VkDeferredOperationInfoKHR-operationHandle-03433",
"text": " Any previous deferred operation that was associated with <code>operationHandle</code> <strong class=\"purple\">must</strong> be complete"
},
{
"vuid": "VUID-VkDeferredOperationInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DEFERRED_OPERATION_INFO_KHR</code>"
}
]
},
"vkCreateDeferredOperationKHR": {
"(VK_KHR_deferred_host_operations)": [
{
"vuid": "VUID-vkCreateDeferredOperationKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkCreateDeferredOperationKHR-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateDeferredOperationKHR-pDeferredOperation-parameter",
"text": " <code>pDeferredOperation</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkDeferredOperationKHR\">VkDeferredOperationKHR</a> handle"
}
]
},
"vkDeferredOperationJoinKHR": {
"(VK_KHR_deferred_host_operations)": [
{
"vuid": "VUID-vkDeferredOperationJoinKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkDeferredOperationJoinKHR-operation-parameter",
"text": " <code>operation</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDeferredOperationKHR\">VkDeferredOperationKHR</a> handle"
},
{
"vuid": "VUID-vkDeferredOperationJoinKHR-operation-parent",
"text": " <code>operation</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkDestroyDeferredOperationKHR": {
"(VK_KHR_deferred_host_operations)": [
{
"vuid": "VUID-vkDestroyDeferredOperationKHR-operation-03434",
"text": " If <code>VkAllocationCallbacks</code> were provided when <code>operation</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
},
{
"vuid": "VUID-vkDestroyDeferredOperationKHR-operation-03435",
"text": " If no <code>VkAllocationCallbacks</code> were provided when <code>operation</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-vkDestroyDeferredOperationKHR-operation-03436",
"text": " <code>operation</code> <strong class=\"purple\">must</strong> be completed"
},
{
"vuid": "VUID-vkDestroyDeferredOperationKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkDestroyDeferredOperationKHR-operation-parameter",
"text": " If <code>operation</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>operation</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDeferredOperationKHR\">VkDeferredOperationKHR</a> handle"
},
{
"vuid": "VUID-vkDestroyDeferredOperationKHR-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkDestroyDeferredOperationKHR-operation-parent",
"text": " If <code>operation</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkGetDeferredOperationMaxConcurrencyKHR": {
"(VK_KHR_deferred_host_operations)": [
{
"vuid": "VUID-vkGetDeferredOperationMaxConcurrencyKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetDeferredOperationMaxConcurrencyKHR-operation-parameter",
"text": " <code>operation</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDeferredOperationKHR\">VkDeferredOperationKHR</a> handle"
},
{
"vuid": "VUID-vkGetDeferredOperationMaxConcurrencyKHR-operation-parent",
"text": " <code>operation</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkGetDeferredOperationResultKHR": {
"(VK_KHR_deferred_host_operations)": [
{
"vuid": "VUID-vkGetDeferredOperationResultKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetDeferredOperationResultKHR-operation-parameter",
"text": " <code>operation</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDeferredOperationKHR\">VkDeferredOperationKHR</a> handle"
},
{
"vuid": "VUID-vkGetDeferredOperationResultKHR-operation-parent",
"text": " <code>operation</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkCreatePrivateDataSlotEXT": {
"(VK_EXT_private_data)": [
{
"vuid": "VUID-vkCreatePrivateDataSlotEXT-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkCreatePrivateDataSlotEXT-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkPrivateDataSlotCreateInfoEXT\">VkPrivateDataSlotCreateInfoEXT</a> structure"
},
{
"vuid": "VUID-vkCreatePrivateDataSlotEXT-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreatePrivateDataSlotEXT-pPrivateDataSlot-parameter",
"text": " <code>pPrivateDataSlot</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkPrivateDataSlotEXT\">VkPrivateDataSlotEXT</a> handle"
}
]
},
"VkPrivateDataSlotCreateInfoEXT": {
"(VK_EXT_private_data)": [
{
"vuid": "VUID-VkPrivateDataSlotCreateInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT</code>"
},
{
"vuid": "VUID-VkPrivateDataSlotCreateInfoEXT-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkPrivateDataSlotCreateInfoEXT-flags-zerobitmask",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be <code>0</code>"
}
]
},
"vkDestroyPrivateDataSlotEXT": {
"(VK_EXT_private_data)": [
{
"vuid": "VUID-vkDestroyPrivateDataSlotEXT-privateDataSlot-04062",
"text": " If <code>VkAllocationCallbacks</code> were provided when <code>privateDataSlot</code> was created, a compatible set of callbacks <strong class=\"purple\">must</strong> be provided here"
},
{
"vuid": "VUID-vkDestroyPrivateDataSlotEXT-privateDataSlot-04063",
"text": " If no <code>VkAllocationCallbacks</code> were provided when <code>privateDataSlot</code> was created, <code>pAllocator</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-vkDestroyPrivateDataSlotEXT-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkDestroyPrivateDataSlotEXT-privateDataSlot-parameter",
"text": " If <code>privateDataSlot</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>privateDataSlot</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPrivateDataSlotEXT\">VkPrivateDataSlotEXT</a> handle"
},
{
"vuid": "VUID-vkDestroyPrivateDataSlotEXT-pAllocator-parameter",
"text": " If <code>pAllocator</code> is not <code>NULL</code>, <code>pAllocator</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkDestroyPrivateDataSlotEXT-privateDataSlot-parent",
"text": " If <code>privateDataSlot</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkSetPrivateDataEXT": {
"(VK_EXT_private_data)": [
{
"vuid": "VUID-vkSetPrivateDataEXT-objectHandle-04016",
"text": " <code>objectHandle</code> <strong class=\"purple\">must</strong> be <code>device</code> or a child of <code>device</code>"
},
{
"vuid": "VUID-vkSetPrivateDataEXT-objectHandle-04017",
"text": " <code>objectHandle</code> <strong class=\"purple\">must</strong> be a valid handle to an object of type <code>objectType</code>"
},
{
"vuid": "VUID-vkSetPrivateDataEXT-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkSetPrivateDataEXT-objectType-parameter",
"text": " <code>objectType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkObjectType\">VkObjectType</a> value"
},
{
"vuid": "VUID-vkSetPrivateDataEXT-privateDataSlot-parameter",
"text": " <code>privateDataSlot</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPrivateDataSlotEXT\">VkPrivateDataSlotEXT</a> handle"
},
{
"vuid": "VUID-vkSetPrivateDataEXT-privateDataSlot-parent",
"text": " <code>privateDataSlot</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkGetPrivateDataEXT": {
"(VK_EXT_private_data)": [
{
"vuid": "VUID-vkGetPrivateDataEXT-objectType-04018",
"text": " <code>objectType</code> <strong class=\"purple\">must</strong> be <a href=\"#VkDevice\">VkDevice</a> or an object type whose parent is <a href=\"#VkDevice\">VkDevice</a>"
},
{
"vuid": "VUID-vkGetPrivateDataEXT-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetPrivateDataEXT-objectType-parameter",
"text": " <code>objectType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkObjectType\">VkObjectType</a> value"
},
{
"vuid": "VUID-vkGetPrivateDataEXT-privateDataSlot-parameter",
"text": " <code>privateDataSlot</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPrivateDataSlotEXT\">VkPrivateDataSlotEXT</a> handle"
},
{
"vuid": "VUID-vkGetPrivateDataEXT-pData-parameter",
"text": " <code>pData</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint64_t</code> value"
},
{
"vuid": "VUID-vkGetPrivateDataEXT-privateDataSlot-parent",
"text": " <code>privateDataSlot</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
]
},
"vkCmdTraceRaysNV": {
"core": [
{
"vuid": "VUID-vkCmdTraceRaysNV-None-02690",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_LINEAR</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-None-02691",
"text": " If a <code>VkImageView</code> is accessed using atomic operations as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-None-02697",
"text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-None-02698",
"text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a push constant value <strong class=\"purple\">must</strong> have been set for the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-None-02699",
"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 <code>VkPipeline</code> bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-None-02700",
"text": " A valid pipeline <strong class=\"purple\">must</strong> be bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-commandBuffer-02701",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command requires any dynamic state, that state <strong class=\"purple\">must</strong> have been set for <code>commandBuffer</code>, and done so after any previously bound pipeline with the corresponding state not specified as dynamic"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-None-02859",
"text": " There <strong class=\"purple\">must</strong> not have been any calls to dynamic state setting commands for any state not specified as dynamic in the <code>VkPipeline</code> object bound to the pipeline bind point used by this command, since that pipeline was bound"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-None-02702",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-vkCmdTraceRaysNV-None-02703",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-vkCmdTraceRaysNV-None-02704",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-vkCmdTraceRaysNV-None-02705",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-None-02706",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-None-04115",
"text": " If a <code>VkImageView</code> is accessed using <code>OpImageWrite</code> as a result of this command, then the <code>Type</code> of the <code>Texel</code> operand of that instruction <strong class=\"purple\">must</strong> have at least as many components as the image view&#8217;s format."
},
{
"vuid": "VUID-vkCmdTraceRaysNV-None-03429",
"text": " Any shader group handle referenced by this call <strong class=\"purple\">must</strong> have been queried from the currently bound ray tracing shader pipeline"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-maxRecursionDepth-03430",
"text": " This command <strong class=\"purple\">must</strong> not cause a shader call instruction to be executed from a shader invocation with a <a href=\"#ray-tracing-recursion-depth\">recursion depth</a> greater than the value of <code>maxRecursionDepth</code> used to create the bound ray tracing pipeline"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-raygenShaderBindingTableBuffer-04042",
"text": " If <code>raygenShaderBindingTableBuffer</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-vkCmdTraceRaysNV-raygenShaderBindingOffset-02455",
"text": " <code>raygenShaderBindingOffset</code> <strong class=\"purple\">must</strong> be less than the size of <code>raygenShaderBindingTableBuffer</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-raygenShaderBindingOffset-02456",
"text": " <code>raygenShaderBindingOffset</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceRayTracingPropertiesNV</code>::<code>shaderGroupBaseAlignment</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-missShaderBindingTableBuffer-04043",
"text": " If <code>missShaderBindingTableBuffer</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-vkCmdTraceRaysNV-missShaderBindingOffset-02457",
"text": " <code>missShaderBindingOffset</code> <strong class=\"purple\">must</strong> be less than the size of <code>missShaderBindingTableBuffer</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-missShaderBindingOffset-02458",
"text": " <code>missShaderBindingOffset</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceRayTracingPropertiesNV</code>::<code>shaderGroupBaseAlignment</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-hitShaderBindingTableBuffer-04044",
"text": " If <code>hitShaderBindingTableBuffer</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-vkCmdTraceRaysNV-hitShaderBindingOffset-02459",
"text": " <code>hitShaderBindingOffset</code> <strong class=\"purple\">must</strong> be less than the size of <code>hitShaderBindingTableBuffer</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-hitShaderBindingOffset-02460",
"text": " <code>hitShaderBindingOffset</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceRayTracingPropertiesNV</code>::<code>shaderGroupBaseAlignment</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-callableShaderBindingTableBuffer-04045",
"text": " If <code>callableShaderBindingTableBuffer</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-vkCmdTraceRaysNV-callableShaderBindingOffset-02461",
"text": " <code>callableShaderBindingOffset</code> <strong class=\"purple\">must</strong> be less than the size of <code>callableShaderBindingTableBuffer</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-callableShaderBindingOffset-02462",
"text": " <code>callableShaderBindingOffset</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceRayTracingPropertiesNV</code>::<code>shaderGroupBaseAlignment</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-missShaderBindingStride-02463",
"text": " <code>missShaderBindingStride</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceRayTracingPropertiesNV</code>::<code>shaderGroupHandleSize</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-hitShaderBindingStride-02464",
"text": " <code>hitShaderBindingStride</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceRayTracingPropertiesNV</code>::<code>shaderGroupHandleSize</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-callableShaderBindingStride-02465",
"text": " <code>callableShaderBindingStride</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceRayTracingPropertiesNV</code>::<code>shaderGroupHandleSize</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-missShaderBindingStride-02466",
"text": " <code>missShaderBindingStride</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceRayTracingPropertiesNV</code>::<code>maxShaderGroupStride</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-hitShaderBindingStride-02467",
"text": " <code>hitShaderBindingStride</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceRayTracingPropertiesNV</code>::<code>maxShaderGroupStride</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-callableShaderBindingStride-02468",
"text": " <code>callableShaderBindingStride</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceRayTracingPropertiesNV</code>::<code>maxShaderGroupStride</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-width-02469",
"text": " <code>width</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxComputeWorkGroupCount</code>[0]"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-height-02470",
"text": " <code>height</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxComputeWorkGroupCount</code>[1]"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-depth-02471",
"text": " <code>depth</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxComputeWorkGroupCount</code>[2]"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdTraceRaysNV-None-02692",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT</code>"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)+!(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdTraceRaysNV-None-02693",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</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_IMG_filter_cubic,VK_EXT_filter_cubic)+(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdTraceRaysNV-filterCubic-02694",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubic</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-filterCubicMinmax-02695",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> with a reduction mode of either <code>VK_SAMPLER_REDUCTION_MODE_MIN</code> or <code>VK_SAMPLER_REDUCTION_MODE_MAX</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering together with minmax filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubicMinmax</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
}
],
"(VK_NV_corner_sampled_image)": [
{
"vuid": "VUID-vkCmdTraceRaysNV-flags-02696",
"text": " Any <a href=\"#VkImage\">VkImage</a> created with a <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>::<code>flags</code> containing <code>VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV</code> sampled as a result of this command <strong class=\"purple\">must</strong> only be sampled using a <a href=\"#VkSamplerAddressMode\">VkSamplerAddressMode</a> of <code>VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdTraceRaysNV-commandBuffer-02707",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, any resource accessed by the <code>VkPipeline</code> object bound to the pipeline bind point used by this command <strong class=\"purple\">must</strong> not be a protected resource"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-commandBuffer-02712",
"text": " If <code>commandBuffer</code> is a protected command buffer, any resource written to by the <code>VkPipeline</code> object bound to the pipeline bind point used by this command <strong class=\"purple\">must</strong> not be an unprotected resource"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-commandBuffer-02713",
"text": " If <code>commandBuffer</code> is a protected command buffer, pipeline stages other than the framebuffer-space and compute stages in the <code>VkPipeline</code> object bound to the pipeline bind point <strong class=\"purple\">must</strong> not write to any resource"
}
],
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_NV_ray_tracing)": [
{
"vuid": "VUID-vkCmdTraceRaysNV-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-raygenShaderBindingTableBuffer-parameter",
"text": " <code>raygenShaderBindingTableBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-missShaderBindingTableBuffer-parameter",
"text": " If <code>missShaderBindingTableBuffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>missShaderBindingTableBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-hitShaderBindingTableBuffer-parameter",
"text": " If <code>hitShaderBindingTableBuffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>hitShaderBindingTableBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-callableShaderBindingTableBuffer-parameter",
"text": " If <code>callableShaderBindingTableBuffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>callableShaderBindingTableBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support compute operations"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
},
{
"vuid": "VUID-vkCmdTraceRaysNV-commonparent",
"text": " Each of <code>callableShaderBindingTableBuffer</code>, <code>commandBuffer</code>, <code>hitShaderBindingTableBuffer</code>, <code>missShaderBindingTableBuffer</code>, and <code>raygenShaderBindingTableBuffer</code> that are valid handles of non-ignored parameters <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"vkCmdTraceRaysKHR": {
"core": [
{
"vuid": "VUID-vkCmdTraceRaysKHR-None-02690",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_LINEAR</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-None-02691",
"text": " If a <code>VkImageView</code> is accessed using atomic operations as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-None-02697",
"text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-None-02698",
"text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a push constant value <strong class=\"purple\">must</strong> have been set for the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-None-02699",
"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 <code>VkPipeline</code> bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-None-02700",
"text": " A valid pipeline <strong class=\"purple\">must</strong> be bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-commandBuffer-02701",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command requires any dynamic state, that state <strong class=\"purple\">must</strong> have been set for <code>commandBuffer</code>, and done so after any previously bound pipeline with the corresponding state not specified as dynamic"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-None-02859",
"text": " There <strong class=\"purple\">must</strong> not have been any calls to dynamic state setting commands for any state not specified as dynamic in the <code>VkPipeline</code> object bound to the pipeline bind point used by this command, since that pipeline was bound"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-None-02702",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-vkCmdTraceRaysKHR-None-02703",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-vkCmdTraceRaysKHR-None-02704",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-vkCmdTraceRaysKHR-None-02705",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-None-02706",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-None-04115",
"text": " If a <code>VkImageView</code> is accessed using <code>OpImageWrite</code> as a result of this command, then the <code>Type</code> of the <code>Texel</code> operand of that instruction <strong class=\"purple\">must</strong> have at least as many components as the image view&#8217;s format."
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-None-03429",
"text": " Any shader group handle referenced by this call <strong class=\"purple\">must</strong> have been queried from the currently bound ray tracing shader pipeline"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-maxRecursionDepth-03430",
"text": " This command <strong class=\"purple\">must</strong> not cause a shader call instruction to be executed from a shader invocation with a <a href=\"#ray-tracing-recursion-depth\">recursion depth</a> greater than the value of <code>maxRecursionDepth</code> used to create the bound ray tracing pipeline"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-pRayGenShaderBindingTable-04019",
"text": " If <code>pRayGenShaderBindingTable-&gt;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-vkCmdTraceRaysKHR-offset-04020",
"text": " The <code>offset</code> member of <code>pRayGenShaderBindingTable</code> <strong class=\"purple\">must</strong> be less than the size of the <code>pRayGenShaderBindingTable-&gt;buffer</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-pRayGenShaderBindingTable-04021",
"text": " <code>pRayGenShaderBindingTable-&gt;offset</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceRayTracingPropertiesKHR</code>::<code>shaderGroupBaseAlignment</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-pRayGenShaderBindingTable-04022",
"text": " <span class=\"eq\"><code>pRayGenShaderBindingTable-&gt;offset</code> &#43; <code>pRayGenShaderBindingTable-&gt;size</code></span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>pRayGenShaderBindingTable-&gt;buffer</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-size-04023",
"text": " The <code>size</code> member of <code>pRayGenShaderBindingTable</code> <strong class=\"purple\">must</strong> be equal to its <code>stride</code> member"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-pMissShaderBindingTable-04024",
"text": " If <code>pMissShaderBindingTable-&gt;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-vkCmdTraceRaysKHR-offset-04025",
"text": " The <code>offset</code> member of <code>pMissShaderBindingTable</code> <strong class=\"purple\">must</strong> be less than the size of <code>pMissShaderBindingTable-&gt;buffer</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-offset-04026",
"text": " The <code>offset</code> member of <code>pMissShaderBindingTable</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceRayTracingPropertiesKHR</code>::<code>shaderGroupBaseAlignment</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-pMissShaderBindingTable-04027",
"text": " <span class=\"eq\"><code>pMissShaderBindingTable-&gt;offset</code> &#43; <code>pMissShaderBindingTable-&gt;size</code></span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>pMissShaderBindingTable-&gt;buffer</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-stride-04028",
"text": " The <code>stride</code> member of <code>pMissShaderBindingTable</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceRayTracingPropertiesKHR</code>::<code>shaderGroupHandleSize</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-stride-04029",
"text": " The <code>stride</code> member of <code>pMissShaderBindingTable</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceRayTracingPropertiesKHR</code>::<code>maxShaderGroupStride</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-pHitShaderBindingTable-04030",
"text": " If <code>pHitShaderBindingTable-&gt;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-vkCmdTraceRaysKHR-offset-04031",
"text": " The <code>offset</code> member of <code>pHitShaderBindingTable</code> <strong class=\"purple\">must</strong> be less than the size of <code>pHitShaderBindingTable-&gt;buffer</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-offset-04032",
"text": " The <code>offset</code> member of <code>pHitShaderBindingTable</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceRayTracingPropertiesKHR</code>::<code>shaderGroupBaseAlignment</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-pHitShaderBindingTable-04033",
"text": " <span class=\"eq\"><code>pHitShaderBindingTable-&gt;offset</code> &#43; <code>pHitShaderBindingTable-&gt;size</code></span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>pHitShaderBindingTable-&gt;buffer</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-stride-04034",
"text": " The <code>stride</code> member of <code>pHitShaderBindingTable</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceRayTracingPropertiesKHR</code>::<code>shaderGroupHandleSize</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-stride-04035",
"text": " The <code>stride</code> member of <code>pHitShaderBindingTable</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceRayTracingPropertiesKHR</code>::<code>maxShaderGroupStride</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-pCallableShaderBindingTable-04036",
"text": " If <code>pCallableShaderBindingTable-&gt;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-vkCmdTraceRaysKHR-offset-04037",
"text": " The <code>offset</code> member of <code>pCallableShaderBindingTable</code> <strong class=\"purple\">must</strong> be less than the size of <code>pCallableShaderBindingTable-&gt;buffer</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-offset-04038",
"text": " The <code>offset</code> member of <code>pCallableShaderBindingTable</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceRayTracingPropertiesKHR</code>::<code>shaderGroupBaseAlignment</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-pCallableShaderBindingTable-04039",
"text": " <span class=\"eq\"><code>pCallableShaderBindingTable-&gt;offset</code> &#43; <code>pCallableShaderBindingTable-&gt;size</code></span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>pCallableShaderBindingTable-&gt;buffer</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-stride-04040",
"text": " The <code>stride</code> member of <code>pCallableShaderBindingTable</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceRayTracingPropertiesKHR</code>::<code>shaderGroupHandleSize</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-stride-04041",
"text": " The <code>stride</code> member of <code>pCallableShaderBindingTable</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceRayTracingPropertiesKHR</code>::<code>maxShaderGroupStride</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-flags-03508",
"text": " If the currently bound ray tracing pipeline was created with <code>flags</code> that included <code>VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR</code>, the <code>buffer</code> member of <code>pHitShaderBindingTable</code> <strong class=\"purple\">must</strong> not be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-flags-03509",
"text": " If the currently bound ray tracing pipeline was created with <code>flags</code> that included <code>VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR</code>, the <code>buffer</code> member of <code>pHitShaderBindingTable</code> <strong class=\"purple\">must</strong> not be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-flags-03510",
"text": " If the currently bound ray tracing pipeline was created with <code>flags</code> that included <code>VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR</code>, the <code>buffer</code> member of <code>pHitShaderBindingTable</code> <strong class=\"purple\">must</strong> not be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-flags-03511",
"text": " If the currently bound ray tracing pipeline was created with <code>flags</code> that included <code>VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR</code>, the shader group handle identified by <code>pMissShaderBindingTable</code> <strong class=\"purple\">must</strong> contain a valid miss shader"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-flags-03512",
"text": " If the currently bound ray tracing pipeline was created with <code>flags</code> that included <code>VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR</code>, entries in <code>pHitShaderBindingTable</code> accessed as a result of this command in order to execute an any hit shader <strong class=\"purple\">must</strong> not be set to zero"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-flags-03513",
"text": " If the currently bound ray tracing pipeline was created with <code>flags</code> that included <code>VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR</code>, entries in <code>pHitShaderBindingTable</code> accessed as a result of this command in order to execute a closest hit shader <strong class=\"purple\">must</strong> not be set to zero"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-flags-03514",
"text": " If the currently bound ray tracing pipeline was created with <code>flags</code> that included <code>VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR</code>, entries in <code>pHitShaderBindingTable</code> accessed as a result of this command in order to execute an intersection shader <strong class=\"purple\">must</strong> not be set to zero"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-width-03505",
"text": " <code>width</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxComputeWorkGroupCount</code>[0]"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-height-03506",
"text": " <code>height</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxComputeWorkGroupCount</code>[1]"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-depth-03507",
"text": " <code>depth</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxComputeWorkGroupCount</code>[2]"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdTraceRaysKHR-None-02692",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT</code>"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)+!(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdTraceRaysKHR-None-02693",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</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_IMG_filter_cubic,VK_EXT_filter_cubic)+(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdTraceRaysKHR-filterCubic-02694",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubic</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-filterCubicMinmax-02695",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> with a reduction mode of either <code>VK_SAMPLER_REDUCTION_MODE_MIN</code> or <code>VK_SAMPLER_REDUCTION_MODE_MAX</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering together with minmax filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubicMinmax</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
}
],
"(VK_NV_corner_sampled_image)": [
{
"vuid": "VUID-vkCmdTraceRaysKHR-flags-02696",
"text": " Any <a href=\"#VkImage\">VkImage</a> created with a <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>::<code>flags</code> containing <code>VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV</code> sampled as a result of this command <strong class=\"purple\">must</strong> only be sampled using a <a href=\"#VkSamplerAddressMode\">VkSamplerAddressMode</a> of <code>VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdTraceRaysKHR-commandBuffer-02707",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, any resource accessed by the <code>VkPipeline</code> object bound to the pipeline bind point used by this command <strong class=\"purple\">must</strong> not be a protected resource"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-commandBuffer-02712",
"text": " If <code>commandBuffer</code> is a protected command buffer, any resource written to by the <code>VkPipeline</code> object bound to the pipeline bind point used by this command <strong class=\"purple\">must</strong> not be an unprotected resource"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-commandBuffer-02713",
"text": " If <code>commandBuffer</code> is a protected command buffer, pipeline stages other than the framebuffer-space and compute stages in the <code>VkPipeline</code> object bound to the pipeline bind point <strong class=\"purple\">must</strong> not write to any resource"
}
],
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_KHR_ray_tracing)": [
{
"vuid": "VUID-vkCmdTraceRaysKHR-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-pRaygenShaderBindingTable-parameter",
"text": " <code>pRaygenShaderBindingTable</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkStridedBufferRegionKHR\">VkStridedBufferRegionKHR</a> structure"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-pMissShaderBindingTable-parameter",
"text": " <code>pMissShaderBindingTable</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkStridedBufferRegionKHR\">VkStridedBufferRegionKHR</a> structure"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-pHitShaderBindingTable-parameter",
"text": " <code>pHitShaderBindingTable</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkStridedBufferRegionKHR\">VkStridedBufferRegionKHR</a> structure"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-pCallableShaderBindingTable-parameter",
"text": " <code>pCallableShaderBindingTable</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkStridedBufferRegionKHR\">VkStridedBufferRegionKHR</a> structure"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support compute operations"
},
{
"vuid": "VUID-vkCmdTraceRaysKHR-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
}
]
},
"VkStridedBufferRegionKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_KHR_ray_tracing)": [
{
"vuid": "VUID-VkStridedBufferRegionKHR-buffer-03515",
"text": " If <code>buffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>size</code> plus <code>offset</code> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
},
{
"vuid": "VUID-VkStridedBufferRegionKHR-buffer-03516",
"text": " If <code>buffer</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>stride</code> <strong class=\"purple\">must</strong> be less than the size of <code>buffer</code>"
},
{
"vuid": "VUID-VkStridedBufferRegionKHR-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 <a href=\"#VkBuffer\">VkBuffer</a> handle"
}
]
},
"vkCmdTraceRaysIndirectKHR": {
"core": [
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-02690",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_LINEAR</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-02691",
"text": " If a <code>VkImageView</code> is accessed using atomic operations as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-02697",
"text": " For each set <em>n</em> that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a descriptor set <strong class=\"purple\">must</strong> have been bound to <em>n</em> at the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-02698",
"text": " For each push constant that is statically used by the <code>VkPipeline</code> bound to the pipeline bind point used by this command, a push constant value <strong class=\"purple\">must</strong> have been set for the same pipeline bind point, 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 <a href=\"#descriptorsets-compatibility\">Pipeline Layout Compatibility</a>"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-02699",
"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 <code>VkPipeline</code> bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-02700",
"text": " A valid pipeline <strong class=\"purple\">must</strong> be bound to the pipeline bind point used by this command"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02701",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command requires any dynamic state, that state <strong class=\"purple\">must</strong> have been set for <code>commandBuffer</code>, and done so after any previously bound pipeline with the corresponding state not specified as dynamic"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-02859",
"text": " There <strong class=\"purple\">must</strong> not have been any calls to dynamic state setting commands for any state not specified as dynamic in the <code>VkPipeline</code> object bound to the pipeline bind point used by this command, since that pipeline was bound"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-02702",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-vkCmdTraceRaysIndirectKHR-None-02703",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-vkCmdTraceRaysIndirectKHR-None-02704",
"text": " If the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a <code>VkSampler</code> object that uses unnormalized coordinates, that sampler <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-vkCmdTraceRaysIndirectKHR-None-02705",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a uniform buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-02706",
"text": " If the <a href=\"#features-robustBufferAccess\">robust buffer access</a> feature is not enabled, and if the <code>VkPipeline</code> object bound to the pipeline bind point used by this command accesses a storage buffer, it <strong class=\"purple\">must</strong> not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-04115",
"text": " If a <code>VkImageView</code> is accessed using <code>OpImageWrite</code> as a result of this command, then the <code>Type</code> of the <code>Texel</code> operand of that instruction <strong class=\"purple\">must</strong> have at least as many components as the image view&#8217;s format."
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-03429",
"text": " Any shader group handle referenced by this call <strong class=\"purple\">must</strong> have been queried from the currently bound ray tracing shader pipeline"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-maxRecursionDepth-03430",
"text": " This command <strong class=\"purple\">must</strong> not cause a shader call instruction to be executed from a shader invocation with a <a href=\"#ray-tracing-recursion-depth\">recursion depth</a> greater than the value of <code>maxRecursionDepth</code> used to create the bound ray tracing pipeline"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-pRayGenShaderBindingTable-04019",
"text": " If <code>pRayGenShaderBindingTable-&gt;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-vkCmdTraceRaysIndirectKHR-offset-04020",
"text": " The <code>offset</code> member of <code>pRayGenShaderBindingTable</code> <strong class=\"purple\">must</strong> be less than the size of the <code>pRayGenShaderBindingTable-&gt;buffer</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-pRayGenShaderBindingTable-04021",
"text": " <code>pRayGenShaderBindingTable-&gt;offset</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceRayTracingPropertiesKHR</code>::<code>shaderGroupBaseAlignment</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-pRayGenShaderBindingTable-04022",
"text": " <span class=\"eq\"><code>pRayGenShaderBindingTable-&gt;offset</code> &#43; <code>pRayGenShaderBindingTable-&gt;size</code></span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>pRayGenShaderBindingTable-&gt;buffer</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-size-04023",
"text": " The <code>size</code> member of <code>pRayGenShaderBindingTable</code> <strong class=\"purple\">must</strong> be equal to its <code>stride</code> member"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-pMissShaderBindingTable-04024",
"text": " If <code>pMissShaderBindingTable-&gt;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-vkCmdTraceRaysIndirectKHR-offset-04025",
"text": " The <code>offset</code> member of <code>pMissShaderBindingTable</code> <strong class=\"purple\">must</strong> be less than the size of <code>pMissShaderBindingTable-&gt;buffer</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-offset-04026",
"text": " The <code>offset</code> member of <code>pMissShaderBindingTable</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceRayTracingPropertiesKHR</code>::<code>shaderGroupBaseAlignment</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-pMissShaderBindingTable-04027",
"text": " <span class=\"eq\"><code>pMissShaderBindingTable-&gt;offset</code> &#43; <code>pMissShaderBindingTable-&gt;size</code></span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>pMissShaderBindingTable-&gt;buffer</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-stride-04028",
"text": " The <code>stride</code> member of <code>pMissShaderBindingTable</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceRayTracingPropertiesKHR</code>::<code>shaderGroupHandleSize</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-stride-04029",
"text": " The <code>stride</code> member of <code>pMissShaderBindingTable</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceRayTracingPropertiesKHR</code>::<code>maxShaderGroupStride</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-pHitShaderBindingTable-04030",
"text": " If <code>pHitShaderBindingTable-&gt;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-vkCmdTraceRaysIndirectKHR-offset-04031",
"text": " The <code>offset</code> member of <code>pHitShaderBindingTable</code> <strong class=\"purple\">must</strong> be less than the size of <code>pHitShaderBindingTable-&gt;buffer</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-offset-04032",
"text": " The <code>offset</code> member of <code>pHitShaderBindingTable</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceRayTracingPropertiesKHR</code>::<code>shaderGroupBaseAlignment</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-pHitShaderBindingTable-04033",
"text": " <span class=\"eq\"><code>pHitShaderBindingTable-&gt;offset</code> &#43; <code>pHitShaderBindingTable-&gt;size</code></span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>pHitShaderBindingTable-&gt;buffer</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-stride-04034",
"text": " The <code>stride</code> member of <code>pHitShaderBindingTable</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceRayTracingPropertiesKHR</code>::<code>shaderGroupHandleSize</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-stride-04035",
"text": " The <code>stride</code> member of <code>pHitShaderBindingTable</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceRayTracingPropertiesKHR</code>::<code>maxShaderGroupStride</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-pCallableShaderBindingTable-04036",
"text": " If <code>pCallableShaderBindingTable-&gt;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-vkCmdTraceRaysIndirectKHR-offset-04037",
"text": " The <code>offset</code> member of <code>pCallableShaderBindingTable</code> <strong class=\"purple\">must</strong> be less than the size of <code>pCallableShaderBindingTable-&gt;buffer</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-offset-04038",
"text": " The <code>offset</code> member of <code>pCallableShaderBindingTable</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceRayTracingPropertiesKHR</code>::<code>shaderGroupBaseAlignment</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-pCallableShaderBindingTable-04039",
"text": " <span class=\"eq\"><code>pCallableShaderBindingTable-&gt;offset</code> &#43; <code>pCallableShaderBindingTable-&gt;size</code></span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>pCallableShaderBindingTable-&gt;buffer</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-stride-04040",
"text": " The <code>stride</code> member of <code>pCallableShaderBindingTable</code> <strong class=\"purple\">must</strong> be a multiple of <code>VkPhysicalDeviceRayTracingPropertiesKHR</code>::<code>shaderGroupHandleSize</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-stride-04041",
"text": " The <code>stride</code> member of <code>pCallableShaderBindingTable</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceRayTracingPropertiesKHR</code>::<code>maxShaderGroupStride</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-flags-03508",
"text": " If the currently bound ray tracing pipeline was created with <code>flags</code> that included <code>VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR</code>, the <code>buffer</code> member of <code>pHitShaderBindingTable</code> <strong class=\"purple\">must</strong> not be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-flags-03509",
"text": " If the currently bound ray tracing pipeline was created with <code>flags</code> that included <code>VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR</code>, the <code>buffer</code> member of <code>pHitShaderBindingTable</code> <strong class=\"purple\">must</strong> not be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-flags-03510",
"text": " If the currently bound ray tracing pipeline was created with <code>flags</code> that included <code>VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR</code>, the <code>buffer</code> member of <code>pHitShaderBindingTable</code> <strong class=\"purple\">must</strong> not be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-flags-03511",
"text": " If the currently bound ray tracing pipeline was created with <code>flags</code> that included <code>VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR</code>, the shader group handle identified by <code>pMissShaderBindingTable</code> <strong class=\"purple\">must</strong> contain a valid miss shader"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-flags-03512",
"text": " If the currently bound ray tracing pipeline was created with <code>flags</code> that included <code>VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR</code>, entries in <code>pHitShaderBindingTable</code> accessed as a result of this command in order to execute an any hit shader <strong class=\"purple\">must</strong> not be set to zero"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-flags-03513",
"text": " If the currently bound ray tracing pipeline was created with <code>flags</code> that included <code>VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR</code>, entries in <code>pHitShaderBindingTable</code> accessed as a result of this command in order to execute a closest hit shader <strong class=\"purple\">must</strong> not be set to zero"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-flags-03514",
"text": " If the currently bound ray tracing pipeline was created with <code>flags</code> that included <code>VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR</code>, entries in <code>pHitShaderBindingTable</code> accessed as a result of this command in order to execute an intersection shader <strong class=\"purple\">must</strong> not be set to zero"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-buffer-02708",
"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-vkCmdTraceRaysIndirectKHR-buffer-02709",
"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-vkCmdTraceRaysIndirectKHR-offset-02710",
"text": " <code>offset</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-offset-03517",
"text": " <span class=\"eq\">(<code>offset</code> &#43; <code>sizeof</code>(<code>VkTraceRaysIndirectCommandKHR</code>))</span> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>buffer</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-rayTracingIndirectTraceRays-03518",
"text": " the <a href=\"#features-raytracing-indirecttraceray\"><code>VkPhysicalDeviceRayTracingFeaturesKHR</code>::<code>rayTracingIndirectTraceRays</code></a> feature <strong class=\"purple\">must</strong> be enabled"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-02692",
"text": " If a <code>VkImageView</code> is sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command, then the image view&#8217;s <a href=\"#resources-image-view-format-features\">format features</a> <strong class=\"purple\">must</strong> contain <code>VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT</code>"
}
],
"(VK_IMG_filter_cubic,VK_EXT_filter_cubic)+!(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-02693",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</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_IMG_filter_cubic,VK_EXT_filter_cubic)+(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-filterCubic-02694",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubic</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-filterCubicMinmax-02695",
"text": " Any <a href=\"#VkImageView\">VkImageView</a> being sampled with <code>VK_FILTER_CUBIC_EXT</code> with a reduction mode of either <code>VK_SAMPLER_REDUCTION_MODE_MIN</code> or <code>VK_SAMPLER_REDUCTION_MODE_MAX</code> as a result of this command <strong class=\"purple\">must</strong> have a <a href=\"#VkImageViewType\">VkImageViewType</a> and format that supports cubic filtering together with minmax filtering, as specified by <code>VkFilterCubicImageViewImageFormatPropertiesEXT</code>::<code>filterCubicMinmax</code> returned by <code>vkGetPhysicalDeviceImageFormatProperties2</code>"
}
],
"(VK_NV_corner_sampled_image)": [
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-flags-02696",
"text": " Any <a href=\"#VkImage\">VkImage</a> created with a <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a>::<code>flags</code> containing <code>VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV</code> sampled as a result of this command <strong class=\"purple\">must</strong> only be sampled using a <a href=\"#VkSamplerAddressMode\">VkSamplerAddressMode</a> of <code>VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE</code>"
}
],
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02707",
"text": " If <code>commandBuffer</code> is an unprotected command buffer, any resource accessed by the <code>VkPipeline</code> object bound to the pipeline bind point used by this command <strong class=\"purple\">must</strong> not be a protected resource"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02711",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> not be a protected command buffer"
}
],
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_KHR_ray_tracing)": [
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-pRaygenShaderBindingTable-parameter",
"text": " <code>pRaygenShaderBindingTable</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkStridedBufferRegionKHR\">VkStridedBufferRegionKHR</a> structure"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-pMissShaderBindingTable-parameter",
"text": " <code>pMissShaderBindingTable</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkStridedBufferRegionKHR\">VkStridedBufferRegionKHR</a> structure"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-pHitShaderBindingTable-parameter",
"text": " <code>pHitShaderBindingTable</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkStridedBufferRegionKHR\">VkStridedBufferRegionKHR</a> structure"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-pCallableShaderBindingTable-parameter",
"text": " <code>pCallableShaderBindingTable</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkStridedBufferRegionKHR\">VkStridedBufferRegionKHR</a> structure"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-buffer-parameter",
"text": " <code>buffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support compute operations"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
},
{
"vuid": "VUID-vkCmdTraceRaysIndirectKHR-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 <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"VkTraceRaysIndirectCommandKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_KHR_ray_tracing)": [
{
"vuid": "VUID-VkTraceRaysIndirectCommandKHR-width-03519",
"text": " <code>width</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxComputeWorkGroupCount</code>[0]"
},
{
"vuid": "VUID-VkTraceRaysIndirectCommandKHR-height-03520",
"text": " <code>height</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxComputeWorkGroupCount</code>[1]"
},
{
"vuid": "VUID-VkTraceRaysIndirectCommandKHR-depth-03521",
"text": " <code>depth</code> <strong class=\"purple\">must</strong> be less than or equal to <code>VkPhysicalDeviceLimits</code>::<code>maxComputeWorkGroupCount</code>[2]"
}
]
},
"vkCmdBuildAccelerationStructureNV": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_NV_ray_tracing)": [
{
"vuid": "VUID-vkCmdBuildAccelerationStructureNV-geometryCount-02241",
"text": " <code>geometryCount</code> <strong class=\"purple\">must</strong> be less than or equal to <a href=\"#VkPhysicalDeviceRayTracingPropertiesNV\">VkPhysicalDeviceRayTracingPropertiesNV</a>::<code>maxGeometryCount</code>"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureNV-dst-02488",
"text": " <code>dst</code> <strong class=\"purple\">must</strong> have been created with compatible <a href=\"#VkAccelerationStructureInfoNV\">VkAccelerationStructureInfoNV</a> where <a href=\"#VkAccelerationStructureInfoNV\">VkAccelerationStructureInfoNV</a>::<code>type</code> and <a href=\"#VkAccelerationStructureInfoNV\">VkAccelerationStructureInfoNV</a>::<code>flags</code> are identical, <a href=\"#VkAccelerationStructureInfoNV\">VkAccelerationStructureInfoNV</a>::<code>instanceCount</code> and <a href=\"#VkAccelerationStructureInfoNV\">VkAccelerationStructureInfoNV</a>::<code>geometryCount</code> for <code>dst</code> are greater than or equal to the build size and each geometry in <a href=\"#VkAccelerationStructureInfoNV\">VkAccelerationStructureInfoNV</a>::<code>pGeometries</code> for <code>dst</code> has greater than or equal to the number of vertices, indices, and AABBs"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureNV-update-02489",
"text": " If <code>update</code> is <code>VK_TRUE</code>, <code>src</code> <strong class=\"purple\">must</strong> not be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureNV-update-02490",
"text": " If <code>update</code> is <code>VK_TRUE</code>, <code>src</code> <strong class=\"purple\">must</strong> have been built before with <code>VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_NV</code> set in <a href=\"#VkAccelerationStructureInfoNV\">VkAccelerationStructureInfoNV</a>::<code>flags</code>"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureNV-update-02491",
"text": " If <code>update</code> is <code>VK_FALSE</code>, the <code>size</code> member of the <a href=\"#VkMemoryRequirements\">VkMemoryRequirements</a> structure returned from a call to <a href=\"#vkGetAccelerationStructureMemoryRequirementsNV\">vkGetAccelerationStructureMemoryRequirementsNV</a> with <a href=\"#VkAccelerationStructureMemoryRequirementsInfoNV\">VkAccelerationStructureMemoryRequirementsInfoNV</a>::<code>accelerationStructure</code> set to <code>dst</code> and <a href=\"#VkAccelerationStructureMemoryRequirementsInfoNV\">VkAccelerationStructureMemoryRequirementsInfoNV</a>::<code>type</code> set to <code>VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV</code> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>scratch</code> minus <code>scratchOffset</code>"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureNV-update-02492",
"text": " If <code>update</code> is <code>VK_TRUE</code>, the <code>size</code> member of the <a href=\"#VkMemoryRequirements\">VkMemoryRequirements</a> structure returned from a call to <a href=\"#vkGetAccelerationStructureMemoryRequirementsNV\">vkGetAccelerationStructureMemoryRequirementsNV</a> with <a href=\"#VkAccelerationStructureMemoryRequirementsInfoNV\">VkAccelerationStructureMemoryRequirementsInfoNV</a>::<code>accelerationStructure</code> set to <code>dst</code> and <a href=\"#VkAccelerationStructureMemoryRequirementsInfoNV\">VkAccelerationStructureMemoryRequirementsInfoNV</a>::<code>type</code> set to <code>VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV</code> <strong class=\"purple\">must</strong> be less than or equal to the size of <code>scratch</code> minus <code>scratchOffset</code>"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureNV-scratch-03522",
"text": " <code>scratch</code> <strong class=\"purple\">must</strong> have been created with <code>VK_BUFFER_USAGE_RAY_TRACING_BIT_NV</code> usage flag"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureNV-instanceData-03523",
"text": " If <code>instanceData</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>instanceData</code> <strong class=\"purple\">must</strong> have been created with <code>VK_BUFFER_USAGE_RAY_TRACING_BIT_NV</code> usage flag"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureNV-update-03524",
"text": " If <code>update</code> is <code>VK_TRUE</code>, then objects that were previously active <strong class=\"purple\">must</strong> not be made inactive as per <a href=\"#acceleration-structure-inactive-prims\">Inactive Primitives and Instances</a>"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureNV-update-03525",
"text": " If <code>update</code> is <code>VK_TRUE</code>, then objects that were previously inactive <strong class=\"purple\">must</strong> not be made active as per <a href=\"#acceleration-structure-inactive-prims\">Inactive Primitives and Instances</a>"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureNV-update-03526",
"text": " If <code>update</code> is <code>VK_TRUE</code>, the <code>src</code> and <code>dst</code> objects <strong class=\"purple\">must</strong> either be the same object or not have any <a href=\"#resources-memory-aliasing\">memory aliasing</a>"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureNV-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureNV-pInfo-parameter",
"text": " <code>pInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkAccelerationStructureInfoNV\">VkAccelerationStructureInfoNV</a> structure"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureNV-instanceData-parameter",
"text": " If <code>instanceData</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>instanceData</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureNV-dst-parameter",
"text": " <code>dst</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAccelerationStructureKHR\">VkAccelerationStructureKHR</a> handle"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureNV-src-parameter",
"text": " If <code>src</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>src</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAccelerationStructureKHR\">VkAccelerationStructureKHR</a> handle"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureNV-scratch-parameter",
"text": " <code>scratch</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureNV-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureNV-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support compute operations"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureNV-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureNV-commonparent",
"text": " Each of <code>commandBuffer</code>, <code>dst</code>, <code>instanceData</code>, <code>scratch</code>, and <code>src</code> that are valid handles of non-ignored parameters <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"vkCmdBuildAccelerationStructureKHR": {
"core": [
{
"vuid": "VUID-vkCmdBuildAccelerationStructureKHR-pOffsetInfos-03402",
"text": " Each element of <code>ppOffsetInfos</code>[i] <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pInfos</code>[i].<code>geometryCount</code> <code>VkAccelerationStructureBuildOffsetInfoKHR</code> structures"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureKHR-pInfos-03403",
"text": " Each <code>pInfos</code>[i].<code>srcAccelerationStructure</code> <strong class=\"purple\">must</strong> not refer to the same acceleration structure as any <code>pInfos</code>[i].<code>dstAccelerationStructure</code> that is provided to the same build command unless it is identical for an update"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureKHR-pInfos-03404",
"text": " For each <code>pInfos</code>[i], <code>dstAccelerationStructure</code> <strong class=\"purple\">must</strong> have been created with compatible <a href=\"#VkAccelerationStructureCreateInfoKHR\">VkAccelerationStructureCreateInfoKHR</a> where <a href=\"#VkAccelerationStructureCreateInfoKHR\">VkAccelerationStructureCreateInfoKHR</a>::<code>type</code> and <a href=\"#VkAccelerationStructureCreateInfoKHR\">VkAccelerationStructureCreateInfoKHR</a>::<code>flags</code> are identical to <a href=\"#VkAccelerationStructureBuildGeometryInfoKHR\">VkAccelerationStructureBuildGeometryInfoKHR</a>::<code>type</code> and <a href=\"#VkAccelerationStructureBuildGeometryInfoKHR\">VkAccelerationStructureBuildGeometryInfoKHR</a>::<code>flags</code> respectively, <a href=\"#VkAccelerationStructureBuildGeometryInfoKHR\">VkAccelerationStructureBuildGeometryInfoKHR</a>::<code>geometryCount</code> for <code>dstAccelerationStructure</code> are greater than or equal to the build size, and each geometry in <a href=\"#VkAccelerationStructureBuildGeometryInfoKHR\">VkAccelerationStructureBuildGeometryInfoKHR</a>::<code>ppGeometries</code> for <code>dstAccelerationStructure</code> has greater than or equal to the number of vertices, indices, and AABBs, <a href=\"#VkAccelerationStructureGeometryTrianglesDataKHR\">VkAccelerationStructureGeometryTrianglesDataKHR</a>::<code>transformData</code> is both 0 or both non-zero, and all other parameters are the same"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureKHR-pInfos-03405",
"text": " For each <code>pInfos</code>[i], if <code>update</code> is <code>VK_TRUE</code>, then objects that were previously active for that acceleration structure <strong class=\"purple\">must</strong> not be made inactive as per <a href=\"#acceleration-structure-inactive-prims\">Inactive Primitives and Instances</a>"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureKHR-pInfos-03406",
"text": " For each <code>pInfos</code>[i], if <code>update</code> is <code>VK_TRUE</code>, then objects that were previously inactive for that acceleration structure <strong class=\"purple\">must</strong> not be made active as per <a href=\"#acceleration-structure-inactive-prims\">Inactive Primitives and Instances</a>"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureKHR-None-03407",
"text": " Any acceleration structure instance in any top level build in this command <strong class=\"purple\">must</strong> not reference any bottom level acceleration structure built by this command"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureKHR-pInfos-03408",
"text": " There <strong class=\"purple\">must</strong> not be any <a href=\"#resources-memory-aliasing\">memory aliasing</a> between the scratch memories that are provided in all the <code>pInfos</code>[i].<code>scratchData</code> memories for the acceleration structure builds"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureKHR-None-03409",
"text": " There <strong class=\"purple\">must</strong> not be any <a href=\"#resources-memory-aliasing\">memory aliasing</a> between memory bound to any top level, bottom level, or instance acceleration structure accessed by this command"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureKHR-update-03527",
"text": " If <code>update</code> is <code>VK_FALSE</code>, all addresses between <code>pInfos</code>[i].<code>scratchData</code> and <code>pInfos</code>[i].<code>scratchData</code> + N - 1 <strong class=\"purple\">must</strong> be in the buffer device address range of the same buffer, where N is given by the <code>size</code> member of the <a href=\"#VkMemoryRequirements\">VkMemoryRequirements</a> structure returned from a call to <a href=\"#vkGetAccelerationStructureMemoryRequirementsKHR\">vkGetAccelerationStructureMemoryRequirementsKHR</a> with <a href=\"#VkAccelerationStructureMemoryRequirementsInfoKHR\">VkAccelerationStructureMemoryRequirementsInfoKHR</a>::<code>accelerationStructure</code> set to <code>pInfos</code>[i].<code>dstAccelerationStructure</code> and <a href=\"#VkAccelerationStructureMemoryRequirementsInfoKHR\">VkAccelerationStructureMemoryRequirementsInfoKHR</a>::<code>type</code> set to <code>VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_KHR</code>"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureKHR-update-03528",
"text": " If <code>update</code> is <code>VK_TRUE</code>, all addresses between <code>pInfos</code>[i].<code>scratchData</code> and <code>pInfos</code>[i].<code>scratchData</code> + N - 1 <strong class=\"purple\">must</strong> be in the buffer device address range of the same buffer, where N is given by the <code>size</code> member of the <a href=\"#VkMemoryRequirements\">VkMemoryRequirements</a> structure returned from a call to <a href=\"#vkGetAccelerationStructureMemoryRequirementsKHR\">vkGetAccelerationStructureMemoryRequirementsKHR</a> with <a href=\"#VkAccelerationStructureMemoryRequirementsInfoKHR\">VkAccelerationStructureMemoryRequirementsInfoKHR</a>::<code>accelerationStructure</code> set to <code>pInfos</code>[i].<code>dstAccelerationStructure</code> and <a href=\"#VkAccelerationStructureMemoryRequirementsInfoKHR\">VkAccelerationStructureMemoryRequirementsInfoKHR</a>::<code>type</code> set to <code>VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_KHR</code>"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureKHR-pInfos-03529",
"text": " The buffer from which the buffer device address <code>pInfos</code>[i].<code>scratchData</code> is queried <strong class=\"purple\">must</strong> have been created with <code>VK_BUFFER_USAGE_RAY_TRACING_BIT_KHR</code> usage flag"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureKHR-None-04046",
"text": " All <a href=\"#VkDeviceOrHostAddressKHR\">VkDeviceOrHostAddressKHR</a> or <a href=\"#VkDeviceOrHostAddressConstKHR\">VkDeviceOrHostAddressConstKHR</a> referenced by this command <strong class=\"purple\">must</strong> contain valid device addresses for a buffer bound to device memory. If the buffer is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single VkDeviceMemory object"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureKHR-None-03531",
"text": " All <code>VkAccelerationStructureKHR</code> objects referenced by this command <strong class=\"purple\">must</strong> be bound to device memory"
}
],
"(VK_KHR_deferred_host_operations)": [
{
"vuid": "VUID-vkCmdBuildAccelerationStructureKHR-pNext-03532",
"text": " The <a href=\"#VkDeferredOperationInfoKHR\">VkDeferredOperationInfoKHR</a> structure <strong class=\"purple\">must</strong> not be included in the <code>pNext</code> chain of any of the provided <a href=\"#VkAccelerationStructureBuildGeometryInfoKHR\">VkAccelerationStructureBuildGeometryInfoKHR</a> structures"
}
],
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_KHR_ray_tracing)": [
{
"vuid": "VUID-vkCmdBuildAccelerationStructureKHR-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureKHR-pInfos-parameter",
"text": " <code>pInfos</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>infoCount</code> valid <a href=\"#VkAccelerationStructureBuildGeometryInfoKHR\">VkAccelerationStructureBuildGeometryInfoKHR</a> structures"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureKHR-ppOffsetInfos-parameter",
"text": " <code>ppOffsetInfos</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>infoCount</code> <a href=\"#VkAccelerationStructureBuildOffsetInfoKHR\">VkAccelerationStructureBuildOffsetInfoKHR</a> structures"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureKHR-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureKHR-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support compute operations"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureKHR-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureKHR-infoCount-arraylength",
"text": " <code>infoCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"vkCmdBuildAccelerationStructureIndirectKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_KHR_ray_tracing)": [
{
"vuid": "VUID-vkCmdBuildAccelerationStructureIndirectKHR-None-04047",
"text": " All <a href=\"#VkDeviceOrHostAddressKHR\">VkDeviceOrHostAddressKHR</a> or <a href=\"#VkDeviceOrHostAddressConstKHR\">VkDeviceOrHostAddressConstKHR</a> referenced by this command <strong class=\"purple\">must</strong> contain valid device addresses for a buffer bound to device memory. If the buffer is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single VkDeviceMemory object"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureIndirectKHR-None-03534",
"text": " All <code>VkAccelerationStructureKHR</code> objects referenced by this command <strong class=\"purple\">must</strong> be bound to device memory"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureIndirectKHR-rayTracingIndirectAccelerationStructureBuild-03535",
"text": " The <a href=\"#features-raytracing-indirectasbuild\"><code>VkPhysicalDeviceRayTracingFeaturesKHR</code>::<code>rayTracingIndirectAccelerationStructureBuild</code></a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureIndirectKHR-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureIndirectKHR-pInfo-parameter",
"text": " <code>pInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkAccelerationStructureBuildGeometryInfoKHR\">VkAccelerationStructureBuildGeometryInfoKHR</a> structure"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureIndirectKHR-indirectBuffer-parameter",
"text": " <code>indirectBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureIndirectKHR-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureIndirectKHR-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support compute operations"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureIndirectKHR-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
},
{
"vuid": "VUID-vkCmdBuildAccelerationStructureIndirectKHR-commonparent",
"text": " Both of <code>commandBuffer</code>, and <code>indirectBuffer</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
],
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_KHR_ray_tracing)+(VK_KHR_deferred_host_operations)": [
{
"vuid": "VUID-vkCmdBuildAccelerationStructureIndirectKHR-pNext-03536",
"text": " The <a href=\"#VkDeferredOperationInfoKHR\">VkDeferredOperationInfoKHR</a> structure <strong class=\"purple\">must</strong> not be included in the <code>pNext</code> chain of any of the provided <a href=\"#VkAccelerationStructureBuildGeometryInfoKHR\">VkAccelerationStructureBuildGeometryInfoKHR</a> structures"
}
]
},
"VkAccelerationStructureBuildGeometryInfoKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_KHR_ray_tracing)": [
{
"vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-update-03537",
"text": " If <code>update</code> is <code>VK_TRUE</code>, <code>srcAccelerationStructure</code> <strong class=\"purple\">must</strong> not be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-update-03538",
"text": " If <code>update</code> is <code>VK_TRUE</code>, <code>srcAccelerationStructure</code> <strong class=\"purple\">must</strong> have been built before with <code>VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR</code> set in <a href=\"#VkAccelerationStructureBuildGeometryInfoKHR\">VkAccelerationStructureBuildGeometryInfoKHR</a>::<code>flags</code>"
},
{
"vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-scratchData-03539",
"text": " <code>scratchData</code> <strong class=\"purple\">must</strong> have been created with <code>VK_BUFFER_USAGE_RAY_TRACING_BIT_KHR</code> usage flag"
},
{
"vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-update-03540",
"text": " If <code>update</code> is <code>VK_TRUE</code>, the <code>srcAccelerationStructure</code> and <code>dstAccelerationStructure</code> objects <strong class=\"purple\">must</strong> either be the same object or not have any <a href=\"#resources-memory-aliasing\">memory aliasing</a>"
},
{
"vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR</code>"
},
{
"vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-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=\"#VkDeferredOperationInfoKHR\">VkDeferredOperationInfoKHR</a>"
},
{
"vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-parameter",
"text": " <code>type</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAccelerationStructureTypeKHR\">VkAccelerationStructureTypeKHR</a> value"
},
{
"vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkBuildAccelerationStructureFlagBitsKHR\">VkBuildAccelerationStructureFlagBitsKHR</a> values"
},
{
"vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-srcAccelerationStructure-parameter",
"text": " If <code>srcAccelerationStructure</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>srcAccelerationStructure</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAccelerationStructureKHR\">VkAccelerationStructureKHR</a> handle"
},
{
"vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-dstAccelerationStructure-parameter",
"text": " <code>dstAccelerationStructure</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAccelerationStructureKHR\">VkAccelerationStructureKHR</a> handle"
},
{
"vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-scratchData-parameter",
"text": " <code>scratchData</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDeviceOrHostAddressKHR\">VkDeviceOrHostAddressKHR</a> union"
},
{
"vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-commonparent",
"text": " Both of <code>dstAccelerationStructure</code>, and <code>srcAccelerationStructure</code> that are valid handles of non-ignored parameters <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"VkAccelerationStructureGeometryKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_KHR_ray_tracing)": [
{
"vuid": "VUID-VkAccelerationStructureGeometryKHR-geometryType-03541",
"text": " If <code>geometryType</code> is <code>VK_GEOMETRY_TYPE_AABBS_KHR</code>, the <code>aabbs</code> member of <code>geometry</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAccelerationStructureGeometryAabbsDataKHR\">VkAccelerationStructureGeometryAabbsDataKHR</a> structure"
},
{
"vuid": "VUID-VkAccelerationStructureGeometryKHR-geometryType-03542",
"text": " If <code>geometryType</code> is <code>VK_GEOMETRY_TYPE_TRIANGLES_KHR</code>, the <code>triangles</code> member of <code>geometry</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAccelerationStructureGeometryTrianglesDataKHR\">VkAccelerationStructureGeometryTrianglesDataKHR</a> structure"
},
{
"vuid": "VUID-VkAccelerationStructureGeometryKHR-geometryType-03543",
"text": " If <code>geometryType</code> is <code>VK_GEOMETRY_TYPE_INSTANCES_KHR</code>, the <code>instances</code> member of <code>geometry</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAccelerationStructureGeometryInstancesDataKHR\">VkAccelerationStructureGeometryInstancesDataKHR</a> structure"
},
{
"vuid": "VUID-VkAccelerationStructureGeometryKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR</code>"
},
{
"vuid": "VUID-VkAccelerationStructureGeometryKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkAccelerationStructureGeometryKHR-geometryType-parameter",
"text": " <code>geometryType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkGeometryTypeKHR\">VkGeometryTypeKHR</a> value"
},
{
"vuid": "VUID-VkAccelerationStructureGeometryKHR-triangles-parameter",
"text": " If <code>geometryType</code> is <code>VK_GEOMETRY_TYPE_TRIANGLES_KHR</code>, the <code>triangles</code> member of <code>geometry</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAccelerationStructureGeometryTrianglesDataKHR\">VkAccelerationStructureGeometryTrianglesDataKHR</a> structure"
},
{
"vuid": "VUID-VkAccelerationStructureGeometryKHR-aabbs-parameter",
"text": " If <code>geometryType</code> is <code>VK_GEOMETRY_TYPE_AABBS_KHR</code>, the <code>aabbs</code> member of <code>geometry</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAccelerationStructureGeometryAabbsDataKHR\">VkAccelerationStructureGeometryAabbsDataKHR</a> structure"
},
{
"vuid": "VUID-VkAccelerationStructureGeometryKHR-instances-parameter",
"text": " If <code>geometryType</code> is <code>VK_GEOMETRY_TYPE_INSTANCES_KHR</code>, the <code>instances</code> member of <code>geometry</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAccelerationStructureGeometryInstancesDataKHR\">VkAccelerationStructureGeometryInstancesDataKHR</a> structure"
},
{
"vuid": "VUID-VkAccelerationStructureGeometryKHR-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkGeometryFlagBitsKHR\">VkGeometryFlagBitsKHR</a> values"
}
]
},
"VkAccelerationStructureGeometryTrianglesDataKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_KHR_ray_tracing)": [
{
"vuid": "VUID-VkAccelerationStructureGeometryTrianglesDataKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR</code>"
},
{
"vuid": "VUID-VkAccelerationStructureGeometryTrianglesDataKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexFormat-parameter",
"text": " <code>vertexFormat</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkFormat\">VkFormat</a> value"
},
{
"vuid": "VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexData-parameter",
"text": " <code>vertexData</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDeviceOrHostAddressConstKHR\">VkDeviceOrHostAddressConstKHR</a> union"
},
{
"vuid": "VUID-VkAccelerationStructureGeometryTrianglesDataKHR-indexType-parameter",
"text": " <code>indexType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkIndexType\">VkIndexType</a> value"
},
{
"vuid": "VUID-VkAccelerationStructureGeometryTrianglesDataKHR-indexData-parameter",
"text": " If <code>indexData</code> is not <code>0</code>, <code>indexData</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDeviceOrHostAddressConstKHR\">VkDeviceOrHostAddressConstKHR</a> union"
},
{
"vuid": "VUID-VkAccelerationStructureGeometryTrianglesDataKHR-transformData-parameter",
"text": " If <code>transformData</code> is not <code>0</code>, <code>transformData</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDeviceOrHostAddressConstKHR\">VkDeviceOrHostAddressConstKHR</a> union"
}
]
},
"VkAccelerationStructureGeometryAabbsDataKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_KHR_ray_tracing)": [
{
"vuid": "VUID-VkAccelerationStructureGeometryAabbsDataKHR-data-03544",
"text": " <code>data</code> <strong class=\"purple\">must</strong> be aligned to <code>8</code> bytes"
},
{
"vuid": "VUID-VkAccelerationStructureGeometryAabbsDataKHR-stride-03545",
"text": " <code>stride</code> <strong class=\"purple\">must</strong> be a multiple of <code>8</code>"
},
{
"vuid": "VUID-VkAccelerationStructureGeometryAabbsDataKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR</code>"
},
{
"vuid": "VUID-VkAccelerationStructureGeometryAabbsDataKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkAccelerationStructureGeometryAabbsDataKHR-data-parameter",
"text": " <code>data</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDeviceOrHostAddressConstKHR\">VkDeviceOrHostAddressConstKHR</a> union"
}
]
},
"VkAabbPositionsKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)": [
{
"vuid": "VUID-VkAabbPositionsKHR-minX-03546",
"text": " <code>minX</code> <strong class=\"purple\">must</strong> be less than or equal to <code>maxX</code>"
},
{
"vuid": "VUID-VkAabbPositionsKHR-minY-03547",
"text": " <code>minY</code> <strong class=\"purple\">must</strong> be less than or equal to <code>maxY</code>"
},
{
"vuid": "VUID-VkAabbPositionsKHR-minZ-03548",
"text": " <code>minZ</code> <strong class=\"purple\">must</strong> be less than or equal to <code>maxZ</code>"
}
]
},
"VkAccelerationStructureGeometryInstancesDataKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_KHR_ray_tracing)": [
{
"vuid": "VUID-VkAccelerationStructureGeometryInstancesDataKHR-data-03549",
"text": " <code>data</code> <strong class=\"purple\">must</strong> be aligned to <code>16</code> bytes"
},
{
"vuid": "VUID-VkAccelerationStructureGeometryInstancesDataKHR-arrayOfPointers-03550",
"text": " If <code>arrayOfPointers</code> is true, each pointer <strong class=\"purple\">must</strong> be aligned to <code>16</code> bytes"
},
{
"vuid": "VUID-VkAccelerationStructureGeometryInstancesDataKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR</code>"
},
{
"vuid": "VUID-VkAccelerationStructureGeometryInstancesDataKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkAccelerationStructureGeometryInstancesDataKHR-data-parameter",
"text": " <code>data</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDeviceOrHostAddressConstKHR\">VkDeviceOrHostAddressConstKHR</a> union"
}
]
},
"VkAccelerationStructureInstanceKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)": [
{
"vuid": "VUID-VkAccelerationStructureInstanceKHR-flags-parameter",
"text": " <code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkGeometryInstanceFlagBitsKHR\">VkGeometryInstanceFlagBitsKHR</a> values"
}
]
},
"VkAccelerationStructureBuildOffsetInfoKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_KHR_ray_tracing)": [
{
"vuid": "VUID-VkAccelerationStructureBuildOffsetInfoKHR-primitiveOffset-03551",
"text": " For geometries of type <code>VK_GEOMETRY_TYPE_TRIANGLES_KHR</code>, if the geometry uses indices, the offset <code>primitiveOffset</code> from <a href=\"#VkAccelerationStructureGeometryTrianglesDataKHR\">VkAccelerationStructureGeometryTrianglesDataKHR</a>::<code>indexData</code> <strong class=\"purple\">must</strong> be a multiple of the element size of <a href=\"#VkAccelerationStructureGeometryTrianglesDataKHR\">VkAccelerationStructureGeometryTrianglesDataKHR</a>::<code>indexType</code>"
},
{
"vuid": "VUID-VkAccelerationStructureBuildOffsetInfoKHR-primitiveOffset-03552",
"text": " For geometries of type <code>VK_GEOMETRY_TYPE_TRIANGLES_KHR</code>, if the geometry doesn&#8217;t use indices, the offset <code>primitiveOffset</code> from <a href=\"#VkAccelerationStructureGeometryTrianglesDataKHR\">VkAccelerationStructureGeometryTrianglesDataKHR</a>::<code>vertexData</code> <strong class=\"purple\">must</strong> be a multiple of the component size of <a href=\"#VkAccelerationStructureGeometryTrianglesDataKHR\">VkAccelerationStructureGeometryTrianglesDataKHR</a>::<code>vertexFormat</code>"
},
{
"vuid": "VUID-VkAccelerationStructureBuildOffsetInfoKHR-transformOffset-03553",
"text": " For geometries of type <code>VK_GEOMETRY_TYPE_TRIANGLES_KHR</code>, the offset <code>transformOffset</code> from <a href=\"#VkAccelerationStructureGeometryTrianglesDataKHR\">VkAccelerationStructureGeometryTrianglesDataKHR</a>::<code>transformData</code> <strong class=\"purple\">must</strong> be a multiple of 16"
},
{
"vuid": "VUID-VkAccelerationStructureBuildOffsetInfoKHR-primitiveOffset-03554",
"text": " For geometries of type <code>VK_GEOMETRY_TYPE_AABBS_KHR</code>, the offset <code>primitiveOffset</code> from <a href=\"#VkAccelerationStructureGeometryAabbsDataKHR\">VkAccelerationStructureGeometryAabbsDataKHR</a>::<code>data</code> <strong class=\"purple\">must</strong> be a multiple of 8"
},
{
"vuid": "VUID-VkAccelerationStructureBuildOffsetInfoKHR-primitiveOffset-03555",
"text": " For geometries of type <code>VK_GEOMETRY_TYPE_INSTANCES_KHR</code>, the offset <code>primitiveOffset</code> from <a href=\"#VkAccelerationStructureGeometryInstancesDataKHR\">VkAccelerationStructureGeometryInstancesDataKHR</a>::<code>data</code> <strong class=\"purple\">must</strong> be a multiple of 16 // TODO - Almost certainly should be more here"
}
]
},
"vkCmdWriteAccelerationStructuresPropertiesKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)": [
{
"vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-queryPool-02493",
"text": " <code>queryPool</code> <strong class=\"purple\">must</strong> have been created with a <code>queryType</code> matching <code>queryType</code>"
},
{
"vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-queryPool-02494",
"text": " The queries identified by <code>queryPool</code> and <code>firstQuery</code> <strong class=\"purple\">must</strong> be <em>unavailable</em>"
},
{
"vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-pAccelerationStructures-parameter",
"text": " <code>pAccelerationStructures</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>accelerationStructureCount</code> valid <a href=\"#VkAccelerationStructureKHR\">VkAccelerationStructureKHR</a> handles"
},
{
"vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-queryType-parameter",
"text": " <code>queryType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkQueryType\">VkQueryType</a> value"
},
{
"vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-queryPool-parameter",
"text": " <code>queryPool</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkQueryPool\">VkQueryPool</a> handle"
},
{
"vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support compute operations"
},
{
"vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
},
{
"vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-accelerationStructureCount-arraylength",
"text": " <code>accelerationStructureCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-commonparent",
"text": " Each of <code>commandBuffer</code>, <code>queryPool</code>, and the elements of <code>pAccelerationStructures</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
],
"core": [
{
"vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-accelerationStructures-03431",
"text": " All acceleration structures in <code>accelerationStructures</code> <strong class=\"purple\">must</strong> have been built with <code>VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR</code> if <code>queryType</code> is <code>VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR</code>"
},
{
"vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-queryType-03432",
"text": " <code>queryType</code> <strong class=\"purple\">must</strong> be <code>VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR</code> or <code>VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR</code>"
}
]
},
"vkCmdCopyAccelerationStructureNV": {
"core": [
{
"vuid": "VUID-vkCmdCopyAccelerationStructureNV-mode-03410",
"text": " <code>mode</code> <strong class=\"purple\">must</strong> be <code>VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR</code> or <code>VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR</code>"
},
{
"vuid": "VUID-vkCmdCopyAccelerationStructureNV-src-03411",
"text": " <code>src</code> <strong class=\"purple\">must</strong> have been built with <code>VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR</code> if <code>mode</code> is <code>VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR</code>"
}
],
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_NV_ray_tracing)": [
{
"vuid": "VUID-vkCmdCopyAccelerationStructureNV-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdCopyAccelerationStructureNV-dst-parameter",
"text": " <code>dst</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAccelerationStructureKHR\">VkAccelerationStructureKHR</a> handle"
},
{
"vuid": "VUID-vkCmdCopyAccelerationStructureNV-src-parameter",
"text": " <code>src</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAccelerationStructureKHR\">VkAccelerationStructureKHR</a> handle"
},
{
"vuid": "VUID-vkCmdCopyAccelerationStructureNV-mode-parameter",
"text": " <code>mode</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCopyAccelerationStructureModeKHR\">VkCopyAccelerationStructureModeKHR</a> value"
},
{
"vuid": "VUID-vkCmdCopyAccelerationStructureNV-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdCopyAccelerationStructureNV-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support compute operations"
},
{
"vuid": "VUID-vkCmdCopyAccelerationStructureNV-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
},
{
"vuid": "VUID-vkCmdCopyAccelerationStructureNV-commonparent",
"text": " Each of <code>commandBuffer</code>, <code>dst</code>, and <code>src</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"vkCmdCopyAccelerationStructureKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_KHR_ray_tracing)": [
{
"vuid": "VUID-vkCmdCopyAccelerationStructureKHR-None-03556",
"text": " All <code>VkAccelerationStructureKHR</code> objects referenced by this command <strong class=\"purple\">must</strong> be bound to device memory"
},
{
"vuid": "VUID-vkCmdCopyAccelerationStructureKHR-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdCopyAccelerationStructureKHR-pInfo-parameter",
"text": " <code>pInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkCopyAccelerationStructureInfoKHR\">VkCopyAccelerationStructureInfoKHR</a> structure"
},
{
"vuid": "VUID-vkCmdCopyAccelerationStructureKHR-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdCopyAccelerationStructureKHR-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support compute operations"
},
{
"vuid": "VUID-vkCmdCopyAccelerationStructureKHR-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
}
],
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_KHR_ray_tracing)+(VK_KHR_deferred_host_operations)": [
{
"vuid": "VUID-vkCmdCopyAccelerationStructureKHR-pNext-03557",
"text": " The <a href=\"#VkDeferredOperationInfoKHR\">VkDeferredOperationInfoKHR</a> structure <strong class=\"purple\">must</strong> not be included in the <code>pNext</code> chain of the <a href=\"#VkCopyAccelerationStructureInfoKHR\">VkCopyAccelerationStructureInfoKHR</a> structure"
}
]
},
"VkCopyAccelerationStructureInfoKHR": {
"core": [
{
"vuid": "VUID-VkCopyAccelerationStructureInfoKHR-mode-03410",
"text": " <code>mode</code> <strong class=\"purple\">must</strong> be <code>VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR</code> or <code>VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR</code>"
},
{
"vuid": "VUID-VkCopyAccelerationStructureInfoKHR-src-03411",
"text": " <code>src</code> <strong class=\"purple\">must</strong> have been built with <code>VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR</code> if <code>mode</code> is <code>VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR</code>"
}
],
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_KHR_ray_tracing)": [
{
"vuid": "VUID-VkCopyAccelerationStructureInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR</code>"
},
{
"vuid": "VUID-VkCopyAccelerationStructureInfoKHR-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=\"#VkDeferredOperationInfoKHR\">VkDeferredOperationInfoKHR</a>"
},
{
"vuid": "VUID-VkCopyAccelerationStructureInfoKHR-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkCopyAccelerationStructureInfoKHR-src-parameter",
"text": " <code>src</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAccelerationStructureKHR\">VkAccelerationStructureKHR</a> handle"
},
{
"vuid": "VUID-VkCopyAccelerationStructureInfoKHR-dst-parameter",
"text": " <code>dst</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAccelerationStructureKHR\">VkAccelerationStructureKHR</a> handle"
},
{
"vuid": "VUID-VkCopyAccelerationStructureInfoKHR-mode-parameter",
"text": " <code>mode</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCopyAccelerationStructureModeKHR\">VkCopyAccelerationStructureModeKHR</a> value"
},
{
"vuid": "VUID-VkCopyAccelerationStructureInfoKHR-commonparent",
"text": " Both of <code>dst</code>, and <code>src</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>"
}
]
},
"vkCmdCopyAccelerationStructureToMemoryKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)": [
{
"vuid": "VUID-vkCmdCopyAccelerationStructureToMemoryKHR-None-04048",
"text": " All <code>VkDeviceOrHostAddressConstKHR</code> referenced by this command <strong class=\"purple\">must</strong> contain valid device addresses for a buffer bound to device memory. If the buffer is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single VkDeviceMemory object"
},
{
"vuid": "VUID-vkCmdCopyAccelerationStructureToMemoryKHR-None-03559",
"text": " All <code>VkAccelerationStructureKHR</code> objects referenced by this command <strong class=\"purple\">must</strong> be bound to device memory"
},
{
"vuid": "VUID-vkCmdCopyAccelerationStructureToMemoryKHR-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdCopyAccelerationStructureToMemoryKHR-pInfo-parameter",
"text": " <code>pInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkCopyAccelerationStructureToMemoryInfoKHR\">VkCopyAccelerationStructureToMemoryInfoKHR</a> structure"
},
{
"vuid": "VUID-vkCmdCopyAccelerationStructureToMemoryKHR-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdCopyAccelerationStructureToMemoryKHR-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support compute operations"
},
{
"vuid": "VUID-vkCmdCopyAccelerationStructureToMemoryKHR-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
}
],
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_KHR_deferred_host_operations)": [
{
"vuid": "VUID-vkCmdCopyAccelerationStructureToMemoryKHR-pNext-03560",
"text": " The <a href=\"#VkDeferredOperationInfoKHR\">VkDeferredOperationInfoKHR</a> structure <strong class=\"purple\">must</strong> not be included in the <code>pNext</code> chain of the <a href=\"#VkCopyAccelerationStructureToMemoryInfoKHR\">VkCopyAccelerationStructureToMemoryInfoKHR</a> structure"
}
],
"core": [
{
"vuid": "VUID-vkCmdCopyAccelerationStructureToMemoryKHR-mode-03412",
"text": " <code>mode</code> <strong class=\"purple\">must</strong> be <code>VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR</code>"
}
]
},
"VkCopyAccelerationStructureToMemoryInfoKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)": [
{
"vuid": "VUID-VkCopyAccelerationStructureToMemoryInfoKHR-dst-03561",
"text": " The memory pointed to by <code>dst</code> <strong class=\"purple\">must</strong> be at least as large as the serialization size of <code>src</code>, as reported by <code>VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR</code>"
},
{
"vuid": "VUID-VkCopyAccelerationStructureToMemoryInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR</code>"
},
{
"vuid": "VUID-VkCopyAccelerationStructureToMemoryInfoKHR-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=\"#VkDeferredOperationInfoKHR\">VkDeferredOperationInfoKHR</a>"
},
{
"vuid": "VUID-VkCopyAccelerationStructureToMemoryInfoKHR-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkCopyAccelerationStructureToMemoryInfoKHR-src-parameter",
"text": " <code>src</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAccelerationStructureKHR\">VkAccelerationStructureKHR</a> handle"
},
{
"vuid": "VUID-VkCopyAccelerationStructureToMemoryInfoKHR-dst-parameter",
"text": " <code>dst</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDeviceOrHostAddressKHR\">VkDeviceOrHostAddressKHR</a> union"
},
{
"vuid": "VUID-VkCopyAccelerationStructureToMemoryInfoKHR-mode-parameter",
"text": " <code>mode</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCopyAccelerationStructureModeKHR\">VkCopyAccelerationStructureModeKHR</a> value"
}
],
"core": [
{
"vuid": "VUID-VkCopyAccelerationStructureToMemoryInfoKHR-mode-03412",
"text": " <code>mode</code> <strong class=\"purple\">must</strong> be <code>VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR</code>"
}
]
},
"vkCmdCopyMemoryToAccelerationStructureKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)": [
{
"vuid": "VUID-vkCmdCopyMemoryToAccelerationStructureKHR-None-04049",
"text": " All <code>VkDeviceOrHostAddressKHR</code> referenced by this command <strong class=\"purple\">must</strong> contain valid device addresses for a buffer bound to device memory. If the buffer is non-sparse then it <strong class=\"purple\">must</strong> be bound completely and contiguously to a single VkDeviceMemory object"
},
{
"vuid": "VUID-vkCmdCopyMemoryToAccelerationStructureKHR-None-03563",
"text": " All <code>VkAccelerationStructureKHR</code> objects referenced by this command <strong class=\"purple\">must</strong> be bound to device memory"
},
{
"vuid": "VUID-vkCmdCopyMemoryToAccelerationStructureKHR-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdCopyMemoryToAccelerationStructureKHR-pInfo-parameter",
"text": " <code>pInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkCopyMemoryToAccelerationStructureInfoKHR\">VkCopyMemoryToAccelerationStructureInfoKHR</a> structure"
},
{
"vuid": "VUID-vkCmdCopyMemoryToAccelerationStructureKHR-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdCopyMemoryToAccelerationStructureKHR-commandBuffer-cmdpool",
"text": " The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support compute operations"
},
{
"vuid": "VUID-vkCmdCopyMemoryToAccelerationStructureKHR-renderpass",
"text": " This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance"
}
],
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_KHR_deferred_host_operations)": [
{
"vuid": "VUID-vkCmdCopyMemoryToAccelerationStructureKHR-pNext-03564",
"text": " The <a href=\"#VkDeferredOperationInfoKHR\">VkDeferredOperationInfoKHR</a> structure <strong class=\"purple\">must</strong> not be included in the <code>pNext</code> chain of the <a href=\"#VkCopyMemoryToAccelerationStructureInfoKHR\">VkCopyMemoryToAccelerationStructureInfoKHR</a> structure"
}
],
"core": [
{
"vuid": "VUID-vkCmdCopyMemoryToAccelerationStructureKHR-mode-03413",
"text": " <code>mode</code> <strong class=\"purple\">must</strong> be <code>VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR</code>"
},
{
"vuid": "VUID-vkCmdCopyMemoryToAccelerationStructureKHR-pInfo-03414",
"text": " The data in <code>pInfo-&gt;src</code> <strong class=\"purple\">must</strong> have a format compatible with the destination physical device as returned by <a href=\"#vkGetDeviceAccelerationStructureCompatibilityKHR\">vkGetDeviceAccelerationStructureCompatibilityKHR</a>"
}
]
},
"VkCopyMemoryToAccelerationStructureInfoKHR": {
"core": [
{
"vuid": "VUID-VkCopyMemoryToAccelerationStructureInfoKHR-mode-03413",
"text": " <code>mode</code> <strong class=\"purple\">must</strong> be <code>VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR</code>"
},
{
"vuid": "VUID-VkCopyMemoryToAccelerationStructureInfoKHR-pInfo-03414",
"text": " The data in <code>pInfo-&gt;src</code> <strong class=\"purple\">must</strong> have a format compatible with the destination physical device as returned by <a href=\"#vkGetDeviceAccelerationStructureCompatibilityKHR\">vkGetDeviceAccelerationStructureCompatibilityKHR</a>"
}
],
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)": [
{
"vuid": "VUID-VkCopyMemoryToAccelerationStructureInfoKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR</code>"
},
{
"vuid": "VUID-VkCopyMemoryToAccelerationStructureInfoKHR-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=\"#VkDeferredOperationInfoKHR\">VkDeferredOperationInfoKHR</a>"
},
{
"vuid": "VUID-VkCopyMemoryToAccelerationStructureInfoKHR-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"vuid": "VUID-VkCopyMemoryToAccelerationStructureInfoKHR-src-parameter",
"text": " <code>src</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDeviceOrHostAddressConstKHR\">VkDeviceOrHostAddressConstKHR</a> union"
},
{
"vuid": "VUID-VkCopyMemoryToAccelerationStructureInfoKHR-dst-parameter",
"text": " <code>dst</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkAccelerationStructureKHR\">VkAccelerationStructureKHR</a> handle"
},
{
"vuid": "VUID-VkCopyMemoryToAccelerationStructureInfoKHR-mode-parameter",
"text": " <code>mode</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCopyAccelerationStructureModeKHR\">VkCopyAccelerationStructureModeKHR</a> value"
}
]
},
"vkGetDeviceAccelerationStructureCompatibilityKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)": [
{
"vuid": "VUID-vkGetDeviceAccelerationStructureCompatibilityKHR-rayTracing-03565",
"text": " The <a href=\"#features-raytracing\"><code>rayTracing</code></a> or <a href=\"#features-rayQuery\"><code>rayQuery</code></a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkGetDeviceAccelerationStructureCompatibilityKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkGetDeviceAccelerationStructureCompatibilityKHR-version-parameter",
"text": " <code>version</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkAccelerationStructureVersionKHR\">VkAccelerationStructureVersionKHR</a> structure"
}
]
},
"VkAccelerationStructureVersionKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)": [
{
"vuid": "VUID-VkAccelerationStructureVersionKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR</code>"
},
{
"vuid": "VUID-VkAccelerationStructureVersionKHR-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
},
{
"vuid": "VUID-VkAccelerationStructureVersionKHR-versionData-parameter",
"text": " <code>versionData</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>2</code>*VK_UUID_SIZE <code>uint8_t</code> values"
}
]
},
"vkBuildAccelerationStructureKHR": {
"core": [
{
"vuid": "VUID-vkBuildAccelerationStructureKHR-pOffsetInfos-03402",
"text": " Each element of <code>ppOffsetInfos</code>[i] <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pInfos</code>[i].<code>geometryCount</code> <code>VkAccelerationStructureBuildOffsetInfoKHR</code> structures"
},
{
"vuid": "VUID-vkBuildAccelerationStructureKHR-pInfos-03403",
"text": " Each <code>pInfos</code>[i].<code>srcAccelerationStructure</code> <strong class=\"purple\">must</strong> not refer to the same acceleration structure as any <code>pInfos</code>[i].<code>dstAccelerationStructure</code> that is provided to the same build command unless it is identical for an update"
},
{
"vuid": "VUID-vkBuildAccelerationStructureKHR-pInfos-03404",
"text": " For each <code>pInfos</code>[i], <code>dstAccelerationStructure</code> <strong class=\"purple\">must</strong> have been created with compatible <a href=\"#VkAccelerationStructureCreateInfoKHR\">VkAccelerationStructureCreateInfoKHR</a> where <a href=\"#VkAccelerationStructureCreateInfoKHR\">VkAccelerationStructureCreateInfoKHR</a>::<code>type</code> and <a href=\"#VkAccelerationStructureCreateInfoKHR\">VkAccelerationStructureCreateInfoKHR</a>::<code>flags</code> are identical to <a href=\"#VkAccelerationStructureBuildGeometryInfoKHR\">VkAccelerationStructureBuildGeometryInfoKHR</a>::<code>type</code> and <a href=\"#VkAccelerationStructureBuildGeometryInfoKHR\">VkAccelerationStructureBuildGeometryInfoKHR</a>::<code>flags</code> respectively, <a href=\"#VkAccelerationStructureBuildGeometryInfoKHR\">VkAccelerationStructureBuildGeometryInfoKHR</a>::<code>geometryCount</code> for <code>dstAccelerationStructure</code> are greater than or equal to the build size, and each geometry in <a href=\"#VkAccelerationStructureBuildGeometryInfoKHR\">VkAccelerationStructureBuildGeometryInfoKHR</a>::<code>ppGeometries</code> for <code>dstAccelerationStructure</code> has greater than or equal to the number of vertices, indices, and AABBs, <a href=\"#VkAccelerationStructureGeometryTrianglesDataKHR\">VkAccelerationStructureGeometryTrianglesDataKHR</a>::<code>transformData</code> is both 0 or both non-zero, and all other parameters are the same"
},
{
"vuid": "VUID-vkBuildAccelerationStructureKHR-pInfos-03405",
"text": " For each <code>pInfos</code>[i], if <code>update</code> is <code>VK_TRUE</code>, then objects that were previously active for that acceleration structure <strong class=\"purple\">must</strong> not be made inactive as per <a href=\"#acceleration-structure-inactive-prims\">Inactive Primitives and Instances</a>"
},
{
"vuid": "VUID-vkBuildAccelerationStructureKHR-pInfos-03406",
"text": " For each <code>pInfos</code>[i], if <code>update</code> is <code>VK_TRUE</code>, then objects that were previously inactive for that acceleration structure <strong class=\"purple\">must</strong> not be made active as per <a href=\"#acceleration-structure-inactive-prims\">Inactive Primitives and Instances</a>"
},
{
"vuid": "VUID-vkBuildAccelerationStructureKHR-None-03407",
"text": " Any acceleration structure instance in any top level build in this command <strong class=\"purple\">must</strong> not reference any bottom level acceleration structure built by this command"
},
{
"vuid": "VUID-vkBuildAccelerationStructureKHR-pInfos-03408",
"text": " There <strong class=\"purple\">must</strong> not be any <a href=\"#resources-memory-aliasing\">memory aliasing</a> between the scratch memories that are provided in all the <code>pInfos</code>[i].<code>scratchData</code> memories for the acceleration structure builds"
},
{
"vuid": "VUID-vkBuildAccelerationStructureKHR-None-03409",
"text": " There <strong class=\"purple\">must</strong> not be any <a href=\"#resources-memory-aliasing\">memory aliasing</a> between memory bound to any top level, bottom level, or instance acceleration structure accessed by this command"
},
{
"vuid": "VUID-vkBuildAccelerationStructureKHR-None-03437",
"text": " All <a href=\"#VkDeviceOrHostAddressKHR\">VkDeviceOrHostAddressKHR</a> or <a href=\"#VkDeviceOrHostAddressConstKHR\">VkDeviceOrHostAddressConstKHR</a> referenced by this command <strong class=\"purple\">must</strong> contain valid host addresses"
},
{
"vuid": "VUID-vkBuildAccelerationStructureKHR-None-03438",
"text": " All <code>VkAccelerationStructureKHR</code> objects referenced by this command <strong class=\"purple\">must</strong> be bound to host-visible memory"
},
{
"vuid": "VUID-vkBuildAccelerationStructureKHR-rayTracingHostAccelerationStructureCommands-03439",
"text": " The <a href=\"#feature-raytracing-hostascmds\"><code>VkPhysicalDeviceRayTracingFeaturesKHR</code>::<code>rayTracingHostAccelerationStructureCommands</code></a> feature <strong class=\"purple\">must</strong> be enabled"
}
],
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)": [
{
"vuid": "VUID-vkBuildAccelerationStructureKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkBuildAccelerationStructureKHR-pInfos-parameter",
"text": " <code>pInfos</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>infoCount</code> valid <a href=\"#VkAccelerationStructureBuildGeometryInfoKHR\">VkAccelerationStructureBuildGeometryInfoKHR</a> structures"
},
{
"vuid": "VUID-vkBuildAccelerationStructureKHR-ppOffsetInfos-parameter",
"text": " <code>ppOffsetInfos</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>infoCount</code> <a href=\"#VkAccelerationStructureBuildOffsetInfoKHR\">VkAccelerationStructureBuildOffsetInfoKHR</a> structures"
},
{
"vuid": "VUID-vkBuildAccelerationStructureKHR-infoCount-arraylength",
"text": " <code>infoCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
}
]
},
"vkCopyAccelerationStructureKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)": [
{
"vuid": "VUID-vkCopyAccelerationStructureKHR-None-03440",
"text": " All <code>VkAccelerationStructureKHR</code> objects referenced by this command <strong class=\"purple\">must</strong> be bound to host-visible memory"
},
{
"vuid": "VUID-vkCopyAccelerationStructureKHR-rayTracingHostAccelerationStructureCommands-03441",
"text": " the <a href=\"#feature-raytracing-hostascmds\"><code>VkPhysicalDeviceRayTracingFeaturesKHR</code>::<code>rayTracingHostAccelerationStructureCommands</code></a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkCopyAccelerationStructureKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkCopyAccelerationStructureKHR-pInfo-parameter",
"text": " <code>pInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkCopyAccelerationStructureInfoKHR\">VkCopyAccelerationStructureInfoKHR</a> structure"
}
]
},
"vkCopyMemoryToAccelerationStructureKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)": [
{
"vuid": "VUID-vkCopyMemoryToAccelerationStructureKHR-None-03442",
"text": " All <code>VkAccelerationStructureKHR</code> objects referenced by this command <strong class=\"purple\">must</strong> be bound to host-visible memory"
},
{
"vuid": "VUID-vkCopyMemoryToAccelerationStructureKHR-None-03443",
"text": " All <code>VkDeviceOrHostAddressConstKHR</code> referenced by this command <strong class=\"purple\">must</strong> contain valid host pointers"
},
{
"vuid": "VUID-vkCopyMemoryToAccelerationStructureKHR-rayTracingHostAccelerationStructureCommands-03444",
"text": " the <a href=\"#feature-raytracing-hostascmds\"><code>VkPhysicalDeviceRayTracingFeaturesKHR</code>::<code>rayTracingHostAccelerationStructureCommands</code></a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkCopyMemoryToAccelerationStructureKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkCopyMemoryToAccelerationStructureKHR-pInfo-parameter",
"text": " <code>pInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkCopyMemoryToAccelerationStructureInfoKHR\">VkCopyMemoryToAccelerationStructureInfoKHR</a> structure"
}
]
},
"vkCopyAccelerationStructureToMemoryKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)": [
{
"vuid": "VUID-vkCopyAccelerationStructureToMemoryKHR-None-03445",
"text": " All <code>VkAccelerationStructureKHR</code> objects referenced by this command <strong class=\"purple\">must</strong> be bound to host-visible memory"
},
{
"vuid": "VUID-vkCopyAccelerationStructureToMemoryKHR-None-03446",
"text": " All <code>VkDeviceOrHostAddressKHR</code> referenced by this command <strong class=\"purple\">must</strong> contain valid host pointers"
},
{
"vuid": "VUID-vkCopyAccelerationStructureToMemoryKHR-rayTracingHostAccelerationStructureCommands-03447",
"text": " the <a href=\"#feature-raytracing-hostascmds\"><code>VkPhysicalDeviceRayTracingFeaturesKHR</code>::<code>rayTracingHostAccelerationStructureCommands</code></a> feature <strong class=\"purple\">must</strong> be enabled"
},
{
"vuid": "VUID-vkCopyAccelerationStructureToMemoryKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkCopyAccelerationStructureToMemoryKHR-pInfo-parameter",
"text": " <code>pInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkCopyAccelerationStructureToMemoryInfoKHR\">VkCopyAccelerationStructureToMemoryInfoKHR</a> structure"
}
]
},
"vkWriteAccelerationStructuresPropertiesKHR": {
"(VK_NV_ray_tracing,VK_KHR_ray_tracing)": [
{
"vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-03448",
"text": " If <code>queryType</code> is <code>VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR</code>, then <code>stride</code> <strong class=\"purple\">must</strong> be a multiple of the size of <code>VkDeviceSize</code>"
},
{
"vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-03449",
"text": " If <code>queryType</code> is <code>VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR</code>, then <code>data</code> <strong class=\"purple\">must</strong> point to a <code>VkDeviceSize</code>"
},
{
"vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-03450",
"text": " If <code>queryType</code> is <code>VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR</code>, then <code>stride</code> <strong class=\"purple\">must</strong> be a multiple of the size of <code>VkDeviceSize</code>"
},
{
"vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-03451",
"text": " If <code>queryType</code> is <code>VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR</code>, then <code>data</code> <strong class=\"purple\">must</strong> point to a <code>VkDeviceSize</code>"
},
{
"vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-dataSize-03452",
"text": " <code>dataSize</code> <strong class=\"purple\">must</strong> be greater than or equal to <span class=\"eq\"><code>accelerationStructureCount</code>*<code>stride</code></span>"
},
{
"vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-pAccelerationStructures-03453",
"text": " The acceleration structures referenced by <code>pAccelerationStructures</code> <strong class=\"purple\">must</strong> be bound to host-visible memory"
},
{
"vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-pAccelerationStructures-parameter",
"text": " <code>pAccelerationStructures</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>accelerationStructureCount</code> valid <a href=\"#VkAccelerationStructureKHR\">VkAccelerationStructureKHR</a> handles"
},
{
"vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-parameter",
"text": " <code>queryType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkQueryType\">VkQueryType</a> value"
},
{
"vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-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-vkWriteAccelerationStructuresPropertiesKHR-accelerationStructureCount-arraylength",
"text": " <code>accelerationStructureCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-dataSize-arraylength",
"text": " <code>dataSize</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>"
},
{
"vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-pAccelerationStructures-parent",
"text": " Each element of <code>pAccelerationStructures</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>device</code>"
}
],
"core": [
{
"vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-accelerationStructures-03431",
"text": " All acceleration structures in <code>accelerationStructures</code> <strong class=\"purple\">must</strong> have been built with <code>VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR</code> if <code>queryType</code> is <code>VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR</code>"
},
{
"vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-03432",
"text": " <code>queryType</code> <strong class=\"purple\">must</strong> be <code>VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR</code> or <code>VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR</code>"
},
{
"vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-rayTracingHostAccelerationStructureCommands-03454",
"text": " the <a href=\"#feature-raytracing-hostascmds\"><code>VkPhysicalDeviceRayTracingFeaturesKHR</code>::<code>rayTracingHostAccelerationStructureCommands</code></a> feature <strong class=\"purple\">must</strong> be enabled"
}
]
},
"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> <a href=\"#VkLayerProperties\">VkLayerProperties</a> structures"
}
]
},
"vkEnumerateDeviceLayerProperties": {
"core": [
{
"vuid": "VUID-vkEnumerateDeviceLayerProperties-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> 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> <a href=\"#VkLayerProperties\">VkLayerProperties</a> 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> <a href=\"#VkExtensionProperties\">VkExtensionProperties</a> structures"
}
]
},
"vkEnumerateDeviceExtensionProperties": {
"core": [
{
"vuid": "VUID-vkEnumerateDeviceExtensionProperties-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> 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> <a href=\"#VkExtensionProperties\">VkExtensionProperties</a> structures"
}
]
},
"vkGetPhysicalDeviceFeatures": {
"core": [
{
"vuid": "VUID-vkGetPhysicalDeviceFeatures-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceFeatures-pFeatures-parameter",
"text": " <code>pFeatures</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkPhysicalDeviceFeatures\">VkPhysicalDeviceFeatures</a> 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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceFeatures2-pFeatures-parameter",
"text": " <code>pFeatures</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkPhysicalDeviceFeatures2\">VkPhysicalDeviceFeatures2</a> 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>"
}
]
},
"VkPhysicalDeviceVulkan11Features": {
"(VK_VERSION_1_2)": [
{
"vuid": "VUID-VkPhysicalDeviceVulkan11Features-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES</code>"
}
]
},
"VkPhysicalDeviceVulkan12Features": {
"(VK_VERSION_1_2)": [
{
"vuid": "VUID-VkPhysicalDeviceVulkan12Features-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES</code>"
}
]
},
"VkPhysicalDeviceVariablePointersFeatures": {
"(VK_VERSION_1_1,VK_KHR_variable_pointers)": [
{
"vuid": "VUID-VkPhysicalDeviceVariablePointersFeatures-variablePointers-01431",
"text": " If <code>variablePointers</code> is enabled then <code>variablePointersStorageBuffer</code> <strong class=\"purple\">must</strong> also be enabled"
},
{
"vuid": "VUID-VkPhysicalDeviceVariablePointersFeatures-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_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>"
}
]
},
"VkPhysicalDeviceShaderAtomicInt64Features": {
"(VK_VERSION_1_2,VK_KHR_shader_atomic_int64)": [
{
"vuid": "VUID-VkPhysicalDeviceShaderAtomicInt64Features-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES</code>"
}
]
},
"VkPhysicalDevice8BitStorageFeatures": {
"(VK_VERSION_1_2,VK_KHR_8bit_storage)": [
{
"vuid": "VUID-VkPhysicalDevice8BitStorageFeatures-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_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>"
}
]
},
"VkPhysicalDeviceShaderFloat16Int8Features": {
"(VK_VERSION_1_2,VK_KHR_shader_float16_int8)": [
{
"vuid": "VUID-VkPhysicalDeviceShaderFloat16Int8Features-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES</code>"
}
]
},
"VkPhysicalDeviceShaderClockFeaturesKHR": {
"(VK_KHR_shader_clock)": [
{
"vuid": "VUID-VkPhysicalDeviceShaderClockFeaturesKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR</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>"
}
]
},
"VkPhysicalDeviceConditionalRenderingFeaturesEXT": {
"(VK_EXT_conditional_rendering)": [
{
"vuid": "VUID-VkPhysicalDeviceConditionalRenderingFeaturesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT</code>"
}
]
},
"VkPhysicalDeviceShaderDrawParametersFeatures": {
"(VK_VERSION_1_1)": [
{
"vuid": "VUID-VkPhysicalDeviceShaderDrawParametersFeatures-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES</code>"
}
]
},
"VkPhysicalDeviceMeshShaderFeaturesNV": {
"(VK_NV_mesh_shader)": [
{
"vuid": "VUID-VkPhysicalDeviceMeshShaderFeaturesNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV</code>"
}
]
},
"VkPhysicalDeviceDescriptorIndexingFeatures": {
"(VK_VERSION_1_2,VK_EXT_descriptor_indexing)": [
{
"vuid": "VUID-VkPhysicalDeviceDescriptorIndexingFeatures-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES</code>"
}
]
},
"VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT": {
"(VK_EXT_vertex_attribute_divisor)": [
{
"vuid": "VUID-VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT</code>"
}
]
},
"VkPhysicalDeviceASTCDecodeFeaturesEXT": {
"(VK_EXT_astc_decode_mode)": [
{
"vuid": "VUID-VkPhysicalDeviceASTCDecodeFeaturesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT</code>"
}
]
},
"VkPhysicalDeviceTransformFeedbackFeaturesEXT": {
"(VK_EXT_transform_feedback)": [
{
"vuid": "VUID-VkPhysicalDeviceTransformFeedbackFeaturesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT</code>"
}
]
},
"VkPhysicalDeviceVulkanMemoryModelFeatures": {
"(VK_VERSION_1_2,VK_KHR_vulkan_memory_model)": [
{
"vuid": "VUID-VkPhysicalDeviceVulkanMemoryModelFeatures-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES</code>"
}
]
},
"VkPhysicalDeviceInlineUniformBlockFeaturesEXT": {
"(VK_EXT_inline_uniform_block)": [
{
"vuid": "VUID-VkPhysicalDeviceInlineUniformBlockFeaturesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT</code>"
}
]
},
"VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV": {
"(VK_NV_representative_fragment_test)": [
{
"vuid": "VUID-VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV</code>"
}
]
},
"VkPhysicalDeviceExclusiveScissorFeaturesNV": {
"(VK_NV_scissor_exclusive)": [
{
"vuid": "VUID-VkPhysicalDeviceExclusiveScissorFeaturesNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV</code>"
}
]
},
"VkPhysicalDeviceCornerSampledImageFeaturesNV": {
"(VK_NV_corner_sampled_image)": [
{
"vuid": "VUID-VkPhysicalDeviceCornerSampledImageFeaturesNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV</code>"
}
]
},
"VkPhysicalDeviceComputeShaderDerivativesFeaturesNV": {
"(VK_NV_compute_shader_derivatives)": [
{
"vuid": "VUID-VkPhysicalDeviceComputeShaderDerivativesFeaturesNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV</code>"
}
]
},
"VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV": {
"(VK_NV_fragment_shader_barycentric)": [
{
"vuid": "VUID-VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV</code>"
}
]
},
"VkPhysicalDeviceShaderImageFootprintFeaturesNV": {
"(VK_NV_shader_image_footprint)": [
{
"vuid": "VUID-VkPhysicalDeviceShaderImageFootprintFeaturesNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV</code>"
}
]
},
"VkPhysicalDeviceShadingRateImageFeaturesNV": {
"(VK_NV_shading_rate_image)": [
{
"vuid": "VUID-VkPhysicalDeviceShadingRateImageFeaturesNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV</code>"
}
]
},
"VkPhysicalDeviceFragmentDensityMapFeaturesEXT": {
"(VK_EXT_fragment_density_map)": [
{
"vuid": "VUID-VkPhysicalDeviceFragmentDensityMapFeaturesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT</code>"
}
]
},
"VkPhysicalDeviceScalarBlockLayoutFeatures": {
"(VK_VERSION_1_2,VK_EXT_scalar_block_layout)": [
{
"vuid": "VUID-VkPhysicalDeviceScalarBlockLayoutFeatures-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES</code>"
}
]
},
"VkPhysicalDeviceUniformBufferStandardLayoutFeatures": {
"(VK_VERSION_1_2,VK_KHR_uniform_buffer_standard_layout)": [
{
"vuid": "VUID-VkPhysicalDeviceUniformBufferStandardLayoutFeatures-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES</code>"
}
]
},
"VkPhysicalDeviceDepthClipEnableFeaturesEXT": {
"(VK_EXT_depth_clip_enable)": [
{
"vuid": "VUID-VkPhysicalDeviceDepthClipEnableFeaturesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT</code>"
}
]
},
"VkPhysicalDeviceMemoryPriorityFeaturesEXT": {
"(VK_EXT_memory_priority)": [
{
"vuid": "VUID-VkPhysicalDeviceMemoryPriorityFeaturesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT</code>"
}
]
},
"VkPhysicalDeviceBufferDeviceAddressFeatures": {
"(VK_VERSION_1_2,VK_KHR_buffer_device_address)": [
{
"vuid": "VUID-VkPhysicalDeviceBufferDeviceAddressFeatures-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES</code>"
}
]
},
"VkPhysicalDeviceBufferDeviceAddressFeaturesEXT": {
"(VK_EXT_buffer_device_address)": [
{
"vuid": "VUID-VkPhysicalDeviceBufferDeviceAddressFeaturesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT</code>"
}
]
},
"VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV": {
"(VK_NV_dedicated_allocation_image_aliasing)": [
{
"vuid": "VUID-VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV</code>"
}
]
},
"VkPhysicalDeviceImagelessFramebufferFeatures": {
"(VK_VERSION_1_2,VK_KHR_imageless_framebuffer)": [
{
"vuid": "VUID-VkPhysicalDeviceImagelessFramebufferFeatures-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES</code>"
}
]
},
"VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT": {
"(VK_EXT_fragment_shader_interlock)": [
{
"vuid": "VUID-VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT</code>"
}
]
},
"VkPhysicalDeviceCooperativeMatrixFeaturesNV": {
"(VK_NV_cooperative_matrix)": [
{
"vuid": "VUID-VkPhysicalDeviceCooperativeMatrixFeaturesNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV</code>"
}
]
},
"VkPhysicalDeviceYcbcrImageArraysFeaturesEXT": {
"(VK_EXT_ycbcr_image_arrays)": [
{
"vuid": "VUID-VkPhysicalDeviceYcbcrImageArraysFeaturesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT</code>"
}
]
},
"VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures": {
"(VK_VERSION_1_1)+(VK_VERSION_1_2,VK_KHR_shader_subgroup_extended_types)": [
{
"vuid": "VUID-VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES</code>"
}
]
},
"VkPhysicalDeviceHostQueryResetFeatures": {
"(VK_VERSION_1_2,VK_EXT_host_query_reset)": [
{
"vuid": "VUID-VkPhysicalDeviceHostQueryResetFeatures-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES</code>"
}
]
},
"VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL": {
"(VK_INTEL_shader_integer_functions2)": [
{
"vuid": "VUID-VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL</code>"
}
]
},
"VkPhysicalDeviceCoverageReductionModeFeaturesNV": {
"(VK_NV_coverage_reduction_mode)": [
{
"vuid": "VUID-VkPhysicalDeviceCoverageReductionModeFeaturesNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV</code>"
}
]
},
"VkPhysicalDeviceTimelineSemaphoreFeatures": {
"(VK_VERSION_1_2,VK_KHR_timeline_semaphore)": [
{
"vuid": "VUID-VkPhysicalDeviceTimelineSemaphoreFeatures-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES</code>"
}
]
},
"VkPhysicalDeviceIndexTypeUint8FeaturesEXT": {
"(VK_EXT_index_type_uint8)": [
{
"vuid": "VUID-VkPhysicalDeviceIndexTypeUint8FeaturesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT</code>"
}
]
},
"VkPhysicalDeviceShaderSMBuiltinsFeaturesNV": {
"(VK_NV_shader_sm_builtins)": [
{
"vuid": "VUID-VkPhysicalDeviceShaderSMBuiltinsFeaturesNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV</code>"
}
]
},
"VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures": {
"(VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts)": [
{
"vuid": "VUID-VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES</code>"
}
]
},
"VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR": {
"(VK_KHR_pipeline_executable_properties)": [
{
"vuid": "VUID-VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR</code>"
}
]
},
"VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT": {
"(VK_EXT_shader_demote_to_helper_invocation)": [
{
"vuid": "VUID-VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT</code>"
}
]
},
"VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT": {
"(VK_EXT_texel_buffer_alignment)": [
{
"vuid": "VUID-VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT</code>"
}
]
},
"VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT": {
"(VK_EXT_texture_compression_astc_hdr)": [
{
"vuid": "VUID-VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT</code>"
}
]
},
"VkPhysicalDeviceLineRasterizationFeaturesEXT": {
"(VK_EXT_line_rasterization)": [
{
"vuid": "VUID-VkPhysicalDeviceLineRasterizationFeaturesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT</code>"
}
]
},
"VkPhysicalDeviceSubgroupSizeControlFeaturesEXT": {
"(VK_EXT_subgroup_size_control)": [
{
"vuid": "VUID-VkPhysicalDeviceSubgroupSizeControlFeaturesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT</code>"
}
]
},
"VkPhysicalDeviceCoherentMemoryFeaturesAMD": {
"(VK_AMD_device_coherent_memory)": [
{
"vuid": "VUID-VkPhysicalDeviceCoherentMemoryFeaturesAMD-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD</code>"
}
]
},
"VkPhysicalDeviceRayTracingFeaturesKHR": {
"(VK_KHR_ray_tracing)": [
{
"vuid": "VUID-VkPhysicalDeviceRayTracingFeaturesKHR-rayTracingShaderGroupHandleCaptureReplayMixed-03348",
"text": " If <code>rayTracingShaderGroupHandleCaptureReplayMixed</code> is <code>VK_TRUE</code>, <code>rayTracingShaderGroupHandleCaptureReplay</code> <strong class=\"purple\">must</strong> also be <code>VK_TRUE</code>"
},
{
"vuid": "VUID-VkPhysicalDeviceRayTracingFeaturesKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR</code>"
}
]
},
"VkPhysicalDeviceExtendedDynamicStateFeaturesEXT": {
"(VK_EXT_extended_dynamic_state)": [
{
"vuid": "VUID-VkPhysicalDeviceExtendedDynamicStateFeaturesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT</code>"
}
]
},
"VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV": {
"(VK_NV_device_generated_commands)": [
{
"vuid": "VUID-VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV</code>"
}
]
},
"VkPhysicalDeviceDiagnosticsConfigFeaturesNV": {
"(VK_NV_device_diagnostics_config)": [
{
"vuid": "VUID-VkPhysicalDeviceDiagnosticsConfigFeaturesNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV</code>"
}
]
},
"VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT": {
"(VK_EXT_pipeline_creation_cache_control)": [
{
"vuid": "VUID-VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT</code>"
}
]
},
"VkPhysicalDevicePrivateDataFeaturesEXT": {
"(VK_EXT_private_data)": [
{
"vuid": "VUID-VkPhysicalDevicePrivateDataFeaturesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT</code>"
}
]
},
"VkPhysicalDeviceRobustness2FeaturesEXT": {
"(VK_EXT_robustness2)": [
{
"vuid": "VUID-VkPhysicalDeviceRobustness2FeaturesEXT-robustBufferAccess2-04000",
"text": " If <code>robustBufferAccess2</code> is enabled then <a href=\"#features-robustBufferAccess\"><code>robustBufferAccess</code></a> <strong class=\"purple\">must</strong> also be enabled"
},
{
"vuid": "VUID-VkPhysicalDeviceRobustness2FeaturesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT</code>"
}
]
},
"VkPhysicalDeviceCustomBorderColorFeaturesEXT": {
"(VK_EXT_custom_border_color)": [
{
"vuid": "VUID-VkPhysicalDeviceCustomBorderColorFeaturesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_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>"
}
]
},
"VkPhysicalDeviceFloatControlsProperties": {
"(VK_VERSION_1_2,VK_KHR_shader_float_controls)": [
{
"vuid": "VUID-VkPhysicalDeviceFloatControlsProperties-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_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>"
}
]
},
"VkPhysicalDeviceSubgroupSizeControlPropertiesEXT": {
"(VK_VERSION_1_1)+(VK_EXT_subgroup_size_control)": [
{
"vuid": "VUID-VkPhysicalDeviceSubgroupSizeControlPropertiesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT</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>"
}
]
},
"VkPhysicalDeviceSamplerFilterMinmaxProperties": {
"(VK_VERSION_1_2,VK_EXT_sampler_filter_minmax)": [
{
"vuid": "VUID-VkPhysicalDeviceSamplerFilterMinmaxProperties-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES</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>"
}
]
},
"VkPhysicalDeviceMeshShaderPropertiesNV": {
"(VK_NV_mesh_shader)": [
{
"vuid": "VUID-VkPhysicalDeviceMeshShaderPropertiesNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV</code>"
}
]
},
"VkPhysicalDeviceDescriptorIndexingProperties": {
"(VK_VERSION_1_2,VK_EXT_descriptor_indexing)": [
{
"vuid": "VUID-VkPhysicalDeviceDescriptorIndexingProperties-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES</code>"
}
]
},
"VkPhysicalDeviceInlineUniformBlockPropertiesEXT": {
"(VK_EXT_inline_uniform_block)": [
{
"vuid": "VUID-VkPhysicalDeviceInlineUniformBlockPropertiesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_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>"
}
]
},
"VkPhysicalDeviceFragmentDensityMapPropertiesEXT": {
"(VK_EXT_fragment_density_map)": [
{
"vuid": "VUID-VkPhysicalDeviceFragmentDensityMapPropertiesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_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>"
}
]
},
"VkPhysicalDeviceShaderCoreProperties2AMD": {
"(VK_AMD_shader_core_properties2)": [
{
"vuid": "VUID-VkPhysicalDeviceShaderCoreProperties2AMD-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD</code>"
}
]
},
"VkPhysicalDeviceDepthStencilResolveProperties": {
"(VK_VERSION_1_2,VK_KHR_depth_stencil_resolve)": [
{
"vuid": "VUID-VkPhysicalDeviceDepthStencilResolveProperties-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES</code>"
}
]
},
"VkPhysicalDevicePerformanceQueryFeaturesKHR": {
"(VK_KHR_performance_query)": [
{
"vuid": "VUID-VkPhysicalDevicePerformanceQueryFeaturesKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR</code>"
}
]
},
"VkPhysicalDevicePerformanceQueryPropertiesKHR": {
"(VK_KHR_performance_query)": [
{
"vuid": "VUID-VkPhysicalDevicePerformanceQueryPropertiesKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR</code>"
}
]
},
"VkPhysicalDeviceShadingRateImagePropertiesNV": {
"(VK_NV_shading_rate_image)": [
{
"vuid": "VUID-VkPhysicalDeviceShadingRateImagePropertiesNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV</code>"
}
]
},
"VkPhysicalDeviceTransformFeedbackPropertiesEXT": {
"(VK_EXT_transform_feedback)": [
{
"vuid": "VUID-VkPhysicalDeviceTransformFeedbackPropertiesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT</code>"
}
]
},
"VkPhysicalDeviceRayTracingPropertiesNV": {
"(VK_NV_ray_tracing)": [
{
"vuid": "VUID-VkPhysicalDeviceRayTracingPropertiesNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV</code>"
}
]
},
"VkPhysicalDeviceRayTracingPropertiesKHR": {
"(VK_KHR_ray_tracing)": [
{
"vuid": "VUID-VkPhysicalDeviceRayTracingPropertiesKHR-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_KHR</code>"
}
]
},
"VkPhysicalDeviceCooperativeMatrixPropertiesNV": {
"(VK_NV_cooperative_matrix)": [
{
"vuid": "VUID-VkPhysicalDeviceCooperativeMatrixPropertiesNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV</code>"
}
]
},
"VkPhysicalDeviceShaderSMBuiltinsPropertiesNV": {
"(VK_NV_shader_sm_builtins)": [
{
"vuid": "VUID-VkPhysicalDeviceShaderSMBuiltinsPropertiesNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV</code>"
}
]
},
"VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT": {
"(VK_EXT_texel_buffer_alignment)": [
{
"vuid": "VUID-VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT</code>"
}
]
},
"VkPhysicalDeviceTimelineSemaphoreProperties": {
"(VK_VERSION_1_2,VK_KHR_timeline_semaphore)": [
{
"vuid": "VUID-VkPhysicalDeviceTimelineSemaphoreProperties-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES</code>"
}
]
},
"VkPhysicalDeviceLineRasterizationPropertiesEXT": {
"(VK_EXT_line_rasterization)": [
{
"vuid": "VUID-VkPhysicalDeviceLineRasterizationPropertiesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT</code>"
}
]
},
"VkPhysicalDeviceRobustness2PropertiesEXT": {
"(VK_EXT_robustness2)": [
{
"vuid": "VUID-VkPhysicalDeviceRobustness2PropertiesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT</code>"
}
]
},
"VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV": {
"(VK_NV_device_generated_commands)": [
{
"vuid": "VUID-VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV</code>"
}
]
},
"vkGetPhysicalDeviceMultisamplePropertiesEXT": {
"(VK_EXT_sample_locations)": [
{
"vuid": "VUID-vkGetPhysicalDeviceMultisamplePropertiesEXT-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> 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 <a href=\"#VkMultisamplePropertiesEXT\">VkMultisamplePropertiesEXT</a> 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>"
}
]
},
"VkPhysicalDeviceCustomBorderColorPropertiesEXT": {
"(VK_EXT_custom_border_color)": [
{
"vuid": "VUID-VkPhysicalDeviceCustomBorderColorPropertiesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT</code>"
}
]
},
"vkGetPhysicalDeviceFormatProperties": {
"core": [
{
"vuid": "VUID-vkGetPhysicalDeviceFormatProperties-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> 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 <a href=\"#VkFormatProperties\">VkFormatProperties</a> 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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> 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 <a href=\"#VkFormatProperties2\">VkFormatProperties2</a> 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> or a pointer to a valid instance of <a href=\"#VkDrmFormatModifierPropertiesListEXT\">VkDrmFormatModifierPropertiesListEXT</a>"
},
{
"vuid": "VUID-VkFormatProperties2-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
}
]
},
"VkDrmFormatModifierPropertiesListEXT": {
"(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)+(VK_EXT_image_drm_format_modifier)": [
{
"vuid": "VUID-VkDrmFormatModifierPropertiesListEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT</code>"
}
]
},
"vkGetPhysicalDeviceImageFormatProperties": {
"(VK_EXT_image_drm_format_modifier)": [
{
"vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties-tiling-02248",
"text": " <code>tiling</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT</code>. (Use <a href=\"#vkGetPhysicalDeviceImageFormatProperties2\">vkGetPhysicalDeviceImageFormatProperties2</a> instead)"
}
],
"core": [
{
"vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> 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 <a href=\"#VkImageFormatProperties\">VkImageFormatProperties</a> structure"
}
]
},
"vkGetPhysicalDeviceExternalImageFormatPropertiesNV": {
"(VK_NV_external_memory_capabilities)": [
{
"vuid": "VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> 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 <a href=\"#VkExternalImageFormatPropertiesNV\">VkExternalImageFormatPropertiesNV</a> 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> includes a <a href=\"#VkAndroidHardwareBufferUsageANDROID\">VkAndroidHardwareBufferUsageANDROID</a> structure, the <code>pNext</code> chain of <code>pImageFormatInfo</code> <strong class=\"purple\">must</strong> include a <a href=\"#VkPhysicalDeviceExternalImageFormatInfo\">VkPhysicalDeviceExternalImageFormatInfo</a> structure 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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties2-pImageFormatInfo-parameter",
"text": " <code>pImageFormatInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkPhysicalDeviceImageFormatInfo2\">VkPhysicalDeviceImageFormatInfo2</a> structure"
},
{
"vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties2-pImageFormatProperties-parameter",
"text": " <code>pImageFormatProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkImageFormatProperties2\">VkImageFormatProperties2</a> structure"
}
]
},
"VkPhysicalDeviceImageFormatInfo2": {
"(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)+(VK_EXT_image_drm_format_modifier)": [
{
"vuid": "VUID-VkPhysicalDeviceImageFormatInfo2-tiling-02249",
"text": " <code>tiling</code> <strong class=\"purple\">must</strong> be <code>VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT</code> if and only if the <code>pNext</code> chain includes <a href=\"#VkPhysicalDeviceImageDrmFormatModifierInfoEXT\">VkPhysicalDeviceImageDrmFormatModifierInfoEXT</a>"
},
{
"vuid": "VUID-VkPhysicalDeviceImageFormatInfo2-tiling-02313",
"text": " If <code>tiling</code> is <code>VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT</code> and <code>flags</code> contains <code>VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT</code>, then the <code>pNext</code> chain <strong class=\"purple\">must</strong> include a <a href=\"#VkImageFormatListCreateInfo\">VkImageFormatListCreateInfo</a> structure with non-zero <code>viewFormatCount</code>"
}
],
"(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": " 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=\"#VkImageFormatListCreateInfo\">VkImageFormatListCreateInfo</a>, <a href=\"#VkImageStencilUsageCreateInfo\">VkImageStencilUsageCreateInfo</a>, <a href=\"#VkPhysicalDeviceExternalImageFormatInfo\">VkPhysicalDeviceExternalImageFormatInfo</a>, <a href=\"#VkPhysicalDeviceImageDrmFormatModifierInfoEXT\">VkPhysicalDeviceImageDrmFormatModifierInfoEXT</a>, or <a href=\"#VkPhysicalDeviceImageViewImageFormatInfoEXT\">VkPhysicalDeviceImageViewImageFormatInfoEXT</a>"
},
{
"vuid": "VUID-VkPhysicalDeviceImageFormatInfo2-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"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=\"#VkFilterCubicImageViewImageFormatPropertiesEXT\">VkFilterCubicImageViewImageFormatPropertiesEXT</a>, <a href=\"#VkSamplerYcbcrConversionImageFormatProperties\">VkSamplerYcbcrConversionImageFormatProperties</a>, or <a href=\"#VkTextureLODGatherFormatPropertiesAMD\">VkTextureLODGatherFormatPropertiesAMD</a>"
},
{
"vuid": "VUID-VkImageFormatProperties2-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
}
]
},
"VkTextureLODGatherFormatPropertiesAMD": {
"(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)+(VK_AMD_texture_gather_bias_lod)": [
{
"vuid": "VUID-VkTextureLODGatherFormatPropertiesAMD-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD</code>"
}
]
},
"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>"
}
]
},
"VkPhysicalDeviceImageDrmFormatModifierInfoEXT": {
"(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)+(VK_EXT_image_drm_format_modifier)": [
{
"vuid": "VUID-VkPhysicalDeviceImageDrmFormatModifierInfoEXT-sharingMode-02314",
"text": " If <code>sharingMode</code> is <code>VK_SHARING_MODE_CONCURRENT</code>, then <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-VkPhysicalDeviceImageDrmFormatModifierInfoEXT-sharingMode-02315",
"text": " If <code>sharingMode</code> is <code>VK_SHARING_MODE_CONCURRENT</code>, then <code>queueFamilyIndexCount</code> <strong class=\"purple\">must</strong> be greater than <code>1</code>"
},
{
"vuid": "VUID-VkPhysicalDeviceImageDrmFormatModifierInfoEXT-sharingMode-02316",
"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 the <code>pQueueFamilyPropertyCount</code> returned by <a href=\"#vkGetPhysicalDeviceQueueFamilyProperties2\">vkGetPhysicalDeviceQueueFamilyProperties2</a> for the <code>physicalDevice</code> that was used to create <code>device</code>"
},
{
"vuid": "VUID-VkPhysicalDeviceImageDrmFormatModifierInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT</code>"
},
{
"vuid": "VUID-VkPhysicalDeviceImageDrmFormatModifierInfoEXT-sharingMode-parameter",
"text": " <code>sharingMode</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkSharingMode\">VkSharingMode</a> value"
}
]
},
"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>"
}
]
},
"VkPhysicalDeviceImageViewImageFormatInfoEXT": {
"(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)+(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-VkPhysicalDeviceImageViewImageFormatInfoEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT</code>"
},
{
"vuid": "VUID-VkPhysicalDeviceImageViewImageFormatInfoEXT-imageViewType-parameter",
"text": " <code>imageViewType</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageViewType\">VkImageViewType</a> value"
}
]
},
"VkFilterCubicImageViewImageFormatPropertiesEXT": {
"(VK_VERSION_1_1,VK_KHR_get_physical_device_properties2)+(VK_EXT_filter_cubic)": [
{
"vuid": "VUID-VkFilterCubicImageViewImageFormatPropertiesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT</code>"
},
{
"vuid": "VUID-VkFilterCubicImageViewImageFormatPropertiesEXT-pNext-02627",
"text": " If the <code>pNext</code> chain of the <a href=\"#VkImageFormatProperties2\">VkImageFormatProperties2</a> structure includes a <a href=\"#VkFilterCubicImageViewImageFormatPropertiesEXT\">VkFilterCubicImageViewImageFormatPropertiesEXT</a> structure, the <code>pNext</code> chain of the <a href=\"#VkPhysicalDeviceImageFormatInfo2\">VkPhysicalDeviceImageFormatInfo2</a> structure <strong class=\"purple\">must</strong> include a <a href=\"#VkPhysicalDeviceImageViewImageFormatInfoEXT\">VkPhysicalDeviceImageViewImageFormatInfoEXT</a> structure with an <code>imageViewType</code> that is compatible with <code>imageType</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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceExternalBufferProperties-pExternalBufferInfo-parameter",
"text": " <code>pExternalBufferInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkPhysicalDeviceExternalBufferInfo\">VkPhysicalDeviceExternalBufferInfo</a> structure"
},
{
"vuid": "VUID-vkGetPhysicalDeviceExternalBufferProperties-pExternalBufferProperties-parameter",
"text": " <code>pExternalBufferProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkExternalBufferProperties\">VkExternalBufferProperties</a> 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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceExternalSemaphoreProperties-pExternalSemaphoreInfo-parameter",
"text": " <code>pExternalSemaphoreInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkPhysicalDeviceExternalSemaphoreInfo\">VkPhysicalDeviceExternalSemaphoreInfo</a> structure"
},
{
"vuid": "VUID-vkGetPhysicalDeviceExternalSemaphoreProperties-pExternalSemaphoreProperties-parameter",
"text": " <code>pExternalSemaphoreProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkExternalSemaphoreProperties\">VkExternalSemaphoreProperties</a> 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> or a pointer to a valid instance of <a href=\"#VkSemaphoreTypeCreateInfo\">VkSemaphoreTypeCreateInfo</a>"
},
{
"vuid": "VUID-VkPhysicalDeviceExternalSemaphoreInfo-sType-unique",
"text": " The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique"
},
{
"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 <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceExternalFenceProperties-pExternalFenceInfo-parameter",
"text": " <code>pExternalFenceInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkPhysicalDeviceExternalFenceInfo\">VkPhysicalDeviceExternalFenceInfo</a> structure"
},
{
"vuid": "VUID-vkGetPhysicalDeviceExternalFenceProperties-pExternalFenceProperties-parameter",
"text": " <code>pExternalFenceProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkExternalFenceProperties\">VkExternalFenceProperties</a> 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>"
}
]
},
"vkGetPhysicalDeviceCalibrateableTimeDomainsEXT": {
"(VK_EXT_calibrated_timestamps)": [
{
"vuid": "VUID-vkGetPhysicalDeviceCalibrateableTimeDomainsEXT-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceCalibrateableTimeDomainsEXT-pTimeDomainCount-parameter",
"text": " <code>pTimeDomainCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
},
{
"vuid": "VUID-vkGetPhysicalDeviceCalibrateableTimeDomainsEXT-pTimeDomains-parameter",
"text": " If the value referenced by <code>pTimeDomainCount</code> is not <code>0</code>, and <code>pTimeDomains</code> is not <code>NULL</code>, <code>pTimeDomains</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pTimeDomainCount</code> <a href=\"#VkTimeDomainEXT\">VkTimeDomainEXT</a> values"
}
]
},
"vkSetDebugUtilsObjectNameEXT": {
"(VK_EXT_debug_utils)": [
{
"vuid": "VUID-vkSetDebugUtilsObjectNameEXT-pNameInfo-02587",
"text": " <code>pNameInfo-&gt;objectType</code> <strong class=\"purple\">must</strong> not be <code>VK_OBJECT_TYPE_UNKNOWN</code>"
},
{
"vuid": "VUID-vkSetDebugUtilsObjectNameEXT-pNameInfo-02588",
"text": " <code>pNameInfo-&gt;objectHandle</code> <strong class=\"purple\">must</strong> not be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-vkSetDebugUtilsObjectNameEXT-device-parameter",
"text": " <code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkSetDebugUtilsObjectNameEXT-pNameInfo-parameter",
"text": " <code>pNameInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkDebugUtilsObjectNameInfoEXT\">VkDebugUtilsObjectNameInfoEXT</a> structure"
}
]
},
"VkDebugUtilsObjectNameInfoEXT": {
"(VK_EXT_debug_utils)": [
{
"vuid": "VUID-VkDebugUtilsObjectNameInfoEXT-objectType-02589",
"text": " If <code>objectType</code> is <code>VK_OBJECT_TYPE_UNKNOWN</code>, <code>objectHandle</code> <strong class=\"purple\">must</strong> not be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"vuid": "VUID-VkDebugUtilsObjectNameInfoEXT-objectType-02590",
"text": " If <code>objectType</code> is not <code>VK_OBJECT_TYPE_UNKNOWN</code>, <code>objectHandle</code> <strong class=\"purple\">must</strong> be <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a> or a valid Vulkan handle of the type associated with <code>objectType</code> as defined in the <a href=\"#debugging-object-types\">VkObjectType and Vulkan Handle Relationship</a> table"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkSetDebugUtilsObjectTagEXT-pTagInfo-parameter",
"text": " <code>pTagInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkDebugUtilsObjectTagInfoEXT\">VkDebugUtilsObjectTagInfoEXT</a> 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-01910",
"text": " <code>objectHandle</code> <strong class=\"purple\">must</strong> be a valid Vulkan handle of the type associated with <code>objectType</code> as defined in the <a href=\"#debugging-object-types\">VkObjectType and Vulkan Handle Relationship</a> table"
},
{
"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 <a href=\"#VkQueue\">VkQueue</a> handle"
},
{
"vuid": "VUID-vkQueueBeginDebugUtilsLabelEXT-pLabelInfo-parameter",
"text": " <code>pLabelInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkDebugUtilsLabelEXT\">VkDebugUtilsLabelEXT</a> 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 <a href=\"#VkQueue\">VkQueue</a> handle"
}
]
},
"vkQueueInsertDebugUtilsLabelEXT": {
"(VK_EXT_debug_utils)": [
{
"vuid": "VUID-vkQueueInsertDebugUtilsLabelEXT-queue-parameter",
"text": " <code>queue</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkQueue\">VkQueue</a> handle"
},
{
"vuid": "VUID-vkQueueInsertDebugUtilsLabelEXT-pLabelInfo-parameter",
"text": " <code>pLabelInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkDebugUtilsLabelEXT\">VkDebugUtilsLabelEXT</a> structure"
}
]
},
"vkCmdBeginDebugUtilsLabelEXT": {
"(VK_EXT_debug_utils)": [
{
"vuid": "VUID-vkCmdBeginDebugUtilsLabelEXT-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdBeginDebugUtilsLabelEXT-pLabelInfo-parameter",
"text": " <code>pLabelInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkDebugUtilsLabelEXT\">VkDebugUtilsLabelEXT</a> structure"
},
{
"vuid": "VUID-vkCmdBeginDebugUtilsLabelEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdEndDebugUtilsLabelEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdInsertDebugUtilsLabelEXT-pLabelInfo-parameter",
"text": " <code>pLabelInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkDebugUtilsLabelEXT\">VkDebugUtilsLabelEXT</a> structure"
},
{
"vuid": "VUID-vkCmdInsertDebugUtilsLabelEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkInstance\">VkInstance</a> handle"
},
{
"vuid": "VUID-vkCreateDebugUtilsMessengerEXT-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkDebugUtilsMessengerCreateInfoEXT\">VkDebugUtilsMessengerCreateInfoEXT</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateDebugUtilsMessengerEXT-pMessenger-parameter",
"text": " <code>pMessenger</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkDebugUtilsMessengerEXT\">VkDebugUtilsMessengerEXT</a> 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>"
},
{
"vuid": "VUID-VkDebugUtilsMessengerCreateInfoEXT-pfnUserCallback-parameter",
"text": " <code>pfnUserCallback</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#PFN_vkDebugUtilsMessengerCallbackEXT\">PFN_vkDebugUtilsMessengerCallbackEXT</a> value"
}
]
},
"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-pQueueLabels-parameter",
"text": " If <code>queueLabelCount</code> is not <code>0</code>, <code>pQueueLabels</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>queueLabelCount</code> valid <a href=\"#VkDebugUtilsLabelEXT\">VkDebugUtilsLabelEXT</a> structures"
},
{
"vuid": "VUID-VkDebugUtilsMessengerCallbackDataEXT-pCmdBufLabels-parameter",
"text": " If <code>cmdBufLabelCount</code> is not <code>0</code>, <code>pCmdBufLabels</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>cmdBufLabelCount</code> valid <a href=\"#VkDebugUtilsLabelEXT\">VkDebugUtilsLabelEXT</a> structures"
},
{
"vuid": "VUID-VkDebugUtilsMessengerCallbackDataEXT-pObjects-parameter",
"text": " If <code>objectCount</code> is not <code>0</code>, <code>pObjects</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>objectCount</code> valid <a href=\"#VkDebugUtilsObjectNameInfoEXT\">VkDebugUtilsObjectNameInfoEXT</a> structures"
}
]
},
"vkSubmitDebugUtilsMessageEXT": {
"(VK_EXT_debug_utils)": [
{
"vuid": "VUID-vkSubmitDebugUtilsMessageEXT-objectType-02591",
"text": " The <code>objectType</code> member of each element of <code>pCallbackData-&gt;pObjects</code> <strong class=\"purple\">must</strong> not be <code>VK_OBJECT_TYPE_UNKNOWN</code>"
},
{
"vuid": "VUID-vkSubmitDebugUtilsMessageEXT-instance-parameter",
"text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkInstance\">VkInstance</a> 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 <a href=\"#VkDebugUtilsMessengerCallbackDataEXT\">VkDebugUtilsMessengerCallbackDataEXT</a> 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 <a href=\"#VkInstance\">VkInstance</a> handle"
},
{
"vuid": "VUID-vkDestroyDebugUtilsMessengerEXT-messenger-parameter",
"text": " If <code>messenger</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>messenger</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDebugUtilsMessengerEXT\">VkDebugUtilsMessengerEXT</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkDestroyDebugUtilsMessengerEXT-messenger-parent",
"text": " If <code>messenger</code> is a valid handle, it <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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkDebugMarkerSetObjectNameEXT-pNameInfo-parameter",
"text": " <code>pNameInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkDebugMarkerObjectNameInfoEXT\">VkDebugMarkerObjectNameInfoEXT</a> 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 <a href=\"#debug-report-object-types\"><a href=\"#VkDebugReportObjectTypeEXT\">VkDebugReportObjectTypeEXT</a> and Vulkan Handle Relationship</a>"
},
{
"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 <a href=\"#VkDevice\">VkDevice</a> handle"
},
{
"vuid": "VUID-vkDebugMarkerSetObjectTagEXT-pTagInfo-parameter",
"text": " <code>pTagInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkDebugMarkerObjectTagInfoEXT\">VkDebugMarkerObjectTagInfoEXT</a> 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 <a href=\"#debug-report-object-types\"><a href=\"#VkDebugReportObjectTypeEXT\">VkDebugReportObjectTypeEXT</a> and Vulkan Handle Relationship</a>"
},
{
"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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdDebugMarkerBeginEXT-pMarkerInfo-parameter",
"text": " <code>pMarkerInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkDebugMarkerMarkerInfoEXT\">VkDebugMarkerMarkerInfoEXT</a> structure"
},
{
"vuid": "VUID-vkCmdDebugMarkerBeginEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdDebugMarkerEndEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdDebugMarkerInsertEXT-pMarkerInfo-parameter",
"text": " <code>pMarkerInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkDebugMarkerMarkerInfoEXT\">VkDebugMarkerMarkerInfoEXT</a> structure"
},
{
"vuid": "VUID-vkCmdDebugMarkerInsertEXT-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"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 <a href=\"#VkInstance\">VkInstance</a> handle"
},
{
"vuid": "VUID-vkCreateDebugReportCallbackEXT-pCreateInfo-parameter",
"text": " <code>pCreateInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkDebugReportCallbackCreateInfoEXT\">VkDebugReportCallbackCreateInfoEXT</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkCreateDebugReportCallbackEXT-pCallback-parameter",
"text": " <code>pCallback</code> <strong class=\"purple\">must</strong> be a valid pointer to a <a href=\"#VkDebugReportCallbackEXT\">VkDebugReportCallbackEXT</a> handle"
}
]
},
"VkDebugReportCallbackCreateInfoEXT": {
"(VK_EXT_debug_report)": [
{
"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"
},
{
"vuid": "VUID-VkDebugReportCallbackCreateInfoEXT-pfnCallback-parameter",
"text": " <code>pfnCallback</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#PFN_vkDebugReportCallbackEXT\">PFN_vkDebugReportCallbackEXT</a> value"
}
]
},
"vkDebugReportMessageEXT": {
"(VK_EXT_debug_report)": [
{
"vuid": "VUID-vkDebugReportMessageEXT-object-01241",
"text": " <code>object</code> <strong class=\"purple\">must</strong> be a Vulkan object or <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>"
},
{
"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 <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>object</code> <strong class=\"purple\">must</strong> be a Vulkan object of the corresponding type associated with <code>objectType</code> as defined in <a href=\"#debug-report-object-types\"><a href=\"#VkDebugReportObjectTypeEXT\">VkDebugReportObjectTypeEXT</a> and Vulkan Handle Relationship</a>"
},
{
"vuid": "VUID-vkDebugReportMessageEXT-instance-parameter",
"text": " <code>instance</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkInstance\">VkInstance</a> 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 <a href=\"#VkInstance\">VkInstance</a> handle"
},
{
"vuid": "VUID-vkDestroyDebugReportCallbackEXT-callback-parameter",
"text": " If <code>callback</code> is not <a href=\"#VK_NULL_HANDLE\">VK_NULL_HANDLE</a>, <code>callback</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDebugReportCallbackEXT\">VkDebugReportCallbackEXT</a> 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 <a href=\"#VkAllocationCallbacks\">VkAllocationCallbacks</a> structure"
},
{
"vuid": "VUID-vkDestroyDebugReportCallbackEXT-callback-parent",
"text": " If <code>callback</code> is a valid handle, it <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from <code>instance</code>"
}
]
},
"vkCmdSetCheckpointNV": {
"(VK_NV_device_diagnostic_checkpoints)": [
{
"vuid": "VUID-vkCmdSetCheckpointNV-commandBuffer-parameter",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle"
},
{
"vuid": "VUID-vkCmdSetCheckpointNV-commandBuffer-recording",
"text": " <code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>"
},
{
"vuid": "VUID-vkCmdSetCheckpointNV-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"
}
]
},
"vkGetQueueCheckpointDataNV": {
"(VK_NV_device_diagnostic_checkpoints)": [
{
"vuid": "VUID-vkGetQueueCheckpointDataNV-queue-02025",
"text": " The device that <code>queue</code> belongs to <strong class=\"purple\">must</strong> be in the lost state"
},
{
"vuid": "VUID-vkGetQueueCheckpointDataNV-queue-parameter",
"text": " <code>queue</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkQueue\">VkQueue</a> handle"
},
{
"vuid": "VUID-vkGetQueueCheckpointDataNV-pCheckpointDataCount-parameter",
"text": " <code>pCheckpointDataCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
},
{
"vuid": "VUID-vkGetQueueCheckpointDataNV-pCheckpointData-parameter",
"text": " If the value referenced by <code>pCheckpointDataCount</code> is not <code>0</code>, and <code>pCheckpointData</code> is not <code>NULL</code>, <code>pCheckpointData</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pCheckpointDataCount</code> <a href=\"#VkCheckpointDataNV\">VkCheckpointDataNV</a> structures"
}
]
},
"VkCheckpointDataNV": {
"(VK_NV_device_diagnostic_checkpoints)": [
{
"vuid": "VUID-VkCheckpointDataNV-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV</code>"
},
{
"vuid": "VUID-VkCheckpointDataNV-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
},
"vkGetPhysicalDeviceToolPropertiesEXT": {
"(VK_EXT_tooling_info)": [
{
"vuid": "VUID-vkGetPhysicalDeviceToolPropertiesEXT-physicalDevice-parameter",
"text": " <code>physicalDevice</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkPhysicalDevice\">VkPhysicalDevice</a> handle"
},
{
"vuid": "VUID-vkGetPhysicalDeviceToolPropertiesEXT-pToolCount-parameter",
"text": " <code>pToolCount</code> <strong class=\"purple\">must</strong> be a valid pointer to a <code>uint32_t</code> value"
},
{
"vuid": "VUID-vkGetPhysicalDeviceToolPropertiesEXT-pToolProperties-parameter",
"text": " If the value referenced by <code>pToolCount</code> is not <code>0</code>, and <code>pToolProperties</code> is not <code>NULL</code>, <code>pToolProperties</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>pToolCount</code> <a href=\"#VkPhysicalDeviceToolPropertiesEXT\">VkPhysicalDeviceToolPropertiesEXT</a> structures"
}
]
},
"VkPhysicalDeviceToolPropertiesEXT": {
"(VK_EXT_tooling_info)": [
{
"vuid": "VUID-VkPhysicalDeviceToolPropertiesEXT-sType-sType",
"text": " <code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT</code>"
},
{
"vuid": "VUID-VkPhysicalDeviceToolPropertiesEXT-pNext-pNext",
"text": " <code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>"
}
]
}
}
}