Function Prototype

vkCmdDecompressMemoryIndirectCountEXT

Indirect decompress data between memory regions

To decompress data between one or more memory regions by specifying decompression parameters indirectly in a buffer, call:

void vkCmdDecompressMemoryIndirectCountEXT(
    VkCommandBuffer commandBuffer,
    VkMemoryDecompressionMethodFlagsEXT decompressionMethod,
    VkDeviceAddress indirectCommandsAddress,
    VkDeviceAddress indirectCommandsCountAddress,
    uint32_t maxDecompressionCount,
    uint32_t stride);
  • commandBuffer is the command buffer into which the command will be recorded.
  • decompressionMethod is a bitmask of VkMemoryDecompressionMethodFlagBitsEXT with a single bit set specifying the method used to decompress data.
  • indirectCommandsAddress is the device address containing decompression parameters laid out as an array of VkDecompressMemoryRegionEXT structures.
  • indirectCommandsCountAddress is the device address containing a 32-bit integer value specifying the decompression count.
  • maxDecompressionCount is maximum number of decompressions that will be executed. The actual number of executed decompressions is the minimum of the count specified in indirectCommandsCountAddress and maxDecompressionCount.
  • stride is the byte stride between successive sets of decompression parameters located starting from indirectCommandsAddress.

Each region specified in indirectCommandsAddress is decompressed from the source to destination region based on the specified decompressionMethod.

Valid Usage

VUID-vkCmdDecompressMemoryIndirectCountEXT-indirectCommandsAddress-07694

indirectCommandsAddress must be a device address allocated to the application from a buffer created with the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT usage flag set

VUID-vkCmdDecompressMemoryIndirectCountEXT-indirectCommandsCountAddress-07697

indirectCommandsCountAddress must be a device address allocated to the application from a buffer created with the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT usage flag set

VUID-vkCmdDecompressMemoryIndirectCountEXT-indirectCommandsCountAddress-07698

indirectCommandsCountAddress must be a multiple of 4

VUID-vkCmdDecompressMemoryIndirectCountEXT-indirectCommandsCountAddress-07699

The count stored in indirectCommandsCountAddress must be less than or equal to VkPhysicalDeviceMemoryDecompressionPropertiesEXT::maxDecompressionIndirectCount

VUID-vkCmdDecompressMemoryIndirectCountEXT-indirectCommandsAddress-11794

All device addresses between indirectCommandsAddress and indirectCommandsAddress + (stride × (count stored in indirectCommandsCountAddress)) - 1 must be in the buffer device address range of the same buffer

VUID-vkCmdDecompressMemoryIndirectCountEXT-decompressionMethod-07690

The decompressionMethod must have a single bit set

VUID-vkCmdDecompressMemoryIndirectCountEXT-stride-11767

stride must be a multiple of 4 and must be greater than or equal to sizeof(VkDecompressMemoryRegionEXT)

VUID-vkCmdDecompressMemoryIndirectCountEXT-maxDecompressionCount-11768

maxDecompressionCount must be less than or equal to VkPhysicalDeviceMemoryDecompressionPropertiesEXT::maxDecompressionIndirectCount

VUID-vkCmdDecompressMemoryIndirectCountEXT-decompressionMethod-11769

If decompressionMethod is VK_MEMORY_DECOMPRESSION_METHOD_GDEFLATE_1_0_BIT_EXT, then all values in VkDecompressMemoryRegionEXT::decompressedSizemust be less than or equal to 65536 bytes

VUID-vkCmdDecompressMemoryIndirectCountEXT-decompressionMethod-11810

decompressionMethod must be a valid bit specified in VkPhysicalDeviceMemoryDecompressionPropertiesEXT::decompressionMethods

Valid Usage (Implicit)

VUID-vkCmdDecompressMemoryIndirectCountEXT-commandBuffer-cmdpool

The VkCommandPool that commandBuffer was allocated from must support VK_QUEUE_COMPUTE_BIT, or VK_QUEUE_GRAPHICS_BIT operations

VUID-vkCmdDecompressMemoryIndirectCountEXT-renderpass

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

VUID-vkCmdDecompressMemoryIndirectCountEXT-suspended

This command must not be called between suspended render pass instances

VUID-vkCmdDecompressMemoryIndirectCountEXT-videocoding

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

Host Synchronization

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