Add support for EXT_sRGB.

BUG=angle:672

Change-Id: I001ff3dde7a39e545a535a399c02f3a6d91634c8
Reviewed-on: https://chromium-review.googlesource.com/203460
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tested-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libGLESv2/libGLESv2.cpp b/src/libGLESv2/libGLESv2.cpp
index 791332b..0c08ac8 100644
--- a/src/libGLESv2/libGLESv2.cpp
+++ b/src/libGLESv2/libGLESv2.cpp
@@ -2016,6 +2016,13 @@
                 return gl::error(GL_INVALID_OPERATION);
             }
 
+            // GL_EXT_sRGB does not support mipmap generation on sRGB textures
+            if (context->getClientVersion() == 2 &&
+                gl::GetColorEncoding(internalFormat, context->getClientVersion()) == GL_SRGB)
+            {
+                return gl::error(GL_INVALID_OPERATION);
+            }
+
             // Non-power of 2 ES2 check
             if (!context->getCaps().extensions.textureNPOT && (!gl::isPow2(texture->getBaseLevelWidth()) || !gl::isPow2(texture->getBaseLevelHeight())))
             {
@@ -2552,6 +2559,12 @@
               case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:
               case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE:
                 break;
+              case GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:
+                if (clientVersion < 3 && !context->getCaps().extensions.sRGB)
+                {
+                    return gl::error(GL_INVALID_ENUM);
+                }
+                break;
               case GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE:
               case GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:
               case GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:
@@ -2559,12 +2572,12 @@
               case GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:
               case GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:
               case GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE:
-              case GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:
               case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER:
-                if (clientVersion >= 3)
+                if (clientVersion < 3)
                 {
-                    break;
+                    return gl::error(GL_INVALID_ENUM);
                 }
+                break;
               default:
                 return gl::error(GL_INVALID_ENUM);
             }