格式

支持的缓冲区和图像格式在不同实现中可能会有所不同。保证了最少的一组格式功能,但其他功能在使用前必须显式查询,以确保它们受实现支持。

可以使用 vkGetPhysicalDeviceFormatProperties 命令单独查询实现支持的格式集 (VkFormat) 的功能。

格式定义

以下图像格式可以传递给 Vulkan 命令,并且可能从 Vulkan 命令返回。存储每种格式所需的内存将在该格式中讨论,并在表示和纹素块大小部分以及兼容格式表中进行总结。

// Provided by VK_VERSION_1_0
typedef enum VkFormat {
    VK_FORMAT_UNDEFINED = 0,
    VK_FORMAT_R4G4_UNORM_PACK8 = 1,
    VK_FORMAT_R4G4B4A4_UNORM_PACK16 = 2,
    VK_FORMAT_B4G4R4A4_UNORM_PACK16 = 3,
    VK_FORMAT_R5G6B5_UNORM_PACK16 = 4,
    VK_FORMAT_B5G6R5_UNORM_PACK16 = 5,
    VK_FORMAT_R5G5B5A1_UNORM_PACK16 = 6,
    VK_FORMAT_B5G5R5A1_UNORM_PACK16 = 7,
    VK_FORMAT_A1R5G5B5_UNORM_PACK16 = 8,
    VK_FORMAT_R8_UNORM = 9,
    VK_FORMAT_R8_SNORM = 10,
    VK_FORMAT_R8_USCALED = 11,
    VK_FORMAT_R8_SSCALED = 12,
    VK_FORMAT_R8_UINT = 13,
    VK_FORMAT_R8_SINT = 14,
    VK_FORMAT_R8_SRGB = 15,
    VK_FORMAT_R8G8_UNORM = 16,
    VK_FORMAT_R8G8_SNORM = 17,
    VK_FORMAT_R8G8_USCALED = 18,
    VK_FORMAT_R8G8_SSCALED = 19,
    VK_FORMAT_R8G8_UINT = 20,
    VK_FORMAT_R8G8_SINT = 21,
    VK_FORMAT_R8G8_SRGB = 22,
    VK_FORMAT_R8G8B8_UNORM = 23,
    VK_FORMAT_R8G8B8_SNORM = 24,
    VK_FORMAT_R8G8B8_USCALED = 25,
    VK_FORMAT_R8G8B8_SSCALED = 26,
    VK_FORMAT_R8G8B8_UINT = 27,
    VK_FORMAT_R8G8B8_SINT = 28,
    VK_FORMAT_R8G8B8_SRGB = 29,
    VK_FORMAT_B8G8R8_UNORM = 30,
    VK_FORMAT_B8G8R8_SNORM = 31,
    VK_FORMAT_B8G8R8_USCALED = 32,
    VK_FORMAT_B8G8R8_SSCALED = 33,
    VK_FORMAT_B8G8R8_UINT = 34,
    VK_FORMAT_B8G8R8_SINT = 35,
    VK_FORMAT_B8G8R8_SRGB = 36,
    VK_FORMAT_R8G8B8A8_UNORM = 37,
    VK_FORMAT_R8G8B8A8_SNORM = 38,
    VK_FORMAT_R8G8B8A8_USCALED = 39,
    VK_FORMAT_R8G8B8A8_SSCALED = 40,
    VK_FORMAT_R8G8B8A8_UINT = 41,
    VK_FORMAT_R8G8B8A8_SINT = 42,
    VK_FORMAT_R8G8B8A8_SRGB = 43,
    VK_FORMAT_B8G8R8A8_UNORM = 44,
    VK_FORMAT_B8G8R8A8_SNORM = 45,
    VK_FORMAT_B8G8R8A8_USCALED = 46,
    VK_FORMAT_B8G8R8A8_SSCALED = 47,
    VK_FORMAT_B8G8R8A8_UINT = 48,
    VK_FORMAT_B8G8R8A8_SINT = 49,
    VK_FORMAT_B8G8R8A8_SRGB = 50,
    VK_FORMAT_A8B8G8R8_UNORM_PACK32 = 51,
    VK_FORMAT_A8B8G8R8_SNORM_PACK32 = 52,
    VK_FORMAT_A8B8G8R8_USCALED_PACK32 = 53,
    VK_FORMAT_A8B8G8R8_SSCALED_PACK32 = 54,
    VK_FORMAT_A8B8G8R8_UINT_PACK32 = 55,
    VK_FORMAT_A8B8G8R8_SINT_PACK32 = 56,
    VK_FORMAT_A8B8G8R8_SRGB_PACK32 = 57,
    VK_FORMAT_A2R10G10B10_UNORM_PACK32 = 58,
    VK_FORMAT_A2R10G10B10_SNORM_PACK32 = 59,
    VK_FORMAT_A2R10G10B10_USCALED_PACK32 = 60,
    VK_FORMAT_A2R10G10B10_SSCALED_PACK32 = 61,
    VK_FORMAT_A2R10G10B10_UINT_PACK32 = 62,
    VK_FORMAT_A2R10G10B10_SINT_PACK32 = 63,
    VK_FORMAT_A2B10G10R10_UNORM_PACK32 = 64,
    VK_FORMAT_A2B10G10R10_SNORM_PACK32 = 65,
    VK_FORMAT_A2B10G10R10_USCALED_PACK32 = 66,
    VK_FORMAT_A2B10G10R10_SSCALED_PACK32 = 67,
    VK_FORMAT_A2B10G10R10_UINT_PACK32 = 68,
    VK_FORMAT_A2B10G10R10_SINT_PACK32 = 69,
    VK_FORMAT_R16_UNORM = 70,
    VK_FORMAT_R16_SNORM = 71,
    VK_FORMAT_R16_USCALED = 72,
    VK_FORMAT_R16_SSCALED = 73,
    VK_FORMAT_R16_UINT = 74,
    VK_FORMAT_R16_SINT = 75,
    VK_FORMAT_R16_SFLOAT = 76,
    VK_FORMAT_R16G16_UNORM = 77,
    VK_FORMAT_R16G16_SNORM = 78,
    VK_FORMAT_R16G16_USCALED = 79,
    VK_FORMAT_R16G16_SSCALED = 80,
    VK_FORMAT_R16G16_UINT = 81,
    VK_FORMAT_R16G16_SINT = 82,
    VK_FORMAT_R16G16_SFLOAT = 83,
    VK_FORMAT_R16G16B16_UNORM = 84,
    VK_FORMAT_R16G16B16_SNORM = 85,
    VK_FORMAT_R16G16B16_USCALED = 86,
    VK_FORMAT_R16G16B16_SSCALED = 87,
    VK_FORMAT_R16G16B16_UINT = 88,
    VK_FORMAT_R16G16B16_SINT = 89,
    VK_FORMAT_R16G16B16_SFLOAT = 90,
    VK_FORMAT_R16G16B16A16_UNORM = 91,
    VK_FORMAT_R16G16B16A16_SNORM = 92,
    VK_FORMAT_R16G16B16A16_USCALED = 93,
    VK_FORMAT_R16G16B16A16_SSCALED = 94,
    VK_FORMAT_R16G16B16A16_UINT = 95,
    VK_FORMAT_R16G16B16A16_SINT = 96,
    VK_FORMAT_R16G16B16A16_SFLOAT = 97,
    VK_FORMAT_R32_UINT = 98,
    VK_FORMAT_R32_SINT = 99,
    VK_FORMAT_R32_SFLOAT = 100,
    VK_FORMAT_R32G32_UINT = 101,
    VK_FORMAT_R32G32_SINT = 102,
    VK_FORMAT_R32G32_SFLOAT = 103,
    VK_FORMAT_R32G32B32_UINT = 104,
    VK_FORMAT_R32G32B32_SINT = 105,
    VK_FORMAT_R32G32B32_SFLOAT = 106,
    VK_FORMAT_R32G32B32A32_UINT = 107,
    VK_FORMAT_R32G32B32A32_SINT = 108,
    VK_FORMAT_R32G32B32A32_SFLOAT = 109,
    VK_FORMAT_R64_UINT = 110,
    VK_FORMAT_R64_SINT = 111,
    VK_FORMAT_R64_SFLOAT = 112,
    VK_FORMAT_R64G64_UINT = 113,
    VK_FORMAT_R64G64_SINT = 114,
    VK_FORMAT_R64G64_SFLOAT = 115,
    VK_FORMAT_R64G64B64_UINT = 116,
    VK_FORMAT_R64G64B64_SINT = 117,
    VK_FORMAT_R64G64B64_SFLOAT = 118,
    VK_FORMAT_R64G64B64A64_UINT = 119,
    VK_FORMAT_R64G64B64A64_SINT = 120,
    VK_FORMAT_R64G64B64A64_SFLOAT = 121,
    VK_FORMAT_B10G11R11_UFLOAT_PACK32 = 122,
    VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 = 123,
    VK_FORMAT_D16_UNORM = 124,
    VK_FORMAT_X8_D24_UNORM_PACK32 = 125,
    VK_FORMAT_D32_SFLOAT = 126,
    VK_FORMAT_S8_UINT = 127,
    VK_FORMAT_D16_UNORM_S8_UINT = 128,
    VK_FORMAT_D24_UNORM_S8_UINT = 129,
    VK_FORMAT_D32_SFLOAT_S8_UINT = 130,
    VK_FORMAT_BC1_RGB_UNORM_BLOCK = 131,
    VK_FORMAT_BC1_RGB_SRGB_BLOCK = 132,
    VK_FORMAT_BC1_RGBA_UNORM_BLOCK = 133,
    VK_FORMAT_BC1_RGBA_SRGB_BLOCK = 134,
    VK_FORMAT_BC2_UNORM_BLOCK = 135,
    VK_FORMAT_BC2_SRGB_BLOCK = 136,
    VK_FORMAT_BC3_UNORM_BLOCK = 137,
    VK_FORMAT_BC3_SRGB_BLOCK = 138,
    VK_FORMAT_BC4_UNORM_BLOCK = 139,
    VK_FORMAT_BC4_SNORM_BLOCK = 140,
    VK_FORMAT_BC5_UNORM_BLOCK = 141,
    VK_FORMAT_BC5_SNORM_BLOCK = 142,
    VK_FORMAT_BC6H_UFLOAT_BLOCK = 143,
    VK_FORMAT_BC6H_SFLOAT_BLOCK = 144,
    VK_FORMAT_BC7_UNORM_BLOCK = 145,
    VK_FORMAT_BC7_SRGB_BLOCK = 146,
    VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = 147,
    VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = 148,
    VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = 149,
    VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = 150,
    VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = 151,
    VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = 152,
    VK_FORMAT_EAC_R11_UNORM_BLOCK = 153,
    VK_FORMAT_EAC_R11_SNORM_BLOCK = 154,
    VK_FORMAT_EAC_R11G11_UNORM_BLOCK = 155,
    VK_FORMAT_EAC_R11G11_SNORM_BLOCK = 156,
    VK_FORMAT_ASTC_4x4_UNORM_BLOCK = 157,
    VK_FORMAT_ASTC_4x4_SRGB_BLOCK = 158,
    VK_FORMAT_ASTC_5x4_UNORM_BLOCK = 159,
    VK_FORMAT_ASTC_5x4_SRGB_BLOCK = 160,
    VK_FORMAT_ASTC_5x5_UNORM_BLOCK = 161,
    VK_FORMAT_ASTC_5x5_SRGB_BLOCK = 162,
    VK_FORMAT_ASTC_6x5_UNORM_BLOCK = 163,
    VK_FORMAT_ASTC_6x5_SRGB_BLOCK = 164,
    VK_FORMAT_ASTC_6x6_UNORM_BLOCK = 165,
    VK_FORMAT_ASTC_6x6_SRGB_BLOCK = 166,
    VK_FORMAT_ASTC_8x5_UNORM_BLOCK = 167,
    VK_FORMAT_ASTC_8x5_SRGB_BLOCK = 168,
    VK_FORMAT_ASTC_8x6_UNORM_BLOCK = 169,
    VK_FORMAT_ASTC_8x6_SRGB_BLOCK = 170,
    VK_FORMAT_ASTC_8x8_UNORM_BLOCK = 171,
    VK_FORMAT_ASTC_8x8_SRGB_BLOCK = 172,
    VK_FORMAT_ASTC_10x5_UNORM_BLOCK = 173,
    VK_FORMAT_ASTC_10x5_SRGB_BLOCK = 174,
    VK_FORMAT_ASTC_10x6_UNORM_BLOCK = 175,
    VK_FORMAT_ASTC_10x6_SRGB_BLOCK = 176,
    VK_FORMAT_ASTC_10x8_UNORM_BLOCK = 177,
    VK_FORMAT_ASTC_10x8_SRGB_BLOCK = 178,
    VK_FORMAT_ASTC_10x10_UNORM_BLOCK = 179,
    VK_FORMAT_ASTC_10x10_SRGB_BLOCK = 180,
    VK_FORMAT_ASTC_12x10_UNORM_BLOCK = 181,
    VK_FORMAT_ASTC_12x10_SRGB_BLOCK = 182,
    VK_FORMAT_ASTC_12x12_UNORM_BLOCK = 183,
    VK_FORMAT_ASTC_12x12_SRGB_BLOCK = 184,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_G8B8G8R8_422_UNORM = 1000156000,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_B8G8R8G8_422_UNORM = 1000156001,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM = 1000156002,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_G8_B8R8_2PLANE_420_UNORM = 1000156003,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM = 1000156004,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_G8_B8R8_2PLANE_422_UNORM = 1000156005,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM = 1000156006,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_R10X6_UNORM_PACK16 = 1000156007,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_R10X6G10X6_UNORM_2PACK16 = 1000156008,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 = 1000156009,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 = 1000156010,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 = 1000156011,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16 = 1000156012,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 = 1000156013,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16 = 1000156014,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16 = 1000156015,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16 = 1000156016,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_R12X4_UNORM_PACK16 = 1000156017,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_R12X4G12X4_UNORM_2PACK16 = 1000156018,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 = 1000156019,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 = 1000156020,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 = 1000156021,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16 = 1000156022,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16 = 1000156023,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16 = 1000156024,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16 = 1000156025,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16 = 1000156026,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_G16B16G16R16_422_UNORM = 1000156027,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_B16G16R16G16_422_UNORM = 1000156028,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM = 1000156029,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_G16_B16R16_2PLANE_420_UNORM = 1000156030,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM = 1000156031,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_G16_B16R16_2PLANE_422_UNORM = 1000156032,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM = 1000156033,
  // Provided by VK_VERSION_1_3
    VK_FORMAT_G8_B8R8_2PLANE_444_UNORM = 1000330000,
  // Provided by VK_VERSION_1_3
    VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16 = 1000330001,
  // Provided by VK_VERSION_1_3
    VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16 = 1000330002,
  // Provided by VK_VERSION_1_3
    VK_FORMAT_G16_B16R16_2PLANE_444_UNORM = 1000330003,
  // Provided by VK_VERSION_1_3
    VK_FORMAT_A4R4G4B4_UNORM_PACK16 = 1000340000,
  // Provided by VK_VERSION_1_3
    VK_FORMAT_A4B4G4R4_UNORM_PACK16 = 1000340001,
  // Provided by VK_VERSION_1_3
    VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK = 1000066000,
  // Provided by VK_VERSION_1_3
    VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK = 1000066001,
  // Provided by VK_VERSION_1_3
    VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK = 1000066002,
  // Provided by VK_VERSION_1_3
    VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK = 1000066003,
  // Provided by VK_VERSION_1_3
    VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK = 1000066004,
  // Provided by VK_VERSION_1_3
    VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK = 1000066005,
  // Provided by VK_VERSION_1_3
    VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK = 1000066006,
  // Provided by VK_VERSION_1_3
    VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK = 1000066007,
  // Provided by VK_VERSION_1_3
    VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK = 1000066008,
  // Provided by VK_VERSION_1_3
    VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK = 1000066009,
  // Provided by VK_VERSION_1_3
    VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK = 1000066010,
  // Provided by VK_VERSION_1_3
    VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK = 1000066011,
  // Provided by VK_VERSION_1_3
    VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK = 1000066012,
  // Provided by VK_VERSION_1_3
    VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK = 1000066013,
  // Provided by VK_VERSION_1_4
    VK_FORMAT_A1B5G5R5_UNORM_PACK16 = 1000470000,
  // Provided by VK_VERSION_1_4
    VK_FORMAT_A8_UNORM = 1000470001,
  // Provided by VK_IMG_format_pvrtc
    VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG = 1000054000,
  // Provided by VK_IMG_format_pvrtc
    VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG = 1000054001,
  // Provided by VK_IMG_format_pvrtc
    VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG = 1000054002,
  // Provided by VK_IMG_format_pvrtc
    VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG = 1000054003,
  // Provided by VK_IMG_format_pvrtc
    VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG = 1000054004,
  // Provided by VK_IMG_format_pvrtc
    VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG = 1000054005,
  // Provided by VK_IMG_format_pvrtc
    VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG = 1000054006,
  // Provided by VK_IMG_format_pvrtc
    VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG = 1000054007,
  // Provided by VK_NV_optical_flow
    VK_FORMAT_R16G16_SFIXED5_NV = 1000464000,
  // Provided by VK_EXT_texture_compression_astc_hdr
    VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK,
  // Provided by VK_EXT_texture_compression_astc_hdr
    VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK,
  // Provided by VK_EXT_texture_compression_astc_hdr
    VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK,
  // Provided by VK_EXT_texture_compression_astc_hdr
    VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK,
  // Provided by VK_EXT_texture_compression_astc_hdr
    VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK,
  // Provided by VK_EXT_texture_compression_astc_hdr
    VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK,
  // Provided by VK_EXT_texture_compression_astc_hdr
    VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK,
  // Provided by VK_EXT_texture_compression_astc_hdr
    VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK,
  // Provided by VK_EXT_texture_compression_astc_hdr
    VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK,
  // Provided by VK_EXT_texture_compression_astc_hdr
    VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK,
  // Provided by VK_EXT_texture_compression_astc_hdr
    VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK,
  // Provided by VK_EXT_texture_compression_astc_hdr
    VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK,
  // Provided by VK_EXT_texture_compression_astc_hdr
    VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK,
  // Provided by VK_EXT_texture_compression_astc_hdr
    VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_G8B8G8R8_422_UNORM_KHR = VK_FORMAT_G8B8G8R8_422_UNORM,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_B8G8R8G8_422_UNORM_KHR = VK_FORMAT_B8G8R8G8_422_UNORM,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR = VK_FORMAT_G8_B8R8_2PLANE_420_UNORM,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR = VK_FORMAT_G8_B8R8_2PLANE_422_UNORM,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_R10X6_UNORM_PACK16_KHR = VK_FORMAT_R10X6_UNORM_PACK16,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR = VK_FORMAT_R10X6G10X6_UNORM_2PACK16,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR = VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR = VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR = VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_R12X4_UNORM_PACK16_KHR = VK_FORMAT_R12X4_UNORM_PACK16,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR = VK_FORMAT_R12X4G12X4_UNORM_2PACK16,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR = VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR = VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR = VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_G16B16G16R16_422_UNORM_KHR = VK_FORMAT_G16B16G16R16_422_UNORM,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_B16G16R16G16_422_UNORM_KHR = VK_FORMAT_B16G16R16G16_422_UNORM,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR = VK_FORMAT_G16_B16R16_2PLANE_420_UNORM,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR = VK_FORMAT_G16_B16R16_2PLANE_422_UNORM,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM,
  // Provided by VK_EXT_ycbcr_2plane_444_formats
    VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT = VK_FORMAT_G8_B8R8_2PLANE_444_UNORM,
  // Provided by VK_EXT_ycbcr_2plane_444_formats
    VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16,
  // Provided by VK_EXT_ycbcr_2plane_444_formats
    VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16,
  // Provided by VK_EXT_ycbcr_2plane_444_formats
    VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT = VK_FORMAT_G16_B16R16_2PLANE_444_UNORM,
  // Provided by VK_EXT_4444_formats
    VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT = VK_FORMAT_A4R4G4B4_UNORM_PACK16,
  // Provided by VK_EXT_4444_formats
    VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT = VK_FORMAT_A4B4G4R4_UNORM_PACK16,
  // Provided by VK_NV_optical_flow
  // VK_FORMAT_R16G16_S10_5_NV is a deprecated alias
    VK_FORMAT_R16G16_S10_5_NV = VK_FORMAT_R16G16_SFIXED5_NV,
  // Provided by VK_KHR_maintenance5
    VK_FORMAT_A1B5G5R5_UNORM_PACK16_KHR = VK_FORMAT_A1B5G5R5_UNORM_PACK16,
  // Provided by VK_KHR_maintenance5
    VK_FORMAT_A8_UNORM_KHR = VK_FORMAT_A8_UNORM,
} VkFormat;
  • VK_FORMAT_UNDEFINED 指定未指定格式。

  • VK_FORMAT_R4G4_UNORM_PACK8 指定一个双分量、8 位打包无符号归一化格式,其在位 4..7 中具有 4 位 R 分量,在位 0..3 中具有 4 位 G 分量。

  • VK_FORMAT_R4G4B4A4_UNORM_PACK16 指定一个四分量、16 位打包无符号归一化格式,其在位 12..15 中具有 4 位 R 分量,在位 8..11 中具有 4 位 G 分量,在位 4..7 中具有 4 位 B 分量,在位 0..3 中具有 4 位 A 分量。

  • VK_FORMAT_B4G4R4A4_UNORM_PACK16 指定一个四分量、16 位打包无符号归一化格式,其在位 12..15 中具有 4 位 B 分量,在位 8..11 中具有 4 位 G 分量,在位 4..7 中具有 4 位 R 分量,在位 0..3 中具有 4 位 A 分量。

  • VK_FORMAT_A4R4G4B4_UNORM_PACK16 指定一个四分量、16 位打包无符号归一化格式,其在位 12..15 中具有 4 位 A 分量,在位 8..11 中具有 4 位 R 分量,在位 4..7 中具有 4 位 G 分量,在位 0..3 中具有 4 位 B 分量。

  • VK_FORMAT_A4B4G4R4_UNORM_PACK16 指定一个四分量、16 位打包无符号归一化格式,其在位 12..15 中具有 4 位 A 分量,在位 8..11 中具有 4 位 B 分量,在位 4..7 中具有 4 位 G 分量,在位 0..3 中具有 4 位 R 分量。

  • VK_FORMAT_R5G6B5_UNORM_PACK16 指定一个三分量、16 位打包无符号归一化格式,其在位 11..15 中具有 5 位 R 分量,在位 5..10 中具有 6 位 G 分量,在位 0..4 中具有 5 位 B 分量。

  • VK_FORMAT_B5G6R5_UNORM_PACK16 指定一个三分量、16 位打包无符号归一化格式,其在位 11..15 中具有 5 位 B 分量,在位 5..10 中具有 6 位 G 分量,在位 0..4 中具有 5 位 R 分量。

  • VK_FORMAT_R5G5B5A1_UNORM_PACK16 指定一个四分量、16 位打包无符号归一化格式,其在位 11..15 中具有 5 位 R 分量,在位 6..10 中具有 5 位 G 分量,在位 1..5 中具有 5 位 B 分量,在位 0 中具有 1 位 A 分量。

  • VK_FORMAT_B5G5R5A1_UNORM_PACK16 指定一个四分量、16 位打包无符号归一化格式,其在位 11..15 中具有 5 位 B 分量,在位 6..10 中具有 5 位 G 分量,在位 1..5 中具有 5 位 R 分量,在位 0 中具有 1 位 A 分量。

  • VK_FORMAT_A1R5G5B5_UNORM_PACK16 指定一个四分量、16 位打包无符号归一化格式,其在位 15 中具有 1 位 A 分量,在位 10..14 中具有 5 位 R 分量,在位 5..9 中具有 5 位 G 分量,在位 0..4 中具有 5 位 B 分量。

  • VK_FORMAT_A1B5G5R5_UNORM_PACK16 指定一个四分量、16 位打包无符号归一化格式,其在位 15 中具有 1 位 A 分量,在位 10..14 中具有 5 位 B 分量,在位 5..9 中具有 5 位 G 分量,在位 0..4 中具有 5 位 R 分量。

  • VK_FORMAT_A8_UNORM 指定一个单分量、8 位无符号归一化格式,它具有单个 8 位 A 分量。

  • VK_FORMAT_R8_UNORM 指定一个单分量、8 位无符号归一化格式,它具有单个 8 位 R 分量。

  • VK_FORMAT_R8_SNORM 指定一个单分量、8 位有符号归一化格式,它具有单个 8 位 R 分量。

  • VK_FORMAT_R8_USCALED 指定一个单分量、8 位无符号缩放整数格式,它具有单个 8 位 R 分量。

  • VK_FORMAT_R8_SSCALED 指定一个单分量、8 位有符号缩放整数格式,它具有单个 8 位 R 分量。

  • VK_FORMAT_R8_UINT 指定一个单分量、8 位无符号整数格式,它具有单个 8 位 R 分量。

  • VK_FORMAT_R8_SINT 指定一个单分量、8 位有符号整数格式,它具有单个 8 位 R 分量。

  • VK_FORMAT_R8_SRGB 指定一个单分量、8 位无符号归一化格式,它具有单个 8 位 R 分量,并使用 sRGB 非线性编码存储。

  • VK_FORMAT_R8G8_UNORM 指定一个双分量、16 位无符号归一化格式,它在字节 0 中具有 8 位 R 分量,在字节 1 中具有 8 位 G 分量。

  • VK_FORMAT_R8G8_SNORM 指定一个双分量、16 位有符号归一化格式,它在字节 0 中具有 8 位 R 分量,在字节 1 中具有 8 位 G 分量。

  • VK_FORMAT_R8G8_USCALED 指定一个双分量、16 位无符号缩放整数格式,它在字节 0 中具有 8 位 R 分量,在字节 1 中具有 8 位 G 分量。

  • VK_FORMAT_R8G8_SSCALED 指定一个双分量 16 位有符号缩放整数格式,其中字节 0 包含 8 位 R 分量,字节 1 包含 8 位 G 分量。

  • VK_FORMAT_R8G8_UINT 指定一个双分量 16 位无符号整数格式,其中字节 0 包含 8 位 R 分量,字节 1 包含 8 位 G 分量。

  • VK_FORMAT_R8G8_SINT 指定一个双分量 16 位有符号整数格式,其中字节 0 包含 8 位 R 分量,字节 1 包含 8 位 G 分量。

  • VK_FORMAT_R8G8_SRGB 指定一个双分量 16 位无符号归一化格式,其中字节 0 包含以 sRGB 非线性编码存储的 8 位 R 分量,字节 1 包含以 sRGB 非线性编码存储的 8 位 G 分量。

  • VK_FORMAT_R8G8B8_UNORM 指定一个三分量 24 位无符号归一化格式,其中字节 0 包含 8 位 R 分量,字节 1 包含 8 位 G 分量,字节 2 包含 8 位 B 分量。

  • VK_FORMAT_R8G8B8_SNORM 指定一个三分量 24 位有符号归一化格式,其中字节 0 包含 8 位 R 分量,字节 1 包含 8 位 G 分量,字节 2 包含 8 位 B 分量。

  • VK_FORMAT_R8G8B8_USCALED 指定一个三分量 24 位无符号缩放格式,其中字节 0 包含 8 位 R 分量,字节 1 包含 8 位 G 分量,字节 2 包含 8 位 B 分量。

  • VK_FORMAT_R8G8B8_SSCALED 指定一个三分量 24 位有符号缩放格式,其中字节 0 包含 8 位 R 分量,字节 1 包含 8 位 G 分量,字节 2 包含 8 位 B 分量。

  • VK_FORMAT_R8G8B8_UINT 指定一个三分量 24 位无符号整数格式,其中字节 0 包含 8 位 R 分量,字节 1 包含 8 位 G 分量,字节 2 包含 8 位 B 分量。

  • VK_FORMAT_R8G8B8_SINT 指定一个三分量 24 位有符号整数格式,其中字节 0 包含 8 位 R 分量,字节 1 包含 8 位 G 分量,字节 2 包含 8 位 B 分量。

  • VK_FORMAT_R8G8B8_SRGB 指定一个三分量 24 位无符号归一化格式,其中字节 0 包含以 sRGB 非线性编码存储的 8 位 R 分量,字节 1 包含以 sRGB 非线性编码存储的 8 位 G 分量,字节 2 包含以 sRGB 非线性编码存储的 8 位 B 分量。

  • VK_FORMAT_B8G8R8_UNORM 指定一个三分量 24 位无符号归一化格式,其中字节 0 包含 8 位 B 分量,字节 1 包含 8 位 G 分量,字节 2 包含 8 位 R 分量。

  • VK_FORMAT_B8G8R8_SNORM 指定一个三分量 24 位有符号归一化格式,其中字节 0 包含 8 位 B 分量,字节 1 包含 8 位 G 分量,字节 2 包含 8 位 R 分量。

  • VK_FORMAT_B8G8R8_USCALED 指定一个三分量 24 位无符号缩放格式,其中字节 0 包含 8 位 B 分量,字节 1 包含 8 位 G 分量,字节 2 包含 8 位 R 分量。

  • VK_FORMAT_B8G8R8_SSCALED 指定一个三分量 24 位有符号缩放格式,其中字节 0 包含 8 位 B 分量,字节 1 包含 8 位 G 分量,字节 2 包含 8 位 R 分量。

  • VK_FORMAT_B8G8R8_UINT 指定一个三分量 24 位无符号整数格式,其中字节 0 包含 8 位 B 分量,字节 1 包含 8 位 G 分量,字节 2 包含 8 位 R 分量。

  • VK_FORMAT_B8G8R8_SINT 指定一个三分量 24 位有符号整数格式,其中字节 0 包含 8 位 B 分量,字节 1 包含 8 位 G 分量,字节 2 包含 8 位 R 分量。

  • VK_FORMAT_B8G8R8_SRGB 指定一个三分量 24 位无符号归一化格式,其中字节 0 包含以 sRGB 非线性编码存储的 8 位 B 分量,字节 1 包含以 sRGB 非线性编码存储的 8 位 G 分量,字节 2 包含以 sRGB 非线性编码存储的 8 位 R 分量。

  • VK_FORMAT_R8G8B8A8_UNORM 指定一个四分量 32 位无符号归一化格式,其中字节 0 包含 8 位 R 分量,字节 1 包含 8 位 G 分量,字节 2 包含 8 位 B 分量,字节 3 包含 8 位 A 分量。

  • VK_FORMAT_R8G8B8A8_SNORM 指定一个四分量 32 位有符号归一化格式,其中字节 0 包含 8 位 R 分量,字节 1 包含 8 位 G 分量,字节 2 包含 8 位 B 分量,字节 3 包含 8 位 A 分量。

  • VK_FORMAT_R8G8B8A8_USCALED 指定一个四分量 32 位无符号缩放格式,其中字节 0 包含 8 位 R 分量,字节 1 包含 8 位 G 分量,字节 2 包含 8 位 B 分量,字节 3 包含 8 位 A 分量。

  • VK_FORMAT_R8G8B8A8_SSCALED 指定一个四分量 32 位有符号缩放格式,其中字节 0 包含 8 位 R 分量,字节 1 包含 8 位 G 分量,字节 2 包含 8 位 B 分量,字节 3 包含 8 位 A 分量。

  • VK_FORMAT_R8G8B8A8_UINT 指定一个四分量 32 位无符号整数格式,其中字节 0 包含 8 位 R 分量,字节 1 包含 8 位 G 分量,字节 2 包含 8 位 B 分量,字节 3 包含 8 位 A 分量。

  • VK_FORMAT_R8G8B8A8_SINT 指定一个四分量 32 位有符号整数格式,其中字节 0 包含 8 位 R 分量,字节 1 包含 8 位 G 分量,字节 2 包含 8 位 B 分量,字节 3 包含 8 位 A 分量。

  • VK_FORMAT_R8G8B8A8_SRGB 指定一个四分量 32 位无符号归一化格式,其中字节 0 包含以 sRGB 非线性编码存储的 8 位 R 分量,字节 1 包含以 sRGB 非线性编码存储的 8 位 G 分量,字节 2 包含以 sRGB 非线性编码存储的 8 位 B 分量,字节 3 包含 8 位 A 分量。

  • VK_FORMAT_B8G8R8A8_UNORM 指定一个四分量 32 位无符号归一化格式,其中字节 0 包含 8 位 B 分量,字节 1 包含 8 位 G 分量,字节 2 包含 8 位 R 分量,字节 3 包含 8 位 A 分量。

  • VK_FORMAT_B8G8R8A8_SNORM 指定一个四分量 32 位有符号归一化格式,其中字节 0 包含 8 位 B 分量,字节 1 包含 8 位 G 分量,字节 2 包含 8 位 R 分量,字节 3 包含 8 位 A 分量。

  • VK_FORMAT_B8G8R8A8_USCALED 指定一个四分量 32 位无符号缩放格式,其中字节 0 包含 8 位 B 分量,字节 1 包含 8 位 G 分量,字节 2 包含 8 位 R 分量,字节 3 包含 8 位 A 分量。

  • VK_FORMAT_B8G8R8A8_SSCALED 指定一个四分量 32 位有符号缩放格式,其中字节 0 包含 8 位 B 分量,字节 1 包含 8 位 G 分量,字节 2 包含 8 位 R 分量,字节 3 包含 8 位 A 分量。

  • VK_FORMAT_B8G8R8A8_UINT 指定一个四分量 32 位无符号整数格式,其中字节 0 包含 8 位 B 分量,字节 1 包含 8 位 G 分量,字节 2 包含 8 位 R 分量,字节 3 包含 8 位 A 分量。

  • VK_FORMAT_B8G8R8A8_SINT 指定一个四分量 32 位有符号整数格式,其中字节 0 包含 8 位 B 分量,字节 1 包含 8 位 G 分量,字节 2 包含 8 位 R 分量,字节 3 包含 8 位 A 分量。

  • VK_FORMAT_B8G8R8A8_SRGB 指定一个四分量 32 位无符号归一化格式,其中字节 0 包含以 sRGB 非线性编码存储的 8 位 B 分量,字节 1 包含以 sRGB 非线性编码存储的 8 位 G 分量,字节 2 包含以 sRGB 非线性编码存储的 8 位 R 分量,字节 3 包含 8 位 A 分量。

  • VK_FORMAT_A8B8G8R8_UNORM_PACK32 指定一个四分量 32 位打包无符号归一化格式,其中位 24..31 包含 8 位 A 分量,位 16..23 包含 8 位 B 分量,位 8..15 包含 8 位 G 分量,位 0..7 包含 8 位 R 分量。

  • VK_FORMAT_A8B8G8R8_SNORM_PACK32 指定一个四分量、32 位打包的有符号归一化格式,其中 A 分量为 8 位,位于位 24..31,B 分量为 8 位,位于位 16..23,G 分量为 8 位,位于位 8..15,R 分量为 8 位,位于位 0..7。

  • VK_FORMAT_A8B8G8R8_USCALED_PACK32 指定一个四分量、32 位打包的无符号缩放整数格式,其中 A 分量为 8 位,位于位 24..31,B 分量为 8 位,位于位 16..23,G 分量为 8 位,位于位 8..15,R 分量为 8 位,位于位 0..7。

  • VK_FORMAT_A8B8G8R8_SSCALED_PACK32 指定一个四分量、32 位打包的有符号缩放整数格式,其中 A 分量为 8 位,位于位 24..31,B 分量为 8 位,位于位 16..23,G 分量为 8 位,位于位 8..15,R 分量为 8 位,位于位 0..7。

  • VK_FORMAT_A8B8G8R8_UINT_PACK32 指定一个四分量、32 位打包的无符号整数格式,其中 A 分量为 8 位,位于位 24..31,B 分量为 8 位,位于位 16..23,G 分量为 8 位,位于位 8..15,R 分量为 8 位,位于位 0..7。

  • VK_FORMAT_A8B8G8R8_SINT_PACK32 指定一个四分量、32 位打包的有符号整数格式,其中 A 分量为 8 位,位于位 24..31,B 分量为 8 位,位于位 16..23,G 分量为 8 位,位于位 8..15,R 分量为 8 位,位于位 0..7。

  • VK_FORMAT_A8B8G8R8_SRGB_PACK32 指定一个四分量、32 位打包的无符号归一化格式,其中 A 分量为 8 位,位于位 24..31,B 分量为 8 位,以 sRGB 非线性编码存储在位 16..23,G 分量为 8 位,以 sRGB 非线性编码存储在位 8..15,R 分量为 8 位,以 sRGB 非线性编码存储在位 0..7。

  • VK_FORMAT_A2R10G10B10_UNORM_PACK32 指定一个四分量、32 位打包的无符号归一化格式,其中 A 分量为 2 位,位于位 30..31,R 分量为 10 位,位于位 20..29,G 分量为 10 位,位于位 10..19,B 分量为 10 位,位于位 0..9。

  • VK_FORMAT_A2R10G10B10_SNORM_PACK32 指定一个四分量、32 位打包的有符号归一化格式,其中 A 分量为 2 位,位于位 30..31,R 分量为 10 位,位于位 20..29,G 分量为 10 位,位于位 10..19,B 分量为 10 位,位于位 0..9。

  • VK_FORMAT_A2R10G10B10_USCALED_PACK32 指定一个四分量、32 位打包的无符号缩放整数格式,其中 A 分量为 2 位,位于位 30..31,R 分量为 10 位,位于位 20..29,G 分量为 10 位,位于位 10..19,B 分量为 10 位,位于位 0..9。

  • VK_FORMAT_A2R10G10B10_SSCALED_PACK32 指定一个四分量、32 位打包的有符号缩放整数格式,其中 A 分量为 2 位,位于位 30..31,R 分量为 10 位,位于位 20..29,G 分量为 10 位,位于位 10..19,B 分量为 10 位,位于位 0..9。

  • VK_FORMAT_A2R10G10B10_UINT_PACK32 指定一个四分量、32 位打包的无符号整数格式,其中 A 分量为 2 位,位于位 30..31,R 分量为 10 位,位于位 20..29,G 分量为 10 位,位于位 10..19,B 分量为 10 位,位于位 0..9。

  • VK_FORMAT_A2R10G10B10_SINT_PACK32 指定一个四分量、32 位打包的有符号整数格式,其中 A 分量为 2 位,位于位 30..31,R 分量为 10 位,位于位 20..29,G 分量为 10 位,位于位 10..19,B 分量为 10 位,位于位 0..9。

  • VK_FORMAT_A2B10G10R10_UNORM_PACK32 指定一个四分量、32 位打包的无符号归一化格式,其中 A 分量为 2 位,位于位 30..31,B 分量为 10 位,位于位 20..29,G 分量为 10 位,位于位 10..19,R 分量为 10 位,位于位 0..9。

  • VK_FORMAT_A2B10G10R10_SNORM_PACK32 指定一个四分量、32 位打包的有符号归一化格式,其中 A 分量为 2 位,位于位 30..31,B 分量为 10 位,位于位 20..29,G 分量为 10 位,位于位 10..19,R 分量为 10 位,位于位 0..9。

  • VK_FORMAT_A2B10G10R10_USCALED_PACK32 指定一个四分量、32 位打包的无符号缩放整数格式,其中 A 分量为 2 位,位于位 30..31,B 分量为 10 位,位于位 20..29,G 分量为 10 位,位于位 10..19,R 分量为 10 位,位于位 0..9。

  • VK_FORMAT_A2B10G10R10_SSCALED_PACK32 指定一个四分量、32 位打包的有符号缩放整数格式,其中 A 分量为 2 位,位于位 30..31,B 分量为 10 位,位于位 20..29,G 分量为 10 位,位于位 10..19,R 分量为 10 位,位于位 0..9。

  • VK_FORMAT_A2B10G10R10_UINT_PACK32 指定一个四分量、32 位打包的无符号整数格式,其中 A 分量为 2 位,位于位 30..31,B 分量为 10 位,位于位 20..29,G 分量为 10 位,位于位 10..19,R 分量为 10 位,位于位 0..9。

  • VK_FORMAT_A2B10G10R10_SINT_PACK32 指定一个四分量、32 位打包的有符号整数格式,其中 A 分量为 2 位,位于位 30..31,B 分量为 10 位,位于位 20..29,G 分量为 10 位,位于位 10..19,R 分量为 10 位,位于位 0..9。

  • VK_FORMAT_R16_UNORM 指定一个单分量、16 位无符号归一化格式,其中包含一个 16 位 R 分量。

  • VK_FORMAT_R16_SNORM 指定一个单分量、16 位有符号归一化格式,其中包含一个 16 位 R 分量。

  • VK_FORMAT_R16_USCALED 指定一个单分量、16 位无符号缩放整数格式,其中包含一个 16 位 R 分量。

  • VK_FORMAT_R16_SSCALED 指定一个单分量、16 位有符号缩放整数格式,其中包含一个 16 位 R 分量。

  • VK_FORMAT_R16_UINT 指定一个单分量、16 位无符号整数格式,其中包含一个 16 位 R 分量。

  • VK_FORMAT_R16_SINT 指定一个单分量、16 位有符号整数格式,其中包含一个 16 位 R 分量。

  • VK_FORMAT_R16_SFLOAT 指定一个单分量、16 位有符号浮点格式,其中包含一个 16 位 R 分量。

  • VK_FORMAT_R16G16_UNORM 指定一个双分量、32 位无符号归一化格式,其中 R 分量为 16 位,位于字节 0..1,G 分量为 16 位,位于字节 2..3。

  • VK_FORMAT_R16G16_SNORM 指定一个双分量、32 位有符号归一化格式,其中 R 分量为 16 位,位于字节 0..1,G 分量为 16 位,位于字节 2..3。

  • VK_FORMAT_R16G16_USCALED 指定一个双分量、32 位无符号缩放整数格式,其中 R 分量为 16 位,位于字节 0..1,G 分量为 16 位,位于字节 2..3。

  • VK_FORMAT_R16G16_SSCALED 指定一个双分量、32 位有符号缩放整数格式,其中 R 分量为 16 位,位于字节 0..1,G 分量为 16 位,位于字节 2..3。

  • VK_FORMAT_R16G16_UINT 指定一个双分量、32 位无符号整数格式,其中 R 分量为 16 位,位于字节 0..1,G 分量为 16 位,位于字节 2..3。

  • VK_FORMAT_R16G16_SINT 指定一个双分量、32 位有符号整数格式,其中 R 分量为 16 位,位于字节 0..1,G 分量为 16 位,位于字节 2..3。

  • VK_FORMAT_R16G16_SFLOAT 指定一个双分量、32 位有符号浮点格式,其中 R 分量为 16 位,位于字节 0..1,G 分量为 16 位,位于字节 2..3。

  • VK_FORMAT_R16G16B16_UNORM 指定一个三分量、48 位无符号归一化格式,其中 R 分量为 16 位,位于字节 0..1,G 分量为 16 位,位于字节 2..3,B 分量为 16 位,位于字节 4..5。

  • VK_FORMAT_R16G16B16_SNORM 指定一个三分量、48 位有符号归一化格式,其中 0..1 字节为 16 位 R 分量,2..3 字节为 16 位 G 分量,4..5 字节为 16 位 B 分量。

  • VK_FORMAT_R16G16B16_USCALED 指定一个三分量、48 位无符号缩放整数格式,其中 0..1 字节为 16 位 R 分量,2..3 字节为 16 位 G 分量,4..5 字节为 16 位 B 分量。

  • VK_FORMAT_R16G16B16_SSCALED 指定一个三分量、48 位有符号缩放整数格式,其中 0..1 字节为 16 位 R 分量,2..3 字节为 16 位 G 分量,4..5 字节为 16 位 B 分量。

  • VK_FORMAT_R16G16B16_UINT 指定一个三分量、48 位无符号整数格式,其中 0..1 字节为 16 位 R 分量,2..3 字节为 16 位 G 分量,4..5 字节为 16 位 B 分量。

  • VK_FORMAT_R16G16B16_SINT 指定一个三分量、48 位有符号整数格式,其中 0..1 字节为 16 位 R 分量,2..3 字节为 16 位 G 分量,4..5 字节为 16 位 B 分量。

  • VK_FORMAT_R16G16B16_SFLOAT 指定一个三分量、48 位有符号浮点格式,其中 0..1 字节为 16 位 R 分量,2..3 字节为 16 位 G 分量,4..5 字节为 16 位 B 分量。

  • VK_FORMAT_R16G16B16A16_UNORM 指定一个四分量、64 位无符号归一化格式,其中 0..1 字节为 16 位 R 分量,2..3 字节为 16 位 G 分量,4..5 字节为 16 位 B 分量,6..7 字节为 16 位 A 分量。

  • VK_FORMAT_R16G16B16A16_SNORM 指定一个四分量、64 位有符号归一化格式,其中 0..1 字节为 16 位 R 分量,2..3 字节为 16 位 G 分量,4..5 字节为 16 位 B 分量,6..7 字节为 16 位 A 分量。

  • VK_FORMAT_R16G16B16A16_USCALED 指定一个四分量、64 位无符号缩放整数格式,其中 0..1 字节为 16 位 R 分量,2..3 字节为 16 位 G 分量,4..5 字节为 16 位 B 分量,6..7 字节为 16 位 A 分量。

  • VK_FORMAT_R16G16B16A16_SSCALED 指定一个四分量、64 位有符号缩放整数格式,其中 0..1 字节为 16 位 R 分量,2..3 字节为 16 位 G 分量,4..5 字节为 16 位 B 分量,6..7 字节为 16 位 A 分量。

  • VK_FORMAT_R16G16B16A16_UINT 指定一个四分量、64 位无符号整数格式,其中 0..1 字节为 16 位 R 分量,2..3 字节为 16 位 G 分量,4..5 字节为 16 位 B 分量,6..7 字节为 16 位 A 分量。

  • VK_FORMAT_R16G16B16A16_SINT 指定一个四分量、64 位有符号整数格式,其中 0..1 字节为 16 位 R 分量,2..3 字节为 16 位 G 分量,4..5 字节为 16 位 B 分量,6..7 字节为 16 位 A 分量。

  • VK_FORMAT_R16G16B16A16_SFLOAT 指定一个四分量、64 位有符号浮点格式,其中 0..1 字节为 16 位 R 分量,2..3 字节为 16 位 G 分量,4..5 字节为 16 位 B 分量,6..7 字节为 16 位 A 分量。

  • VK_FORMAT_R32_UINT 指定一个单分量、32 位无符号整数格式,其中包含一个 32 位 R 分量。

  • VK_FORMAT_R32_SINT 指定一个单分量、32 位有符号整数格式,其中包含一个 32 位 R 分量。

  • VK_FORMAT_R32_SFLOAT 指定一个单分量、32 位有符号浮点格式,其中包含一个 32 位 R 分量。

  • VK_FORMAT_R32G32_UINT 指定一个双分量、64 位无符号整数格式,其中 0..3 字节为 32 位 R 分量,4..7 字节为 32 位 G 分量。

  • VK_FORMAT_R32G32_SINT 指定一个双分量、64 位有符号整数格式,其中 0..3 字节为 32 位 R 分量,4..7 字节为 32 位 G 分量。

  • VK_FORMAT_R32G32_SFLOAT 指定一个双分量、64 位有符号浮点格式,其中 0..3 字节为 32 位 R 分量,4..7 字节为 32 位 G 分量。

  • VK_FORMAT_R32G32B32_UINT 指定一个三分量、96 位无符号整数格式,其中 0..3 字节为 32 位 R 分量,4..7 字节为 32 位 G 分量,8..11 字节为 32 位 B 分量。

  • VK_FORMAT_R32G32B32_SINT 指定一个三分量、96 位有符号整数格式,其中 0..3 字节为 32 位 R 分量,4..7 字节为 32 位 G 分量,8..11 字节为 32 位 B 分量。

  • VK_FORMAT_R32G32B32_SFLOAT 指定一个三分量、96 位有符号浮点格式,其中 0..3 字节为 32 位 R 分量,4..7 字节为 32 位 G 分量,8..11 字节为 32 位 B 分量。

  • VK_FORMAT_R32G32B32A32_UINT 指定一个四分量、128 位无符号整数格式,其中 0..3 字节为 32 位 R 分量,4..7 字节为 32 位 G 分量,8..11 字节为 32 位 B 分量,12..15 字节为 32 位 A 分量。

  • VK_FORMAT_R32G32B32A32_SINT 指定一个四分量、128 位有符号整数格式,其中 0..3 字节为 32 位 R 分量,4..7 字节为 32 位 G 分量,8..11 字节为 32 位 B 分量,12..15 字节为 32 位 A 分量。

  • VK_FORMAT_R32G32B32A32_SFLOAT 指定一个四分量、128 位有符号浮点格式,其中 0..3 字节为 32 位 R 分量,4..7 字节为 32 位 G 分量,8..11 字节为 32 位 B 分量,12..15 字节为 32 位 A 分量。

  • VK_FORMAT_R64_UINT 指定一个单分量、64 位无符号整数格式,其中包含一个 64 位 R 分量。

  • VK_FORMAT_R64_SINT 指定一个单分量、64 位有符号整数格式,其中包含一个 64 位 R 分量。

  • VK_FORMAT_R64_SFLOAT 指定一个单分量、64 位有符号浮点格式,其中包含一个 64 位 R 分量。

  • VK_FORMAT_R64G64_UINT 指定一个双分量、128 位无符号整数格式,其中 0..7 字节为 64 位 R 分量,8..15 字节为 64 位 G 分量。

  • VK_FORMAT_R64G64_SINT 指定一个双分量、128 位有符号整数格式,其中 0..7 字节为 64 位 R 分量,8..15 字节为 64 位 G 分量。

  • VK_FORMAT_R64G64_SFLOAT 指定一个双分量、128 位有符号浮点格式,其中 0..7 字节为 64 位 R 分量,8..15 字节为 64 位 G 分量。

  • VK_FORMAT_R64G64B64_UINT 指定一个三分量、192 位无符号整数格式,其中 0..7 字节为 64 位 R 分量,8..15 字节为 64 位 G 分量,16..23 字节为 64 位 B 分量。

  • VK_FORMAT_R64G64B64_SINT 指定一个三分量、192 位有符号整数格式,其中 0..7 字节为 64 位 R 分量,8..15 字节为 64 位 G 分量,16..23 字节为 64 位 B 分量。

  • VK_FORMAT_R64G64B64_SFLOAT 指定一个三分量、192 位有符号浮点格式,其中 0..7 字节为 64 位 R 分量,8..15 字节为 64 位 G 分量,16..23 字节为 64 位 B 分量。

  • VK_FORMAT_R64G64B64A64_UINT 指定一个四分量、256 位无符号整数格式,其中 0..7 字节为 64 位 R 分量,8..15 字节为 64 位 G 分量,16..23 字节为 64 位 B 分量,24..31 字节为 64 位 A 分量。

  • VK_FORMAT_R64G64B64A64_SINT 指定一个四分量、256 位有符号整数格式,其中 0..7 字节为 64 位 R 分量,8..15 字节为 64 位 G 分量,16..23 字节为 64 位 B 分量,24..31 字节为 64 位 A 分量。

  • VK_FORMAT_R64G64B64A64_SFLOAT 指定一个四分量、256 位有符号浮点格式,其中 0..7 字节为 64 位 R 分量,8..15 字节为 64 位 G 分量,16..23 字节为 64 位 B 分量,24..31 字节为 64 位 A 分量。

  • VK_FORMAT_B10G11R11_UFLOAT_PACK32 指定一个三分量、32 位打包无符号浮点格式,其中 B 分量占 22..31 位,为 10 位;G 分量占 11..21 位,为 11 位;R 分量占 0..10 位,为 11 位。请参阅无符号 10 位浮点数无符号 11 位浮点数

  • VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 指定一个三分量、32 位打包无符号浮点格式,其中 5 位共享指数占 27..31 位,B 分量尾数占 18..26 位,为 9 位;G 分量尾数占 9..17 位,为 9 位;R 分量尾数占 0..8 位,为 9 位。

  • VK_FORMAT_D16_UNORM 指定一个单分量、16 位无符号归一化格式,其中包含一个 16 位深度分量。

  • VK_FORMAT_X8_D24_UNORM_PACK32 指定一个双分量、32 位格式,其中深度分量占 24 位无符号归一化位,并且可选地包含 8 位未使用的位。

  • VK_FORMAT_D32_SFLOAT 指定一个单分量、32 位有符号浮点格式,其中深度分量占 32 位。

  • VK_FORMAT_S8_UINT 指定一个单分量、8 位无符号整数格式,其中模板分量占 8 位。

  • VK_FORMAT_D16_UNORM_S8_UINT 指定一个双分量、24 位格式,其中深度分量占 16 位无符号归一化位,模板分量占 8 位无符号整数位。

  • VK_FORMAT_D24_UNORM_S8_UINT 指定一个双分量、32 位打包格式,其中模板分量占 8 位无符号整数位,深度分量占 24 位无符号归一化位。

  • VK_FORMAT_D32_SFLOAT_S8_UINT 指定一个双分量格式,其中深度分量占 32 位有符号浮点位,模板分量占 8 位无符号整数位。可选地包含 24 位未使用的位。

  • VK_FORMAT_BC1_RGB_UNORM_BLOCK 指定一个三分量、块压缩格式,其中每个 64 位压缩纹素块编码一个 4×4 矩形的无符号归一化 RGB 纹素数据。此格式没有 alpha 通道,被认为是透明的。

  • VK_FORMAT_BC1_RGB_SRGB_BLOCK 指定一个三分量、块压缩格式,其中每个 64 位压缩纹素块编码一个 4×4 矩形的具有 sRGB 非线性编码的无符号归一化 RGB 纹素数据。此格式没有 alpha 通道,被认为是透明的。

  • VK_FORMAT_BC1_RGBA_UNORM_BLOCK 指定一个四分量、块压缩格式,其中每个 64 位压缩纹素块编码一个 4×4 矩形的无符号归一化 RGB 纹素数据,并提供 1 位 alpha 通道。

  • VK_FORMAT_BC1_RGBA_SRGB_BLOCK 指定一个四分量、块压缩格式,其中每个 64 位压缩纹素块编码一个 4×4 矩形的具有 sRGB 非线性编码的无符号归一化 RGB 纹素数据,并提供 1 位 alpha 通道。

  • VK_FORMAT_BC2_UNORM_BLOCK 指定一个四分量、块压缩格式,其中每个 128 位压缩纹素块编码一个 4×4 矩形的无符号归一化 RGBA 纹素数据,前 64 位编码 alpha 值,后 64 位编码 RGB 值。

  • VK_FORMAT_BC2_SRGB_BLOCK 指定一个四分量、块压缩格式,其中每个 128 位压缩纹素块编码一个 4×4 矩形的具有 sRGB 非线性编码的无符号归一化 RGBA 纹素数据,前 64 位编码 alpha 值,后 64 位编码 RGB 值。

  • VK_FORMAT_BC3_UNORM_BLOCK 指定一个四分量、块压缩格式,其中每个 128 位压缩纹素块编码一个 4×4 矩形的无符号归一化 RGBA 纹素数据,前 64 位编码 alpha 值,后 64 位编码 RGB 值。

  • VK_FORMAT_BC3_SRGB_BLOCK 指定一个四分量、块压缩格式,其中每个 128 位压缩纹素块编码一个 4×4 矩形的具有 sRGB 非线性编码的无符号归一化 RGBA 纹素数据,前 64 位编码 alpha 值,后 64 位编码 RGB 值。

  • VK_FORMAT_BC4_UNORM_BLOCK 指定一个单分量、块压缩格式,其中每个 64 位压缩纹素块编码一个 4×4 矩形的无符号归一化红色纹素数据。

  • VK_FORMAT_BC4_SNORM_BLOCK 指定一个单分量、块压缩格式,其中每个 64 位压缩纹素块编码一个 4×4 矩形的有符号归一化红色纹素数据。

  • VK_FORMAT_BC5_UNORM_BLOCK 指定一个双分量、块压缩格式,其中每个 128 位压缩纹素块编码一个 4×4 矩形的无符号归一化 RG 纹素数据,前 64 位编码红色值,后 64 位编码绿色值。

  • VK_FORMAT_BC5_SNORM_BLOCK 指定一个双分量、块压缩格式,其中每个 128 位压缩纹素块编码一个 4×4 矩形的有符号归一化 RG 纹素数据,前 64 位编码红色值,后 64 位编码绿色值。

  • VK_FORMAT_BC6H_UFLOAT_BLOCK 指定一个三分量、块压缩格式,其中每个 128 位压缩纹素块编码一个 4×4 矩形的无符号浮点 RGB 纹素数据。

  • VK_FORMAT_BC6H_SFLOAT_BLOCK 指定一个三分量、块压缩格式,其中每个 128 位压缩纹素块编码一个 4×4 矩形的有符号浮点 RGB 纹素数据。

  • VK_FORMAT_BC7_UNORM_BLOCK 指定一个四分量、块压缩格式,其中每个 128 位压缩纹素块编码一个 4×4 矩形的无符号归一化 RGBA 纹素数据。

  • VK_FORMAT_BC7_SRGB_BLOCK 指定一个四分量、块压缩格式,其中每个 128 位压缩纹素块编码一个 4×4 矩形的无符号归一化 RGBA 纹素数据,RGB 分量应用 sRGB 非线性编码。

  • VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK 指定一个三分量、ETC2 压缩格式,其中每个 64 位压缩纹素块编码一个 4×4 矩形的无符号归一化 RGB 纹素数据。此格式没有 alpha 通道,被认为是透明的。

  • VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK 指定一个三分量、ETC2 压缩格式,其中每个 64 位压缩纹素块编码一个 4×4 矩形的具有 sRGB 非线性编码的无符号归一化 RGB 纹素数据。此格式没有 alpha 通道,被认为是透明的。

  • VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK 指定一个四分量、ETC2 压缩格式,其中每个 64 位压缩纹素块编码一个 4×4 矩形的无符号归一化 RGB 纹素数据,并提供 1 位 alpha 通道。

  • VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK 指定一个四分量、ETC2 压缩格式,其中每个 64 位压缩纹素块编码一个 4×4 矩形的具有 sRGB 非线性编码的无符号归一化 RGB 纹素数据,并提供 1 位 alpha 通道。

  • VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK 指定一个四分量、ETC2 压缩格式,其中每个 128 位压缩纹素块编码一个 4×4 矩形的无符号归一化 RGBA 纹素数据,前 64 位编码 alpha 值,后 64 位编码 RGB 值。

  • VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK 指定一个四分量、ETC2 压缩格式,其中每个 128 位压缩纹素块编码一个 4×4 矩形的具有 sRGB 非线性编码的无符号归一化 RGBA 纹素数据,前 64 位编码 alpha 值,后 64 位编码 RGB 值。

  • VK_FORMAT_EAC_R11_UNORM_BLOCK 指定一个单分量、ETC2 压缩格式,其中每个 64 位压缩纹素块编码一个 4×4 矩形的无符号归一化红色纹素数据。

  • VK_FORMAT_EAC_R11_SNORM_BLOCK 指定一个单分量、ETC2 压缩格式,其中每个 64 位压缩纹素块编码一个 4×4 矩形的有符号归一化红色纹素数据。

  • VK_FORMAT_EAC_R11G11_UNORM_BLOCK 指定一个双分量、ETC2 压缩格式,其中每个 128 位压缩纹素块编码一个 4×4 矩形的无符号归一化 RG 纹素数据,前 64 位编码红色值,后 64 位编码绿色值。

  • VK_FORMAT_EAC_R11G11_SNORM_BLOCK 指定一个双分量、ETC2 压缩格式,其中每个 128 位压缩纹素块编码一个 4×4 矩形的有符号归一化 RG 纹素数据,前 64 位编码红色值,后 64 位编码绿色值。

  • VK_FORMAT_ASTC_4x4_UNORM_BLOCK 指定一个四分量、ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 4×4 矩形的无符号归一化 RGBA 纹素数据。

  • VK_FORMAT_ASTC_4x4_SRGB_BLOCK 指定一个四分量、ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 4×4 矩形的具有 sRGB 非线性编码的无符号归一化 RGBA 纹素数据。

  • VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK 指定一个四分量、ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 4×4 矩形的有符号浮点 RGBA 纹素数据。

  • VK_FORMAT_ASTC_5x4_UNORM_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 5×4 矩形的无符号归一化 RGBA 纹素数据。

  • VK_FORMAT_ASTC_5x4_SRGB_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 5×4 矩形的无符号归一化 RGBA 纹素数据,并且对 RGB 分量应用了 sRGB 非线性编码。

  • VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 5×4 矩形的有符号浮点 RGBA 纹素数据。

  • VK_FORMAT_ASTC_5x5_UNORM_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 5×5 矩形的无符号归一化 RGBA 纹素数据。

  • VK_FORMAT_ASTC_5x5_SRGB_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 5×5 矩形的无符号归一化 RGBA 纹素数据,并且对 RGB 分量应用了 sRGB 非线性编码。

  • VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 5×5 矩形的有符号浮点 RGBA 纹素数据。

  • VK_FORMAT_ASTC_6x5_UNORM_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 6×5 矩形的无符号归一化 RGBA 纹素数据。

  • VK_FORMAT_ASTC_6x5_SRGB_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 6×5 矩形的无符号归一化 RGBA 纹素数据,并且对 RGB 分量应用了 sRGB 非线性编码。

  • VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 6×5 矩形的有符号浮点 RGBA 纹素数据。

  • VK_FORMAT_ASTC_6x6_UNORM_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 6×6 矩形的无符号归一化 RGBA 纹素数据。

  • VK_FORMAT_ASTC_6x6_SRGB_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 6×6 矩形的无符号归一化 RGBA 纹素数据,并且对 RGB 分量应用了 sRGB 非线性编码。

  • VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 6×6 矩形的有符号浮点 RGBA 纹素数据。

  • VK_FORMAT_ASTC_8x5_UNORM_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 8×5 矩形的无符号归一化 RGBA 纹素数据。

  • VK_FORMAT_ASTC_8x5_SRGB_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 8×5 矩形的无符号归一化 RGBA 纹素数据,并且对 RGB 分量应用了 sRGB 非线性编码。

  • VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 8×5 矩形的有符号浮点 RGBA 纹素数据。

  • VK_FORMAT_ASTC_8x6_UNORM_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 8×6 矩形的无符号归一化 RGBA 纹素数据。

  • VK_FORMAT_ASTC_8x6_SRGB_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 8×6 矩形的无符号归一化 RGBA 纹素数据,并且对 RGB 分量应用了 sRGB 非线性编码。

  • VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 8×6 矩形的有符号浮点 RGBA 纹素数据。

  • VK_FORMAT_ASTC_8x8_UNORM_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 8×8 矩形的无符号归一化 RGBA 纹素数据。

  • VK_FORMAT_ASTC_8x8_SRGB_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 8×8 矩形的无符号归一化 RGBA 纹素数据,并且对 RGB 分量应用了 sRGB 非线性编码。

  • VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 8×8 矩形的有符号浮点 RGBA 纹素数据。

  • VK_FORMAT_ASTC_10x5_UNORM_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 10×5 矩形的无符号归一化 RGBA 纹素数据。

  • VK_FORMAT_ASTC_10x5_SRGB_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 10×5 矩形的无符号归一化 RGBA 纹素数据,并且对 RGB 分量应用了 sRGB 非线性编码。

  • VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 10×5 矩形的有符号浮点 RGBA 纹素数据。

  • VK_FORMAT_ASTC_10x6_UNORM_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 10×6 矩形的无符号归一化 RGBA 纹素数据。

  • VK_FORMAT_ASTC_10x6_SRGB_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 10×6 矩形的无符号归一化 RGBA 纹素数据,并且对 RGB 分量应用了 sRGB 非线性编码。

  • VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 10×6 矩形的有符号浮点 RGBA 纹素数据。

  • VK_FORMAT_ASTC_10x8_UNORM_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 10×8 矩形的无符号归一化 RGBA 纹素数据。

  • VK_FORMAT_ASTC_10x8_SRGB_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 10×8 矩形的无符号归一化 RGBA 纹素数据,并且对 RGB 分量应用了 sRGB 非线性编码。

  • VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 10×8 矩形的有符号浮点 RGBA 纹素数据。

  • VK_FORMAT_ASTC_10x10_UNORM_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 10×10 矩形的无符号归一化 RGBA 纹素数据。

  • VK_FORMAT_ASTC_10x10_SRGB_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 10×10 矩形的无符号归一化 RGBA 纹素数据,并且对 RGB 分量应用了 sRGB 非线性编码。

  • VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 10×10 矩形的有符号浮点 RGBA 纹素数据。

  • VK_FORMAT_ASTC_12x10_UNORM_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 12×10 矩形的无符号归一化 RGBA 纹素数据。

  • VK_FORMAT_ASTC_12x10_SRGB_BLOCK 指定了一种四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 12×10 矩形的无符号归一化 RGBA 纹素数据,并且对 RGB 分量应用了 sRGB 非线性编码。

  • VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK 指定了一个四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 12×10 矩形的有符号浮点 RGBA 纹素数据。

  • VK_FORMAT_ASTC_12x12_UNORM_BLOCK 指定了一个四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 12×12 矩形的无符号归一化 RGBA 纹素数据。

  • VK_FORMAT_ASTC_12x12_SRGB_BLOCK 指定了一个四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 12×12 矩形的无符号归一化 RGBA 纹素数据,并且对 RGB 分量应用了 sRGB 非线性编码。

  • VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK 指定了一个四分量的 ASTC 压缩格式,其中每个 128 位压缩纹素块编码一个 12×12 矩形的有符号浮点 RGBA 纹素数据。

  • VK_FORMAT_G8B8G8R8_422_UNORM 指定了一个四分量 32 位格式,其中包含一对 G 分量、一个 R 分量和一个 B 分量,它们共同编码一个 2×1 矩形的无符号归一化 RGB 纹素数据。每个 *i* 坐标处都有一个 G 值,而 B 和 R 值在两个 G 值之间共享,因此以图像水平分辨率的一半记录。此格式在字节 0 中具有偶数 *i* 坐标的 8 位 G 分量,在字节 1 中具有 8 位 B 分量,在字节 2 中具有奇数 *i* 坐标的 8 位 G 分量,以及在字节 3 中具有 8 位 R 分量。此格式仅支持宽度为 2 的倍数的图像。出于复制范围约束的目的,此格式被视为具有 2×1 压缩纹素块的压缩格式。

  • VK_FORMAT_B8G8R8G8_422_UNORM 指定了一个四分量 32 位格式,其中包含一对 G 分量、一个 R 分量和一个 B 分量,它们共同编码一个 2×1 矩形的无符号归一化 RGB 纹素数据。每个 *i* 坐标处都有一个 G 值,而 B 和 R 值在两个 G 值之间共享,因此以图像水平分辨率的一半记录。此格式在字节 0 中具有 8 位 B 分量,在字节 1 中具有偶数 *i* 坐标的 8 位 G 分量,在字节 2 中具有 8 位 R 分量,以及在字节 3 中具有奇数 *i* 坐标的 8 位 G 分量。此格式仅支持宽度为 2 的倍数的图像。出于复制范围约束的目的,此格式被视为具有 2×1 压缩纹素块的压缩格式。

  • VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM 指定了一个无符号归一化的多平面格式,其中在平面 0 中具有 8 位 G 分量,在平面 1 中具有 8 位 B 分量,在平面 2 中具有 8 位 R 分量。R 和 B 平面的水平和垂直尺寸相对于图像尺寸减半,每个 R 和 B 分量与 G 分量共享,其中 \(\left\lfloor i_G \times 0.5 \right\rfloor = i_B = i_R\) 并且 \(\left\lfloor j_G \times 0.5 \right\rfloor = j_B = j_R\)。当此图像采用线性布局时,每个平面的位置可以通过 vkGetImageSubresourceLayout 确定,使用 VK_IMAGE_ASPECT_PLANE_0_BIT 用于 G 平面,VK_IMAGE_ASPECT_PLANE_1_BIT 用于 B 平面,以及 VK_IMAGE_ASPECT_PLANE_2_BIT 用于 R 平面。此格式仅支持宽度和高度均为 2 的倍数的图像。

  • VK_FORMAT_G8_B8R8_2PLANE_420_UNORM 指定了一个无符号归一化的多平面格式,其中在平面 0 中具有 8 位 G 分量,以及一个双分量 16 位 BR 平面 1,由字节 0 中的 8 位 B 分量和字节 1 中的 8 位 R 分量组成。BR 平面的水平和垂直尺寸相对于图像尺寸减半,每个 R 和 B 值与 G 分量共享,其中 \(\left\lfloor i_G \times 0.5 \right\rfloor = i_B = i_R\) 并且 \(\left\lfloor j_G \times 0.5 \right\rfloor = j_B = j_R\)。当此图像采用线性布局时,每个平面的位置可以通过 vkGetImageSubresourceLayout 确定,使用 VK_IMAGE_ASPECT_PLANE_0_BIT 用于 G 平面,以及 VK_IMAGE_ASPECT_PLANE_1_BIT 用于 BR 平面。此格式仅支持宽度和高度均为 2 的倍数的图像。

  • VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM 指定了一个无符号归一化的多平面格式,其中在平面 0 中具有 8 位 G 分量,在平面 1 中具有 8 位 B 分量,在平面 2 中具有 8 位 R 分量。R 和 B 平面的水平尺寸相对于图像尺寸减半,每个 R 和 B 值与 G 分量共享,其中 \(\left\lfloor i_G \times 0.5 \right\rfloor = i_B = i_R\)。当此图像采用线性布局时,每个平面的位置可以通过 vkGetImageSubresourceLayout 确定,使用 VK_IMAGE_ASPECT_PLANE_0_BIT 用于 G 平面,VK_IMAGE_ASPECT_PLANE_1_BIT 用于 B 平面,以及 VK_IMAGE_ASPECT_PLANE_2_BIT 用于 R 平面。此格式仅支持宽度为 2 的倍数的图像。

  • VK_FORMAT_G8_B8R8_2PLANE_422_UNORM 指定了一个无符号归一化的多平面格式,其中平面 0 具有 8 位 G 分量,平面 1 具有一个双分量 16 位 BR 平面,该平面由字节 0 中的 8 位 B 分量和字节 1 中的 8 位 R 分量组成。BR 平面的水平尺寸相对于图像尺寸减半,并且每个 R 和 B 值都与 的 G 分量共享。当此图像采用线性布局时,每个平面的位置可以通过 vkGetImageSubresourceLayout 确定,对 G 平面使用 VK_IMAGE_ASPECT_PLANE_0_BIT,对 BR 平面使用 VK_IMAGE_ASPECT_PLANE_1_BIT。此格式仅支持宽度为 2 的倍数的图像。

  • VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM 指定一个无符号归一化的多平面格式,其中平面 0 包含 8 位 G 分量,平面 1 包含 8 位 B 分量,平面 2 包含 8 位 R 分量。每个平面具有相同的尺寸,并且每个 R、G 和 B 分量贡献一个单独的纹素。当此图像采用线性布局时,可以使用 vkGetImageSubresourceLayout 确定每个平面的位置,其中 G 平面使用 VK_IMAGE_ASPECT_PLANE_0_BIT,B 平面使用 VK_IMAGE_ASPECT_PLANE_1_BIT,R 平面使用 VK_IMAGE_ASPECT_PLANE_2_BIT

  • VK_FORMAT_R10X6_UNORM_PACK16 指定一个单分量、16 位无符号归一化格式,其中一个 10 位 R 分量位于 16 位字的最高 10 位,而最低 6 位未使用。

  • VK_FORMAT_R10X6G10X6_UNORM_2PACK16 指定一个双分量、32 位无符号归一化格式,其中一个 10 位 R 分量位于字节 0..1 的字的最高 10 位,一个 10 位 G 分量位于字节 2..3 的字的最高 10 位,而每个字的最低 6 位未使用。

  • VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 指定一个四分量、64 位无符号归一化格式,其中一个 10 位 R 分量位于字节 0..1 的字的最高 10 位,一个 10 位 G 分量位于字节 2..3 的字的最高 10 位,一个 10 位 B 分量位于字节 4..5 的字的最高 10 位,一个 10 位 A 分量位于字节 6..7 的字的最高 10 位,而每个字的最低 6 位未使用。

  • VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 指定一个四分量、64 位格式,包含一对 G 分量、一个 R 分量和一个 B 分量,共同编码一个 2×1 矩形的无符号归一化 RGB 纹素数据。每个 i 坐标都有一个 G 值,而 B 和 R 值在两个 G 值之间共享,因此以图像水平分辨率的一半记录。此格式在字节 0..1 的字的最高 10 位具有用于偶数 i 坐标的 10 位 G 分量,在字节 2..3 的字的最高 10 位具有 10 位 B 分量,在字节 4..5 的字的最高 10 位具有用于奇数 i 坐标的 10 位 G 分量,在字节 6..7 的字的最高 10 位具有 10 位 R 分量,而每个字的最低 6 位未使用。此格式仅支持宽度为 2 的倍数的图像。为了复制范围约束的目的,此格式被视为具有 2×1 压缩纹素块的压缩格式。

  • VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 指定一个四分量、64 位格式,包含一对 G 分量、一个 R 分量和一个 B 分量,共同编码一个 2×1 矩形的无符号归一化 RGB 纹素数据。每个 i 坐标都有一个 G 值,而 B 和 R 值在两个 G 值之间共享,因此以图像水平分辨率的一半记录。此格式在字节 0..1 的字的最高 10 位具有 10 位 B 分量,在字节 2..3 的字的最高 10 位具有用于偶数 i 坐标的 10 位 G 分量,在字节 4..5 的字的最高 10 位具有 10 位 R 分量,在字节 6..7 的字的最高 10 位具有用于奇数 i 坐标的 10 位 G 分量,而每个字的最低 6 位未使用。此格式仅支持宽度为 2 的倍数的图像。为了复制范围约束的目的,此格式被视为具有 2×1 压缩纹素块的压缩格式。

  • VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16 指定一个无符号归一化的多平面格式,其中平面 0 的每个 16 位字的最高 10 位包含 10 位 G 分量,平面 1 的每个 16 位字的最高 10 位包含 10 位 B 分量,平面 2 的每个 16 位字的最高 10 位包含 10 位 R 分量,而每个字的最低 6 位未使用。R 和 B 平面的水平和垂直尺寸相对于图像尺寸减半,并且每个 R 和 B 分量与满足以下条件的 G 分量共享:\(\left\lfloor i_G \times 0.5 \right\rfloor = i_B = i_R\) 和 \(\left\lfloor j_G \times 0.5 \right\rfloor = j_B = j_R\)。当此图像采用线性布局时,可以使用 vkGetImageSubresourceLayout 确定每个平面的位置,其中 G 平面使用 VK_IMAGE_ASPECT_PLANE_0_BIT,B 平面使用 VK_IMAGE_ASPECT_PLANE_1_BIT,R 平面使用 VK_IMAGE_ASPECT_PLANE_2_BIT。此格式仅支持宽度和高度均为 2 的倍数的图像。

  • VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 指定一个无符号归一化的多平面格式,其中平面 0 的每个 16 位字的最高 10 位包含 10 位 G 分量,而双分量、32 位的 BR 平面 1 由字节 0..1 的字的最高 10 位中的 10 位 B 分量和字节 2..3 的字的最高 10 位中的 10 位 R 分量组成,而每个字的最低 6 位未使用。BR 平面的水平和垂直尺寸相对于图像尺寸减半,并且每个 R 和 B 值与满足以下条件的 G 分量共享:\(\left\lfloor i_G \times 0.5 \right\rfloor = i_B = i_R\) 和 \(\left\lfloor j_G \times 0.5 \right\rfloor = j_B = j_R\)。当此图像采用线性布局时,可以使用 vkGetImageSubresourceLayout 确定每个平面的位置,其中 G 平面使用 VK_IMAGE_ASPECT_PLANE_0_BIT,BR 平面使用 VK_IMAGE_ASPECT_PLANE_1_BIT。此格式仅支持宽度和高度均为 2 的倍数的图像。

  • VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16 指定一个无符号归一化的多平面格式,其中平面 0 的每个 16 位字的最高 10 位包含 10 位 G 分量,平面 1 的每个 16 位字的最高 10 位包含 10 位 B 分量,平面 2 的每个 16 位字的最高 10 位包含 10 位 R 分量,而每个字的最低 6 位未使用。R 和 B 平面的水平尺寸相对于图像尺寸减半,并且每个 R 和 B 值与满足以下条件的 G 分量共享:\(\left\lfloor i_G \times 0.5 \right\rfloor = i_B = i_R\)。当此图像采用线性布局时,可以使用 vkGetImageSubresourceLayout 确定每个平面的位置,其中 G 平面使用 VK_IMAGE_ASPECT_PLANE_0_BIT,B 平面使用 VK_IMAGE_ASPECT_PLANE_1_BIT,R 平面使用 VK_IMAGE_ASPECT_PLANE_2_BIT。此格式仅支持宽度为 2 的倍数的图像。

  • VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16 specifies an unsigned normalized multi-planar format that has a 10-bit G component in the top 10 bits of each 16-bit word of plane 0, and a two-component, 32-bit BR plane 1 consisting of a 10-bit B component in the top 10 bits of the word in bytes 0..1, and a 10-bit R component in the top 10 bits of the word in bytes 2..3, with the bottom 6 bits of each word unused. The horizontal dimension of the BR plane is halved relative to the image dimensions, and each R and B value is shared with the G components for which . The location of each plane when this image is in linear layout can be determined via vkGetImageSubresourceLayout, using VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane. This format only supports images with a width that is a multiple of two.

  • VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16 指定一个无符号归一化的多平面格式,其中平面 0 的每个 16 位字的最高 10 位包含 10 位 G 分量,平面 1 的每个 16 位字的最高 10 位包含 10 位 B 分量,平面 2 的每个 16 位字的最高 10 位包含 10 位 R 分量,而每个字的最低 6 位未使用。每个平面具有相同的尺寸,并且每个 R、G 和 B 分量贡献一个单独的纹素。当此图像采用线性布局时,可以使用 vkGetImageSubresourceLayout 确定每个平面的位置,其中 G 平面使用 VK_IMAGE_ASPECT_PLANE_0_BIT,B 平面使用 VK_IMAGE_ASPECT_PLANE_1_BIT,R 平面使用 VK_IMAGE_ASPECT_PLANE_2_BIT

  • VK_FORMAT_R12X4_UNORM_PACK16 指定一个单分量、16 位无符号归一化格式,其中一个 12 位 R 分量位于 16 位字的最高 12 位,而最低 4 位未使用。

  • VK_FORMAT_R12X4G12X4_UNORM_2PACK16 指定一个双分量、32 位无符号归一化格式,其中一个 12 位 R 分量位于字节 0..1 的字的最高 12 位,一个 12 位 G 分量位于字节 2..3 的字的最高 12 位,而每个字的最低 4 位未使用。

  • VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 指定一个四分量、64 位无符号归一化格式,其中字节 0..1 中的字的高 12 位为 12 位 R 分量,字节 2..3 中的字的高 12 位为 12 位 G 分量,字节 4..5 中的字的高 12 位为 12 位 B 分量,字节 6..7 中的字的高 12 位为 12 位 A 分量,每个字的低 4 位未使用。

  • VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 指定一个四分量、64 位格式,其中包含一对 G 分量、一个 R 分量和一个 B 分量,共同编码一个 2×1 矩形无符号归一化 RGB 纹素数据。每个 i 坐标都有一个 G 值,B 和 R 值在两个 G 值之间共享,因此以图像水平分辨率的一半记录。此格式在字节 0..1 中的字的高 12 位具有偶数 i 坐标的 12 位 G 分量,在字节 2..3 中的字的高 12 位具有 12 位 B 分量,在字节 4..5 中的字的高 12 位具有奇数 i 坐标的 12 位 G 分量,以及在字节 6..7 中的字的高 12 位具有 12 位 R 分量,每个字的低 4 位未使用。此格式仅支持宽度为 2 的倍数的图像。为了约束复制范围,此格式被视为 2×1 压缩纹素块的压缩格式。

  • VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 指定一个四分量、64 位格式,其中包含一对 G 分量、一个 R 分量和一个 B 分量,共同编码一个 2×1 矩形无符号归一化 RGB 纹素数据。每个 i 坐标都有一个 G 值,B 和 R 值在两个 G 值之间共享,因此以图像水平分辨率的一半记录。此格式在字节 0..1 中的字的高 12 位具有 12 位 B 分量,在字节 2..3 中的字的高 12 位具有偶数 i 坐标的 12 位 G 分量,在字节 4..5 中的字的高 12 位具有 12 位 R 分量,以及在字节 6..7 中的字的高 12 位具有奇数 i 坐标的 12 位 G 分量,每个字的低 4 位未使用。此格式仅支持宽度为 2 的倍数的图像。为了约束复制范围,此格式被视为 2×1 压缩纹素块的压缩格式。

  • VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16 指定一个无符号归一化多平面格式,其中平面 0 的每个 16 位字的高 12 位具有 12 位 G 分量,平面 1 的每个 16 位字的高 12 位具有 12 位 B 分量,以及平面 2 的每个 16 位字的高 12 位具有 12 位 R 分量,每个字的低 4 位未使用。R 和 B 平面的水平和垂直尺寸相对于图像尺寸减半,并且每个 R 和 B 分量与满足 \(\left\lfloor i_G \times 0.5 \right\rfloor = i_B = i_R\) 和 \(\left\lfloor j_G \times 0.5 \right\rfloor = j_B = j_R\) 的 G 分量共享。当此图像采用线性布局时,可以使用 vkGetImageSubresourceLayout 来确定每个平面的位置,使用 VK_IMAGE_ASPECT_PLANE_0_BIT 表示 G 平面,使用 VK_IMAGE_ASPECT_PLANE_1_BIT 表示 B 平面,以及使用 VK_IMAGE_ASPECT_PLANE_2_BIT 表示 R 平面。此格式仅支持宽度和高度均为 2 的倍数的图像。

  • VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16 指定一个无符号归一化多平面格式,其中平面 0 的每个 16 位字的高 12 位具有 12 位 G 分量,以及由字节 0..1 中的字的高 12 位中的 12 位 B 分量和字节 2..3 中的字的高 12 位中的 12 位 R 分量组成的双分量 32 位 BR 平面 1,每个字的低 4 位未使用。BR 平面的水平和垂直尺寸相对于图像尺寸减半,并且每个 R 和 B 值与满足 \(\left\lfloor i_G \times 0.5 \right\rfloor = i_B = i_R\) 和 \(\left\lfloor j_G \times 0.5 \right\rfloor = j_B = j_R\) 的 G 分量共享。当此图像采用线性布局时,可以使用 vkGetImageSubresourceLayout 来确定每个平面的位置,使用 VK_IMAGE_ASPECT_PLANE_0_BIT 表示 G 平面,以及使用 VK_IMAGE_ASPECT_PLANE_1_BIT 表示 BR 平面。此格式仅支持宽度和高度均为 2 的倍数的图像。

  • VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16 指定一个无符号归一化多平面格式,其中平面 0 的每个 16 位字的高 12 位具有 12 位 G 分量,平面 1 的每个 16 位字的高 12 位具有 12 位 B 分量,以及平面 2 的每个 16 位字的高 12 位具有 12 位 R 分量,每个字的低 4 位未使用。R 和 B 平面的水平尺寸相对于图像尺寸减半,并且每个 R 和 B 值与满足 \(\left\lfloor i_G \times 0.5 \right\rfloor = i_B = i_R\) 的 G 分量共享。当此图像采用线性布局时,可以使用 vkGetImageSubresourceLayout 来确定每个平面的位置,使用 VK_IMAGE_ASPECT_PLANE_0_BIT 表示 G 平面,使用 VK_IMAGE_ASPECT_PLANE_1_BIT 表示 B 平面,以及使用 VK_IMAGE_ASPECT_PLANE_2_BIT 表示 R 平面。此格式仅支持宽度为 2 的倍数的图像。

  • VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16 specifies an unsigned normalized multi-planar format that has a 12-bit G component in the top 12 bits of each 16-bit word of plane 0, and a two-component, 32-bit BR plane 1 consisting of a 12-bit B component in the top 12 bits of the word in bytes 0..1, and a 12-bit R component in the top 12 bits of the word in bytes 2..3, with the bottom 4 bits of each word unused. The horizontal dimension of the BR plane is halved relative to the image dimensions, and each R and B value is shared with the G components for which . The location of each plane when this image is in linear layout can be determined via vkGetImageSubresourceLayout, using VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane. This format only supports images with a width that is a multiple of two.

  • VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16 指定一个无符号归一化多平面格式,其中平面 0 的每个 16 位字的高 12 位具有 12 位 G 分量,平面 1 的每个 16 位字的高 12 位具有 12 位 B 分量,以及平面 2 的每个 16 位字的高 12 位具有 12 位 R 分量,每个字的低 4 位未使用。每个平面都具有相同的尺寸,并且每个 R、G 和 B 分量都有助于单个纹素。当此图像采用线性布局时,可以使用 vkGetImageSubresourceLayout 来确定每个平面的位置,使用 VK_IMAGE_ASPECT_PLANE_0_BIT 表示 G 平面,使用 VK_IMAGE_ASPECT_PLANE_1_BIT 表示 B 平面,以及使用 VK_IMAGE_ASPECT_PLANE_2_BIT 表示 R 平面。

  • VK_FORMAT_G16B16G16R16_422_UNORM 指定一个四分量、64 位格式,其中包含一对 G 分量、一个 R 分量和一个 B 分量,共同编码一个 2×1 矩形无符号归一化 RGB 纹素数据。每个 i 坐标都有一个 G 值,B 和 R 值在两个 G 值之间共享,因此以图像水平分辨率的一半记录。此格式在字节 0..1 中的字具有偶数 i 坐标的 16 位 G 分量,在字节 2..3 中的字具有 16 位 B 分量,在字节 4..5 中的字具有奇数 i 坐标的 16 位 G 分量,以及在字节 6..7 中的字具有 16 位 R 分量。此格式仅支持宽度为 2 的倍数的图像。为了约束复制范围,此格式被视为 2×1 压缩纹素块的压缩格式。

  • VK_FORMAT_B16G16R16G16_422_UNORM 指定一个四分量、64 位格式,其中包含一对 G 分量、一个 R 分量和一个 B 分量,共同编码一个 2×1 矩形无符号归一化 RGB 纹素数据。每个 i 坐标都有一个 G 值,B 和 R 值在两个 G 值之间共享,因此以图像水平分辨率的一半记录。此格式在字节 0..1 中的字具有 16 位 B 分量,在字节 2..3 中的字具有偶数 i 坐标的 16 位 G 分量,在字节 4..5 中的字具有 16 位 R 分量,以及在字节 6..7 中的字具有奇数 i 坐标的 16 位 G 分量。此格式仅支持宽度为 2 的倍数的图像。为了约束复制范围,此格式被视为 2×1 压缩纹素块的压缩格式。

  • VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM 指定一个无符号归一化多平面格式,其中平面 0 的每个 16 位字中包含一个 16 位 G 分量,平面 1 的每个 16 位字中包含一个 16 位 B 分量,平面 2 的每个 16 位字中包含一个 16 位 R 分量。R 和 B 平面的水平和垂直维度相对于图像维度减半,并且每个 R 和 B 分量都与满足 \(\left\lfloor i_G \times 0.5 \right\rfloor = i_B = i_R\) 和 \(\left\lfloor j_G \times 0.5 \right\rfloor = j_B = j_R\) 的 G 分量共享。当此图像采用线性布局时,可以使用 vkGetImageSubresourceLayout 确定每个平面的位置,其中 G 平面使用 VK_IMAGE_ASPECT_PLANE_0_BIT,B 平面使用 VK_IMAGE_ASPECT_PLANE_1_BIT,R 平面使用 VK_IMAGE_ASPECT_PLANE_2_BIT。此格式仅支持宽度和高度均为 2 的倍数的图像。

  • VK_FORMAT_G16_B16R16_2PLANE_420_UNORM 指定一个无符号归一化多平面格式,其中平面 0 的每个 16 位字中包含一个 16 位 G 分量,而双分量的 32 位 BR 平面 1 则由字节 0..1 中的 16 位 B 分量和字节 2..3 中的 16 位 R 分量组成。BR 平面的水平和垂直维度相对于图像维度减半,并且每个 R 和 B 值都与满足 \(\left\lfloor i_G \times 0.5 \right\rfloor = i_B = i_R\) 和 \(\left\lfloor j_G \times 0.5 \right\rfloor = j_B = j_R\) 的 G 分量共享。当此图像采用线性布局时,可以使用 vkGetImageSubresourceLayout 确定每个平面的位置,其中 G 平面使用 VK_IMAGE_ASPECT_PLANE_0_BIT,BR 平面使用 VK_IMAGE_ASPECT_PLANE_1_BIT。此格式仅支持宽度和高度均为 2 的倍数的图像。

  • VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM 指定一个无符号归一化多平面格式,其中平面 0 的每个 16 位字中包含一个 16 位 G 分量,平面 1 的每个 16 位字中包含一个 16 位 B 分量,平面 2 的每个 16 位字中包含一个 16 位 R 分量。R 和 B 平面的水平维度相对于图像维度减半,并且每个 R 和 B 值都与满足 \(\left\lfloor i_G \times 0.5 \right\rfloor = i_B = i_R\) 的 G 分量共享。当此图像采用线性布局时,可以使用 vkGetImageSubresourceLayout 确定每个平面的位置,其中 G 平面使用 VK_IMAGE_ASPECT_PLANE_0_BIT,B 平面使用 VK_IMAGE_ASPECT_PLANE_1_BIT,R 平面使用 VK_IMAGE_ASPECT_PLANE_2_BIT。此格式仅支持宽度为 2 的倍数的图像。

  • VK_FORMAT_G16_B16R16_2PLANE_422_UNORM 指定一个无符号归一化的多平面格式,其中平面 0 的每个 16 位字中有一个 16 位 G 分量,以及一个双分量、32 位的 BR 平面 1,它由字节 0..1 中的 16 位 B 分量和字节 2..3 中的 16 位 R 分量组成。BR 平面的水平维度相对于图像维度减半,并且每个 R 和 B 值与以下 G 分量共享。当此图像采用线性布局时,可以使用 vkGetImageSubresourceLayout 确定每个平面的位置,G 平面使用 VK_IMAGE_ASPECT_PLANE_0_BIT,BR 平面使用 VK_IMAGE_ASPECT_PLANE_1_BIT。此格式仅支持宽度为 2 的倍数的图像。

  • VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM 指定一个无符号归一化的多平面格式,其中平面 0 的每个 16 位字包含一个 16 位 G 分量,平面 1 的每个 16 位字包含一个 16 位 B 分量,平面 2 的每个 16 位字包含一个 16 位 R 分量。每个平面具有相同的尺寸,并且每个 R、G 和 B 分量贡献于单个纹素。当此图像以线性布局时,可以使用 vkGetImageSubresourceLayout 确定每个平面的位置,其中 G 平面使用 VK_IMAGE_ASPECT_PLANE_0_BIT,B 平面使用 VK_IMAGE_ASPECT_PLANE_1_BIT,R 平面使用 VK_IMAGE_ASPECT_PLANE_2_BIT

  • VK_FORMAT_G8_B8R8_2PLANE_444_UNORM 指定一个无符号归一化的多平面格式,其中平面 0 包含一个 8 位 G 分量,平面 1 包含一个双分量 16 位 BR 平面,由字节 0 中的 8 位 B 分量和字节 1 中的 8 位 R 分量组成。两个平面都具有相同的尺寸,并且每个 R、G 和 B 分量贡献于单个纹素。当此图像以线性布局时,可以使用 vkGetImageSubresourceLayout 确定每个平面的位置,其中 G 平面使用 VK_IMAGE_ASPECT_PLANE_0_BIT,BR 平面使用 VK_IMAGE_ASPECT_PLANE_1_BIT

  • VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16 指定一个无符号归一化的多平面格式,其中平面 0 的每个 16 位字的高 10 位包含一个 10 位 G 分量,平面 1 包含一个双分量 32 位 BR 平面,由字节 0..1 的字的高 10 位中的 10 位 B 分量,和字节 2..3 的字的高 10 位中的 10 位 R 分量组成,每个字的低 6 位未使用。两个平面都具有相同的尺寸,并且每个 R、G 和 B 分量贡献于单个纹素。当此图像以线性布局时,可以使用 vkGetImageSubresourceLayout 确定每个平面的位置,其中 G 平面使用 VK_IMAGE_ASPECT_PLANE_0_BIT,BR 平面使用 VK_IMAGE_ASPECT_PLANE_1_BIT

  • VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16 指定一个无符号归一化的多平面格式,其中平面 0 的每个 16 位字的高 12 位包含一个 12 位 G 分量,平面 1 包含一个双分量 32 位 BR 平面,由字节 0..1 的字的高 12 位中的 12 位 B 分量,和字节 2..3 的字的高 12 位中的 12 位 R 分量组成,每个字的低 4 位未使用。两个平面都具有相同的尺寸,并且每个 R、G 和 B 分量贡献于单个纹素。当此图像以线性布局时,可以使用 vkGetImageSubresourceLayout 确定每个平面的位置,其中 G 平面使用 VK_IMAGE_ASPECT_PLANE_0_BIT,BR 平面使用 VK_IMAGE_ASPECT_PLANE_1_BIT

  • VK_FORMAT_G16_B16R16_2PLANE_444_UNORM 指定一个无符号归一化的多平面格式,其中平面 0 的每个 16 位字包含一个 16 位 G 分量,平面 1 包含一个双分量 32 位 BR 平面,由字节 0..1 的字中的 16 位 B 分量和字节 2..3 的字中的 16 位 R 分量组成。两个平面都具有相同的尺寸,并且每个 R、G 和 B 分量贡献于单个纹素。当此图像以线性布局时,可以使用 vkGetImageSubresourceLayout 确定每个平面的位置,其中 G 平面使用 VK_IMAGE_ASPECT_PLANE_0_BIT,BR 平面使用 VK_IMAGE_ASPECT_PLANE_1_BIT

  • VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG 指定一个四分量的 PVRTC 压缩格式,其中每个 64 位压缩纹素块编码一个 8×4 矩形的无符号归一化 RGBA 纹素数据。

  • VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG 指定一个四分量的 PVRTC 压缩格式,其中每个 64 位压缩纹素块编码一个 4×4 矩形的无符号归一化 RGBA 纹素数据。

  • VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG 指定一个四分量的 PVRTC 压缩格式,其中每个 64 位压缩纹素块编码一个 8×4 矩形的无符号归一化 RGBA 纹素数据。

  • VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG 指定一个四分量的 PVRTC 压缩格式,其中每个 64 位压缩纹素块编码一个 4×4 矩形的无符号归一化 RGBA 纹素数据。

  • VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG 指定一个四分量的 PVRTC 压缩格式,其中每个 64 位压缩纹素块编码一个 8×4 矩形的无符号归一化 RGBA 纹素数据,并且对 RGB 分量应用 sRGB 非线性编码。

  • VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG 指定一个四分量的 PVRTC 压缩格式,其中每个 64 位压缩纹素块编码一个 4×4 矩形的无符号归一化 RGBA 纹素数据,并且对 RGB 分量应用 sRGB 非线性编码。

  • VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG 指定一个四分量的 PVRTC 压缩格式,其中每个 64 位压缩纹素块编码一个 8×4 矩形的无符号归一化 RGBA 纹素数据,并且对 RGB 分量应用 sRGB 非线性编码。

  • VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG 指定一个四分量的 PVRTC 压缩格式,其中每个 64 位压缩纹素块编码一个 4×4 矩形的无符号归一化 RGBA 纹素数据,并且对 RGB 分量应用 sRGB 非线性编码。

  • VK_FORMAT_R16G16_SFIXED5_NV 指定一个双分量、16 位有符号定点格式,采用线性编码。这些分量是有符号的二进制补码整数,其中最高位指定符号位,接下来的 10 位指定整数值,最后 5 位表示小数部分。有符号的 16 位值**可以**通过将该值除以 32 (25) 转换为范围 [-1024,1023.96875] 内的浮点数。

