Function Prototype

vkCmdDecompressMemoryIndirectCountNV

Indirect decompress data between memory regions
primary / secondary
outside
graphics / compute
action

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

void vkCmdDecompressMemoryIndirectCountNV(
    VkCommandBuffer commandBuffer,
    VkDeviceAddress indirectCommandsAddress,
    VkDeviceAddress indirectCommandsCountAddress,
    uint32_t stride);
  • commandBuffer is the command buffer into which the command will be recorded.
  • indirectCommandsAddress is the device address containing decompression parameters laid out as an array of VkDecompressMemoryRegionNV structures.
  • indirectCommandsCountAddress is the device address containing the decompression count.
  • 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 decompression method.

Valid Usage

VUID-vkCmdDecompressMemoryIndirectCountNV-indirectCommandsAddress-07693

If indirectCommandsAddress comes from a non-sparse buffer then it must be bound completely and contiguously to a single VkDeviceMemory object

VUID-vkCmdDecompressMemoryIndirectCountNV-indirectCommandsAddress-07694

The VkBuffer that indirectCommandsAddress comes from must have been created with the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set

VUID-vkCmdDecompressMemoryIndirectCountNV-indirectCommandsCountAddress-07696

If indirectCommandsCountAddress comes from a non-sparse buffer then it must be bound completely and contiguously to a single VkDeviceMemory object

VUID-vkCmdDecompressMemoryIndirectCountNV-indirectCommandsCountAddress-07697

The VkBuffer that indirectCommandsCountAddress comes from must have been created with the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set

VUID-vkCmdDecompressMemoryIndirectCountNV-indirectCommandsCountAddress-07698

indirectCommandsCountAddress must be a multiple of 4

VUID-vkCmdDecompressMemoryIndirectCountNV-indirectCommandsCountAddress-07699

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

VUID-vkCmdDecompressMemoryIndirectCountNV-stride-07700

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

VUID-vkCmdDecompressMemoryIndirectCountNV-indirectCommandsCountAddress-07701

If the count stored in indirectCommandsCountAddress is equal to 1, (offset + sizeof(VkDecompressMemoryRegionNV)) must be less than or equal to the size of the VkBuffer that indirectCommandsAddress comes from

VUID-vkCmdDecompressMemoryIndirectCountNV-indirectCommandsCountAddress-07702

If the count stored in indirectCommandsCountAddress is greater than 1, indirectCommandsAddress + sizeof(VkDecompressMemoryRegionNV) + (stride × (count stored in countBuffer - 1)) must be less than or equal to the last valid address in the VkBuffer that indirectCommandsAddress was created from

Valid Usage (Implicit)

VUID-vkCmdDecompressMemoryIndirectCountNV-commandBuffer-cmdpool

The VkCommandPool that commandBuffer was allocated from must support graphics, or compute operations

VUID-vkCmdDecompressMemoryIndirectCountNV-renderpass

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

VUID-vkCmdDecompressMemoryIndirectCountNV-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 ::