// Copyright 2020-2021 The Khronos Group Inc. // // SPDX-License-Identifier: CC-BY-4.0 // Common Valid Usage // Common to binding any memory to a buffer * [[VUID-{refpage}-buffer-01029]] pname:buffer must: not already be backed by a memory object * [[VUID-{refpage}-buffer-01030]] pname:buffer must: not have been created with any sparse memory binding flags * [[VUID-{refpage}-memoryOffset-01031]] pname:memoryOffset must: be less than the size of pname:memory * [[VUID-{refpage}-memory-01035]] pname:memory must: have been allocated using one of the memory types allowed in the pname:memoryTypeBits member of the sname:VkMemoryRequirements structure returned from a call to fname:vkGetBufferMemoryRequirements with pname:buffer * [[VUID-{refpage}-memoryOffset-01036]] pname:memoryOffset must: be an integer multiple of the pname:alignment member of the sname:VkMemoryRequirements structure returned from a call to fname:vkGetBufferMemoryRequirements with pname:buffer * [[VUID-{refpage}-size-01037]] The pname:size member of the sname:VkMemoryRequirements structure returned from a call to fname:vkGetBufferMemoryRequirements with pname:buffer must: be less than or equal to the size of pname:memory minus pname:memoryOffset ifdef::VK_VERSION_1_1,VK_KHR_dedicated_allocation[] * [[VUID-{refpage}-buffer-01444]] If pname:buffer requires a dedicated allocation (as reported by flink:vkGetBufferMemoryRequirements2 in slink:VkMemoryDedicatedRequirements::pname:requiresDedicatedAllocation for pname:buffer), pname:memory must: have been allocated with slink:VkMemoryDedicatedAllocateInfo::pname:buffer equal to pname:buffer * [[VUID-{refpage}-memory-01508]] If the sname:VkMemoryAllocateInfo provided when pname:memory was allocated included a slink:VkMemoryDedicatedAllocateInfo structure in its pname:pNext chain, and slink:VkMemoryDedicatedAllocateInfo::pname:buffer was not dlink:VK_NULL_HANDLE, then pname:buffer must: equal slink:VkMemoryDedicatedAllocateInfo::pname:buffer, and pname:memoryOffset must: be zero endif::VK_VERSION_1_1,VK_KHR_dedicated_allocation[] ifdef::VK_VERSION_1_1[] * [[VUID-{refpage}-None-01898]] If pname:buffer was created with the ename:VK_BUFFER_CREATE_PROTECTED_BIT bit set, the buffer must: be bound to a memory object allocated with a memory type that reports ename:VK_MEMORY_PROPERTY_PROTECTED_BIT * [[VUID-{refpage}-None-01899]] If pname:buffer was created with the ename:VK_BUFFER_CREATE_PROTECTED_BIT bit not set, the buffer must: not be bound to a memory object allocated with a memory type that reports ename:VK_MEMORY_PROPERTY_PROTECTED_BIT endif::VK_VERSION_1_1[] ifdef::VK_NV_dedicated_allocation[] * [[VUID-{refpage}-buffer-01038]] If pname:buffer was created with slink:VkDedicatedAllocationBufferCreateInfoNV::pname:dedicatedAllocation equal to ename:VK_TRUE, pname:memory must: have been allocated with slink:VkDedicatedAllocationMemoryAllocateInfoNV::pname:buffer equal to a buffer handle created with identical creation parameters to pname:buffer and pname:memoryOffset must: be zero ifndef::VK_VERSION_1_1,VK_KHR_dedicated_allocation[] * [[VUID-{refpage}-buffer-01039]] If pname:buffer was not created with slink:VkDedicatedAllocationBufferCreateInfoNV::pname:dedicatedAllocation equal to ename:VK_TRUE, pname:memory must: not have been allocated dedicated for a specific buffer or image endif::VK_VERSION_1_1,VK_KHR_dedicated_allocation[] endif::VK_NV_dedicated_allocation[] ifdef::VK_VERSION_1_1,VK_KHR_external_memory[] * [[VUID-{refpage}-memory-02726]] If the value of slink:VkExportMemoryAllocateInfo::pname:handleTypes used to allocate pname:memory is not `0`, it must: include at least one of the handles set in slink:VkExternalMemoryBufferCreateInfo::pname:handleTypes when pname:buffer was created ifndef::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-{refpage}-memory-02727]] If pname:memory was allocated by a memory import operation, the external handle type of the imported memory must: also have been set in slink:VkExternalMemoryBufferCreateInfo::pname:handleTypes when pname:buffer was created endif::VK_ANDROID_external_memory_android_hardware_buffer[] ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-{refpage}-memory-02985]] If pname:memory was allocated by a memory import operation, that is not slink:VkImportAndroidHardwareBufferInfoANDROID with a non-`NULL` pname:buffer value, the external handle type of the imported memory must: also have been set in slink:VkExternalMemoryBufferCreateInfo::pname:handleTypes when pname:buffer was created * [[VUID-{refpage}-memory-02986]] If pname:memory was allocated with the slink:VkImportAndroidHardwareBufferInfoANDROID memory import operation with a non-`NULL` pname:buffer value, ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID must: also have been set in slink:VkExternalMemoryBufferCreateInfo::pname:handleTypes when pname:buffer was created endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_VERSION_1_1,VK_KHR_external_memory[] ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[] * [[VUID-{refpage}-bufferDeviceAddress-03339]] If the slink:VkPhysicalDeviceBufferDeviceAddressFeatures::pname:bufferDeviceAddress feature is enabled and pname:buffer was created with the ename:VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT bit set, pname:memory must: have been allocated with the ename:VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT bit set endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[] ifdef::VK_FUCHSIA_buffer_collection[] * [[VUID-{refpage}-buffer-06408]] If pname:buffer was created with slink:VkBufferCollectionBufferCreateInfoFUCHSIA chained to slink:VkBufferCreateInfo::pname:pNext, pname:memory must: be allocated with a slink:VkImportMemoryBufferCollectionFUCHSIA chained to slink:VkMemoryAllocateInfo::pname:pNext endif::VK_FUCHSIA_buffer_collection[] // Common Valid Usage