Update checks for floating point renderability.

 * Expose GL_CHROMIUM_color_buffer_float_rgb and
   GL_CHROMIUM_color_buffer_float_rgba
 * Fix many texture formats that were incorrectly checking the wrong
   extension for support or renderability.
 * Make all floating point texture extensions dynamically enableable.

BUG=angleproject:1958
BUG=angleproject:1715

Change-Id: Iefccc8b5ae5edd97623affa9de05b1d9af5c9598
Reviewed-on: https://chromium-review.googlesource.com/468450
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libANGLE/Framebuffer.cpp b/src/libANGLE/Framebuffer.cpp
index 350a5ba..f958052 100644
--- a/src/libANGLE/Framebuffer.cpp
+++ b/src/libANGLE/Framebuffer.cpp
@@ -617,20 +617,19 @@
                 return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
             }
 
-            const Format &format          = colorAttachment.getFormat();
-            const TextureCaps &formatCaps = state.getTextureCap(format.info->sizedInternalFormat);
+            const InternalFormat &format = *colorAttachment.getFormat().info;
+            if (!format.renderSupport(context->getClientVersion(), context->getExtensions()))
+            {
+                return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
+            }
+
+            if (format.depthBits > 0 || format.stencilBits > 0)
+            {
+                return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
+            }
+
             if (colorAttachment.type() == GL_TEXTURE)
             {
-                if (!formatCaps.renderable)
-                {
-                    return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
-                }
-
-                if (format.info->depthBits > 0 || format.info->stencilBits > 0)
-                {
-                    return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
-                }
-
                 if (colorAttachment.layer() >= size.depth)
                 {
                     return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
@@ -664,11 +663,6 @@
             else if (colorAttachment.type() == GL_RENDERBUFFER)
             {
                 hasRenderbuffer = true;
-                if (!formatCaps.renderable || format.info->depthBits > 0 ||
-                    format.info->stencilBits > 0)
-                {
-                    return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
-                }
             }
 
             if (!missingAttachment)
@@ -684,7 +678,7 @@
                 // in GLES 3.0, there is no such restriction
                 if (state.getClientMajorVersion() < 3)
                 {
-                    if (format.info->pixelBytes != colorbufferSize)
+                    if (format.pixelBytes != colorbufferSize)
                     {
                         return GL_FRAMEBUFFER_UNSUPPORTED;
                     }
@@ -693,7 +687,7 @@
             else
             {
                 samples           = colorAttachment.getSamples();
-                colorbufferSize   = format.info->pixelBytes;
+                colorbufferSize   = format.pixelBytes;
                 missingAttachment = false;
             }
         }
@@ -708,26 +702,16 @@
             return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
         }
 
-        const Format &format          = depthAttachment.getFormat();
-        const TextureCaps &formatCaps = state.getTextureCap(format.info->sizedInternalFormat);
-        if (depthAttachment.type() == GL_TEXTURE)
-        {
-            if (!formatCaps.renderable)
-            {
-                return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
-            }
+        const InternalFormat &format = *depthAttachment.getFormat().info;
 
-            if (format.info->depthBits == 0)
-            {
-                return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
-            }
-        }
-        else if (depthAttachment.type() == GL_RENDERBUFFER)
+        if (!format.renderSupport(context->getClientVersion(), context->getExtensions()))
         {
-            if (!formatCaps.renderable || format.info->depthBits == 0)
-            {
-                return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
-            }
+            return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
+        }
+
+        if (format.depthBits == 0)
+        {
+            return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
         }
 
         if (missingAttachment)
@@ -760,26 +744,16 @@
             return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
         }
 
-        const Format &format          = stencilAttachment.getFormat();
-        const TextureCaps &formatCaps = state.getTextureCap(format.info->sizedInternalFormat);
-        if (stencilAttachment.type() == GL_TEXTURE)
-        {
-            if (!formatCaps.renderable)
-            {
-                return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
-            }
+        const InternalFormat &format = *stencilAttachment.getFormat().info;
 
-            if (format.info->stencilBits == 0)
-            {
-                return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
-            }
-        }
-        else if (stencilAttachment.type() == GL_RENDERBUFFER)
+        if (!format.renderSupport(context->getClientVersion(), context->getExtensions()))
         {
-            if (!formatCaps.renderable || format.info->stencilBits == 0)
-            {
-                return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
-            }
+            return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
+        }
+
+        if (format.stencilBits == 0)
+        {
+            return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
         }
 
         if (missingAttachment)