压缩图像格式

Vulkan 使用的压缩纹理格式在 Khronos 数据格式规范 版本 1.3 的特定章节中进行了描述。

除非另有说明,否则这些压缩格式中编码的量将被视为归一化的无符号值。

那些被列为 sRGB 编码的格式,其内存中的 RGB 分量以非线性方式编码为 R'G'B';任何 alpha 分量都保持不变。作为过滤的一部分,非线性 R'G'B' 值将转换为线性 RGB 分量;任何 alpha 分量都保持不变。线性和非线性编码之间的转换按照 Khronos 数据格式规范的“KHR_DF_TRANSFER_SRGB”部分中的描述执行。

块压缩图像格式

BC1、BC2 和 BC3 格式在 Khronos 数据格式规范的“S3TC 压缩纹理图像格式”章节中描述。BC4 和 BC5 在“RGTC 压缩纹理图像格式”章节中描述。BC6H 和 BC7 在“BPTC 压缩纹理图像格式”章节中描述。

表 1. Vulkan BC 格式到描述的映射
VkFormat Khronos 数据格式规范 描述

“S3TC 压缩纹理图像格式”章节中描述的格式

VK_FORMAT_BC1_RGB_UNORM_BLOCK

无 alpha 的 BC1

VK_FORMAT_BC1_RGB_SRGB_BLOCK

无 alpha 的 BC1,sRGB 编码

VK_FORMAT_BC1_RGBA_UNORM_BLOCK

带 alpha 的 BC1

VK_FORMAT_BC1_RGBA_SRGB_BLOCK

带 alpha 的 BC1,sRGB 编码

VK_FORMAT_BC2_UNORM_BLOCK

BC2

VK_FORMAT_BC2_SRGB_BLOCK

BC2,sRGB 编码

VK_FORMAT_BC3_UNORM_BLOCK

BC3

VK_FORMAT_BC3_SRGB_BLOCK

BC3,sRGB 编码

“RGTC 压缩纹理图像格式”章节中描述的格式

VK_FORMAT_BC4_UNORM_BLOCK

BC4 无符号

VK_FORMAT_BC4_SNORM_BLOCK

BC4 有符号

VK_FORMAT_BC5_UNORM_BLOCK

BC5 无符号

VK_FORMAT_BC5_SNORM_BLOCK

BC5 有符号

“BPTC 压缩纹理图像格式”章节中描述的格式

VK_FORMAT_BC6H_UFLOAT_BLOCK

BC6H(无符号版本)

VK_FORMAT_BC6H_SFLOAT_BLOCK

BC6H(有符号版本)

VK_FORMAT_BC7_UNORM_BLOCK

BC7

VK_FORMAT_BC7_SRGB_BLOCK

BC7,sRGB 编码

ETC 压缩图像格式

以下格式在 Khronos 数据格式规范的“ETC2 压缩纹理图像格式”章节中描述。

表 2. Vulkan ETC 格式到描述的映射
VkFormat Khronos 数据格式规范 描述

VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK

RGB ETC2

VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK

带 sRGB 编码的 RGB ETC2

VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK

带穿通 alpha 的 RGB ETC2

VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK

带穿通 alpha 和 sRGB 的 RGB ETC2

VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK

RGBA ETC2

VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK

带 sRGB 编码的 RGBA ETC2

VK_FORMAT_EAC_R11_UNORM_BLOCK

无符号 R11 EAC

VK_FORMAT_EAC_R11_SNORM_BLOCK

有符号 R11 EAC

VK_FORMAT_EAC_R11G11_UNORM_BLOCK

无符号 RG11 EAC

VK_FORMAT_EAC_R11G11_SNORM_BLOCK

有符号 RG11 EAC

ASTC 压缩图像格式

ASTC 格式在 Khronos 数据格式规范的“ASTC 压缩纹理图像格式”章节中描述。

表 3. Vulkan ASTC 格式到描述的映射
VkFormat 压缩纹素块尺寸 请求的模式

VK_FORMAT_ASTC_4x4_UNORM_BLOCK

4 × 4

线性 LDR

VK_FORMAT_ASTC_4x4_SRGB_BLOCK

4 × 4

sRGB

VK_FORMAT_ASTC_5x4_UNORM_BLOCK

5 × 4

线性 LDR

VK_FORMAT_ASTC_5x4_SRGB_BLOCK

5 × 4

sRGB

VK_FORMAT_ASTC_5x5_UNORM_BLOCK

5 × 5

