Implements ETC lossy decode for ETC2 formats.

This is the 2nd payload of GL_ANGLE_lossy_etc_decode feature. In this change,
RGB8, SRGB8, RGB8A1, and SRGB8A1 formats in ETC2 family can be converted
to BC1.

BUG=angleproject:1285

Change-Id: I96fe2f07c62716a31d37f20a202b6cabbb4ebbd2
Reviewed-on: https://chromium-review.googlesource.com/447846
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libANGLE/validationES2.cpp b/src/libANGLE/validationES2.cpp
index 7b80eb9..9a7f9d0 100644
--- a/src/libANGLE/validationES2.cpp
+++ b/src/libANGLE/validationES2.cpp
@@ -454,6 +454,10 @@
                 }
                 break;
             case GL_ETC1_RGB8_LOSSY_DECODE_ANGLE:
+            case GL_COMPRESSED_RGB8_LOSSY_DECODE_ETC2_ANGLE:
+            case GL_COMPRESSED_SRGB8_LOSSY_DECODE_ETC2_ANGLE:
+            case GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_LOSSY_DECODE_ETC2_ANGLE:
+            case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_LOSSY_DECODE_ETC2_ANGLE:
                 if (!context->getExtensions().lossyETCDecode)
                 {
                     context->handleError(Error(
@@ -668,11 +672,15 @@
                 }
                 break;
             case GL_ETC1_RGB8_LOSSY_DECODE_ANGLE:
+            case GL_COMPRESSED_RGB8_LOSSY_DECODE_ETC2_ANGLE:
+            case GL_COMPRESSED_SRGB8_LOSSY_DECODE_ETC2_ANGLE:
+            case GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_LOSSY_DECODE_ETC2_ANGLE:
+            case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_LOSSY_DECODE_ETC2_ANGLE:
                 if (context->getExtensions().lossyETCDecode)
                 {
                     context->handleError(
                         Error(GL_INVALID_OPERATION,
-                              "ETC1_RGB8_LOSSY_DECODE_ANGLE can't work with this type."));
+                              "ETC lossy decode formats can't work with this type."));
                     return false;
                 }
                 else
@@ -841,6 +849,10 @@
             case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE:
             case GL_ETC1_RGB8_OES:
             case GL_ETC1_RGB8_LOSSY_DECODE_ANGLE:
+            case GL_COMPRESSED_RGB8_LOSSY_DECODE_ETC2_ANGLE:
+            case GL_COMPRESSED_SRGB8_LOSSY_DECODE_ETC2_ANGLE:
+            case GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_LOSSY_DECODE_ETC2_ANGLE:
+            case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_LOSSY_DECODE_ETC2_ANGLE:
                 context->handleError(Error(GL_INVALID_OPERATION));
                 return false;
             case GL_DEPTH_COMPONENT:
@@ -973,10 +985,14 @@
                 }
                 break;
             case GL_ETC1_RGB8_LOSSY_DECODE_ANGLE:
+            case GL_COMPRESSED_RGB8_LOSSY_DECODE_ETC2_ANGLE:
+            case GL_COMPRESSED_SRGB8_LOSSY_DECODE_ETC2_ANGLE:
+            case GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_LOSSY_DECODE_ETC2_ANGLE:
+            case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_LOSSY_DECODE_ETC2_ANGLE:
                 if (context->getExtensions().lossyETCDecode)
                 {
                     context->handleError(Error(GL_INVALID_OPERATION,
-                                               "ETC1_RGB8_LOSSY_DECODE_ANGLE can't be copied to."));
+                                               "ETC lossy decode formats can't be copied to."));
                     return false;
                 }
                 else
@@ -1115,6 +1131,10 @@
             }
             break;
         case GL_ETC1_RGB8_LOSSY_DECODE_ANGLE:
+        case GL_COMPRESSED_RGB8_LOSSY_DECODE_ETC2_ANGLE:
+        case GL_COMPRESSED_SRGB8_LOSSY_DECODE_ETC2_ANGLE:
+        case GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_LOSSY_DECODE_ETC2_ANGLE:
+        case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_LOSSY_DECODE_ETC2_ANGLE:
             if (!context->getExtensions().lossyETCDecode)
             {
                 context->handleError(