# VkBindImageMemoryInfo(3) Manual Page

## Name

VkBindImageMemoryInfo - Structure specifying how to bind an image to memory

## C Specification

`VkBindImageMemoryInfo` contains members corresponding to the parameters of vkBindImageMemory.

The `VkBindImageMemoryInfo` structure is defined as:

    typedef struct VkBindImageMemoryInfo {
        VkStructureType    sType;
        const void*        pNext;
        VkImage            image;
        VkDeviceMemory     memory;
        VkDeviceSize       memoryOffset;
    } VkBindImageMemoryInfo;

or the equivalent

    typedef VkBindImageMemoryInfo VkBindImageMemoryInfoKHR;

## Members

- `sType` is the type of this structure.

- `pNext` is `NULL` or a pointer to an extension-specific structure.

- `image` is the image to be attached to memory.

- `memory` is a VkDeviceMemory object describing the device memory to attach.

- `memoryOffset` is the start offset of the region of `memory` which is to be bound to the image. The number of bytes returned in the `VkMemoryRequirements`::`size` member in `memory`, starting from `memoryOffset` bytes, will be bound to the specified image.

## Description

Valid Usage

- `image` must not already be backed by a memory object

- `image` must not have been created with any sparse memory binding flags

- `memoryOffset` must be less than the size of `memory`

- If the `pNext` chain does not include a VkBindImagePlaneMemoryInfo structure, `memory` must have been allocated using one of the memory types allowed in the `memoryTypeBits` member of the VkMemoryRequirements structure returned from a call to vkGetImageMemoryRequirements2 with `image`

- If the `pNext` chain does not include a VkBindImagePlaneMemoryInfo structure, `memoryOffset` must be an integer multiple of the `alignment` member of the VkMemoryRequirements structure returned from a call to vkGetImageMemoryRequirements2 with `image`

- If the `pNext` chain does not include a VkBindImagePlaneMemoryInfo structure, the difference of the size of `memory` and `memoryOffset` must be greater than or equal to the `size` member of the VkMemoryRequirements structure returned from a call to vkGetImageMemoryRequirements2 with the same `image`

- If the `pNext` chain includes a VkBindImagePlaneMemoryInfo structure, `image` must have been created with the `VK_IMAGE_CREATE_DISJOINT_BIT` bit set.

- If the `pNext` chain includes a VkBindImagePlaneMemoryInfo structure, `memory` must have been allocated using one of the memory types allowed in the `memoryTypeBits` member of the VkMemoryRequirements structure returned from a call to vkGetImageMemoryRequirements2 with `image` and where VkBindImagePlaneMemoryInfo::`planeAspect` corresponds to the VkImagePlaneMemoryRequirementsInfo::`planeAspect` in the VkImageMemoryRequirementsInfo2 structure’s `pNext` chain

- If the `pNext` chain includes a VkBindImagePlaneMemoryInfo structure, `memoryOffset` must be an integer multiple of the `alignment` member of the VkMemoryRequirements structure returned from a call to vkGetImageMemoryRequirements2 with `image` and where VkBindImagePlaneMemoryInfo::`planeAspect` corresponds to the VkImagePlaneMemoryRequirementsInfo::`planeAspect` in the VkImageMemoryRequirementsInfo2 structure’s `pNext` chain

- If the `pNext` chain includes a VkBindImagePlaneMemoryInfo structure, the difference of the size of `memory` and `memoryOffset` must be greater than or equal to the `size` member of the VkMemoryRequirements structure returned from a call to vkGetImageMemoryRequirements2 with the same `image` and where VkBindImagePlaneMemoryInfo::`planeAspect` corresponds to the VkImagePlaneMemoryRequirementsInfo::`planeAspect` in the VkImageMemoryRequirementsInfo2 structure’s `pNext` chain

- If `image` requires a dedicated allocation (as reported by vkGetImageMemoryRequirements2 in VkMemoryDedicatedRequirements::requiresDedicatedAllocation for `image`), `memory` must have been created with VkMemoryDedicatedAllocateInfo::`image` equal to `image` and `memoryOffset` must be zero