线性 LDR

VK_FORMAT_ASTC_5x5_SRGB_BLOCK

5 × 5

sRGB

VK_FORMAT_ASTC_6x5_UNORM_BLOCK

6 × 5

线性 LDR

VK_FORMAT_ASTC_6x5_SRGB_BLOCK

6 × 5

sRGB

VK_FORMAT_ASTC_6x6_UNORM_BLOCK

6 × 6

线性 LDR

VK_FORMAT_ASTC_6x6_SRGB_BLOCK

6 × 6

sRGB

VK_FORMAT_ASTC_8x5_UNORM_BLOCK

8 × 5

线性 LDR

VK_FORMAT_ASTC_8x5_SRGB_BLOCK

8 × 5

sRGB

VK_FORMAT_ASTC_8x6_UNORM_BLOCK

8 × 6

线性 LDR

VK_FORMAT_ASTC_8x6_SRGB_BLOCK

8 × 6

sRGB

VK_FORMAT_ASTC_8x8_UNORM_BLOCK

8 × 8

线性 LDR

VK_FORMAT_ASTC_8x8_SRGB_BLOCK

8 × 8

sRGB

VK_FORMAT_ASTC_10x5_UNORM_BLOCK

10 × 5

线性 LDR

VK_FORMAT_ASTC_10x5_SRGB_BLOCK

10 × 5

sRGB

VK_FORMAT_ASTC_10x6_UNORM_BLOCK

10 × 6

线性 LDR

VK_FORMAT_ASTC_10x6_SRGB_BLOCK

10 × 6

sRGB

VK_FORMAT_ASTC_10x8_UNORM_BLOCK

10 × 8

线性 LDR

VK_FORMAT_ASTC_10x8_SRGB_BLOCK

10 × 8

sRGB

VK_FORMAT_ASTC_10x10_UNORM_BLOCK

10 × 10

线性 LDR

VK_FORMAT_ASTC_10x10_SRGB_BLOCK

10 × 10

sRGB

VK_FORMAT_ASTC_12x10_UNORM_BLOCK

12 × 10

线性 LDR

VK_FORMAT_ASTC_12x10_SRGB_BLOCK

12 × 10

sRGB

VK_FORMAT_ASTC_12x12_UNORM_BLOCK

12 × 12

线性 LDR

VK_FORMAT_ASTC_12x12_SRGB_BLOCK

12 × 12

sRGB

VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK

4 × 4

HDR

VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK

5 × 4

HDR

VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK

5 × 5

HDR

VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK

6 × 5

HDR

VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK

6 × 6

HDR

VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK

8 × 5

HDR

VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK

8 × 6

HDR

VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK

8 × 8

HDR

VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK

10 × 5

HDR

VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK

10 × 6

HDR

VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK

10 × 8

HDR

VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK

10 × 10

HDR

VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK

12 × 10

HDR

VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK

12 × 12

HDR

包含 HDR 块编码的 ASTC 纹理 应该 使用 ASTC SFLOAT 纹理格式传递给 API。

如果实现仅支持 ASTC LDR 配置文件,则使用 LDR UNORM 格式传递的纹理中的 HDR 块将返回相应的 ASTC 错误颜色,但如果实现支持 HDR 解码,则可能会导致错误颜色或解压缩的 HDR 颜色。

ASTC 解码模式

如果启用了 VK_EXT_astc_decode_mode 扩展,则解码模式的确定方式如下:

表 4. Vulkan ASTC 解码格式到 ASTC 解码模式的映射
VkFormat 解码模式

VK_FORMAT_R16G16B16A16_SFLOAT

decode_float16

VK_FORMAT_R8G8B8A8_UNORM

decode_unorm8

VK_FORMAT_E5B9G9R9_UFLOAT_PACK32

decode_rgb9e5

否则,ASTC 解码模式为 decode_float16。

请注意,除非解码模式为 decode_unorm8,否则在请求线性 LDR 模式时,实现**可能**会使用 HDR 模式。

PVRTC 压缩图像格式

PVRTC 格式在《Khronos 数据格式规范》的“PVRTC 压缩纹理图像格式”章节中进行了描述。

表 5. Vulkan PVRTC 格式到描述的映射
VkFormat 压缩纹素块尺寸 sRGB 编码

VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG

8 × 4

VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG

4 × 4

VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG

8 × 4

VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG

4 × 4

VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG

8 × 4

VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG

4 × 4

VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG

8 × 4

VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG

4 × 4