diff --git a/src/libANGLE/renderer/metal/mtl_format_map.json b/src/libANGLE/renderer/metal/mtl_format_map.json index 3a752340ea..79408b0245 100644 --- a/src/libANGLE/renderer/metal/mtl_format_map.json +++ b/src/libANGLE/renderer/metal/mtl_format_map.json @@ -62,7 +62,6 @@ "PVRTC1_RGB_4BPP_UNORM_SRGB_BLOCK": "MTLPixelFormatPVRTC_RGB_4BPP_sRGB", "PVRTC1_RGBA_2BPP_UNORM_SRGB_BLOCK": "MTLPixelFormatPVRTC_RGBA_2BPP_sRGB", "PVRTC1_RGBA_4BPP_UNORM_SRGB_BLOCK": "MTLPixelFormatPVRTC_RGBA_4BPP_sRGB", - "ETC1_R8G8B8_UNORM_BLOCK": "MTLPixelFormatETC2_RGB8", "ETC2_R8G8B8_UNORM_BLOCK": "MTLPixelFormatETC2_RGB8", "ETC2_R8G8B8_SRGB_BLOCK": "MTLPixelFormatETC2_RGB8_sRGB", "ETC2_R8G8B8A1_UNORM_BLOCK": "MTLPixelFormatETC2_RGB8A1", @@ -71,7 +70,7 @@ "ETC2_R8G8B8A8_SRGB_BLOCK": "MTLPixelFormatEAC_RGBA8_sRGB", "EAC_R11_UNORM_BLOCK": "MTLPixelFormatEAC_R11Unorm", "EAC_R11_SNORM_BLOCK": "MTLPixelFormatEAC_R11Snorm", - "EAC_R11G11_UNORM_BLOCK": "MTLPixelFormatEAC_R11Unorm", + "EAC_R11G11_UNORM_BLOCK": "MTLPixelFormatEAC_RG11Unorm", "EAC_R11G11_SNORM_BLOCK": "MTLPixelFormatEAC_RG11Snorm" }, "map_mac": { @@ -111,7 +110,8 @@ }, "override_ios": { "D24_UNORM_S8_UINT": "D32_FLOAT_S8X24_UINT", - "D16_UNORM": "D32_FLOAT" + "D16_UNORM": "D32_FLOAT", + "ETC1_R8G8B8_UNORM_BLOCK": "ETC2_R8G8B8_UNORM_BLOCK" }, "override_mac": { "R5G6B5_UNORM": "R8G8B8A8_UNORM", diff --git a/src/libANGLE/renderer/metal/mtl_format_table_autogen.mm b/src/libANGLE/renderer/metal/mtl_format_table_autogen.mm index 11e25e90b8..64555f3278 100644 --- a/src/libANGLE/renderer/metal/mtl_format_table_autogen.mm +++ b/src/libANGLE/renderer/metal/mtl_format_table_autogen.mm @@ -968,7 +968,7 @@ case angle::FormatID::EAC_R11G11_UNORM_BLOCK: - this->metalFormat = MTLPixelFormatEAC_R11Unorm; + this->metalFormat = MTLPixelFormatEAC_RG11Unorm; this->actualFormatId = angle::FormatID::EAC_R11G11_UNORM_BLOCK; this->initFunction = nullptr; @@ -993,15 +993,6 @@ this->swizzled = false; break; - case angle::FormatID::ETC1_R8G8B8_UNORM_BLOCK: - - this->metalFormat = MTLPixelFormatETC2_RGB8; - this->actualFormatId = angle::FormatID::ETC1_R8G8B8_UNORM_BLOCK; - this->initFunction = nullptr; - - this->swizzled = false; - break; - case angle::FormatID::ETC2_R8G8B8A1_SRGB_BLOCK: this->metalFormat = MTLPixelFormatETC2_RGB8A1_sRGB; @@ -1173,6 +1164,15 @@ this->swizzled = false; break; + case angle::FormatID::ETC1_R8G8B8_UNORM_BLOCK: + + this->metalFormat = MTLPixelFormatETC2_RGB8; + this->actualFormatId = angle::FormatID::ETC2_R8G8B8_UNORM_BLOCK; + this->initFunction = nullptr; + + this->swizzled = false; + break; + #endif // TARGET_OS_OSX || TARGET_OS_MACCATALYST default: this->metalFormat = MTLPixelFormatInvalid; diff --git a/src/libANGLE/renderer/metal/mtl_format_utils.mm b/src/libANGLE/renderer/metal/mtl_format_utils.mm index d931da887e..3127038402 100644 --- a/src/libANGLE/renderer/metal/mtl_format_utils.mm +++ b/src/libANGLE/renderer/metal/mtl_format_utils.mm @@ -142,6 +142,12 @@ void GenerateTextureCapsMap(const FormatTable &formatTable, ASSERT(swizzled); return false; } + if (srcFormatId == angle::FormatID::ETC1_R8G8B8_UNORM_BLOCK && + actualFormatId == angle::FormatID::ETC2_R8G8B8_UNORM_BLOCK) + { + // ETC1 RGB & ETC2 RGB are technically the same. + return false; + } return srcFormatId != actualFormatId; }