| Index: src/gpu/gl/GrGLGpu.cpp | 
| diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp | 
| index e002d5101bab5a114a75f5ea8d0e219989d0a675..52c7d944242fef3322f91bc1396e4c755b8188a9 100644 | 
| --- a/src/gpu/gl/GrGLGpu.cpp | 
| +++ b/src/gpu/gl/GrGLGpu.cpp | 
| @@ -979,7 +979,8 @@ static inline GrGLenum check_alloc_error(const GrSurfaceDesc& desc, | 
| * @param desc           The surface descriptor for the texture being created. | 
| * @param interface      The GL interface in use. | 
| * @param caps           The capabilities of the GL device. | 
| - * @param internalFormat The data format used for the internal storage of the texture. | 
| + * @param internalFormat The data format used for the internal storage of the texture. May be sized. | 
| + * @param internalFormatForTexStorage The data format used for the TexStorage API. Must be sized. | 
| * @param externalFormat The data format used for the external storage of the texture. | 
| * @param externalType   The type of the data used for the external storage of the texture. | 
| * @param texels         The texel data of the texture being created. | 
| @@ -993,6 +994,7 @@ static bool allocate_and_populate_uncompressed_texture(const GrSurfaceDesc& desc | 
| const GrGLCaps& caps, | 
| GrGLenum target, | 
| GrGLenum internalFormat, | 
| +                                                       GrGLenum internalFormatForTexStorage, | 
| GrGLenum externalFormat, | 
| GrGLenum externalType, | 
| const SkTArray<GrMipLevel>& texels, | 
| @@ -1012,7 +1014,7 @@ static bool allocate_and_populate_uncompressed_texture(const GrSurfaceDesc& desc | 
| GL_ALLOC_CALL(&interface, | 
| TexStorage2D(target, | 
| texels.count(), | 
| -                                   internalFormat, | 
| +                                   internalFormatForTexStorage, | 
| desc.fWidth, desc.fHeight)); | 
| GrGLenum error = check_alloc_error(desc, &interface); | 
| if (error != GR_GL_NO_ERROR) { | 
| @@ -1254,6 +1256,9 @@ bool GrGLGpu::uploadTexData(const GrSurfaceDesc& desc, | 
| &externalFormat, &externalType)) { | 
| return false; | 
| } | 
| +    // TexStorage requires a sized format, and internalFormat may or may not be | 
| +    GrGLenum internalFormatForTexStorage = this->glCaps().configSizedInternalFormat(desc.fConfig); | 
| + | 
| /* | 
| *  Check whether to allocate a temporary buffer for flipping y or | 
| *  because our srcData has extra bytes past each row. If so, we need | 
| @@ -1356,9 +1361,10 @@ bool GrGLGpu::uploadTexData(const GrSurfaceDesc& desc, | 
| 0 == left && 0 == top && | 
| desc.fWidth == width && desc.fHeight == height) { | 
| succeeded = allocate_and_populate_uncompressed_texture(desc, *interface, caps, target, | 
| -                                                               internalFormat, externalFormat, | 
| -                                                               externalType, texelsShallowCopy, | 
| -                                                               width, height); | 
| +                                                               internalFormat, | 
| +                                                               internalFormatForTexStorage, | 
| +                                                               externalFormat, externalType, | 
| +                                                               texelsShallowCopy, width, height); | 
| } else { | 
| if (swFlipY || glFlipY) { | 
| top = desc.fHeight - (top + height); | 
|  |