Disable unpack row length when uploading mips

When uploading multiple mip levels, the current path which uses
GL_UNPACK_ROW_LENGTH doesn't work (it fails to reset this value,
and is set incorrectly for subsequent mip levels). This leads
to crashes as the buffer Skia provides to GL is not sized correctly.
This change temporarily disables the GL_UNPACK_ROW_LENGTH path when we
are uploading mips. This path was an optimization, so everything should
continue working as expected.

This is a temporary workaround until we can re-structure the code to
set GL_UNPACK_ROW_LENGTH per mip level.

BUG=609612
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1965973002

Review-Url: https://codereview.chromium.org/1965973002
This commit is contained in:
ericrk 2016-05-10 14:36:53 -07:00 committed by Commit bot
parent f077324e13
commit 154349b6ff

View File

@ -1278,7 +1278,12 @@ bool GrGLGpu::uploadTexData(const GrSurfaceDesc& desc,
restoreGLRowLength = false;
const size_t rowBytes = texelsShallowCopy[currentMipLevel].fRowBytes;
if (caps.unpackRowLengthSupport() && !swFlipY) {
// TODO: This optimization should be enabled with or without mips.
// For use with mips, we must set GR_GL_UNPACK_ROW_LENGTH once per
// mip level, before calling glTexImage2D.
const bool usesMips = texelsShallowCopy.count() > 1;
if (caps.unpackRowLengthSupport() && !swFlipY && !usesMips) {
// can't use this for flipping, only non-neg values allowed. :(
if (rowBytes != trimRowBytes) {
GrGLint rowLength = static_cast<GrGLint>(rowBytes / bpp);