多平面格式的平面兼容格式

如果多平面格式的各个平面每个纹素块占用相同数量的位,并且具有相同的块范围,则它们与单平面颜色格式在尺寸上兼容,并且与这些格式兼容。

在下表中,多平面格式的各个平面与针对该多平面格式的相关平面索引列出的格式兼容,并且与根据格式兼容性类列出的任何与单平面格式兼容的格式兼容。这些平面也与任何尺寸兼容的格式尺寸兼容

表 1. 平面格式兼容性表
平面 平面兼容格式 相对于具有最大尺寸的平面的宽度w 的宽度 相对于具有最大尺寸的平面的高度h 的高度

VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM

0

VK_FORMAT_R8_UNORM

w

h

1

VK_FORMAT_R8_UNORM

w/2

h/2

2

VK_FORMAT_R8_UNORM

w/2

h/2

VK_FORMAT_G8_B8R8_2PLANE_420_UNORM

0

VK_FORMAT_R8_UNORM

w

h

1

VK_FORMAT_R8G8_UNORM

w/2

h/2

VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM

0

VK_FORMAT_R8_UNORM

w

h

1

VK_FORMAT_R8_UNORM

w/2

h

2

VK_FORMAT_R8_UNORM

w/2

h

VK_FORMAT_G8_B8R8_2PLANE_422_UNORM

