18.6. Resolving Multisample Images

To resolve a multisample image to a non-multisample image, call:

void vkCmdResolveImage(
VkCommandBuffer                             commandBuffer,
VkImage                                     srcImage,
VkImageLayout                               srcImageLayout,
VkImage                                     dstImage,
VkImageLayout                               dstImageLayout,
uint32_t                                    regionCount,
const VkImageResolve*                       pRegions);

• commandBuffer is the command buffer into which the command will be recorded.
• srcImage is the source image.
• srcImageLayout is the layout of the source image subresources for the resolve.
• dstImage is the destination image.
• dstImageLayout is the layout of the destination image subresources for the resolve.
• regionCount is the number of regions to resolve.
• pRegions is a pointer to an array of VkImageResolve structures specifying the regions to resolve.

During the resolve the samples corresponding to each pixel location in the source are converted to a single sample before being written to the destination. If the source formats are floating-point or normalized types, the sample values for each pixel are resolved in an implementation-dependent manner. If the source formats are integer types, a single sample’s value is selected for each pixel.

srcOffset and dstOffset select the initial x, y, and z offsets in texels of the sub-regions of the source and destination image data. extent is the size in texels of the source image to resolve in width, height and depth. 1D images use only x and width. 2D images use x, y, width and height. 3D images use x, y, z, width, height and depth.

Resolves are done layer by layer starting with baseArrayLayer member of srcSubresource for the source and dstSubresource for the destination. layerCount layers are resolved to the destination image.

The VkImageResolve structure is defined as:

typedef struct VkImageResolve {
VkImageSubresourceLayers    srcSubresource;
VkOffset3D                  srcOffset;
VkImageSubresourceLayers    dstSubresource;
VkOffset3D                  dstOffset;
VkExtent3D                  extent;
} VkImageResolve;

• srcSubresource and dstSubresource are VkImageSubresourceLayers structures specifying the image subresources of the images used for the source and destination image data, respectively. Resolve of depth/stencil images is not supported.
• srcOffset and dstOffset select the initial x, y, and z offsets in texels of the sub-regions of the source and destination image data.
• extent is the size in texels of the source image to resolve in width, height and depth. 1D images use only x and width. 2D images use x, y, width and height. 3D images use x, y, z, width, height and depth.