From f54191ab6eeb8f137a75244356ded07b63ccae4e Mon Sep 17 00:00:00 2001 From: Mohan Maiya Date: Thu, 25 Mar 2021 12:27:02 -0700 Subject: [PATCH] Vulkan: Add YUV G8_B8R8_2PLANE_420_UNORM support. Add support for YCbCr_420_888 and YCrCb_420_888 formats, more commonly known as NV12 and NV21. Bug: angleproject:5773 Change-Id: I1568d543c221ad110e7f199eb2ffd5df23a6134e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2787251 Commit-Queue: Mohan Maiya Reviewed-by: Jamie Madill Reviewed-by: Shahbaz Youssefi --- scripts/code_generation_hashes/ANGLE_format.json | 8 ++++---- .../ANGLE_load_functions_table.json | 4 ++-- scripts/code_generation_hashes/DXGI_format.json | 2 +- .../Metal_default_shaders.json | 6 +++--- .../code_generation_hashes/Metal_format_table.json | 2 +- scripts/code_generation_hashes/Vulkan_format.json | 6 +++--- .../Vulkan_mandatory_format_support_table.json | 4 ++-- src/common/angleutils.h | 1 + src/libANGLE/renderer/FormatID_autogen.h | 3 ++- src/libANGLE/renderer/Format_table_autogen.cpp | 3 +++ src/libANGLE/renderer/angle_format_data.json | 3 +++ src/libANGLE/renderer/angle_format_map.json | 3 ++- src/libANGLE/renderer/load_functions_data.json | 5 +++++ .../renderer/load_functions_table_autogen.cpp | 14 ++++++++++++++ .../renderer/metal/shaders/format_autogen.h | 1 + .../shaders/mtl_default_shaders_src_autogen.inc | 1 + src/libANGLE/renderer/vulkan/vk_format_map.json | 3 ++- .../renderer/vulkan/vk_format_table_autogen.cpp | 13 +++++++++++++ .../vk_mandatory_format_support_table_autogen.cpp | 1 + 19 files changed, 64 insertions(+), 19 deletions(-) diff --git a/scripts/code_generation_hashes/ANGLE_format.json b/scripts/code_generation_hashes/ANGLE_format.json index 1af19cecf..816aec83b 100644 --- a/scripts/code_generation_hashes/ANGLE_format.json +++ b/scripts/code_generation_hashes/ANGLE_format.json @@ -1,14 +1,14 @@ { "src/libANGLE/renderer/FormatID_autogen.h": - "6f4f189645a02e35e5f0c07c65d8124f", + "9ba2d452bf05b9ae21ed86e57490c703", "src/libANGLE/renderer/Format_table_autogen.cpp": - "fe2b6b0f7a76fdb3d3113b5bbdc4dad3", + "969f821f7241fbc3df16864daeafa68e", "src/libANGLE/renderer/angle_format.py": "32ba71942c0fd00e6807104f1bb80a3c", "src/libANGLE/renderer/angle_format_data.json": - "6d7adfa00bbff38c4d3dc81eff826958", + "4b3b5d4beef95c282ba4f20fdc2b20ed", "src/libANGLE/renderer/angle_format_map.json": - "ae32dfce450f7b7ffc62d746d6fddf83", + "46b589fc0fc306b2f7c97ee7bb08baee", "src/libANGLE/renderer/gen_angle_format_table.py": "428255701f3a3a9630593ab110ca98c1" } \ No newline at end of file diff --git a/scripts/code_generation_hashes/ANGLE_load_functions_table.json b/scripts/code_generation_hashes/ANGLE_load_functions_table.json index bd73406ba..d3021970a 100644 --- a/scripts/code_generation_hashes/ANGLE_load_functions_table.json +++ b/scripts/code_generation_hashes/ANGLE_load_functions_table.json @@ -4,7 +4,7 @@ "src/libANGLE/renderer/gen_load_functions_table.py": "bbc2f2cbce34313d7c06a3511eff5a1f", "src/libANGLE/renderer/load_functions_data.json": - "15c8cb8e78a1491c4befa7921c5194e3", + "09e92e0cb6a1f3034df1c43769d533b9", "src/libANGLE/renderer/load_functions_table_autogen.cpp": - "3439701afe487ff33d9eccc5febb8421" + "0f35afffa4c8a4a78ae49bd0e4956565" } \ No newline at end of file diff --git a/scripts/code_generation_hashes/DXGI_format.json b/scripts/code_generation_hashes/DXGI_format.json index d0e4a228d..e3388ce29 100644 --- a/scripts/code_generation_hashes/DXGI_format.json +++ b/scripts/code_generation_hashes/DXGI_format.json @@ -2,7 +2,7 @@ "src/libANGLE/renderer/angle_format.py": "32ba71942c0fd00e6807104f1bb80a3c", "src/libANGLE/renderer/angle_format_map.json": - "ae32dfce450f7b7ffc62d746d6fddf83", + "46b589fc0fc306b2f7c97ee7bb08baee", "src/libANGLE/renderer/dxgi_format_data.json": "3428e4761ccd05f960adffd6ccbd86c5", "src/libANGLE/renderer/dxgi_format_map_autogen.cpp": diff --git a/scripts/code_generation_hashes/Metal_default_shaders.json b/scripts/code_generation_hashes/Metal_default_shaders.json index 4c989bc95..6d755066a 100644 --- a/scripts/code_generation_hashes/Metal_default_shaders.json +++ b/scripts/code_generation_hashes/Metal_default_shaders.json @@ -2,7 +2,7 @@ "src/libANGLE/renderer/angle_format.py": "32ba71942c0fd00e6807104f1bb80a3c", "src/libANGLE/renderer/angle_format_map.json": - "ae32dfce450f7b7ffc62d746d6fddf83", + "46b589fc0fc306b2f7c97ee7bb08baee", "src/libANGLE/renderer/gen_angle_format_table.py": "428255701f3a3a9630593ab110ca98c1", "src/libANGLE/renderer/metal/shaders/blit.metal": @@ -16,7 +16,7 @@ "src/libANGLE/renderer/metal/shaders/copy_buffer.metal": "83d33cc789cb5df7b173b98c50770c0f", "src/libANGLE/renderer/metal/shaders/format_autogen.h": - "01f206f1fd873c5f9da2f3627b49bcf2", + "0b8cbcd9b2e94f0688a334813c67f629", "src/libANGLE/renderer/metal/shaders/gen_indices.metal": "06e2b6f259fe019b46e2a9710eb11bff", "src/libANGLE/renderer/metal/shaders/gen_mipmap.metal": @@ -24,7 +24,7 @@ "src/libANGLE/renderer/metal/shaders/gen_mtl_internal_shaders.py": "af7a98ffaa3f3885b1e3cc7160c8549b", "src/libANGLE/renderer/metal/shaders/mtl_default_shaders_src_autogen.inc": - "80ebc484aa7fea40e5a8a9078b0a7c81", + "47961cdeb7bed0367b74d2bf0f99a1c6", "src/libANGLE/renderer/metal/shaders/visibility.metal": "b82aa740cf4b0aed606aacef1024beea" } \ No newline at end of file diff --git a/scripts/code_generation_hashes/Metal_format_table.json b/scripts/code_generation_hashes/Metal_format_table.json index ddfb8ff1d..3e5537d24 100644 --- a/scripts/code_generation_hashes/Metal_format_table.json +++ b/scripts/code_generation_hashes/Metal_format_table.json @@ -2,7 +2,7 @@ "src/libANGLE/renderer/angle_format.py": "32ba71942c0fd00e6807104f1bb80a3c", "src/libANGLE/renderer/angle_format_map.json": - "ae32dfce450f7b7ffc62d746d6fddf83", + "46b589fc0fc306b2f7c97ee7bb08baee", "src/libANGLE/renderer/metal/gen_mtl_format_table.py": "ee0b5db245a6672b86b122426a16d395", "src/libANGLE/renderer/metal/mtl_format_map.json": diff --git a/scripts/code_generation_hashes/Vulkan_format.json b/scripts/code_generation_hashes/Vulkan_format.json index 44ccc51cf..fe3d6762c 100644 --- a/scripts/code_generation_hashes/Vulkan_format.json +++ b/scripts/code_generation_hashes/Vulkan_format.json @@ -2,11 +2,11 @@ "src/libANGLE/renderer/angle_format.py": "32ba71942c0fd00e6807104f1bb80a3c", "src/libANGLE/renderer/angle_format_map.json": - "ae32dfce450f7b7ffc62d746d6fddf83", + "46b589fc0fc306b2f7c97ee7bb08baee", "src/libANGLE/renderer/vulkan/gen_vk_format_table.py": "0bc8a6deefd856387da0bccf3817dde7", "src/libANGLE/renderer/vulkan/vk_format_map.json": - "d7bb44b9fa6f6e4038c2a415fe1711a1", + "5aa1df6574944082788c0dadccf4f136", "src/libANGLE/renderer/vulkan/vk_format_table_autogen.cpp": - "1f1587af2b31877abe281a1a1b84e15e" + "57594ef67cdb88f9940b786ba1bb04ac" } \ No newline at end of file diff --git a/scripts/code_generation_hashes/Vulkan_mandatory_format_support_table.json b/scripts/code_generation_hashes/Vulkan_mandatory_format_support_table.json index 10077ed0c..489990ca2 100644 --- a/scripts/code_generation_hashes/Vulkan_mandatory_format_support_table.json +++ b/scripts/code_generation_hashes/Vulkan_mandatory_format_support_table.json @@ -4,11 +4,11 @@ "src/libANGLE/renderer/vulkan/gen_vk_mandatory_format_support_table.py": "3e2b8cd80373275e862bb7c8ba20a745", "src/libANGLE/renderer/vulkan/vk_format_map.json": - "d7bb44b9fa6f6e4038c2a415fe1711a1", + "5aa1df6574944082788c0dadccf4f136", "src/libANGLE/renderer/vulkan/vk_mandatory_format_support_data.json": "fa2bd54c1bb0ab2cf1d386061a4bc5c5", "src/libANGLE/renderer/vulkan/vk_mandatory_format_support_table_autogen.cpp": - "201340f2709707e5ce88a7c2f6d21f9a", + "16d7c971fcdf6050b065d38ece822d0b", "third_party/vulkan-deps/vulkan-headers/src/registry/vk.xml": "a30c26e541c88b2c20284dbbc1d0b26a" } \ No newline at end of file diff --git a/src/common/angleutils.h b/src/common/angleutils.h index d132a72e8..b61a53677 100644 --- a/src/common/angleutils.h +++ b/src/common/angleutils.h @@ -292,6 +292,7 @@ inline bool IsLittleEndian() // YUV formats #define GL_G8_B8_R8_3PLANE_420_UNORM_ANGLEX 0x6B00 +#define GL_G8_B8R8_2PLANE_420_UNORM_ANGLEX 0x6B01 #define ANGLE_CHECK_GL_ALLOC(context, result) \ ANGLE_CHECK(context, result, "Failed to allocate host memory", GL_OUT_OF_MEMORY) diff --git a/src/libANGLE/renderer/FormatID_autogen.h b/src/libANGLE/renderer/FormatID_autogen.h index e3467bb7b..4cf3abbc4 100644 --- a/src/libANGLE/renderer/FormatID_autogen.h +++ b/src/libANGLE/renderer/FormatID_autogen.h @@ -120,6 +120,7 @@ enum class FormatID ETC2_R8G8B8A8_UNORM_BLOCK, ETC2_R8G8B8_SRGB_BLOCK, ETC2_R8G8B8_UNORM_BLOCK, + G8_B8R8_2PLANE_420_UNORM, G8_B8_R8_3PLANE_420_UNORM, L16A16_FLOAT, L16_FLOAT, @@ -244,7 +245,7 @@ enum class FormatID X2R10G10B10_USCALED_VERTEX }; -constexpr uint32_t kNumANGLEFormats = 225; +constexpr uint32_t kNumANGLEFormats = 226; } // namespace angle diff --git a/src/libANGLE/renderer/Format_table_autogen.cpp b/src/libANGLE/renderer/Format_table_autogen.cpp index a395dd5e0..acbd4a767 100644 --- a/src/libANGLE/renderer/Format_table_autogen.cpp +++ b/src/libANGLE/renderer/Format_table_autogen.cpp @@ -127,6 +127,7 @@ const Format gFormatInfoTable[] = { { FormatID::ETC2_R8G8B8A8_UNORM_BLOCK, GL_COMPRESSED_RGBA8_ETC2_EAC, GL_COMPRESSED_RGBA8_ETC2_EAC, nullptr, NoCopyFunctions, nullptr, nullptr, GL_UNSIGNED_NORMALIZED, 8, 8, 8, 8, 0, 0, 0, 16, 0, true, false, false, false, false, gl::VertexAttribType::UnsignedByte }, { FormatID::ETC2_R8G8B8_SRGB_BLOCK, GL_COMPRESSED_SRGB8_ETC2, GL_COMPRESSED_SRGB8_ETC2, nullptr, NoCopyFunctions, nullptr, nullptr, GL_UNSIGNED_NORMALIZED, 8, 8, 8, 0, 0, 0, 0, 8, 0, true, false, false, true, false, gl::VertexAttribType::Byte }, { FormatID::ETC2_R8G8B8_UNORM_BLOCK, GL_COMPRESSED_RGB8_ETC2, GL_COMPRESSED_RGB8_ETC2, nullptr, NoCopyFunctions, nullptr, nullptr, GL_UNSIGNED_NORMALIZED, 8, 8, 8, 0, 0, 0, 0, 8, 0, true, false, false, false, false, gl::VertexAttribType::UnsignedByte }, + { FormatID::G8_B8R8_2PLANE_420_UNORM, GL_G8_B8R8_2PLANE_420_UNORM_ANGLEX, GL_G8_B8R8_2PLANE_420_UNORM_ANGLEX, GenerateMip, NoCopyFunctions, ReadColor, WriteColor, GL_UNSIGNED_NORMALIZED, 8, 8, 8, 0, 0, 0, 0, 3, 0, false, false, false, false, true, gl::VertexAttribType::UnsignedByte }, { FormatID::G8_B8_R8_3PLANE_420_UNORM, GL_G8_B8_R8_3PLANE_420_UNORM_ANGLEX, GL_G8_B8_R8_3PLANE_420_UNORM_ANGLEX, GenerateMip, NoCopyFunctions, ReadColor, WriteColor, GL_UNSIGNED_NORMALIZED, 8, 8, 8, 0, 0, 0, 0, 3, 0, false, false, false, false, true, gl::VertexAttribType::UnsignedByte }, { FormatID::L16A16_FLOAT, GL_LUMINANCE_ALPHA16F_EXT, GL_LUMINANCE_ALPHA16F_EXT, GenerateMip, NoCopyFunctions, ReadColor, WriteColor, GL_FLOAT, 0, 0, 0, 16, 16, 0, 0, 4, std::numeric_limits::max(), false, false, false, false, false, gl::VertexAttribType::Float }, { FormatID::L16_FLOAT, GL_LUMINANCE16F_EXT, GL_LUMINANCE16F_EXT, GenerateMip, NoCopyFunctions, ReadColor, WriteColor, GL_FLOAT, 0, 0, 0, 0, 16, 0, 0, 2, std::numeric_limits::max(), false, false, false, false, false, gl::VertexAttribType::Float }, @@ -471,6 +472,8 @@ FormatID Format::InternalFormatToID(GLenum internalFormat) return FormatID::ETC1_LOSSY_DECODE_R8G8B8_UNORM_BLOCK; case GL_ETC1_RGB8_OES: return FormatID::ETC1_R8G8B8_UNORM_BLOCK; + case GL_G8_B8R8_2PLANE_420_UNORM_ANGLEX: + return FormatID::G8_B8R8_2PLANE_420_UNORM; case GL_G8_B8_R8_3PLANE_420_UNORM_ANGLEX: return FormatID::G8_B8_R8_3PLANE_420_UNORM; case GL_INT_10_10_10_2_OES: diff --git a/src/libANGLE/renderer/angle_format_data.json b/src/libANGLE/renderer/angle_format_data.json index 6ba4688f2..e34df2e5c 100644 --- a/src/libANGLE/renderer/angle_format_data.json +++ b/src/libANGLE/renderer/angle_format_data.json @@ -287,5 +287,8 @@ }, "G8_B8_R8_3PLANE_420_UNORM": { "channelStruct": "R8G8B8" + }, + "G8_B8R8_2PLANE_420_UNORM": { + "channelStruct": "R8G8B8" } } diff --git a/src/libANGLE/renderer/angle_format_map.json b/src/libANGLE/renderer/angle_format_map.json index eb4cd5328..d539fdd95 100644 --- a/src/libANGLE/renderer/angle_format_map.json +++ b/src/libANGLE/renderer/angle_format_map.json @@ -225,5 +225,6 @@ [ "GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT", "PVRTC1_RGB_4BPP_UNORM_SRGB_BLOCK" ], [ "GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT", "PVRTC1_RGBA_2BPP_UNORM_SRGB_BLOCK" ], [ "GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT", "PVRTC1_RGBA_4BPP_UNORM_SRGB_BLOCK" ], - [ "GL_G8_B8_R8_3PLANE_420_UNORM_ANGLEX", "G8_B8_R8_3PLANE_420_UNORM" ] + [ "GL_G8_B8_R8_3PLANE_420_UNORM_ANGLEX", "G8_B8_R8_3PLANE_420_UNORM" ], + [ "GL_G8_B8R8_2PLANE_420_UNORM_ANGLEX", "G8_B8R8_2PLANE_420_UNORM" ] ] diff --git a/src/libANGLE/renderer/load_functions_data.json b/src/libANGLE/renderer/load_functions_data.json index 8dc49e88f..455db7d33 100644 --- a/src/libANGLE/renderer/load_functions_data.json +++ b/src/libANGLE/renderer/load_functions_data.json @@ -1175,5 +1175,10 @@ "NONE": { "GL_UNSIGNED_BYTE": "UnimplementedLoadFunction" } + }, + "GL_G8_B8R8_2PLANE_420_UNORM_ANGLEX": { + "NONE": { + "GL_UNSIGNED_BYTE": "UnimplementedLoadFunction" + } } } diff --git a/src/libANGLE/renderer/load_functions_table_autogen.cpp b/src/libANGLE/renderer/load_functions_table_autogen.cpp index 82e7d30f2..62cfc189f 100644 --- a/src/libANGLE/renderer/load_functions_table_autogen.cpp +++ b/src/libANGLE/renderer/load_functions_table_autogen.cpp @@ -1608,6 +1608,18 @@ LoadImageFunctionInfo ETC1_RGB8_OES_to_R8G8B8A8_UNORM(GLenum type) } } +LoadImageFunctionInfo G8_B8R8_2PLANE_420_UNORM_ANGLEX_to_default(GLenum type) +{ + switch (type) + { + case GL_UNSIGNED_BYTE: + return LoadImageFunctionInfo(UnimplementedLoadFunction, true); + default: + UNREACHABLE(); + return LoadImageFunctionInfo(UnreachableLoadFunction, true); + } +} + LoadImageFunctionInfo G8_B8_R8_3PLANE_420_UNORM_ANGLEX_to_default(GLenum type) { switch (type) @@ -3690,6 +3702,8 @@ LoadFunctionMap GetLoadFunctionsMap(GLenum internalFormat, FormatID angleFormat) } break; } + case GL_G8_B8R8_2PLANE_420_UNORM_ANGLEX: + return G8_B8R8_2PLANE_420_UNORM_ANGLEX_to_default; case GL_G8_B8_R8_3PLANE_420_UNORM_ANGLEX: return G8_B8_R8_3PLANE_420_UNORM_ANGLEX_to_default; case GL_LUMINANCE: diff --git a/src/libANGLE/renderer/metal/shaders/format_autogen.h b/src/libANGLE/renderer/metal/shaders/format_autogen.h index 794cbc9ec..b96bcdec3 100644 --- a/src/libANGLE/renderer/metal/shaders/format_autogen.h +++ b/src/libANGLE/renderer/metal/shaders/format_autogen.h @@ -120,6 +120,7 @@ enum ETC2_R8G8B8A8_UNORM_BLOCK, ETC2_R8G8B8_SRGB_BLOCK, ETC2_R8G8B8_UNORM_BLOCK, + G8_B8R8_2PLANE_420_UNORM, G8_B8_R8_3PLANE_420_UNORM, L16A16_FLOAT, L16_FLOAT, diff --git a/src/libANGLE/renderer/metal/shaders/mtl_default_shaders_src_autogen.inc b/src/libANGLE/renderer/metal/shaders/mtl_default_shaders_src_autogen.inc index 23039f659..5c8ce2d00 100644 --- a/src/libANGLE/renderer/metal/shaders/mtl_default_shaders_src_autogen.inc +++ b/src/libANGLE/renderer/metal/shaders/mtl_default_shaders_src_autogen.inc @@ -1238,6 +1238,7 @@ enum ETC2_R8G8B8A8_UNORM_BLOCK, ETC2_R8G8B8_SRGB_BLOCK, ETC2_R8G8B8_UNORM_BLOCK, + G8_B8R8_2PLANE_420_UNORM, G8_B8_R8_3PLANE_420_UNORM, L16A16_FLOAT, L16_FLOAT, diff --git a/src/libANGLE/renderer/vulkan/vk_format_map.json b/src/libANGLE/renderer/vulkan/vk_format_map.json index 771f96b89..1c5943126 100644 --- a/src/libANGLE/renderer/vulkan/vk_format_map.json +++ b/src/libANGLE/renderer/vulkan/vk_format_map.json @@ -165,7 +165,8 @@ "ASTC_12x10_SRGB_BLOCK": "VK_FORMAT_ASTC_12x10_SRGB_BLOCK", "ASTC_12x12_UNORM_BLOCK": "VK_FORMAT_ASTC_12x12_UNORM_BLOCK", "ASTC_12x12_SRGB_BLOCK": "VK_FORMAT_ASTC_12x12_SRGB_BLOCK", - "G8_B8_R8_3PLANE_420_UNORM": "VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM" + "G8_B8_R8_3PLANE_420_UNORM": "VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM", + "G8_B8R8_2PLANE_420_UNORM": "VK_FORMAT_G8_B8R8_2PLANE_420_UNORM" }, "fallbacks": { "A16_FLOAT": { diff --git a/src/libANGLE/renderer/vulkan/vk_format_table_autogen.cpp b/src/libANGLE/renderer/vulkan/vk_format_table_autogen.cpp index 494fa4530..147dbd0bf 100644 --- a/src/libANGLE/renderer/vulkan/vk_format_table_autogen.cpp +++ b/src/libANGLE/renderer/vulkan/vk_format_table_autogen.cpp @@ -960,6 +960,16 @@ void Format::initialize(RendererVk *renderer, const angle::Format &angleFormat) vertexLoadRequiresConversion = false; break; + case angle::FormatID::G8_B8R8_2PLANE_420_UNORM: + intendedGLFormat = GL_G8_B8R8_2PLANE_420_UNORM_ANGLEX; + actualImageFormatID = angle::FormatID::G8_B8R8_2PLANE_420_UNORM; + imageInitializerFunction = nullptr; + actualBufferFormatID = angle::FormatID::G8_B8R8_2PLANE_420_UNORM; + vkBufferFormatIsPacked = false; + vertexLoadFunction = CopyNativeVertexData; + vertexLoadRequiresConversion = false; + break; + case angle::FormatID::G8_B8_R8_3PLANE_420_UNORM: intendedGLFormat = GL_G8_B8_R8_3PLANE_420_UNORM_ANGLEX; actualImageFormatID = angle::FormatID::G8_B8_R8_3PLANE_420_UNORM; @@ -2395,6 +2405,7 @@ VkFormat GetVkFormatFromFormatID(angle::FormatID formatID) {angle::FormatID::R16G16_SSCALED, VK_FORMAT_R16G16_SSCALED}, {angle::FormatID::B8G8R8A8_UNORM_SRGB, VK_FORMAT_B8G8R8A8_SRGB}, {angle::FormatID::BC3_RGBA_UNORM_BLOCK, VK_FORMAT_BC3_UNORM_BLOCK}, + {angle::FormatID::G8_B8R8_2PLANE_420_UNORM, VK_FORMAT_G8_B8R8_2PLANE_420_UNORM}, {angle::FormatID::R16_FLOAT, VK_FORMAT_R16_SFLOAT}, {angle::FormatID::R8G8B8A8_SNORM, VK_FORMAT_R8G8B8A8_SNORM}, {angle::FormatID::R8G8B8A8_SSCALED, VK_FORMAT_R8G8B8A8_SSCALED}, @@ -2586,6 +2597,8 @@ angle::FormatID GetFormatIDFromVkFormat(VkFormat vkFormat) return angle::FormatID::B8G8R8A8_UNORM_SRGB; case VK_FORMAT_BC3_UNORM_BLOCK: return angle::FormatID::BC3_RGBA_UNORM_BLOCK; + case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM: + return angle::FormatID::G8_B8R8_2PLANE_420_UNORM; case VK_FORMAT_R16_SFLOAT: return angle::FormatID::R16_FLOAT; case VK_FORMAT_R8G8B8A8_SNORM: diff --git a/src/libANGLE/renderer/vulkan/vk_mandatory_format_support_table_autogen.cpp b/src/libANGLE/renderer/vulkan/vk_mandatory_format_support_table_autogen.cpp index 530e961f9..fcf382481 100644 --- a/src/libANGLE/renderer/vulkan/vk_mandatory_format_support_table_autogen.cpp +++ b/src/libANGLE/renderer/vulkan/vk_mandatory_format_support_table_autogen.cpp @@ -93,6 +93,7 @@ constexpr FormatMap kFormatProperties = { SAMPLED_IMAGE_FILTER_LINEAR, 0}}, {FormatID::BC3_RGBA_UNORM_BLOCK, {0, 0, 0}}, + {FormatID::G8_B8R8_2PLANE_420_UNORM, {0, 0, 0}}, {FormatID::R16_FLOAT, {0, BLIT_DST | BLIT_SRC | COLOR_ATTACHMENT | COLOR_ATTACHMENT_BLEND | SAMPLED_IMAGE |