0

VK_FORMAT_R8_UNORM

w

h

1

VK_FORMAT_R8G8_UNORM

w/2

h

VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM

0

VK_FORMAT_R8_UNORM

w

h

1

VK_FORMAT_R8_UNORM

w

h

2

VK_FORMAT_R8_UNORM

w

h

VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16

0

VK_FORMAT_R10X6_UNORM_PACK16

w

h

1

VK_FORMAT_R10X6_UNORM_PACK16

w/2

h/2

2

VK_FORMAT_R10X6_UNORM_PACK16

w/2

h/2

VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16

0

VK_FORMAT_R10X6_UNORM_PACK16

w

h

1

VK_FORMAT_R10X6G10X6_UNORM_2PACK16

w/2

h/2

VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16

0

VK_FORMAT_R10X6_UNORM_PACK16

w

h

1

VK_FORMAT_R10X6_UNORM_PACK16

w/2

h

2

VK_FORMAT_R10X6_UNORM_PACK16

w/2

h

VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16

0

VK_FORMAT_R10X6_UNORM_PACK16

w

h

1

VK_FORMAT_R10X6G10X6_UNORM_2PACK16

w/2

h

VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16

0

VK_FORMAT_R10X6_UNORM_PACK16

w

h

1

VK_FORMAT_R10X6_UNORM_PACK16