- If the dedicated allocation image aliasing feature is not enabled, and the `VkMemoryAllocateInfo` provided when `memory` was allocated included a VkMemoryDedicatedAllocateInfo structure in its `pNext` chain, and VkMemoryDedicatedAllocateInfo::`image` was not VK_NULL_HANDLE, then `image` must equal VkMemoryDedicatedAllocateInfo::`image` and `memoryOffset` must be zero.

- If the dedicated allocation image aliasing feature is enabled, and the `VkMemoryAllocateInfo` provided when `memory` was allocated included a VkMemoryDedicatedAllocateInfo structure in its `pNext` chain, and VkMemoryDedicatedAllocateInfo::`image` was not VK_NULL_HANDLE, then `memoryOffset` must be zero, and `image` must be either equal to VkMemoryDedicatedAllocateInfo::`image` or an image that was created using the same parameters in `VkImageCreateInfo`, with the exception that `extent` and `arrayLayers` may differ subject to the following restrictions: every dimension in the `extent` parameter of the image being bound must be equal to or smaller than the original image for which the allocation was created; and the `arrayLayers` parameter of the image being bound must be equal to or smaller than the original image for which the allocation was created.

- If `image` was created with VkDedicatedAllocationImageCreateInfoNV::`dedicatedAllocation` equal to `VK_TRUE`, `memory` must have been created with VkDedicatedAllocationMemoryAllocateInfoNV::`image` equal to `image` and `memoryOffset` must be zero

- If the `pNext` chain includes a VkBindImageMemoryDeviceGroupInfo structure, all instances of `memory` specified by VkBindImageMemoryDeviceGroupInfo::`pDeviceIndices` must have been allocated

- If the `pNext` chain includes a VkBindImageMemoryDeviceGroupInfo structure, and VkBindImageMemoryDeviceGroupInfo::`splitInstanceBindRegionCount` is not zero, then `image` must have been created with the `VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT` bit set

- If the `pNext` chain includes a VkBindImageMemoryDeviceGroupInfo structure, all elements of VkBindImageMemoryDeviceGroupInfo::`pSplitInstanceBindRegions` must be valid rectangles contained within the dimensions of `image`

- If the `pNext` chain includes a VkBindImageMemoryDeviceGroupInfo structure, the union of the areas of all elements of VkBindImageMemoryDeviceGroupInfo::`pSplitInstanceBindRegions` that correspond to the same instance of `image` must cover the entire image.

- If `image` was created with a valid swapchain handle in VkImageSwapchainCreateInfoKHR::`swapchain`, then the `pNext` chain must include a VkBindImageMemorySwapchainInfoKHR structure containing the same swapchain handle.

- If the `pNext` chain includes a VkBindImageMemorySwapchainInfoKHR structure, `memory` must be VK_NULL_HANDLE

- If the `pNext` chain does not include a VkBindImageMemorySwapchainInfoKHR structure, `memory` must be a valid VkDeviceMemory handle

- If the value of VkExportMemoryAllocateInfo::`handleTypes` used to allocate `memory` is not `0`, it must include at least one of the handles set in VkExternalMemoryImageCreateInfo::`handleTypes` when `image` was created

- If `memory` was created by a memory import operation, the external handle type of the imported memory must also have been set in VkExternalMemoryImageCreateInfo::`handleTypes` when `image` was created

Valid Usage (Implicit)

- `sType` must be `VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO`

- Each `pNext` member of any structure (including this one) in the `pNext` chain must be either `NULL` or a pointer to a valid instance of VkBindImageMemoryDeviceGroupInfo, VkBindImageMemorySwapchainInfoKHR, or VkBindImagePlaneMemoryInfo

- The `sType` value of each struct in the `pNext` chain must be unique

- `image` must be a valid VkImage handle

- Both of `image`, and `memory` that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice

## See Also

VkDeviceMemory, `VkDeviceSize`, VkImage, VkStructureType, vkBindImageMemory2, vkBindImageMemory2KHR

## Document Notes

For more information, see the Vulkan Specification

This page is extracted from the Vulkan Specification. Fixes and changes should be made to the Specification, not directly.

## Copyright

Copyright (c) 2014-2020 Khronos Group. This work is licensed under a Creative Commons Attribution 4.0 International License.