Handle compressed texture formats in the emulated TextureStorage for TextureGL.

BUG=angleproject:884

Change-Id: Id54d9ff2845af52807161e0b589d8b76cfba412d
Reviewed-on: https://chromium-review.googlesource.com/272424
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Reviewed-by: Brandon Jones <bajones@chromium.org>
Tested-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libANGLE/renderer/gl/TextureGL.cpp b/src/libANGLE/renderer/gl/TextureGL.cpp
index f06c1c8..1860615 100644
--- a/src/libANGLE/renderer/gl/TextureGL.cpp
+++ b/src/libANGLE/renderer/gl/TextureGL.cpp
@@ -267,15 +267,33 @@
 
                 if (mTextureType == GL_TEXTURE_2D)
                 {
-                    mFunctions->texImage2D(target, level, internalFormat, levelSize.width, levelSize.height,
-                                           0, internalFormatInfo.format, internalFormatInfo.type, nullptr);
+                    if (internalFormatInfo.compressed)
+                    {
+                        size_t dataSize = internalFormatInfo.computeBlockSize(GL_UNSIGNED_BYTE, levelSize.width, levelSize.height);
+                        mFunctions->compressedTexImage2D(target, level, internalFormat, levelSize.width, levelSize.height,
+                                                         0, dataSize, nullptr);
+                    }
+                    else
+                    {
+                        mFunctions->texImage2D(target, level, internalFormat, levelSize.width, levelSize.height,
+                                               0, internalFormatInfo.format, internalFormatInfo.type, nullptr);
+                    }
                 }
                 else if (mTextureType == GL_TEXTURE_CUBE_MAP)
                 {
                     for (GLenum face = gl::FirstCubeMapTextureTarget; face <= gl::LastCubeMapTextureTarget; face++)
                     {
-                        mFunctions->texImage2D(face, level, internalFormat, levelSize.width, levelSize.height,
-                                               0, internalFormatInfo.format, internalFormatInfo.type, nullptr);
+                        if (internalFormatInfo.compressed)
+                        {
+                            size_t dataSize = internalFormatInfo.computeBlockSize(GL_UNSIGNED_BYTE, levelSize.width, levelSize.height);
+                            mFunctions->compressedTexImage2D(face, level, internalFormat, levelSize.width, levelSize.height,
+                                                             0, dataSize, nullptr);
+                        }
+                        else
+                        {
+                            mFunctions->texImage2D(face, level, internalFormat, levelSize.width, levelSize.height,
+                                                    0, internalFormatInfo.format, internalFormatInfo.type, nullptr);
+                        }
                     }
                 }
                 else
@@ -307,8 +325,17 @@
                                       std::max(size.height >> i, 1),
                                       mTextureType == GL_TEXTURE_3D ? std::max(size.depth >> i, 1) : size.depth);
 
-                mFunctions->texImage3D(target, i, internalFormat, levelSize.width, levelSize.height, levelSize.depth,
-                                       0, internalFormatInfo.format, internalFormatInfo.type, nullptr);
+                if (internalFormatInfo.compressed)
+                {
+                    size_t dataSize = internalFormatInfo.computeBlockSize(GL_UNSIGNED_BYTE, levelSize.width, levelSize.height) * levelSize.depth;
+                    mFunctions->compressedTexImage3D(target, i, internalFormat, levelSize.width, levelSize.height, levelSize.depth,
+                                                     0, dataSize, nullptr);
+                }
+                else
+                {
+                    mFunctions->texImage3D(target, i, internalFormat, levelSize.width, levelSize.height, levelSize.depth,
+                                           0, internalFormatInfo.format, internalFormatInfo.type, nullptr);
+                }
             }
         }
     }