w

h

2

VK_FORMAT_R10X6_UNORM_PACK16

w

h

VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16

0

VK_FORMAT_R12X4_UNORM_PACK16

w

h

1

VK_FORMAT_R12X4_UNORM_PACK16

w/2

h/2

2

VK_FORMAT_R12X4_UNORM_PACK16

w/2

h/2

VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16

0

VK_FORMAT_R12X4_UNORM_PACK16

w

h

1

VK_FORMAT_R12X4G12X4_UNORM_2PACK16

w/2

h/2

VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16

0

VK_FORMAT_R12X4_UNORM_PACK16

w

h

1

VK_FORMAT_R12X4_UNORM_PACK16

w/2

h

2

VK_FORMAT_R12X4_UNORM_PACK16

w/2

h

VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16

0

VK_FORMAT_R12X4_UNORM_PACK16

w

h

1

VK_FORMAT_R12X4G12X4_UNORM_2PACK16

w/2

h

VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16

0

VK_FORMAT_R12X4_UNORM_PACK16

w

h

1

VK_FORMAT_R12X4_UNORM_PACK16

w

h

2

VK_FORMAT_R12X4_UNORM_PACK16

w

h

VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM

0

VK_FORMAT_R16_UNORM

w

h

1

VK_FORMAT_R16_UNORM

w/2

h/2

2

VK_FORMAT_R16_UNORM

w/2

h/2

VK_FORMAT_G16_B16R16_2PLANE_420_UNORM

0

VK_FORMAT_R16_UNORM

w

h

1

VK_FORMAT_R16G16_UNORM

w/2

h/2

VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM

0

VK_FORMAT_R16_UNORM

w

h

1

VK_FORMAT_R16_UNORM

w/2

h

2

VK_FORMAT_R16_UNORM

w/2

h

VK_FORMAT_G16_B16R16_2PLANE_422_UNORM

0

VK_FORMAT_R16_UNORM

w

h

1

VK_FORMAT_R16G16_UNORM

w/2

h

VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM

0

VK_FORMAT_R16_UNORM

w

h

1

VK_FORMAT_R16_UNORM

w

h

2

VK_FORMAT_R16_UNORM

w

h

VK_FORMAT_G8_B8R8_2PLANE_444_UNORM

0

VK_FORMAT_R8_UNORM

w

h

1

VK_FORMAT_R8G8_UNORM

w

h

VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16

0

VK_FORMAT_R10X6_UNORM_PACK16

w

h

1

VK_FORMAT_R10X6G10X6_UNORM_2PACK16

w

h

VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16

0

VK_FORMAT_R12X4_UNORM_PACK16

w

h

1

VK_FORMAT_R12X4G12X4_UNORM_2PACK16

w

h

VK_FORMAT_G16_B16R16_2PLANE_444_UNORM

0

VK_FORMAT_R16_UNORM

w

h

1

VK_FORMAT_R16G16_UNORM

w

h

深度模板到/从颜色复制的兼容格式

如果启用了maintenance8 功能,则在执行按位复制操作时,深度模板格式的各个方面与某些单分量颜色格式在尺寸上兼容。以下是所有按方面尺寸划分的格式兼容性关系的完整列表

  • 32 位深度 (VK_FORMAT_D32_SFLOAT, VK_FORMAT_D32_SFLOAT_S8_UINT)

    • VK_FORMAT_R32_SFLOAT, VK_FORMAT_R32_SINT, VK_FORMAT_R32_UINT

  • 24 位深度 (VK_FORMAT_X8_D24_UNORM_PACK32, VK_FORMAT_D24_UNORM_S8_UINT)

    • VK_FORMAT_R32_SFLOAT, VK_FORMAT_R32_SINT, VK_FORMAT_R32_UINT

  • 16 位深度 (VK_FORMAT_D16_UNORM, VK_FORMAT_D16_UNORM_S8_UINT)

    • VK_FORMAT_R16_SFLOAT, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_SNORM, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT

  • 8 位模版 (VK_FORMAT_S8_UINT, VK_FORMAT_D16_UNORM_S8_UINT, VK_FORMAT_D24_UNORM_S8_UINT, VK_FORMAT_D32_SFLOAT_S8_UINT)

    • VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R8_UNORM, VK_FORMAT_R8_SNORM

多平面格式图像纵横比

当使用 VkImageAspectFlagBits 来选择多平面格式的平面时,以下是有效的选项

  • 两个平面

    • VK_IMAGE_ASPECT_PLANE_0_BIT

    • VK_IMAGE_ASPECT_PLANE_1_BIT

  • 三个平面

    • VK_IMAGE_ASPECT_PLANE_0_BIT

    • VK_IMAGE_ASPECT_PLANE_1_BIT

    • VK_IMAGE_ASPECT_PLANE_2_BIT

打包格式

