内存解压缩
要解压缩一个或多个内存区域之间的数据,请调用
// 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
的掩码。