Index: src/gpu/SkGr.cpp |
diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp |
index 31372cd02a1816cf378ecae4f71070465983955d..fb2ebdd53fcbbf70c1ed93568f14ed3526b7bce8 100644 |
--- a/src/gpu/SkGr.cpp |
+++ b/src/gpu/SkGr.cpp |
@@ -244,7 +244,18 @@ static GrTexture* sk_gr_create_bitmap_texture(GrContext* ctx, |
// Is this an ETC1 encoded texture? |
#ifndef SK_IGNORE_ETC1_SUPPORT |
- else if (cache && ctx->getGpu()->caps()->isConfigTexturable(kETC1_GrPixelConfig)) { |
+ else if ( |
+ // We do not support scratch ETC1 textures, hence they should all be at least |
+ // trying to go to the cache. |
+ cache |
+ // Make sure that the underlying device supports ETC1 textures before we go ahead |
+ // and check the data. |
+ && ctx->getGpu()->caps()->isConfigTexturable(kETC1_GrPixelConfig) |
+ // If the bitmap had compressed data and was then uncompressed, it'll still return |
+ // compressed data on 'refEncodedData' and upload it. Probably not good, since if |
+ // the bitmap has available pixels, then they might not be what the decompressed |
+ // data is. |
+ && !(bitmap->readyToDraw())) { |
GrTexture *texture = load_etc1_texture(ctx, params, *bitmap, desc); |
if (NULL != texture) { |
return texture; |