出于访问包含顶点属性或纹素数据的缓冲内存时的地址对齐目的,以下格式被认为是打包的 - 纹素或属性的组成部分存储在打包到一个或多个 8 位、16 位或 32 位基本数据类型的位字段中。

  • 打包到 8 位数据类型中:

    • VK_FORMAT_R4G4_UNORM_PACK8

  • 打包到 16 位数据类型中:

    • VK_FORMAT_R4G4B4A4_UNORM_PACK16

    • VK_FORMAT_B4G4R4A4_UNORM_PACK16

    • VK_FORMAT_R5G6B5_UNORM_PACK16

    • VK_FORMAT_B5G6R5_UNORM_PACK16

    • VK_FORMAT_R5G5B5A1_UNORM_PACK16

    • VK_FORMAT_B5G5R5A1_UNORM_PACK16

    • VK_FORMAT_A1R5G5B5_UNORM_PACK16

    • VK_FORMAT_A1B5G5R5_UNORM_PACK16

    • VK_FORMAT_R10X6_UNORM_PACK16

    • VK_FORMAT_R10X6G10X6_UNORM_2PACK16

    • VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16

    • VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16

    • VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16

    • VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16

    • VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16

    • VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16

    • VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16

    • VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16

    • VK_FORMAT_R12X4_UNORM_PACK16

    • VK_FORMAT_R12X4G12X4_UNORM_2PACK16

    • VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16

    • VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16

    • VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16

    • VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16

    • VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16

    • VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16

    • VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16

    • VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16

    • VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16

    • VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16

    • VK_FORMAT_A4R4G4B4_UNORM_PACK16

    • VK_FORMAT_A4B4G4R4_UNORM_PACK16

  • 打包到 32 位数据类型中:

    • VK_FORMAT_A8B8G8R8_UNORM_PACK32

    • VK_FORMAT_A8B8G8R8_SNORM_PACK32

    • VK_FORMAT_A8B8G8R8_USCALED_PACK32

    • VK_FORMAT_A8B8G8R8_SSCALED_PACK32

    • VK_FORMAT_A8B8G8R8_UINT_PACK32

    • VK_FORMAT_A8B8G8R8_SINT_PACK32

    • VK_FORMAT_A8B8G8R8_SRGB_PACK32

    • VK_FORMAT_A2R10G10B10_UNORM_PACK32

    • VK_FORMAT_A2R10G10B10_SNORM_PACK32

    • VK_FORMAT_A2R10G10B10_USCALED_PACK32

    • VK_FORMAT_A2R10G10B10_SSCALED_PACK32

    • VK_FORMAT_A2R10G10B10_UINT_PACK32

    • VK_FORMAT_A2R10G10B10_SINT_PACK32

    • VK_FORMAT_A2B10G10R10_UNORM_PACK32

    • VK_FORMAT_A2B10G10R10_SNORM_PACK32

    • VK_FORMAT_A2B10G10R10_USCALED_PACK32

    • VK_FORMAT_A2B10G10R10_SSCALED_PACK32

    • VK_FORMAT_A2B10G10R10_UINT_PACK32

    • VK_FORMAT_A2B10G10R10_SINT_PACK32

    • VK_FORMAT_B10G11R11_UFLOAT_PACK32

    • VK_FORMAT_E5B9G9R9_UFLOAT_PACK32

    • VK_FORMAT_X8_D24_UNORM_PACK32

格式的识别

“格式”由单个枚举值表示。格式的名称通常使用以下模式构建

    VK_FORMAT_{component-format|compression-scheme}_{numeric-format}

组件格式表示颜色格式中 R、G、B 和 A 分量(如果存在)的大小,或者深度/模版格式中深度 (D) 和模版 (S) 分量(如果存在)的大小(见下文)。 X 表示未使用的组件,但可能会为了填充而存在。

表 2. 数字格式的解释
数字格式 类型声明指令 数字类型 描述

UNORM

OpTypeFloat

浮点数

分量是范围 [0,1] 中的无符号归一化值

SNORM

OpTypeFloat

浮点数

分量是范围 [-1,1] 中的有符号归一化值

USCALED

OpTypeFloat

浮点数

分量是无符号整数值,在范围 [0,2n-1] 中转换为浮点数

SSCALED

OpTypeFloat

浮点数

分量是有符号整数值,在范围 [-2n-1,2n-1-1] 中转换为浮点数

UINT

OpTypeInt

无符号整数

分量是范围 [0,2n-1] 中的无符号整数值

SINT

OpTypeInt

有符号整数

分量是范围 [-2n-1,2n-1-1] 中的有符号整数值

UFLOAT

OpTypeFloat

浮点数

分量是无符号浮点数(由打包、共享指数和一些压缩格式使用)

SFLOAT

OpTypeFloat

浮点数

分量是有符号浮点数

SRGB

OpTypeFloat

浮点数

R、G 和 B 分量是使用 sRGB 非线性编码表示值的无符号归一化值,而 A 分量(如果存在)是规则的无符号归一化值

SFIXED5

OpTypeInt

缩放的有符号整数

分量是缩放的有符号分数整数值,在范围 [-1024,1023.96875] 中转换为浮点数

n 是分量中的位数。

后缀 _PACKnn 表示格式被打包到具有 nn 位的底层类型中。后缀 _mPACKnn 是一种简写,表示格式具有 m 组分量(可能存储在单独的平面中,也可能不存储在单独的平面中),每组分量都打包到具有 nn 位的底层类型中。

后缀 _BLOCK 表示该格式是块压缩格式,其中多个像素的表示形式在区域内相互依赖地编码。

表 3. 压缩方案的解释
压缩方案 描述

BC

块压缩。请参阅 块压缩图像格式

ETC2

爱立信纹理压缩。请参阅 ETC 压缩图像格式

EAC

ETC2 Alpha 压缩。请参阅 ETC 压缩图像格式

ASTC

自适应可缩放纹理压缩(LDR 配置文件)。请参阅 ASTC 压缩图像格式

对于多平面图像,单独平面中的分量用下划线分隔,并且平面的数量由添加 _2PLANE_3PLANE 后缀表示。类似地,深度模版格式的单独方面用下划线分隔,尽管这些方面不被认为是单独的平面。格式后缀为 _422 表示除第一个平面之外的平面在水平方向上缩小了二分之一,或者 R 和 B 值以 G 值水平频率的一半出现,_420 表示除第一个平面之外的平面在水平和垂直方向上都缩小了二分之一,并且 _444 为了保持一致性,表示三平面图像的所有三个平面都具有相同的大小。

没有常见的格式具有包含 R 和 B 分量的单个平面,但不会以降低的水平分辨率存储这些分量。

表示形式和纹素块大小

颜色格式必须以格式名称指示的确切形式在内存中表示。这意味着对于颜色格式,不得发生将一种格式提升为每分量具有更多位和/或附加分量的另一种格式。深度/模版格式的要求更为宽松,如下面 讨论

每种格式都有一个纹素块大小,即用于存储一个纹素块(未压缩图像的单个可寻址元素,或压缩图像的单个压缩块)的字节数。每种格式的纹素块大小显示在兼容格式表中。

非打包格式的表示方式是,格式名称中指定的第一个分量位于最低的内存地址,而最后一个分量位于最高的内存地址。请参阅非打包/压缩颜色格式的字节映射。分量中字节的内存顺序由主机字节序决定。

表 4. 非打包/压缩颜色格式的字节映射
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ← 字节

R

VK_FORMAT_R8_*

R

G

VK_FORMAT_R8G8_*

R

G

B

VK_FORMAT_R8G8B8_*

B

G

R

VK_FORMAT_B8G8R8_*

R

G

B

A

VK_FORMAT_R8G8B8A8_*

B

G

R

A

VK_FORMAT_B8G8R8A8_*

A

VK_FORMAT_A8_UNORM

G0

B

G1

R

VK_FORMAT_G8B8G8R8_422_UNORM

B

G0

R

G1

VK_FORMAT_B8G8R8G8_422_UNORM

R

VK_FORMAT_R16_*

R

G

VK_FORMAT_R16G16_*

R

G

B

VK_FORMAT_R16G16B16_*

R

G

B

A

VK_FORMAT_R16G16B16A16_*

G0

B

G1

R

VK_FORMAT_G10X6B10X6G10X6R10X6_4PACK16_422_UNORM VK_FORMAT_G12X4B12X4G12X4R12X4_4PACK16_422_UNORM VK_FORMAT_G16B16G16R16_UNORM

B

G0

R

G1

VK_FORMAT_B10X6G10X6R10X6G10X6_4PACK16_422_UNORM VK_FORMAT_B12X4G12X4R12X4G12X4_4PACK16_422_UNORM VK_FORMAT_B16G16R16G16_422_UNORM

R

VK_FORMAT_R32_*

R

G

VK_FORMAT_R32G32_*

R

G

B

VK_FORMAT_R32G32B32_*

R

G

B

A

VK_FORMAT_R32G32B32A32_*

R

VK_FORMAT_R64_*

R

G

VK_FORMAT_R64G64_*

VK_FORMAT_R64G64B64_*VK_FORMAT_R64G64_* 相同,但 B 位于字节 16-23 中

VK_FORMAT_R64G64B64A64_*VK_FORMAT_R64G64B64_* 相同,但 A 位于字节 24-31 中

打包格式在一个底层类型中存储多个分量。位表示方式是,格式名称中指定的第一个分量位于最高有效位,而最后一个分量位于底层类型的最低有效位。构成底层类型的字节的内存顺序由主机字节序决定。

表 5. 打包的 8 位格式的位映射

7

6

5

4

3

2

1

0

VK_FORMAT_R4G4_UNORM_PACK8

R

G

3

2

1

0

3

2

1

0

表 6. 打包的 16 位格式的位映射

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

VK_FORMAT_R4G4B4A4_UNORM_PACK16

R

G

B

A

3

2

1

0

3

2

1

0

3

2

1

0

3

2

1

0

VK_FORMAT_B4G4R4A4_UNORM_PACK16

B

G

R

A

3

2

1

0

3

2

1

0

3

2

1

0

3

2

1

0

VK_FORMAT_A4R4G4B4_UNORM_PACK16

A

R

G

B

3

2

1

0

3

2

1

0

3

2

1

0

3

2

1

0

VK_FORMAT_A4B4G4R4_UNORM_PACK16

A

B

G

R

3

2

1

0

3

2

1

0

3

2

1

0

3

2

1

0

VK_FORMAT_R5G6B5_UNORM_PACK16

R

G

B

4

3

2

1

0

5

4

3

2

1

0

4

3

2

1

0

VK_FORMAT_B5G6R5_UNORM_PACK16

B

G

R

4

3

2

1

0

5

4

3

2

1

0

4

3

2

1

0

VK_FORMAT_R5G5B5A1_UNORM_PACK16

R

G

B

A

4

3

2

1

0

4

3

2

1

0

4

3

2

1

0

0

VK_FORMAT_B5G5R5A1_UNORM_PACK16

B

G

R

A

4

3

2

1

0

4

3

2

1

0

4

3

2

1

0

0

VK_FORMAT_A1R5G5B5_UNORM_PACK16

A

R

G

B

0

4

3

2

1

0

4

3

2

1

0

4

3

2

1

0

VK_FORMAT_A1B5G5R5_UNORM_PACK16

A

B

G

R

0

4

3

2

1

0

4

3

2

1

0

4

3

2

1

0

VK_FORMAT_R10X6_UNORM_PACK16

R

X

9

8

7

6

5

4

3

2

1

0

5

4

3

2

1

0

VK_FORMAT_R12X4_UNORM_PACK16

R

X

11

10

9

8

7

6

5

4

3

2

1

0

3

2

1

0

表 7. 打包的 32 位格式的位映射

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

VK_FORMAT_A8B8G8R8_*_PACK32

A

B

G

R

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

VK_FORMAT_A2R10G10B10_*_PACK32

A

R

G

B

1

0

9

8

7

6

5

4

3

2

1

0

9

8

7

6

5

4

3

2

1

0

9

8

7

6

5

4

3

2

1

0

VK_FORMAT_A2B10G10R10_*_PACK32

A

B

G

R

1

0

9

8

7

6

5

4

3

2

1

0

9

8

7

6

5

4

3

2

1

0

9

8

7

6

5

4

3

2

1

0

VK_FORMAT_B10G11R11_UFLOAT_PACK32

B

G

R

9

8

7

6

5

4

3

2

1

0

10

9

8

7

6

5

4

3

2

1

0

10

9

8

7

6

5

4

3

2

1

0

VK_FORMAT_E5B9G9R9_UFLOAT_PACK32

E

B

G

R

4

3

2

1

0

8

7

6

5

4

3

2

1

0

8

7

6

5

4

3

2

1

0

8

7

6

5

4

3

2

1

0

VK_FORMAT_X8_D24_UNORM_PACK32

X

D

7

6

5

4

3

2

1

0

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

深度/模板格式

深度/模板格式被认为是 opaque 的,不需要按照格式枚举指示的每个纹素或分量的精确位数来存储。但是,实现必须不能替换与格式中描述不同的深度或模板精度(例如,D16 必须不能实现为 D24 或 D32)。

格式兼容性类

如果未压缩的颜色格式每个纹素块占用的位数相同,并且它们都不是 alpha 格式或都是 alpha 格式(例如,VK_FORMAT_A8_UNORM),则它们是彼此兼容的。如果压缩颜色格式之间的唯一区别是未压缩像素的数值格式,则它们彼此兼容。每个深度/模板格式只与自身兼容。在以下表中,同一行中的所有格式都是兼容的。每种格式都有一个定义的纹素块范围,指定每个纹素块在每个维度中表示多少个纹素。

表 8. 兼容格式
类、纹素块大小、纹素块范围、# 纹素/块 格式

8 位
块大小 1 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_R4G4_UNORM_PACK8,
VK_FORMAT_R8_UNORM,
VK_FORMAT_R8_SNORM,
VK_FORMAT_R8_USCALED,
VK_FORMAT_R8_SSCALED,
VK_FORMAT_R8_UINT,
VK_FORMAT_R8_SINT,
VK_FORMAT_R8_SRGB

16 位
块大小 2 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_A1B5G5R5_UNORM_PACK16,
VK_FORMAT_R10X6_UNORM_PACK16,
VK_FORMAT_R12X4_UNORM_PACK16,
VK_FORMAT_A4R4G4B4_UNORM_PACK16,
VK_FORMAT_A4B4G4R4_UNORM_PACK16,
VK_FORMAT_R4G4B4A4_UNORM_PACK16,
VK_FORMAT_B4G4R4A4_UNORM_PACK16,
VK_FORMAT_R5G6B5_UNORM_PACK16,
VK_FORMAT_B5G6R5_UNORM_PACK16,
VK_FORMAT_R5G5B5A1_UNORM_PACK16,
VK_FORMAT_B5G5R5A1_UNORM_PACK16,
VK_FORMAT_A1R5G5B5_UNORM_PACK16,
VK_FORMAT_R8G8_UNORM,
VK_FORMAT_R8G8_SNORM,
VK_FORMAT_R8G8_USCALED,
VK_FORMAT_R8G8_SSCALED,
VK_FORMAT_R8G8_UINT,
VK_FORMAT_R8G8_SINT,
VK_FORMAT_R8G8_SRGB,
VK_FORMAT_R16_UNORM,
VK_FORMAT_R16_SNORM,
VK_FORMAT_R16_USCALED,
VK_FORMAT_R16_SSCALED,
VK_FORMAT_R16_UINT,
VK_FORMAT_R16_SINT,
VK_FORMAT_R16_SFLOAT

8 位 alpha
块大小 1 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_A8_UNORM

24 位
块大小 3 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_R8G8B8_UNORM,
VK_FORMAT_R8G8B8_SNORM,
VK_FORMAT_R8G8B8_USCALED,
VK_FORMAT_R8G8B8_SSCALED,
VK_FORMAT_R8G8B8_UINT,
VK_FORMAT_R8G8B8_SINT,
VK_FORMAT_R8G8B8_SRGB,
VK_FORMAT_B8G8R8_UNORM,
VK_FORMAT_B8G8R8_SNORM,
VK_FORMAT_B8G8R8_USCALED,
VK_FORMAT_B8G8R8_SSCALED,
VK_FORMAT_B8G8R8_UINT,
VK_FORMAT_B8G8R8_SINT,
VK_FORMAT_B8G8R8_SRGB

32 位
块大小 4 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_R10X6G10X6_UNORM_2PACK16,
VK_FORMAT_R12X4G12X4_UNORM_2PACK16,
VK_FORMAT_R16G16_SFIXED5_NV,
VK_FORMAT_R8G8B8A8_UNORM,
VK_FORMAT_R8G8B8A8_SNORM,
VK_FORMAT_R8G8B8A8_USCALED,
VK_FORMAT_R8G8B8A8_SSCALED,
VK_FORMAT_R8G8B8A8_UINT,
VK_FORMAT_R8G8B8A8_SINT,
VK_FORMAT_R8G8B8A8_SRGB,
VK_FORMAT_B8G8R8A8_UNORM,
VK_FORMAT_B8G8R8A8_SNORM,
VK_FORMAT_B8G8R8A8_USCALED,
VK_FORMAT_B8G8R8A8_SSCALED,
VK_FORMAT_B8G8R8A8_UINT,
VK_FORMAT_B8G8R8A8_SINT,
VK_FORMAT_B8G8R8A8_SRGB,
VK_FORMAT_A8B8G8R8_UNORM_PACK32,
VK_FORMAT_A8B8G8R8_SNORM_PACK32,
VK_FORMAT_A8B8G8R8_USCALED_PACK32,
VK_FORMAT_A8B8G8R8_SSCALED_PACK32,
VK_FORMAT_A8B8G8R8_UINT_PACK32,
VK_FORMAT_A8B8G8R8_SINT_PACK32,
VK_FORMAT_A8B8G8R8_SRGB_PACK32,
VK_FORMAT_A2R10G10B10_UNORM_PACK32,
VK_FORMAT_A2R10G10B10_SNORM_PACK32,
VK_FORMAT_A2R10G10B10_USCALED_PACK32,
VK_FORMAT_A2R10G10B10_SSCALED_PACK32,
VK_FORMAT_A2R10G10B10_UINT_PACK32,
VK_FORMAT_A2R10G10B10_SINT_PACK32,
VK_FORMAT_A2B10G10R10_UNORM_PACK32,
VK_FORMAT_A2B10G10R10_SNORM_PACK32,
VK_FORMAT_A2B10G10R10_USCALED_PACK32,
VK_FORMAT_A2B10G10R10_SSCALED_PACK32,
VK_FORMAT_A2B10G10R10_UINT_PACK32,
VK_FORMAT_A2B10G10R10_SINT_PACK32,
VK_FORMAT_R16G16_UNORM,
VK_FORMAT_R16G16_SNORM,
VK_FORMAT_R16G16_USCALED,
VK_FORMAT_R16G16_SSCALED,
VK_FORMAT_R16G16_UINT,
VK_FORMAT_R16G16_SINT,
VK_FORMAT_R16G16_SFLOAT,
VK_FORMAT_R32_UINT,
VK_FORMAT_R32_SINT,
VK_FORMAT_R32_SFLOAT,
VK_FORMAT_B10G11R11_UFLOAT_PACK32,
VK_FORMAT_E5B9G9R9_UFLOAT_PACK32

48 位
块大小 6 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_R16G16B16_UNORM,
VK_FORMAT_R16G16B16_SNORM,
VK_FORMAT_R16G16B16_USCALED,
VK_FORMAT_R16G16B16_SSCALED,
VK_FORMAT_R16G16B16_UINT,
VK_FORMAT_R16G16B16_SINT,
VK_FORMAT_R16G16B16_SFLOAT

64 位
块大小 8 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_R16G16B16A16_UNORM,
VK_FORMAT_R16G16B16A16_SNORM,
VK_FORMAT_R16G16B16A16_USCALED,
VK_FORMAT_R16G16B16A16_SSCALED,
VK_FORMAT_R16G16B16A16_UINT,
VK_FORMAT_R16G16B16A16_SINT,
VK_FORMAT_R16G16B16A16_SFLOAT,
VK_FORMAT_R32G32_UINT,
VK_FORMAT_R32G32_SINT,
VK_FORMAT_R32G32_SFLOAT,
VK_FORMAT_R64_UINT,
VK_FORMAT_R64_SINT,
VK_FORMAT_R64_SFLOAT

96 位
块大小 12 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_R32G32B32_UINT,
VK_FORMAT_R32G32B32_SINT,
VK_FORMAT_R32G32B32_SFLOAT

128 位
块大小 16 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_R32G32B32A32_UINT,
VK_FORMAT_R32G32B32A32_SINT,
VK_FORMAT_R32G32B32A32_SFLOAT,
VK_FORMAT_R64G64_UINT,
VK_FORMAT_R64G64_SINT,
VK_FORMAT_R64G64_SFLOAT

192 位
块大小 24 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_R64G64B64_UINT,
VK_FORMAT_R64G64B64_SINT,
VK_FORMAT_R64G64B64_SFLOAT

256 位
块大小 32 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_R64G64B64A64_UINT,
VK_FORMAT_R64G64B64A64_SINT,
VK_FORMAT_R64G64B64A64_SFLOAT

D16
块大小 2 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_D16_UNORM

D24
块大小 4 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_X8_D24_UNORM_PACK32

D32
块大小 4 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_D32_SFLOAT

S8
块大小 1 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_S8_UINT

D16S8
块大小 3 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_D16_UNORM_S8_UINT

D24S8
块大小 4 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_D24_UNORM_S8_UINT

D32S8
块大小 5 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_D32_SFLOAT_S8_UINT

BC1_RGB
块大小 8 字节
4x4x1 块范围
16 纹素/块

VK_FORMAT_BC1_RGB_UNORM_BLOCK,
VK_FORMAT_BC1_RGB_SRGB_BLOCK

BC1_RGBA
块大小 8 字节
4x4x1 块范围
16 纹素/块

VK_FORMAT_BC1_RGBA_UNORM_BLOCK,
VK_FORMAT_BC1_RGBA_SRGB_BLOCK

BC2
块大小 16 字节
4x4x1 块范围
16 纹素/块

VK_FORMAT_BC2_UNORM_BLOCK,
VK_FORMAT_BC2_SRGB_BLOCK

BC3
块大小 16 字节
4x4x1 块范围
16 纹素/块

VK_FORMAT_BC3_UNORM_BLOCK,
VK_FORMAT_BC3_SRGB_BLOCK

BC4
块大小 8 字节
4x4x1 块范围
16 纹素/块

VK_FORMAT_BC4_UNORM_BLOCK,
VK_FORMAT_BC4_SNORM_BLOCK

BC5
块大小 16 字节
4x4x1 块范围
16 纹素/块

VK_FORMAT_BC5_UNORM_BLOCK,
VK_FORMAT_BC5_SNORM_BLOCK

BC6H
块大小 16 字节
4x4x1 块范围
16 纹素/块

VK_FORMAT_BC6H_UFLOAT_BLOCK,
VK_FORMAT_BC6H_SFLOAT_BLOCK

BC7
块大小 16 字节
4x4x1 块范围
16 纹素/块

VK_FORMAT_BC7_UNORM_BLOCK,
VK_FORMAT_BC7_SRGB_BLOCK

ETC2_RGB
块大小 8 字节
4x4x1 块范围
16 纹素/块

VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK,
VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK

ETC2_RGBA
块大小 8 字节
4x4x1 块范围
16 纹素/块

VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK,
VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK

ETC2_EAC_RGBA
块大小 16 字节
4x4x1 块范围
16 纹素/块

VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK,
VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK

EAC_R
块大小 8 字节
4x4x1 块范围
16 纹素/块

VK_FORMAT_EAC_R11_UNORM_BLOCK,
VK_FORMAT_EAC_R11_SNORM_BLOCK

EAC_RG
块大小 16 字节
4x4x1 块范围
16 纹素/块

VK_FORMAT_EAC_R11G11_UNORM_BLOCK,
VK_FORMAT_EAC_R11G11_SNORM_BLOCK

ASTC_4x4
块大小 16 字节
4x4x1 块范围
16 纹素/块

VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK,
VK_FORMAT_ASTC_4x4_UNORM_BLOCK,
VK_FORMAT_ASTC_4x4_SRGB_BLOCK

ASTC_5x4
块大小 16 字节
5x4x1 块范围
20 纹素/块

VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK,
VK_FORMAT_ASTC_5x4_UNORM_BLOCK,
VK_FORMAT_ASTC_5x4_SRGB_BLOCK

ASTC_5x5
块大小 16 字节
5x5x1 块范围
25 纹素/块

VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK,
VK_FORMAT_ASTC_5x5_UNORM_BLOCK,
VK_FORMAT_ASTC_5x5_SRGB_BLOCK

ASTC_6x5
块大小 16 字节
6x5x1 块范围
30 纹素/块

VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK,
VK_FORMAT_ASTC_6x5_UNORM_BLOCK,
VK_FORMAT_ASTC_6x5_SRGB_BLOCK

ASTC_6x6
块大小 16 字节
6x6x1 块范围
36 纹素/块

VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK,
VK_FORMAT_ASTC_6x6_UNORM_BLOCK,
VK_FORMAT_ASTC_6x6_SRGB_BLOCK

ASTC_8x5
块大小 16 字节
8x5x1 块范围
40 纹素/块

VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK,
VK_FORMAT_ASTC_8x5_UNORM_BLOCK,
VK_FORMAT_ASTC_8x5_SRGB_BLOCK

ASTC_8x6
块大小 16 字节
8x6x1 块范围
48 纹素/块

VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK,
VK_FORMAT_ASTC_8x6_UNORM_BLOCK,
VK_FORMAT_ASTC_8x6_SRGB_BLOCK

ASTC_8x8
块大小 16 字节
8x8x1 块范围
64 纹素/块

VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK,
VK_FORMAT_ASTC_8x8_UNORM_BLOCK,
VK_FORMAT_ASTC_8x8_SRGB_BLOCK

ASTC_10x5
块大小 16 字节
10x5x1 块范围
50 纹素/块

VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK,
VK_FORMAT_ASTC_10x5_UNORM_BLOCK,
VK_FORMAT_ASTC_10x5_SRGB_BLOCK

ASTC_10x6
块大小 16 字节
10x6x1 块范围
60 纹素/块

VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK,
VK_FORMAT_ASTC_10x6_UNORM_BLOCK,
VK_FORMAT_ASTC_10x6_SRGB_BLOCK

