Function Prototype

vkCmdClearAttachments

Clear regions within bound framebuffer attachments
primary / secondary
inside
graphics
action

To clear one or more regions of color and depth/stencil attachments inside a render pass instance, call:

void vkCmdClearAttachments(
    VkCommandBuffer commandBuffer,
    uint32_t attachmentCount,
    const VkClearAttachment* pAttachments,
    uint32_t rectCount,
    const VkClearRect* pRects);
  • commandBuffer is the command buffer into which the command will be recorded.
  • attachmentCount is the number of entries in the pAttachments array.
  • pAttachments is a pointer to an array of VkClearAttachment structures defining the attachments to clear and the clear values to use.
  • rectCount is the number of entries in the pRects array.
  • pRects is a pointer to an array of VkClearRect structures defining regions within each selected attachment to clear.

If the render pass has a fragment density map attachment, clears follow the operations of fragment density maps as if each clear region was a primitive which generates fragments. The clear color is applied to all pixels inside each fragment’s area regardless if the pixels lie outside of the clear region. Clears may have a different set of supported fragment areas than draws.

Unlike other clear commands, vkCmdClearAttachments is not a transfer command. It performs its operations in rasterization order. For color attachments, the operations are executed as color attachment writes, by the VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT stage. For depth/stencil attachments, the operations are executed as depth writes and stencil writes by the VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT and VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT stages.

vkCmdClearAttachments is not affected by the bound pipeline state.

It is generally preferable to clear attachments by using the VK_ATTACHMENT_LOAD_OP_CLEAR load operation at the start of rendering, as it is more efficient on some implementations.

If any attachment’s aspectMask to be cleared is not backed by an image view, the clear has no effect on that aspect.

If an attachment being cleared refers to an image view created with an aspectMask equal to one of VK_IMAGE_ASPECT_PLANE_0_BIT, VK_IMAGE_ASPECT_PLANE_1_BIT or VK_IMAGE_ASPECT_PLANE_2_BIT, it is considered to be VK_IMAGE_ASPECT_COLOR_BIT for purposes of this command, and must be cleared with the VK_IMAGE_ASPECT_COLOR_BIT aspect as specified by image view creation.

Valid Usage

VUID-vkCmdClearAttachments-aspectMask-07884

If the current render pass instance does not use dynamic rendering, and the aspectMask member of any element of pAttachments contains VK_IMAGE_ASPECT_DEPTH_BIT, the current subpass instance’s depth-stencil attachment must be either VK_ATTACHMENT_UNUSED or the attachment format must contain a depth component

VUID-vkCmdClearAttachments-aspectMask-07885

If the current render pass instance does not use dynamic rendering, and the aspectMask member of any element of pAttachments contains VK_IMAGE_ASPECT_STENCIL_BIT, the current subpass instance’s depth-stencil attachment must be either VK_ATTACHMENT_UNUSED or the attachment format must contain a stencil component

VUID-vkCmdClearAttachments-aspectMask-07271

If the aspectMask member of any element of pAttachments contains VK_IMAGE_ASPECT_COLOR_BIT, the colorAttachmentmust be a valid color attachment index in the current render pass instance

VUID-vkCmdClearAttachments-rect-02682

The rect member of each element of pRects must have an extent.width greater than 0

VUID-vkCmdClearAttachments-rect-02683

The rect member of each element of pRects must have an extent.height greater than 0

VUID-vkCmdClearAttachments-pRects-00016

The rectangular region specified by each element of pRects must be contained within the render area of the current render pass instance

VUID-vkCmdClearAttachments-pRects-06937

The layers specified by each element of pRects must be contained within every attachment that pAttachments refers to, i.e. for each element of pRects, VkClearRect::baseArrayLayer + VkClearRect::layerCount must be less than or equal to the number of layers rendered to in the current render pass instance

VUID-vkCmdClearAttachments-layerCount-01934

The layerCount member of each element of pRects must not be 0

VUID-vkCmdClearAttachments-baseArrayLayer-00018

If the render pass instance this is recorded in uses multiview, then baseArrayLayer must be zero and layerCount must be one

VUID-vkCmdClearAttachments-colorAttachment-09503

The colorAttachment member of each element of pAttachmentsmust not identify a color attachment that is currently mapped to VK_ATTACHMENT_UNUSED in commandBuffer via VkRenderingAttachmentLocationInfoKHR

VUID-vkCmdClearAttachments-aspectMask-09298

If the subpass this is recorded in performs an external format resolve, the aspectMask member of any element of pAttachments must not include VK_IMAGE_ASPECT_PLANEiBIT for any index i

VUID-vkCmdClearAttachments-None-09679

If the attachment format has components other than R and G, it must not have a 64-bit component width

Valid Usage (Implicit)

VUID-vkCmdClearAttachments-pAttachments-parameter

pAttachments must be a valid pointer to an array of attachmentCount valid VkClearAttachment structures

VUID-vkCmdClearAttachments-pRects-parameter

pRects must be a valid pointer to an array of rectCount VkClearRect structures

VUID-vkCmdClearAttachments-commandBuffer-cmdpool

The VkCommandPool that commandBuffer was allocated from must support graphics operations

VUID-vkCmdClearAttachments-renderpass

This command must only be called inside of a render pass instance

VUID-vkCmdClearAttachments-videocoding

This command must only be called outside of a video coding scope

VUID-vkCmdClearAttachments-attachmentCount-arraylength

attachmentCount must be greater than 0

VUID-vkCmdClearAttachments-rectCount-arraylength

rectCount must be greater than 0

Host Synchronization

  • Host access to commandBuffer must be externally synchronized
  • Host access to the VkCommandPool that commandBuffer was allocated from must be externally synchronized ::