Always use sized internal formats for textures in TextureGL.

On desktop GL, using an internal format of GL_RGBA produces GL_RGBA8
textures even if format is set to GL_FLOAT.  Use sized internal formats
whenever possible to ensure that the internal format of the texture is
the expected format.

Work around issues with Intel and AMD drivers that always round up when
writing to a 1-bit alpha framebuffer format.

Fixes:
 * conformance/extensions/oes-texture-float-with-image-data.htm
 * conformance/extensions/oes-texture-float-with-image.html
 * conformance/extensions/oes-texture-float.html
 * conformance/extensions/oes-texture-half-float-linear.html
 * conformance/extensions/oes-texture-half-float-with-image-data.html
 * conformance/extensions/oes-texture-half-float-with-image.html
 * conformance/extensions/oes-texture-half-float.html

Reland of https://chromium-review.googlesource.com/#/c/288350/

BUG=angleproject:884

Change-Id: Ia2f9251d12dd3bbc7b6918d46e61623d0abedfac
Reviewed-on: https://chromium-review.googlesource.com/288584
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tested-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libANGLE/renderer/gl/RendererGL.cpp b/src/libANGLE/renderer/gl/RendererGL.cpp
index 2438f25..30413af 100644
--- a/src/libANGLE/renderer/gl/RendererGL.cpp
+++ b/src/libANGLE/renderer/gl/RendererGL.cpp
@@ -193,7 +193,7 @@
 
 TextureImpl *RendererGL::createTexture(GLenum target)
 {
-    return new TextureGL(target, mFunctions, mStateManager);
+    return new TextureGL(target, mFunctions, mWorkarounds, mStateManager);
 }
 
 RenderbufferImpl *RendererGL::createRenderbuffer()