ASTC_10x8
块大小 16 字节
10x8x1 块范围
80 纹素/块

VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK,
VK_FORMAT_ASTC_10x8_UNORM_BLOCK,
VK_FORMAT_ASTC_10x8_SRGB_BLOCK

ASTC_10x10
块大小 16 字节
10x10x1 块范围
100 纹素/块

VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK,
VK_FORMAT_ASTC_10x10_UNORM_BLOCK,
VK_FORMAT_ASTC_10x10_SRGB_BLOCK

ASTC_12x10
块大小 16 字节
12x10x1 块范围
120 纹素/块

VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK,
VK_FORMAT_ASTC_12x10_UNORM_BLOCK,
VK_FORMAT_ASTC_12x10_SRGB_BLOCK

ASTC_12x12
块大小 16 字节
12x12x1 块范围
144 纹素/块

VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK,
VK_FORMAT_ASTC_12x12_UNORM_BLOCK,
VK_FORMAT_ASTC_12x12_SRGB_BLOCK

32 位 G8B8G8R8
块大小 4 字节
2x1x1 块范围
1 纹素/块

VK_FORMAT_G8B8G8R8_422_UNORM

32 位 B8G8R8G8
块大小 4 字节
2x1x1 块范围
1 纹素/块

VK_FORMAT_B8G8R8G8_422_UNORM

8 位 3 平面 420
块大小 3 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM

8 位 2 平面 420
块大小 3 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_G8_B8R8_2PLANE_420_UNORM

8 位 3 平面 422
块大小 3 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM

8 位 2 平面 422
块大小 3 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_G8_B8R8_2PLANE_422_UNORM

8 位 3 平面 444
块大小 3 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM

64 位 R10G10B10A10
块大小 8 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16

64 位 G10B10G10R10
块大小 8 字节
2x1x1 块范围
1 纹素/块

VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16

64 位 B10G10R10G10
块大小 8 字节
2x1x1 块范围
1 纹素/块

VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16

10 位 3 平面 420
块大小 6 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16

10 位 2 平面 420
块大小 6 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16

10 位 3 平面 422
块大小 6 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16

10 位 2 平面 422
块大小 6 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16

10 位 3 平面 444
块大小 6 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16

64 位 R12G12B12A12
块大小 8 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16

64 位 G12B12G12R12
块大小 8 字节
2x1x1 块范围
1 纹素/块

VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16

64 位 B12G12R12G12
块大小 8 字节
2x1x1 块范围
1 纹素/块

VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16

12 位 3 平面 420
块大小 6 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16

12 位 2 平面 420
块大小 6 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16

12 位 3 平面 422
块大小 6 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16

12 位 2 平面 422
块大小 6 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16

12 位 3 平面 444
块大小 6 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16

64 位 G16B16G16R16
块大小 8 字节
2x1x1 块范围
1 纹素/块

VK_FORMAT_G16B16G16R16_422_UNORM

64 位 B16G16R16G16
块大小 8 字节
2x1x1 块范围
1 纹素/块

VK_FORMAT_B16G16R16G16_422_UNORM

16 位 3 平面 420
块大小 6 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM

16 位 2 平面 420
块大小 6 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_G16_B16R16_2PLANE_420_UNORM

16 位 3 平面 422
块大小 6 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM

16 位 2 平面 422
块大小 6 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_G16_B16R16_2PLANE_422_UNORM

16 位 3 平面 444
块大小 6 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM

PVRTC1_2BPP
块大小 8 字节
8x4x1 块范围
1 纹素/块

VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG,
VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG

PVRTC1_4BPP
块大小 8 字节
4x4x1 块范围
1 纹素/块

VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG,
VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG

PVRTC2_2BPP
块大小 8 字节
8x4x1 块范围
1 纹素/块

VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG,
VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG

PVRTC2_4BPP
块大小 8 字节
4x4x1 块范围
1 纹素/块

VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG,
VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG

8 位 2 平面 444
块大小 3 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_G8_B8R8_2PLANE_444_UNORM

10 位 2 平面 444
块大小 6 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16

12 位 2 平面 444
块大小 6 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16

16 位 2 平面 444
块大小 6 字节
1x1x1 块范围
1 纹素/块

VK_FORMAT_G16_B16R16_2PLANE_444_UNORM

大小兼容性

只要颜色格式都不是或都是 Alpha 格式(例如,VK_FORMAT_A8_UNORM),具有相同纹素块大小的颜色格式就被认为是大小兼容的。如果两个大小兼容的格式具有不同的块范围(即,对于压缩格式),则在一个格式中大小为 A × B × C 的具有 a × b × c 块范围的图像可以表示为在另一个格式中大小为 X × Y × Z 的具有 x × y × z 块范围的图像,该比例是每个格式的块范围之间的比率,其中

⌈A/a⌉ = ⌈X/x⌉

⌈B/b⌉ = ⌈Y/y⌉

⌈C/c⌉ = ⌈Z/z⌉

例如,VK_FORMAT_ASTC_8x5_UNORM_BLOCK 格式的 7x3 图像可以表示为 1x1 VK_FORMAT_R64G64_UINT 图像。

使用 VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT 标志创建的图像可以创建与之大小兼容的视图,以允许通过不同的大小兼容格式进行访问。以这种方式创建的图像视图将调整大小以匹配上面注明的块范围的预期。

复制操作可以在不同资源中大小兼容的格式之间复制,以允许操作不同格式的数据。这些复制操作中使用的范围始终与源图像匹配,并调整大小以符合上述目标图像的块范围的预期。

颜色格式和深度/模板之间的复制操作在 兼容的深度/模板和颜色格式列表 中定义为大小兼容。

格式属性

要查询物理设备属性支持的格式功能,请调用

// Provided by VK_VERSION_1_0
void vkGetPhysicalDeviceFormatProperties(
    VkPhysicalDevice                            physicalDevice,
    VkFormat                                    format,
    VkFormatProperties*                         pFormatProperties);
  • physicalDevice 是从中查询格式属性的物理设备。

  • format 是要查询其属性的格式。

  • pFormatProperties 是指向 VkFormatProperties 结构的指针,该结构返回 format 的物理设备属性。

有效用法(隐含)
  • VUID-vkGetPhysicalDeviceFormatProperties-physicalDevice-parameter
    physicalDevice 必须是有效的 VkPhysicalDevice 句柄

  • VUID-vkGetPhysicalDeviceFormatProperties-format-parameter
    format 必须是有效的 VkFormat

  • VUID-vkGetPhysicalDeviceFormatProperties-pFormatProperties-parameter
    pFormatProperties 必须是指向 VkFormatProperties 结构的有效指针

VkFormatProperties 结构定义为

// Provided by VK_VERSION_1_0
typedef struct VkFormatProperties {
    VkFormatFeatureFlags    linearTilingFeatures;
    VkFormatFeatureFlags    optimalTilingFeatures;
    VkFormatFeatureFlags    bufferFeatures;
} VkFormatProperties;
  • linearTilingFeaturesVkFormatFeatureFlagBits 的位掩码,指定由使用 tiling 参数为 VK_IMAGE_TILING_LINEAR 创建的图像支持的功能。

  • optimalTilingFeatures 是一个位掩码,其中包含 VkFormatFeatureFlagBits,指定使用 tiling 参数为 VK_IMAGE_TILING_OPTIMAL 创建的图像所支持的特性。

  • bufferFeatures 是一个位掩码,其中包含 VkFormatFeatureFlagBits,指定缓冲区所支持的特性。

如果不支持任何格式特性标志,则表示不支持该格式本身,并且无法创建该格式的图像。

如果 format 是块压缩格式,则 bufferFeatures 必须 不支持该格式的任何特性。

如果 format 不是多平面格式,则 linearTilingFeaturesoptimalTilingFeatures 必须 不包含 VK_FORMAT_FEATURE_DISJOINT_BIT

可以在 VkFormatProperties 特性 linearTilingFeaturesoptimalTilingFeaturesVkDrmFormatModifierPropertiesEXT::drmFormatModifierTilingFeaturesbufferFeatures 中设置的位是:

// Provided by VK_VERSION_1_0
typedef enum VkFormatFeatureFlagBits {
    VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = 0x00000001,
    VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = 0x00000002,
    VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = 0x00000004,
    VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000008,
    VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = 0x00000010,
    VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = 0x00000020,
    VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT = 0x00000040,
    VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = 0x00000080,
    VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = 0x00000100,
    VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000200,
    VK_FORMAT_FEATURE_BLIT_SRC_BIT = 0x00000400,
    VK_FORMAT_FEATURE_BLIT_DST_BIT = 0x00000800,
    VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT = 0x00001000,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_FEATURE_TRANSFER_SRC_BIT = 0x00004000,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_FEATURE_TRANSFER_DST_BIT = 0x00008000,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT = 0x00020000,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT = 0x00040000,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT = 0x00080000,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT = 0x00100000,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT = 0x00200000,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_FEATURE_DISJOINT_BIT = 0x00400000,
  // Provided by VK_VERSION_1_1
    VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT = 0x00800000,
  // Provided by VK_VERSION_1_2
    VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT = 0x00010000,
  // Provided by VK_KHR_video_decode_queue
    VK_FORMAT_FEATURE_VIDEO_DECODE_OUTPUT_BIT_KHR = 0x02000000,
  // Provided by VK_KHR_video_decode_queue
    VK_FORMAT_FEATURE_VIDEO_DECODE_DPB_BIT_KHR = 0x04000000,
  // Provided by VK_KHR_acceleration_structure
    VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR = 0x20000000,
  // Provided by VK_EXT_filter_cubic
    VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT = 0x00002000,
  // Provided by VK_EXT_fragment_density_map
    VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT = 0x01000000,
  // Provided by VK_KHR_fragment_shading_rate
    VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x40000000,
  // Provided by VK_KHR_video_encode_queue
    VK_FORMAT_FEATURE_VIDEO_ENCODE_INPUT_BIT_KHR = 0x08000000,
  // Provided by VK_KHR_video_encode_queue
    VK_FORMAT_FEATURE_VIDEO_ENCODE_DPB_BIT_KHR = 0x10000000,
  // Provided by VK_IMG_filter_cubic
    VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT,
  // Provided by VK_KHR_maintenance1
    VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR = VK_FORMAT_FEATURE_TRANSFER_SRC_BIT,
  // Provided by VK_KHR_maintenance1
    VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR = VK_FORMAT_FEATURE_TRANSFER_DST_BIT,
  // Provided by VK_EXT_sampler_filter_minmax
    VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR = VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_FEATURE_DISJOINT_BIT_KHR = VK_FORMAT_FEATURE_DISJOINT_BIT,
  // Provided by VK_KHR_sampler_ycbcr_conversion
    VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR = VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT,
} VkFormatFeatureFlagBits;

这些值与 VkFormatFeatureFlags2 中具有相同名称的值具有相同的含义,并且可以linearTilingFeaturesoptimalTilingFeaturesVkDrmFormatModifierPropertiesEXT::drmFormatModifierTilingFeatures 中设置,以指定通过查询的 vkGetPhysicalDeviceFormatProperties::format 创建的 图像图像视图采样器 Y′CBCR 转换对象 支持这些特性。

  • VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT 指定一个图像视图可以采样

  • VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT 指定一个图像视图可以用作存储图像

  • VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT 指定一个图像视图可以用作支持原子操作的存储图像。

  • VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT 指定一个图像视图可以用作帧缓冲颜色附件和输入附件。

  • VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT 指定一个图像视图可以用作支持混合的帧缓冲颜色附件。

  • VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT 指定一个图像视图可以用作帧缓冲深度/模板附件和输入附件。

  • VK_FORMAT_FEATURE_BLIT_SRC_BIT 指定一个图像可以用作 vkCmdBlitImage2vkCmdBlitImage 命令的 srcImage

  • VK_FORMAT_FEATURE_BLIT_DST_BIT 指定一个图像可以用作 vkCmdBlitImage2vkCmdBlitImage 命令的 dstImage

  • VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT 指定如果也设置了 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,则图像视图可以magFilterminFilter 设置为 VK_FILTER_LINEARmipmapMode 设置为 VK_SAMPLER_MIPMAP_MODE_LINEAR 的采样器一起使用。如果也设置了 VK_FORMAT_FEATURE_BLIT_SRC_BIT,则图像可以用作 vkCmdBlitImage2vkCmdBlitImagesrcImage,并且 filterVK_FILTER_LINEAR。此位必须仅对同时也支持 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BITVK_FORMAT_FEATURE_BLIT_SRC_BIT 的格式公开。

    如果查询的格式是深度/模板格式,则此位仅指定此格式的图像的深度方面(而不是模板方面)支持线性滤波,并且无论采样器中是否启用了深度比较,都支持深度方面的线性滤波。在支持深度比较的情况下,无论是否存在此位,都可能进行线性滤波,但如果不存在此位,则滤波后的值可能以与线性滤波的正常规则不同的实现相关方式计算。结果值必须[0,1] 范围内,并且应该与比较通过或失败的次数成比例或加权平均值。

  • VK_FORMAT_FEATURE_TRANSFER_SRC_BIT 指定一个图像可以用作复制命令的源图像。如果应用程序的 apiVersion 是 Vulkan 1.0 并且不支持 VK_KHR_maintenance1,则当格式特性标志不为 0 时,隐含设置 VK_FORMAT_FEATURE_TRANSFER_SRC_BIT

  • VK_FORMAT_FEATURE_TRANSFER_DST_BIT 指定一个图像可以用作复制命令清除命令的目标图像。如果应用程序的 apiVersion 是 Vulkan 1.0 并且不支持 VK_KHR_maintenance1,则当格式特性标志不为 0 时,隐含设置 VK_FORMAT_FEATURE_TRANSFER_DST_BIT

  • VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT 指定 VkImage 可以用作具有最小或最大 VkSamplerReductionMode 的采样图像。此位必须仅对同时也支持 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT 的格式公开。

  • VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT 指定 VkImage 可以magFilterminFilter 设置为 VK_FILTER_CUBIC_EXT 的采样器一起使用,或者作为 filter 设置为 VK_FILTER_CUBIC_EXT 的 blit 的源图像。此位必须仅对同时也支持 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT 的格式公开。如果查询的格式是深度/模板格式,则仅指定深度方面是可立方体滤波的。

  • VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT 指定应用程序可以使用此格式作为源定义 采样器 Y′CBCR 转换,并且此格式的图像可以xChromaOffset 和/或 yChromaOffsetVK_CHROMA_LOCATION_MIDPOINTVkSamplerYcbcrConversionCreateInfo 一起使用。否则,xChromaOffsetyChromaOffset 必须都为 VK_CHROMA_LOCATION_COSITED_EVEN。如果格式不包含色度下采样(它不是 “422” 或 “420” 格式),但实现支持此格式的采样器 Y′CBCR 转换,则实现必须设置 VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT

  • VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT 指定应用程序可以使用此格式作为源定义 采样器 Y′CBCR 转换,并且此格式的图像可以xChromaOffset 和/或 yChromaOffsetVK_CHROMA_LOCATION_COSITED_EVENVkSamplerYcbcrConversionCreateInfo 一起使用。否则,xChromaOffsetyChromaOffset 必须都为 VK_CHROMA_LOCATION_MIDPOINT。如果既没有设置 VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT 也没有设置 VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT,则应用程序必须不使用此格式作为源来定义 采样器 Y′CBCR 转换

  • VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT 指定应用程序可以使用此格式作为源定义 采样器 Y′CBCR 转换,并且 chromaFilter 设置为 VK_FILTER_LINEAR

  • VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT 指定该格式可以具有不同的色度、最小和最大滤波器。

  • VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT 指定重建是显式的,如 色度重建 中所述。如果不存在此位,则默认情况下重建是隐式的。

  • VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT 指定可以通过将 VkSamplerYcbcrConversionCreateInfo::forceExplicitReconstruction 设置为 VK_TRUE 来强制显式重建。如果查询的格式支持 VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT,则它必须也支持 VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT

  • VK_FORMAT_FEATURE_DISJOINT_BIT 指定多平面图像在创建时可以设置 VK_IMAGE_CREATE_DISJOINT_BIT。对于单平面格式,实现必须不设置 VK_FORMAT_FEATURE_DISJOINT_BIT

  • VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT 指定图像视图可以用作片段密度图附件

  • VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR 指定图像视图可以用作片段着色率附件。 对于数值格式不是 UINT 的格式,实现必须不设置此特性,也不应将其设置为缓冲区特性。

  • VK_FORMAT_FEATURE_VIDEO_DECODE_OUTPUT_BIT_KHR 指定具有此格式的图像视图可以用作视频解码操作中的解码输出图片

  • VK_FORMAT_FEATURE_VIDEO_DECODE_DPB_BIT_KHR 指定具有此格式的图像视图可以用作视频解码操作中的输出重建图片或输入参考图片

  • VK_FORMAT_FEATURE_VIDEO_ENCODE_INPUT_BIT_KHR 指定具有此格式的图像视图可以用作视频编码操作中的编码输入图片

  • VK_FORMAT_FEATURE_VIDEO_ENCODE_DPB_BIT_KHR 指定具有此格式的图像视图可以用作视频编码操作中的输出重建图片或输入参考图片

    特定的视频配置文件可能对视频编码操作使用的图像视图对应的格式和其他图像创建参数有额外的限制,这些限制可以使用 vkGetPhysicalDeviceVideoFormatPropertiesKHR 命令进行枚举。

以下位可能bufferFeatures 中设置,指定通过查询的 vkGetPhysicalDeviceFormatProperties::format 创建的 缓冲区缓冲区视图支持的特性。

  • VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT 指定该格式可以用于创建可以绑定到 VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER 描述符的缓冲区视图。

  • VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT 指定该格式可以用于创建可以绑定到 VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER 描述符的缓冲区视图。

  • VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT 指定在此格式下,VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER 支持原子操作。

  • VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT 指定该格式可以用作顶点属性格式 (VkVertexInputAttributeDescription::format)。

  • VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR 指定该格式可以在创建加速结构时用作顶点格式 (VkAccelerationStructureGeometryTrianglesDataKHR::vertexFormat)。此格式可以在执行主机加速结构构建时用作主机内存中的顶点格式。

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BITVK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT 仅用于声明单组件格式,因为 SPIR-V 原子操作需要标量类型。

// Provided by VK_VERSION_1_0
typedef VkFlags VkFormatFeatureFlags;

VkFormatFeatureFlags 是一种位掩码类型,用于设置零个或多个 VkFormatFeatureFlagBits 的掩码。

要查询物理设备属性支持的格式功能,请调用

// Provided by VK_VERSION_1_1
void vkGetPhysicalDeviceFormatProperties2(
    VkPhysicalDevice                            physicalDevice,
    VkFormat                                    format,
    VkFormatProperties2*                        pFormatProperties);

或等效命令

// Provided by VK_KHR_get_physical_device_properties2
void vkGetPhysicalDeviceFormatProperties2KHR(
    VkPhysicalDevice                            physicalDevice,
    VkFormat                                    format,
    VkFormatProperties2*                        pFormatProperties);
  • physicalDevice 是从中查询格式属性的物理设备。

  • format 是要查询其属性的格式。

  • pFormatProperties 是一个指向 VkFormatProperties2 结构的指针,其中返回 format 的物理设备属性。

vkGetPhysicalDeviceFormatProperties2 的行为类似于 vkGetPhysicalDeviceFormatProperties,它能够在输出结构的 pNext 链中返回扩展信息。

有效用法(隐含)
  • VUID-vkGetPhysicalDeviceFormatProperties2-physicalDevice-parameter
    physicalDevice 必须是有效的 VkPhysicalDevice 句柄

  • VUID-vkGetPhysicalDeviceFormatProperties2-format-parameter
    format 必须是有效的 VkFormat

  • VUID-vkGetPhysicalDeviceFormatProperties2-pFormatProperties-parameter
    pFormatProperties 必须是指向有效的 VkFormatProperties2 结构的有效指针

VkFormatProperties2 结构定义如下:

// Provided by VK_VERSION_1_1
typedef struct VkFormatProperties2 {
    VkStructureType       sType;
    void*                 pNext;
    VkFormatProperties    formatProperties;
} VkFormatProperties2;

或等效项

// Provided by VK_KHR_get_physical_device_properties2
typedef VkFormatProperties2 VkFormatProperties2KHR;
  • sType 是一个 VkStructureType 值,用于标识此结构。

  • pNextNULL 或指向扩展此结构的结构的指针。

  • formatProperties 是一个 VkFormatProperties 结构,描述了请求格式支持的特性。

有效用法(隐含)

要获取与 VkFormat 兼容的 Linux DRM 格式修改器列表,请将 VkDrmFormatModifierPropertiesListEXT 结构添加到 VkFormatProperties2pNext 链中。

VkDrmFormatModifierPropertiesListEXT 结构定义如下:

// Provided by VK_EXT_image_drm_format_modifier
typedef struct VkDrmFormatModifierPropertiesListEXT {
    VkStructureType                      sType;
    void*                                pNext;
    uint32_t                             drmFormatModifierCount;
    VkDrmFormatModifierPropertiesEXT*    pDrmFormatModifierProperties;
} VkDrmFormatModifierPropertiesListEXT;
  • sType 是一个 VkStructureType 值,用于标识此结构。

  • pNextNULL 或指向扩展此结构的结构的指针。

  • drmFormatModifierCount 是一个 inout 参数,与兼容 format 的修改器数量有关,如下所述。

  • pDrmFormatModifierPropertiesNULL 或指向 VkDrmFormatModifierPropertiesEXT 结构数组的指针。

如果 pDrmFormatModifierPropertiesNULL,则函数在 drmFormatModifierCount 中返回与查询的 format 兼容的修改器数量。否则,应用程序必须drmFormatModifierCount 设置为数组 pDrmFormatModifierProperties 的长度;该函数将最多写入 drmFormatModifierCount 个元素到数组中,并在 drmFormatModifierCount 中返回写入的元素数量。

在数组 pDrmFormatModifierProperties 的元素中,每个返回的 drmFormatModifier 必须是唯一的。

有效用法(隐含)
  • VUID-VkDrmFormatModifierPropertiesListEXT-sType-sType
    sType 必须VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT

VkDrmFormatModifierPropertiesEXT 结构描述了当 VkFormatLinux DRM 格式修改器组合时 VkFormat 的属性。这些属性,如 VkFormatProperties2 的属性一样,独立于任何特定的图像。

VkDrmFormatModifierPropertiesEXT 结构定义如下:

// Provided by VK_EXT_image_drm_format_modifier
typedef struct VkDrmFormatModifierPropertiesEXT {
    uint64_t                drmFormatModifier;
    uint32_t                drmFormatModifierPlaneCount;
    VkFormatFeatureFlags    drmFormatModifierTilingFeatures;
} VkDrmFormatModifierPropertiesEXT;
  • drmFormatModifier 是一个 *Linux DRM 格式修改器*。

  • drmFormatModifierPlaneCount 是使用 formatdrmFormatModifier 创建的任何图像中的内存平面的数量。如下所述,图像的内存平面计数与其格式平面计数不同。

  • drmFormatModifierTilingFeatures 是一个 VkFormatFeatureFlagBits 的位掩码,表示使用 formatdrmFormatModifier 创建的任何图像支持的特性。

返回的 drmFormatModifierTilingFeatures 必须至少包含一个位。

实现 必须 不在 drmFormatModifier 中返回 DRM_FORMAT_MOD_INVALID

图像的内存平面计数(由 drmFormatModifierPlaneCount 返回)与其格式平面计数(在 多平面 Y′CBCR 格式的意义上)不同。在 VkImageAspectFlags 中,每个 VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT 表示一个内存平面,而每个 VK_IMAGE_ASPECT_PLANE_i_BIT 表示一个格式平面

图像的格式平面集合是将图像的内容划分为可分离的格式组件组的有序分区。有序分区编码在每个 VkFormat 的名称中。例如,VK_FORMAT_G8_B8R8_2PLANE_420_UNORM 包含两个格式平面;第一个平面包含绿色分量,第二个平面包含蓝色分量和红色分量。如果格式名称不包含 PLANE,则该格式包含单个平面;例如,VK_FORMAT_R8G8B8A8_UNORM。某些命令,例如 vkCmdCopyBufferToImage,不会对图像中的所有格式分量进行操作,而是仅对应用程序显式选择的格式平面进行操作,并独立地对每个格式平面进行操作。

图像的内存平面集合是将图像的内存而不是图像的内容划分为有序的分区。每个内存平面都是一个连续的内存范围。图像的内存平面的并集不一定是连续的。

如果图像是线性的,则内存平面格式平面的分区是相同的。因此,如果返回的 drmFormatModifierDRM_FORMAT_MOD_LINEAR,则 drmFormatModifierPlaneCount 必须等于格式平面计数,并且 drmFormatModifierTilingFeatures 必须与同一 pNext 链中返回的 VkFormatProperties2::linearTilingFeatures 相同。

如果图像是非线性的,则将图像的内存划分为内存平面的分区是特定于实现的,并且 可能 与将图像的内容划分为格式平面的分区无关。例如,考虑一个图像,其 formatVK_FORMAT_G8_B8_R8_3PLANE_420_UNORMtilingVK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT,其 drmFormatModifier 不是 DRM_FORMAT_MOD_LINEAR,并且 flags 缺少 VK_IMAGE_CREATE_DISJOINT_BIT。该图像有 3 个格式平面,并且像 vkCmdCopyBufferToImage 这样的命令独立地作用于每个格式平面,就像每个格式平面的数据与其它平面的数据是可分离的一样。在直接实现中,实现 可能 将图像的内容存储在 3 个相邻的内存平面中,其中每个内存平面与一个格式平面完全对应。但是,实现 可能 也将图像的内容存储在单个内存平面中,其中所有格式分量都使用实现私有的块压缩格式进行组合;或者实现 可能 使用实现私有的分片技术将图像的内容存储在 7 个相邻的内存平面的集合中。因为图像是非线性的且不分离的,所以在选择图像在内存中的放置位置时,实现具有很大的自由度。

只有当 API 对 drmFormatModifierPlaneCount 指定了明确的要求时,内存平面计数才适用于函数参数和结构。在所有其他情况下,内存平面计数将被忽略。

