| 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);
|
|
|