内存解压缩
要解压缩一个或多个内存区域之间的数据,请调用
// Provided by VK_NV_memory_decompression
void vkCmdDecompressMemoryNV(
VkCommandBuffer commandBuffer,
uint32_t decompressRegionCount,
const VkDecompressMemoryRegionNV* pDecompressMemoryRegions);
-
commandBuffer是命令将被记录到的命令缓冲区。 -
decompressRegionCount是要解压缩的内存区域的数量。 -
pDecompressMemoryRegions是指向decompressRegionCount个 VkDecompressMemoryRegionNV 结构的数组的指针,指定解压缩参数。
pDecompressMemoryRegions 中指定的每个区域都将基于指定的解压缩方法从源区域解压缩到目标区域。
VkDecompressMemoryRegionNV 结构定义为
// Provided by VK_NV_memory_decompression
typedef struct VkDecompressMemoryRegionNV {
VkDeviceAddress srcAddress;
VkDeviceAddress dstAddress;
VkDeviceSize compressedSize;
VkDeviceSize decompressedSize;
VkMemoryDecompressionMethodFlagsNV decompressionMethod;
} VkDecompressMemoryRegionNV;
-
srcAddress是存储压缩数据的地址。 -
dstAddress是将写入解压缩数据的目标地址。 -
compressedSize是压缩数据的大小(以字节为单位)。 -
decompressedSize是解压缩数据的大小(以字节为单位)。 -
decompressionMethod是VkMemoryDecompressionMethodFlagBitsNV的位掩码,其中设置了单个位,指定用于解压缩数据的方法。
要通过在缓冲区中间接指定解压缩参数来解压缩一个或多个内存区域之间的数据,请调用:
// Provided by VK_NV_memory_decompression
void vkCmdDecompressMemoryIndirectCountNV(
VkCommandBuffer commandBuffer,
VkDeviceAddress indirectCommandsAddress,
VkDeviceAddress indirectCommandsCountAddress,
uint32_t stride);
-
commandBuffer是命令将被记录到的命令缓冲区。 -
indirectCommandsAddress是包含解压缩参数的设备地址,这些参数布局为 VkDecompressMemoryRegionNV 结构的数组。 -
indirectCommandsCountAddress是包含解压缩计数的设备地址。 -
stride是从indirectCommandsAddress开始的连续解压缩参数集之间的字节步幅。
indirectCommandsAddress 中指定的每个区域都根据指定的解压缩方法从源区域解压缩到目标区域。
VkDecompressMemoryRegionNV::decompressionMethod 中可以设置的位指定要选择的解压缩方法,或者在 VkPhysicalDeviceMemoryDecompressionPropertiesNV::decompressionMethods 中返回的位指定可用的解压缩方法为:
// Provided by VK_NV_memory_decompression
// Flag bits for VkMemoryDecompressionMethodFlagBitsNV
typedef VkFlags64 VkMemoryDecompressionMethodFlagBitsNV;
static const VkMemoryDecompressionMethodFlagBitsNV VK_MEMORY_DECOMPRESSION_METHOD_GDEFLATE_1_0_BIT_NV = 0x00000001ULL;
-
VK_MEMORY_DECOMPRESSION_METHOD_GDEFLATE_1_0_BIT_NV指定使用 GDeflate 1.0 算法来解压缩数据。
// Provided by VK_NV_memory_decompression
typedef VkFlags64 VkMemoryDecompressionMethodFlagsNV;
VkMemoryDecompressionMethodFlagsNV 是一种位掩码类型,用于指定一个或多个 VkMemoryDecompressionMethodFlagBitsNV 的掩码。