可以通过将 VkDrmFormatModifierPropertiesList2EXT 结构添加到 VkFormatProperties2pNext 链中,来获取与 VkFormat 兼容的 Linux DRM 格式修饰符的列表。

// Provided by VK_EXT_image_drm_format_modifier with VK_KHR_format_feature_flags2 or VK_VERSION_1_3
typedef struct VkDrmFormatModifierPropertiesList2EXT {
    VkStructureType                       sType;
    void*                                 pNext;
    uint32_t                              drmFormatModifierCount;
    VkDrmFormatModifierProperties2EXT*    pDrmFormatModifierProperties;
} VkDrmFormatModifierPropertiesList2EXT;
  • sType 是一个 VkStructureType 值,用于标识此结构。

  • pNextNULL 或指向扩展此结构的结构的指针。

  • drmFormatModifierCount 是一个 inout 参数,与兼容 format 的修改器数量有关,如下所述。

  • pDrmFormatModifierProperties 可以是 NULL,也可以是指向 VkDrmFormatModifierProperties2EXT 结构数组的指针。

如果 pDrmFormatModifierPropertiesNULL,则在 drmFormatModifierCount 中返回与查询的 format 兼容的修饰符的数量。否则,应用程序 必须drmFormatModifierCount 设置为数组 pDrmFormatModifierProperties 的长度;该函数将最多将 drmFormatModifierCount 个元素写入数组,并在 drmFormatModifierCount 中返回写入的元素数量。

在数组 pDrmFormatModifierProperties 的元素中,每个返回的 drmFormatModifier 必须是唯一的。

在数组 pDrmFormatModifierProperties 中的元素中,drmFormatModifierTilingFeatures 中报告的位 必须 包括 VkDrmFormatModifierPropertiesListEXT::pDrmFormatModifierProperties 对应元素中报告的位。

有效用法(隐含)
  • VUID-VkDrmFormatModifierPropertiesList2EXT-sType-sType
    sType 必须VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_2_EXT

VkDrmFormatModifierProperties2EXT 结构描述了 VkFormatLinux DRM 格式修饰符 组合时,该格式的属性。这些属性,如 VkFormatProperties2 的属性一样,独立于任何特定的图像。

VkDrmFormatModifierPropertiesEXT 结构定义如下:

// Provided by VK_EXT_image_drm_format_modifier with VK_KHR_format_feature_flags2 or VK_VERSION_1_3
typedef struct VkDrmFormatModifierProperties2EXT {
    uint64_t                 drmFormatModifier;
    uint32_t                 drmFormatModifierPlaneCount;
    VkFormatFeatureFlags2    drmFormatModifierTilingFeatures;
} VkDrmFormatModifierProperties2EXT;
  • drmFormatModifier 是一个 *Linux DRM 格式修改器*。

  • drmFormatModifierPlaneCount 是使用 formatdrmFormatModifier 创建的任何图像中的内存平面的数量。如下所述,图像的内存平面计数与其格式平面计数不同。

  • drmFormatModifierTilingFeatures 是一个 VkFormatFeatureFlagBits2 的位掩码,表示使用 formatdrmFormatModifier 创建的任何图像支持的特性。

要查询作为物理设备属性的受支持的格式扩展特性,请将 VkFormatProperties3 结构添加到 VkFormatProperties2pNext 链中。

VkFormatProperties3 结构的定义如下

// Provided by VK_VERSION_1_3
typedef struct VkFormatProperties3 {
    VkStructureType          sType;
    void*                    pNext;
    VkFormatFeatureFlags2    linearTilingFeatures;
    VkFormatFeatureFlags2    optimalTilingFeatures;
    VkFormatFeatureFlags2    bufferFeatures;
} VkFormatProperties3;

或等效项

// Provided by VK_KHR_format_feature_flags2
typedef VkFormatProperties3 VkFormatProperties3KHR;
  • linearTilingFeatures 是一个 VkFormatFeatureFlagBits2 的位掩码,指定使用 VK_IMAGE_TILING_LINEARtiling 参数创建的图像所支持的特性。

  • optimalTilingFeatures 是一个 VkFormatFeatureFlagBits2 的位掩码,指定使用 VK_IMAGE_TILING_OPTIMALtiling 参数创建的图像所支持的特性。

  • bufferFeatures 是一个 VkFormatFeatureFlagBits2 的位掩码,指定缓冲区支持的特性。

linearTilingFeaturesoptimalTilingFeaturesbufferFeatures 中报告的位 必须 包括 VkFormatProperties2::formatProperties 对应字段中报告的位。

有效用法(隐含)
  • VUID-VkFormatProperties3-sType-sType
    sType 必须VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3

可以在 VkFormatProperties3 特性 linearTilingFeaturesoptimalTilingFeaturesbufferFeatures 中设置的位是

// Provided by VK_VERSION_1_3
// Flag bits for VkFormatFeatureFlagBits2
typedef VkFlags64 VkFormatFeatureFlagBits2;
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT = 0x00000001ULL;
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT = 0x00000002ULL;
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT = 0x00000004ULL;
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT = 0x00000008ULL;
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT = 0x00000010ULL;
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = 0x00000020ULL;
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT = 0x00000040ULL;
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT = 0x00000080ULL;
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT = 0x00000100ULL;
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000200ULL;
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLIT_SRC_BIT = 0x00000400ULL;
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLIT_DST_BIT = 0x00000800ULL;
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT = 0x00001000ULL;
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT = 0x00004000ULL;
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT = 0x00008000ULL;
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT = 0x00010000ULL;
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT = 0x00020000ULL;
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT = 0x00040000ULL;
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT = 0x00080000ULL;
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT = 0x00100000ULL;
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT = 0x00200000ULL;
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_DISJOINT_BIT = 0x00400000ULL;
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT = 0x00800000ULL;
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT = 0x80000000ULL;
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT = 0x100000000ULL;
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT = 0x200000000ULL;
// Provided by VK_VERSION_1_3
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT = 0x00002000ULL;
// Provided by VK_VERSION_1_4
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT = 0x400000000000ULL;
// Provided by VK_KHR_video_decode_queue with VK_KHR_format_feature_flags2 or VK_VERSION_1_3
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_DECODE_OUTPUT_BIT_KHR = 0x02000000ULL;
// Provided by VK_KHR_video_decode_queue with VK_KHR_format_feature_flags2 or VK_VERSION_1_3
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_DECODE_DPB_BIT_KHR = 0x04000000ULL;
// Provided by VK_KHR_acceleration_structure with VK_KHR_format_feature_flags2 or VK_VERSION_1_3
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR = 0x20000000ULL;
// Provided by VK_EXT_fragment_density_map with VK_KHR_format_feature_flags2 or VK_VERSION_1_3
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_FRAGMENT_DENSITY_MAP_BIT_EXT = 0x01000000ULL;
// Provided by VK_KHR_fragment_shading_rate with VK_KHR_format_feature_flags2 or VK_VERSION_1_3
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x40000000ULL;
// Provided by VK_EXT_host_image_copy
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT_EXT = 0x400000000000ULL;
// Provided by VK_KHR_video_encode_queue with VK_KHR_format_feature_flags2 or VK_VERSION_1_3
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_ENCODE_INPUT_BIT_KHR = 0x08000000ULL;
// Provided by VK_KHR_video_encode_queue with VK_KHR_format_feature_flags2 or VK_VERSION_1_3
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_ENCODE_DPB_BIT_KHR = 0x10000000ULL;
// Provided by VK_KHR_format_feature_flags2
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR = 0x00000001ULL;
// Provided by VK_KHR_format_feature_flags2
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT_KHR = 0x00000002ULL;
// Provided by VK_KHR_format_feature_flags2
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT_KHR = 0x00000004ULL;
// Provided by VK_KHR_format_feature_flags2
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR = 0x00000008ULL;
// Provided by VK_KHR_format_feature_flags2
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT_KHR = 0x00000010ULL;
// Provided by VK_KHR_format_feature_flags2
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT_KHR = 0x00000020ULL;
// Provided by VK_KHR_format_feature_flags2
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT_KHR = 0x00000040ULL;
// Provided by VK_KHR_format_feature_flags2
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT_KHR = 0x00000080ULL;
// Provided by VK_KHR_format_feature_flags2
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT_KHR = 0x00000100ULL;
// Provided by VK_KHR_format_feature_flags2
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT_KHR = 0x00000200ULL;
// Provided by VK_KHR_format_feature_flags2
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLIT_SRC_BIT_KHR = 0x00000400ULL;
// Provided by VK_KHR_format_feature_flags2
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLIT_DST_BIT_KHR = 0x00000800ULL;
// Provided by VK_KHR_format_feature_flags2
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT_KHR = 0x00001000ULL;
// Provided by VK_KHR_format_feature_flags2
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT_KHR = 0x00004000ULL;
// Provided by VK_KHR_format_feature_flags2
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT_KHR = 0x00008000ULL;
// Provided by VK_KHR_format_feature_flags2
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT_KHR = 0x00020000ULL;
// Provided by VK_KHR_format_feature_flags2
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR = 0x00040000ULL;
// Provided by VK_KHR_format_feature_flags2
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR = 0x00080000ULL;
// Provided by VK_KHR_format_feature_flags2
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR = 0x00100000ULL;
// Provided by VK_KHR_format_feature_flags2
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR = 0x00200000ULL;
// Provided by VK_KHR_format_feature_flags2
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_DISJOINT_BIT_KHR = 0x00400000ULL;
// Provided by VK_KHR_format_feature_flags2
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT_KHR = 0x00800000ULL;
// Provided by VK_KHR_format_feature_flags2
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR = 0x80000000ULL;
// Provided by VK_KHR_format_feature_flags2
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR = 0x100000000ULL;
// Provided by VK_KHR_format_feature_flags2
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT_KHR = 0x200000000ULL;
// Provided by VK_KHR_format_feature_flags2 with VK_VERSION_1_2 or VK_EXT_sampler_filter_minmax
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT_KHR = 0x00010000ULL;
// Provided by VK_KHR_format_feature_flags2 with VK_EXT_filter_cubic or VK_IMG_filter_cubic
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT = 0x00002000ULL;
// Provided by VK_NV_linear_color_attachment with VK_KHR_format_feature_flags2 or VK_VERSION_1_3
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV = 0x4000000000ULL;
// Provided by VK_QCOM_image_processing with VK_KHR_format_feature_flags2 or VK_VERSION_1_3
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM = 0x400000000ULL;
// Provided by VK_QCOM_image_processing with VK_KHR_format_feature_flags2 or VK_VERSION_1_3
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM = 0x800000000ULL;
// Provided by VK_QCOM_image_processing with VK_KHR_format_feature_flags2 or VK_VERSION_1_3
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM = 0x1000000000ULL;
// Provided by VK_QCOM_image_processing with VK_KHR_format_feature_flags2 or VK_VERSION_1_3
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM = 0x2000000000ULL;
// Provided by VK_NV_optical_flow
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_OPTICAL_FLOW_IMAGE_BIT_NV = 0x10000000000ULL;
// Provided by VK_NV_optical_flow
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_OPTICAL_FLOW_VECTOR_BIT_NV = 0x20000000000ULL;
// Provided by VK_NV_optical_flow
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_OPTICAL_FLOW_COST_BIT_NV = 0x40000000000ULL;
// Provided by VK_KHR_video_encode_quantization_map
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR = 0x2000000000000ULL;
// Provided by VK_KHR_video_encode_quantization_map
static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR = 0x4000000000000ULL;

或等效项

// Provided by VK_KHR_format_feature_flags2
typedef VkFormatFeatureFlagBits2 VkFormatFeatureFlagBits2KHR;

以下位 可能linearTilingFeaturesoptimalTilingFeatures 中设置,表示使用查询的 vkGetPhysicalDeviceFormatProperties2::format 创建的图像图像视图采样器 Y′CBCR 转换对象支持这些特性

  • VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT 指定图像视图可以采样

  • VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT 指定图像视图可以用作存储图像

  • VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT 指定图像视图可以用作支持原子操作的存储图像。

  • VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT 指定图像视图可以用作帧缓冲颜色附件和输入附件。

  • VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT 指定图像视图可以用作支持混合的帧缓冲颜色附件。

  • VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT 指定图像视图可以用作帧缓冲深度/模板附件和输入附件。

  • VK_FORMAT_FEATURE_2_BLIT_SRC_BIT 指定图像可以用作 vkCmdBlitImage2vkCmdBlitImagesrcImage

  • VK_FORMAT_FEATURE_2_BLIT_DST_BIT 指定图像可以用作 vkCmdBlitImage2vkCmdBlitImagedstImage

  • VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT 指定如果同时设置了 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT,则图像视图可以magFilterminFilter 设置为 VK_FILTER_LINEAR,或者 mipmapMode 设置为 VK_SAMPLER_MIPMAP_MODE_LINEAR 的采样器一起使用。如果还设置了 VK_FORMAT_FEATURE_2_BLIT_SRC_BIT,则图像可以用作 vkCmdBlitImage2vkCmdBlitImagesrcImage,并且 filterVK_FILTER_LINEAR。此位必须仅针对也支持 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BITVK_FORMAT_FEATURE_2_BLIT_SRC_BIT 的格式公开。

    如果正在查询的格式是深度/模板格式,则此位仅指定此格式的图像的深度方面(而不是模板方面)支持线性滤波。在支持深度比较的地方,无论是否存在此位,可能会进行线性滤波,但是当不存在此位时,滤波后的值可能以与线性滤波的正常规则不同的、与实现相关的方式计算。结果值必须[0,1] 范围内,并且应该与比较通过或失败的次数成比例,或为其加权平均值。

  • VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT 指定图像可以用作复制命令的源图像。

  • VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT 指定图像可以用作复制命令清除命令的目标图像。

  • VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT 指定 VkImage可以用作具有最小或最大 VkSamplerReductionMode 的采样图像。此位必须仅针对也支持 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT 的格式公开。

  • VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT 指定 VkImage可以magFilterminFilter 设置为 VK_FILTER_CUBIC_EXT 的采样器一起使用,或者作为 blit 的源图像,并且 filter 设置为 VK_FILTER_CUBIC_EXT。此位必须仅针对也支持 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT 的格式公开。如果正在查询的格式是深度/模板格式,则此仅指定深度方面是可立方体滤波的。

  • VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT 指定应用程序可以使用此格式作为源来定义采样器 Y′CBCR 转换,并且此格式的图像可以VkSamplerYcbcrConversionCreateInfoxChromaOffset 和/或 yChromaOffsetVK_CHROMA_LOCATION_MIDPOINT 一起使用。否则,xChromaOffsetyChromaOffset 必须均为 VK_CHROMA_LOCATION_COSITED_EVEN。如果格式不包含色度下采样(它不是“422”或“420”格式),但是实现支持此格式的采样器 Y′CBCR 转换,则实现必须设置 VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT

  • VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT 指定应用程序可以使用此格式作为源来定义采样器 Y′CBCR 转换,并且此格式的图像可以VkSamplerYcbcrConversionCreateInfoxChromaOffset 和/或 yChromaOffsetVK_CHROMA_LOCATION_COSITED_EVEN 一起使用。否则,xChromaOffsetyChromaOffset 必须均为 VK_CHROMA_LOCATION_MIDPOINT。如果未设置 VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BITVK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT,则应用程序必须不使用此格式作为源定义采样器 Y′CBCR 转换

  • VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT 指定应用程序可以使用此格式作为源,并使用 chromaFilter 设置为 VK_FILTER_LINEAR 来定义采样器 Y′CBCR 转换

  • VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT 指定该格式可以具有不同的色度、最小和最大滤波器。

  • VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT 指定重建是显式的,如色度重建中所述。如果不存在此位,则默认情况下重建是隐式的。

  • VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT 指定可以通过将 VkSamplerYcbcrConversionCreateInfo::forceExplicitReconstruction 设置为 VK_TRUE 来强制使重建显式。如果正在查询的格式支持 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT,则它必须也支持 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT

  • VK_FORMAT_FEATURE_2_DISJOINT_BIT 指定多平面图像在图像创建期间可以设置 VK_IMAGE_CREATE_DISJOINT_BIT。实现必须不为单平面格式设置 VK_FORMAT_FEATURE_2_DISJOINT_BIT

  • VK_FORMAT_FEATURE_2_FRAGMENT_DENSITY_MAP_BIT_EXT 指定图像视图可以用作片段密度图附件

  • VK_FORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR 指定图像视图可以用作片段着色率附件。实现必须不能为数值格式不是 UINT 的格式设置此特性,也不能将其设置为缓冲区特性。

  • VK_FORMAT_FEATURE_2_VIDEO_DECODE_OUTPUT_BIT_KHR 指定使用此格式的图像视图可以视频解码操作中用作解码输出图像

  • VK_FORMAT_FEATURE_2_VIDEO_DECODE_DPB_BIT_KHR 指定使用此格式的图像视图可以视频解码操作中用作输出的重建图像或输入的参考图像

  • VK_FORMAT_FEATURE_2_VIDEO_ENCODE_INPUT_BIT_KHR 指定使用此格式的图像视图可以视频编码操作中用作编码输入图像

  • VK_FORMAT_FEATURE_2_VIDEO_ENCODE_DPB_BIT_KHR 指定使用此格式的图像视图可以视频编码操作中用作输出的重建图像或输入的参考图像

    特定的视频配置文件可能对视频编码操作使用的图像视图对应的格式和其他图像创建参数有额外的限制,这些限制可以使用 vkGetPhysicalDeviceVideoFormatPropertiesKHR 命令进行枚举。

  • VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT 指定使用此格式创建的图像视图或缓冲区视图可以分别用作存储图像存储纹理缓冲区,用于读取操作,而无需指定格式。

  • VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT 指定使用此格式创建的图像视图或缓冲区视图可以分别用作存储图像存储纹理缓冲区,用于写入操作,而无需指定格式。

  • VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT 指定使用此格式创建的图像视图可以用于 OpImage*Dref* 指令执行的深度比较。

  • VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV 指定该格式支持作为可渲染的线性颜色附件。此位将为 linearTilingFeatures 中可渲染的颜色格式设置。这必须不能在 optimalTilingFeaturesbufferFeatures 成员中设置。

  • VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM 指定使用此格式创建的图像视图可以用作权重图像采样操作的权重图像输入。

  • VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM 指定使用此格式创建的图像视图可以权重图像采样操作中进行采样。

  • VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM 指定使用此格式创建的图像视图可以块匹配操作中使用。

  • VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM 指定使用此格式创建的图像视图可以盒式滤波采样操作中进行采样。

  • VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT 指定一个图像可以使用 VK_IMAGE_USAGE_HOST_TRANSFER_BIT 创建。

  • VK_FORMAT_FEATURE_2_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR 指定使用此格式的图像视图可以视频编码操作中用作量化增量映射

  • VK_FORMAT_FEATURE_2_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR 指定使用此格式的图像视图可以视频编码操作中用作强调映射

    视频编码量化映射具有特定于与之一起使用的视频配置文件的其他限制,这些限制可以使用vkGetPhysicalDeviceVideoFormatPropertiesKHR 命令枚举。

以下位可能bufferFeatures 中设置,指定这些特性受使用查询的vkGetPhysicalDeviceFormatProperties2::format 创建的缓冲区缓冲区视图支持

  • VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT 指定该格式可以用于创建可以绑定到 VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER 描述符的缓冲区视图。

  • VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT 指定该格式可以用于创建可以绑定到 VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER 描述符的缓冲区视图。

  • VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT 指定在此格式下,VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER 支持原子操作。

  • VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT 指定该格式可以用作顶点属性格式 (VkVertexInputAttributeDescription::format)。

  • VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR 指定该格式可以在创建加速结构时用作顶点格式 (VkAccelerationStructureGeometryTrianglesDataKHR::vertexFormat)。在执行主机加速结构构建时,此格式也可以用作主机内存中的顶点格式。

  • VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT 指定使用此格式创建的缓冲区视图可以用作存储纹理缓冲区,用于读取操作,而无需指定格式。

  • VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT 指定使用此格式创建的缓冲区视图可以用作存储纹理缓冲区,用于写入操作,而无需指定格式。

  • VK_FORMAT_FEATURE_2_OPTICAL_FLOW_IMAGE_BIT_NV 指定使用此格式的图像视图可以用作光流操作的输入或参考。

  • VK_FORMAT_FEATURE_2_OPTICAL_FLOW_VECTOR_BIT_NV 指定使用此格式的图像视图可以用作光流操作的流矢量图(作为提示、输出或全局流)。

  • VK_FORMAT_FEATURE_2_OPTICAL_FLOW_COST_BIT_NV 指定使用此格式的图像视图可以用作光流操作的输出成本图。

// Provided by VK_VERSION_1_3
typedef VkFlags64 VkFormatFeatureFlags2;

或等效项

// Provided by VK_KHR_format_feature_flags2
typedef VkFormatFeatureFlags2 VkFormatFeatureFlags2KHR;

VkFormatFeatureFlags2 是一个位掩码类型,用于设置零个或多个 VkFormatFeatureFlagBits2 的掩码。

要查询具有 VkFormat 附件的 子通道解析 操作的性能特征,请将 VkSubpassResolvePerformanceQueryEXT 结构添加到 VkFormatProperties2pNext 链中。

VkSubpassResolvePerformanceQueryEXT 结构的定义如下:

// Provided by VK_EXT_multisampled_render_to_single_sampled
typedef struct VkSubpassResolvePerformanceQueryEXT {
    VkStructureType    sType;
    void*              pNext;
    VkBool32           optimal;
} VkSubpassResolvePerformanceQueryEXT;
  • sType 是一个 VkStructureType 值,用于标识此结构。

  • pNextNULL 或指向扩展此结构的结构的指针。

  • optimal 指定子通道解析操作以最佳方式执行。

如果对于某个 VkFormatoptimalVK_FALSE,则在此格式的多采样附件上使用子通道解析操作可能会产生额外的开销,包括额外的内存带宽使用和更高的内存占用。如果具有此类格式的附件在 多采样渲染到单采样 子通道中使用,则额外的内存和内存带宽使用可能会抵消使用 VK_EXT_multisampled_render_to_single_sampled 扩展的好处。

有效用法(隐含)
  • VUID-VkSubpassResolvePerformanceQueryEXT-sType-sType
    sType 必须VK_STRUCTURE_TYPE_SUBPASS_RESOLVE_PERFORMANCE_QUERY_EXT

潜在的格式特性

某些 有效使用条件 取决于 VkImage 支持的格式特性,而其 VkImageTiling 是未知的。在这种情况下,无法确定 VkImage 支持的确切 VkFormatFeatureFlagBits,因此有效使用条件以 VkImage 格式的潜在格式特性来表达。

VkFormat潜在格式特性定义如下:

必需的格式支持

实现必须在列出的格式上至少支持以下特性集。对于图像,除非另有说明,否则这些特性必须在每个 VkImageType (包括数组和立方体变体)中都受支持。这些特性在现有格式上受支持,无需声明扩展或显式启用它们。使用 vkGetPhysicalDeviceFormatProperties 命令查询此处列出的要求之外的附加功能支持。

除非以下另有排除,否则只要这些标志值在其他方面被允许,所有 VkImageCreateFlags 值都支持必需的格式。

下表显示了每种格式必须支持哪些特性位。需要支持 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT 的格式也必须支持 VK_FORMAT_FEATURE_TRANSFER_SRC_BITVK_FORMAT_FEATURE_TRANSFER_DST_BIT

表 9. 格式特性表键

此特性必须在指定的格式上支持

此特性必须在至少某些指定的格式上支持,更多信息在出现该符号的表中

此特性必须在某些注意事项或前提条件下支持,更多信息在出现该符号的表中

§

此特性必须在某些注意事项或前提条件下支持,更多信息在出现该符号的表中

表 10. optimalTilingFeatures 中的特性位

VK_FORMAT_FEATURE_TRANSFER_SRC_BIT

VK_FORMAT_FEATURE_TRANSFER_DST_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

VK_FORMAT_FEATURE_BLIT_SRC_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

VK_FORMAT_FEATURE_BLIT_DST_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT

表 11. bufferFeatures 中的特性位

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

表 12. 强制格式支持:子字节组件

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

VK_FORMAT_FEATURE_BLIT_DST_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

VK_FORMAT_FEATURE_BLIT_SRC_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

格式

VK_FORMAT_UNDEFINED

VK_FORMAT_R4G4_UNORM_PACK8

VK_FORMAT_R4G4B4A4_UNORM_PACK16

VK_FORMAT_B4G4R4A4_UNORM_PACK16

VK_FORMAT_R5G6B5_UNORM_PACK16

VK_FORMAT_B5G6R5_UNORM_PACK16

VK_FORMAT_R5G5B5A1_UNORM_PACK16

VK_FORMAT_B5G5R5A1_UNORM_PACK16

VK_FORMAT_A1R5G5B5_UNORM_PACK16

VK_FORMAT_A1B5G5R5_UNORM_PACK16

VK_FORMAT_A4R4G4B4_UNORM_PACK16

VK_FORMAT_A4B4G4R4_UNORM_PACK16

如果 VkPhysicalDevice 支持 VkPhysicalDevice4444FormatsFeaturesEXT::formatA4R4G4B4 特性,则标记为 † 的格式特性必须支持 optimalTilingFeatures

如果 VkPhysicalDevice 支持 VkPhysicalDevice4444FormatsFeaturesEXT::formatA4B4G4R4 特性,则标记为 ‡ 的格式特性必须支持 optimalTilingFeatures

表 13. 强制格式支持:1-3 字节大小的组件

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

VK_FORMAT_FEATURE_BLIT_DST_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

VK_FORMAT_FEATURE_BLIT_SRC_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

格式

VK_FORMAT_R8_UNORM

VK_FORMAT_R8_SNORM

VK_FORMAT_R8_USCALED

VK_FORMAT_R8_SSCALED

VK_FORMAT_R8_UINT

VK_FORMAT_R8_SINT

VK_FORMAT_R8_SRGB

VK_FORMAT_R8G8_UNORM

VK_FORMAT_R8G8_SNORM

VK_FORMAT_R8G8_USCALED

VK_FORMAT_R8G8_SSCALED

VK_FORMAT_R8G8_UINT

VK_FORMAT_R8G8_SINT

VK_FORMAT_R8G8_SRGB

VK_FORMAT_R8G8B8_UNORM

VK_FORMAT_R8G8B8_SNORM

VK_FORMAT_R8G8B8_USCALED

VK_FORMAT_R8G8B8_SSCALED

VK_FORMAT_R8G8B8_UINT

VK_FORMAT_R8G8B8_SINT

VK_FORMAT_R8G8B8_SRGB

VK_FORMAT_B8G8R8_UNORM

VK_FORMAT_B8G8R8_SNORM

VK_FORMAT_B8G8R8_USCALED

VK_FORMAT_B8G8R8_SSCALED

VK_FORMAT_B8G8R8_UINT

VK_FORMAT_B8G8R8_SINT

VK_FORMAT_B8G8R8_SRGB

VK_FORMAT_A8_UNORM

如果 VkPhysicalDevice 支持 shaderStorageImageExtendedFormats 特性,则标记为 ‡ 的格式特性必须支持 optimalTilingFeatures

表 14. 强制格式支持:4 字节大小的组件

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

VK_FORMAT_FEATURE_BLIT_DST_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

VK_FORMAT_FEATURE_BLIT_SRC_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

格式

VK_FORMAT_R8G8B8A8_UNORM

VK_FORMAT_R8G8B8A8_SNORM

VK_FORMAT_R8G8B8A8_USCALED

VK_FORMAT_R8G8B8A8_SSCALED

VK_FORMAT_R8G8B8A8_UINT

VK_FORMAT_R8G8B8A8_SINT

VK_FORMAT_R8G8B8A8_SRGB

VK_FORMAT_B8G8R8A8_UNORM

VK_FORMAT_B8G8R8A8_SNORM

VK_FORMAT_B8G8R8A8_USCALED

VK_FORMAT_B8G8R8A8_SSCALED

VK_FORMAT_B8G8R8A8_UINT

VK_FORMAT_B8G8R8A8_SINT

VK_FORMAT_B8G8R8A8_SRGB

VK_FORMAT_A8B8G8R8_UNORM_PACK32

VK_FORMAT_A8B8G8R8_SNORM_PACK32

VK_FORMAT_A8B8G8R8_USCALED_PACK32

VK_FORMAT_A8B8G8R8_SSCALED_PACK32

VK_FORMAT_A8B8G8R8_UINT_PACK32

VK_FORMAT_A8B8G8R8_SINT_PACK32

VK_FORMAT_A8B8G8R8_SRGB_PACK32

表 15. 强制格式支持:10 位和 12 位组件

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

VK_FORMAT_FEATURE_BLIT_DST_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

VK_FORMAT_FEATURE_BLIT_SRC_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

格式

VK_FORMAT_A2R10G10B10_UNORM_PACK32

VK_FORMAT_A2R10G10B10_SNORM_PACK32

VK_FORMAT_A2R10G10B10_USCALED_PACK32

VK_FORMAT_A2R10G10B10_SSCALED_PACK32

VK_FORMAT_A2R10G10B10_UINT_PACK32

VK_FORMAT_A2R10G10B10_SINT_PACK32

VK_FORMAT_A2B10G10R10_UNORM_PACK32

VK_FORMAT_A2B10G10R10_SNORM_PACK32

VK_FORMAT_A2B10G10R10_USCALED_PACK32

VK_FORMAT_A2B10G10R10_SSCALED_PACK32

VK_FORMAT_A2B10G10R10_UINT_PACK32

VK_FORMAT_A2B10G10R10_SINT_PACK32

VK_FORMAT_R10X6_UNORM_PACK16

VK_FORMAT_R10X6G10X6_UNORM_2PACK16

VK_FORMAT_R12X4_UNORM_PACK16

VK_FORMAT_R12X4G12X4_UNORM_2PACK16

如果 VkPhysicalDevice 支持 shaderStorageImageExtendedFormats 特性,则标记为 ‡ 的格式特性必须支持 optimalTilingFeatures

表 16. 强制格式支持:16 位组件

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

VK_FORMAT_FEATURE_BLIT_DST_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

VK_FORMAT_FEATURE_BLIT_SRC_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

格式

VK_FORMAT_R16_UNORM

VK_FORMAT_R16_SNORM

VK_FORMAT_R16_USCALED

VK_FORMAT_R16_SSCALED

VK_FORMAT_R16_UINT

VK_FORMAT_R16_SINT

VK_FORMAT_R16_SFLOAT

VK_FORMAT_R16G16_UNORM

VK_FORMAT_R16G16_SNORM

VK_FORMAT_R16G16_USCALED

VK_FORMAT_R16G16_SSCALED

VK_FORMAT_R16G16_UINT

VK_FORMAT_R16G16_SINT

VK_FORMAT_R16G16_SFLOAT

§

§

§

VK_FORMAT_R16G16B16_UNORM

VK_FORMAT_R16G16B16_SNORM

VK_FORMAT_R16G16B16_USCALED

VK_FORMAT_R16G16B16_SSCALED

VK_FORMAT_R16G16B16_UINT

VK_FORMAT_R16G16B16_SINT

VK_FORMAT_R16G16B16_SFLOAT

VK_FORMAT_R16G16B16A16_UNORM

VK_FORMAT_R16G16B16A16_SNORM

VK_FORMAT_R16G16B16A16_USCALED

VK_FORMAT_R16G16B16A16_SSCALED

VK_FORMAT_R16G16B16A16_UINT

VK_FORMAT_R16G16B16A16_SINT

VK_FORMAT_R16G16B16A16_SFLOAT

§

§

如果 VkPhysicalDevice 支持 shaderStorageImageExtendedFormats 特性,则标记为 ‡ 的格式特性必须支持 optimalTilingFeatures

如果 VkPhysicalDevice 支持 shaderFloat16VectorAtomics 特性,则标记为 § 的格式特性必须支持 optimalTilingFeatures

表 17. 强制格式支持:32 位组件

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

VK_FORMAT_FEATURE_BLIT_DST_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

VK_FORMAT_FEATURE_BLIT_SRC_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

格式

VK_FORMAT_R32_UINT

VK_FORMAT_R32_SINT

VK_FORMAT_R32_SFLOAT

VK_FORMAT_R32G32_UINT

VK_FORMAT_R32G32_SINT

VK_FORMAT_R32G32_SFLOAT

VK_FORMAT_R32G32B32_UINT

VK_FORMAT_R32G32B32_SINT

VK_FORMAT_R32G32B32_SFLOAT

VK_FORMAT_R32G32B32A32_UINT

VK_FORMAT_R32G32B32A32_SINT

VK_FORMAT_R32G32B32A32_SFLOAT

如果 VkPhysicalDevice 支持 shaderImageFloat32AtomicsshaderImageFloat32AtomicAddshaderImageFloat32AtomicMinMax 特性,则标记为 † 的格式特性必须支持 optimalTilingFeatures

表 18. 强制格式支持:64 位/不均匀组件

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

VK_FORMAT_FEATURE_BLIT_DST_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

VK_FORMAT_FEATURE_BLIT_SRC_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

格式

VK_FORMAT_R64_UINT

VK_FORMAT_R64_SINT

VK_FORMAT_R64_SFLOAT

VK_FORMAT_R64G64_UINT

VK_FORMAT_R64G64_SINT

VK_FORMAT_R64G64_SFLOAT

VK_FORMAT_R64G64B64_UINT

VK_FORMAT_R64G64B64_SINT

VK_FORMAT_R64G64B64_SFLOAT

VK_FORMAT_R64G64B64A64_UINT

VK_FORMAT_R64G64B64A64_SINT

VK_FORMAT_R64G64B64A64_SFLOAT

VK_FORMAT_B10G11R11_UFLOAT_PACK32

VK_FORMAT_E5B9G9R9_UFLOAT_PACK32

如果 VkPhysicalDevice 支持 shaderStorageImageExtendedFormats 特性,则标记为 ‡ 的格式特性必须支持 optimalTilingFeatures

如果支持 shaderImageInt64Atomics 特性,则对于 VK_FORMAT_R64_UINTVK_FORMAT_R64_SINT必须optimalTilingFeatures 中声明 VK_FORMAT_FEATURE_STORAGE_IMAGE_BITVK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

表 19. 强制格式支持:具有 VkImageType VK_IMAGE_TYPE_2D 的深度/模板

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

VK_FORMAT_FEATURE_BLIT_DST_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

VK_FORMAT_FEATURE_BLIT_SRC_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

格式

VK_FORMAT_D16_UNORM

VK_FORMAT_X8_D24_UNORM_PACK32

VK_FORMAT_D32_SFLOAT

VK_FORMAT_S8_UINT

VK_FORMAT_D16_UNORM_S8_UINT

VK_FORMAT_D24_UNORM_S8_UINT

VK_FORMAT_D32_SFLOAT_S8_UINT

对于 VK_FORMAT_X8_D24_UNORM_PACK32VK_FORMAT_D32_SFLOAT 中的至少一种格式,**必须**支持 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT 特性,并且对于 VK_FORMAT_D24_UNORM_S8_UINTVK_FORMAT_D32_SFLOAT_S8_UINT 中的至少一种格式,**必须**支持该特性。

bufferFeatures 对于这些格式**必须**不支持任何特性

表 20. 强制格式支持:具有 VkImageType VK_IMAGE_TYPE_2DVK_IMAGE_TYPE_3D 的 BC 压缩格式

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

VK_FORMAT_FEATURE_BLIT_DST_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

VK_FORMAT_FEATURE_BLIT_SRC_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

格式

VK_FORMAT_BC1_RGB_UNORM_BLOCK

VK_FORMAT_BC1_RGB_SRGB_BLOCK

VK_FORMAT_BC1_RGBA_UNORM_BLOCK

VK_FORMAT_BC1_RGBA_SRGB_BLOCK

VK_FORMAT_BC2_UNORM_BLOCK

VK_FORMAT_BC2_SRGB_BLOCK

VK_FORMAT_BC3_UNORM_BLOCK

VK_FORMAT_BC3_SRGB_BLOCK

VK_FORMAT_BC4_UNORM_BLOCK

VK_FORMAT_BC4_SNORM_BLOCK

VK_FORMAT_BC5_UNORM_BLOCK

VK_FORMAT_BC5_SNORM_BLOCK

VK_FORMAT_BC6H_UFLOAT_BLOCK

VK_FORMAT_BC6H_SFLOAT_BLOCK

VK_FORMAT_BC7_UNORM_BLOCK

VK_FORMAT_BC7_SRGB_BLOCK

对于以下至少一个表中的所有格式,在 optimalTilingFeatures 中**必须**支持 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BITVK_FORMAT_FEATURE_BLIT_SRC_BITVK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT 特性:此表、强制格式支持:具有 VkImageType VK_IMAGE_TYPE_2D 的 ETC2 和 EAC 压缩格式强制格式支持:具有 VkImageType VK_IMAGE_TYPE_2D 的 ASTC LDR 压缩格式

表 21. 强制格式支持:具有 VkImageType VK_IMAGE_TYPE_2D 的 ETC2 和 EAC 压缩格式

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

VK_FORMAT_FEATURE_BLIT_DST_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

VK_FORMAT_FEATURE_BLIT_SRC_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

格式

VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK

VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK

VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK

VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK

VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK

VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK

VK_FORMAT_EAC_R11_UNORM_BLOCK

VK_FORMAT_EAC_R11_SNORM_BLOCK

VK_FORMAT_EAC_R11G11_UNORM_BLOCK

VK_FORMAT_EAC_R11G11_SNORM_BLOCK

对于以下至少一个表中的所有格式,在 optimalTilingFeatures 中**必须**支持 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BITVK_FORMAT_FEATURE_BLIT_SRC_BITVK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT 特性:此表、强制格式支持:具有 VkImageType VK_IMAGE_TYPE_2D 和 VK_IMAGE_TYPE_3D 的 BC 压缩格式强制格式支持:具有 VkImageType VK_IMAGE_TYPE_2D 的 ASTC LDR 压缩格式

表 22. 强制格式支持:具有 VkImageType VK_IMAGE_TYPE_2D 的 ASTC LDR 压缩格式

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

VK_FORMAT_FEATURE_BLIT_DST_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

VK_FORMAT_FEATURE_BLIT_SRC_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

格式

VK_FORMAT_ASTC_4x4_UNORM_BLOCK

VK_FORMAT_ASTC_4x4_SRGB_BLOCK

VK_FORMAT_ASTC_5x4_UNORM_BLOCK

VK_FORMAT_ASTC_5x4_SRGB_BLOCK

VK_FORMAT_ASTC_5x5_UNORM_BLOCK

VK_FORMAT_ASTC_5x5_SRGB_BLOCK

VK_FORMAT_ASTC_6x5_UNORM_BLOCK

VK_FORMAT_ASTC_6x5_SRGB_BLOCK

VK_FORMAT_ASTC_6x6_UNORM_BLOCK

VK_FORMAT_ASTC_6x6_SRGB_BLOCK

VK_FORMAT_ASTC_8x5_UNORM_BLOCK

VK_FORMAT_ASTC_8x5_SRGB_BLOCK

VK_FORMAT_ASTC_8x6_UNORM_BLOCK

VK_FORMAT_ASTC_8x6_SRGB_BLOCK

VK_FORMAT_ASTC_8x8_UNORM_BLOCK

VK_FORMAT_ASTC_8x8_SRGB_BLOCK

VK_FORMAT_ASTC_10x5_UNORM_BLOCK

VK_FORMAT_ASTC_10x5_SRGB_BLOCK

VK_FORMAT_ASTC_10x6_UNORM_BLOCK

VK_FORMAT_ASTC_10x6_SRGB_BLOCK

VK_FORMAT_ASTC_10x8_UNORM_BLOCK

VK_FORMAT_ASTC_10x8_SRGB_BLOCK

VK_FORMAT_ASTC_10x10_UNORM_BLOCK

VK_FORMAT_ASTC_10x10_SRGB_BLOCK

VK_FORMAT_ASTC_12x10_UNORM_BLOCK

VK_FORMAT_ASTC_12x10_SRGB_BLOCK

VK_FORMAT_ASTC_12x12_UNORM_BLOCK

VK_FORMAT_ASTC_12x12_SRGB_BLOCK

对于以下至少一个表中的所有格式,在 optimalTilingFeatures 中**必须**支持 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BITVK_FORMAT_FEATURE_BLIT_SRC_BITVK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT 特性:此表、强制格式支持:具有 VkImageType VK_IMAGE_TYPE_2D 和 VK_IMAGE_TYPE_3D 的 BC 压缩格式强制格式支持:具有 VkImageType VK_IMAGE_TYPE_2D 的 ETC2 和 EAC 压缩格式

如果支持三次滤波,则对于以下图像视图类型,**必须**支持 VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT

  • VK_IMAGE_VIEW_TYPE_2D

  • VK_IMAGE_VIEW_TYPE_2D_ARRAY

对于以下格式

  • VK_FORMAT_R4G4_UNORM_PACK8

  • VK_FORMAT_R4G4B4A4_UNORM_PACK16

  • VK_FORMAT_B4G4R4A4_UNORM_PACK16

  • VK_FORMAT_R5G6B5_UNORM_PACK16

  • VK_FORMAT_B5G6R5_UNORM_PACK16

  • VK_FORMAT_R5G5B5A1_UNORM_PACK16

  • VK_FORMAT_B5G5R5A1_UNORM_PACK16

  • VK_FORMAT_A1R5G5B5_UNORM_PACK16

  • VK_FORMAT_R8_UNORM

  • VK_FORMAT_R8_SNORM

  • VK_FORMAT_R8_SRGB

  • VK_FORMAT_R8G8_UNORM

  • VK_FORMAT_R8G8_SNORM

  • VK_FORMAT_R8G8_SRGB

  • VK_FORMAT_R8G8B8_UNORM

  • VK_FORMAT_R8G8B8_SNORM

  • VK_FORMAT_R8G8B8_SRGB

  • VK_FORMAT_B8G8R8_UNORM

  • VK_FORMAT_B8G8R8_SNORM

  • VK_FORMAT_B8G8R8_SRGB

  • VK_FORMAT_R8G8B8A8_UNORM

  • VK_FORMAT_R8G8B8A8_SNORM

  • VK_FORMAT_R8G8B8A8_SRGB

  • VK_FORMAT_B8G8R8A8_UNORM

  • VK_FORMAT_B8G8R8A8_SNORM

  • VK_FORMAT_B8G8R8A8_SRGB

  • VK_FORMAT_A8B8G8R8_UNORM_PACK32

  • VK_FORMAT_A8B8G8R8_SNORM_PACK32

  • VK_FORMAT_A8B8G8R8_SRGB_PACK32

如果支持 ETC 压缩格式,则对于以下图像视图类型,**必须**支持 VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT

  • VK_IMAGE_VIEW_TYPE_2D

  • VK_IMAGE_VIEW_TYPE_2D_ARRAY

对于以下附加格式

  • VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK

  • VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK

  • VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK

  • VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK

  • VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK

  • VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK

如果对任何其他格式支持三次滤波,则对于这些格式,**必须**支持以下图像视图类型

  • VK_IMAGE_VIEW_TYPE_2D

  • VK_IMAGE_VIEW_TYPE_2D_ARRAY

要与 VkImageView 结合使用,并且 subresourceRange.aspectMask 等于 VK_IMAGE_ASPECT_COLOR_BIT,对于以下格式,**必须**启用 采样器 Y′CBCR 转换

表 23. 需要对 VK_IMAGE_ASPECT_COLOR_BIT 图像视图进行采样器 Y′CBCR 转换的格式

VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT

VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT

VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT

VK_FORMAT_FEATURE_TRANSFER_DST_BIT

VK_FORMAT_FEATURE_TRANSFER_SRC_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

VK_FORMAT_FEATURE_DISJOINT_BIT

格式

平面

VK_FORMAT_G8B8G8R8_422_UNORM

1

VK_FORMAT_B8G8R8G8_422_UNORM

1

VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM

3

VK_FORMAT_G8_B8R8_2PLANE_420_UNORM

2

VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM

3

VK_FORMAT_G8_B8R8_2PLANE_422_UNORM

2

VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM

3

VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16

1

VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16

1

VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16

1

VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16

3

VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16

2

VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16

3

VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16

2

VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16

3

VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16

1

VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16

1

VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16

1

VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16

3

VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16

2

VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16

3

VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16

2

VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16

3

VK_FORMAT_G16B16G16R16_422_UNORM

1

VK_FORMAT_B16G16R16G16_422_UNORM

1

VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM

3

VK_FORMAT_G16_B16R16_2PLANE_420_UNORM

2

VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM

3

VK_FORMAT_G16_B16R16_2PLANE_422_UNORM

2

VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM

3

VK_FORMAT_G8_B8R8_2PLANE_444_UNORM

2

VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16

2

VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16

2

VK_FORMAT_G16_B16R16_2PLANE_444_UNORM

2

如果 VkPhysicalDevice 支持 VkPhysicalDeviceSamplerYcbcrConversionFeatures 特性,则对于具有 VkImageType VK_IMAGE_TYPE_2DoptimalTilingFeatures,**必须**支持标记为 † 的格式特性。

如果启用了 VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT::formatRgba10x6WithoutYCbCrSampler 特性,则标记为 ‡ 的格式不需要对 VK_IMAGE_ASPECT_COLOR_BIT 图像视图进行采样器 Y′CBCR 转换。

对于以上需要 采样器 Y′CBCR 转换的格式,实现不需要支持 VK_IMAGE_CREATE_SPARSE_BINDING_BITVK_IMAGE_CREATE_SPARSE_RESIDENCY_BITVK_IMAGE_CREATE_SPARSE_ALIASED_BIT VkImageCreateFlags。要确定实现是否支持具有这些格式的稀疏图像创建标志,请使用 vkGetPhysicalDeviceImageFormatPropertiesvkGetPhysicalDeviceImageFormatProperties2

如果启用了 fragmentDensityMap 特性,则对于以下格式,**必须**支持 VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT

  • VK_FORMAT_R8G8_UNORM

如果支持 accelerationStructure 特性,则在 bufferFeatures 中**必须**支持以下格式的 VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR

  • VK_FORMAT_R32G32_SFLOAT

  • VK_FORMAT_R32G32B32_SFLOAT

  • VK_FORMAT_R16G16_SFLOAT

  • VK_FORMAT_R16G16B16A16_SFLOAT

  • VK_FORMAT_R16G16_SNORM

  • VK_FORMAT_R16G16B16A16_SNORM

如果支持 attachmentFragmentShadingRate 特性,则对于以下格式,**必须**支持 VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR

  • VK_FORMAT_R8_UINT

如果支持 hostImageCopy 特性,并且在颜色格式的 optimalTilingFeatureslinearTilingFeatures 中支持 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,则分别在 optimalTilingFeatureslinearTilingFeatures 中也**必须**支持 VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT

不具有着色器存储格式的格式

使用 Unknown 图像格式的存储图像或存储纹理缓冲区的设备级特性,shaderStorageImageReadWithoutFormatshaderStorageImageWriteWithoutFormat,仅适用于以下格式

  • VK_FORMAT_R8G8B8A8_UNORM

  • VK_FORMAT_R8G8B8A8_SNORM

  • VK_FORMAT_R8G8B8A8_UINT

  • VK_FORMAT_R8G8B8A8_SINT

  • VK_FORMAT_R32_UINT

  • VK_FORMAT_R32_SINT

  • VK_FORMAT_R32_SFLOAT

  • VK_FORMAT_R32G32_UINT

  • VK_FORMAT_R32G32_SINT

  • VK_FORMAT_R32G32_SFLOAT

  • VK_FORMAT_R32G32B32A32_UINT

  • VK_FORMAT_R32G32B32A32_SINT

  • VK_FORMAT_R32G32B32A32_SFLOAT

  • VK_FORMAT_R16G16B16A16_UINT

  • VK_FORMAT_R16G16B16A16_SINT

  • VK_FORMAT_R16G16B16A16_SFLOAT

  • VK_FORMAT_R16G16_SFLOAT

  • VK_FORMAT_B10G11R11_UFLOAT_PACK32

  • VK_FORMAT_R16_SFLOAT

  • VK_FORMAT_R16G16B16A16_UNORM

  • VK_FORMAT_A2B10G10R10_UNORM_PACK32

  • VK_FORMAT_R16G16_UNORM

  • VK_FORMAT_R8G8_UNORM

  • VK_FORMAT_R16_UNORM

  • VK_FORMAT_R8_UNORM

  • VK_FORMAT_R16G16B16A16_SNORM

  • VK_FORMAT_R16G16_SNORM

  • VK_FORMAT_R8G8_SNORM

  • VK_FORMAT_R16_SNORM

  • VK_FORMAT_R8_SNORM

  • VK_FORMAT_R16G16_SINT

  • VK_FORMAT_R8G8_SINT

  • VK_FORMAT_R16_SINT

  • VK_FORMAT_R8_SINT

  • VK_FORMAT_A2B10G10R10_UINT_PACK32

  • VK_FORMAT_R16G16_UINT

  • VK_FORMAT_R8G8_UINT

  • VK_FORMAT_R16_UINT

  • VK_FORMAT_R8_UINT

  • VK_FORMAT_A8_UNORM

此格式列表是来自必需格式支持部分和 shaderStorageImageExtendedFormats 中列出的格式的必需存储格式的并集。

如果实现支持给定格式列表中任何格式的 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT,并且支持 shaderStorageImageReadWithoutFormat,则如果支持 Vulkan 1.3 或 VK_KHR_format_feature_flags2 扩展,则**必须**为该相同格式支持 VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT

如果实现支持给定格式列表中任何格式的 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT,并且支持 shaderStorageImageWriteWithoutFormat,则如果支持 Vulkan 1.3 或 VK_KHR_format_feature_flags2 扩展,则**必须**为该相同格式支持 VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT

对于某个格式,如果实现不支持 VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BITVK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT 中的任何一个,那么当该格式未在SPIR-V 和 Vulkan 图像格式兼容性表中列出时,必须不能报告对该格式支持 VK_FORMAT_FEATURE_STORAGE_IMAGE_BITVK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

一些较旧的实现不遵循此限制。它们报告支持格式作为存储图像,即使它们不支持在没有 Format 限定符的情况下访问,并且没有匹配的 Format 标记。这样的图像既不能读取也不能写入。

通过 Vulkan 一致性测试套件 1.3.9.0 版本或任何后续版本的驱动程序将符合上述要求。

深度比较格式支持

如果支持 Vulkan 1.3 或 VK_KHR_format_feature_flags2 扩展,则具有深度分量并支持 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT 的深度/模板格式必须支持 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT

格式特性相关的用法标志

某些资源用法标志取决于对相关格式的相应格式特性标志的支持。下表列出了具有此类依赖关系的 VkBufferUsageFlagBitsVkImageUsageFlagBits,以及它们所依赖的格式特性标志。其他限制,包括但不限于特定资源使用所需的其他格式特性标志,可能适用,如本规范的各个章节所述。

表 24. 格式特性相关的缓冲器用法标志
缓冲器用法标志 必需的格式特性标志

VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

VK_BUFFER_USAGE_VERTEX_BUFFER_BIT

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

表 25. 格式特性相关的图像用法标志
图像用法标志 必需的格式特性标志

VK_IMAGE_USAGE_SAMPLED_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

VK_IMAGE_USAGE_STORAGE_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BITVK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR

VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR

VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR

VK_FORMAT_FEATURE_VIDEO_DECODE_OUTPUT_BIT_KHR

VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR

VK_FORMAT_FEATURE_VIDEO_DECODE_DPB_BIT_KHR

VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR

VK_FORMAT_FEATURE_VIDEO_ENCODE_INPUT_BIT_KHR

VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR

VK_FORMAT_FEATURE_VIDEO_ENCODE_DPB_BIT_KHR

VK_IMAGE_USAGE_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR

VK_FORMAT_FEATURE_2_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR

VK_IMAGE_USAGE_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR

VK_FORMAT_FEATURE_2_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR