| Index: src/gpu/GrSWMaskHelper.cpp | 
| diff --git a/src/gpu/GrSWMaskHelper.cpp b/src/gpu/GrSWMaskHelper.cpp | 
| index 937b34380ba464951ff9e59870c145326be033b9..95c7273285caf8e1199ff77770f1420b7f963c8c 100644 | 
| --- a/src/gpu/GrSWMaskHelper.cpp | 
| +++ b/src/gpu/GrSWMaskHelper.cpp | 
| @@ -19,12 +19,10 @@ | 
|  | 
| #include "batches/GrRectBatchFactory.h" | 
|  | 
| -namespace { | 
| - | 
| /* | 
| * Convert a boolean operation into a transfer mode code | 
| */ | 
| -SkXfermode::Mode op_to_mode(SkRegion::Op op) { | 
| +static SkXfermode::Mode op_to_mode(SkRegion::Op op) { | 
|  | 
| static const SkXfermode::Mode modeMap[] = { | 
| SkXfermode::kDstOut_Mode,   // kDifference_Op | 
| @@ -38,76 +36,13 @@ SkXfermode::Mode op_to_mode(SkRegion::Op op) { | 
| return modeMap[op]; | 
| } | 
|  | 
| -static inline GrPixelConfig fmt_to_config(SkTextureCompressor::Format fmt) { | 
| - | 
| -    GrPixelConfig config; | 
| -    switch (fmt) { | 
| -        case SkTextureCompressor::kLATC_Format: | 
| -            config = kLATC_GrPixelConfig; | 
| -            break; | 
| - | 
| -        case SkTextureCompressor::kR11_EAC_Format: | 
| -            config = kR11_EAC_GrPixelConfig; | 
| -            break; | 
| - | 
| -        case SkTextureCompressor::kASTC_12x12_Format: | 
| -            config = kASTC_12x12_GrPixelConfig; | 
| -            break; | 
| - | 
| -        case SkTextureCompressor::kETC1_Format: | 
| -            config = kETC1_GrPixelConfig; | 
| -            break; | 
| - | 
| -        default: | 
| -            SkDEBUGFAIL("No GrPixelConfig for compression format!"); | 
| -            // Best guess | 
| -            config = kAlpha_8_GrPixelConfig; | 
| -            break; | 
| -    } | 
| - | 
| -    return config; | 
| -} | 
| - | 
| -static bool choose_compressed_fmt(const GrCaps* caps, | 
| -                                  SkTextureCompressor::Format *fmt) { | 
| -    if (nullptr == fmt) { | 
| -        return false; | 
| -    } | 
| - | 
| -    // We can't use scratch textures without the ability to update | 
| -    // compressed textures... | 
| -    if (!(caps->compressedTexSubImageSupport())) { | 
| -        return false; | 
| -    } | 
| - | 
| -    // Figure out what our preferred texture type is. If ASTC is available, that always | 
| -    // gives the biggest win. Otherwise, in terms of compression speed and accuracy, | 
| -    // LATC has a slight edge over R11 EAC. | 
| -    if (caps->isConfigTexturable(kASTC_12x12_GrPixelConfig)) { | 
| -        *fmt = SkTextureCompressor::kASTC_12x12_Format; | 
| -        return true; | 
| -    } else if (caps->isConfigTexturable(kLATC_GrPixelConfig)) { | 
| -        *fmt = SkTextureCompressor::kLATC_Format; | 
| -        return true; | 
| -    } else if (caps->isConfigTexturable(kR11_EAC_GrPixelConfig)) { | 
| -        *fmt = SkTextureCompressor::kR11_EAC_Format; | 
| -        return true; | 
| -    } | 
| - | 
| -    return false; | 
| -} | 
| - | 
| -} | 
| - | 
| /** | 
| * Draw a single rect element of the clip stack into the accumulation bitmap | 
| */ | 
| -void GrSWMaskHelper::draw(const SkRect& rect, SkRegion::Op op, | 
| -                          bool antiAlias, uint8_t alpha) { | 
| +void GrSWMaskHelper::drawRect(const SkRect& rect, SkRegion::Op op, | 
| +                              bool antiAlias, uint8_t alpha) { | 
| SkPaint paint; | 
|  | 
| -    SkASSERT(kNone_CompressionMode == fCompressionMode); | 
| - | 
| paint.setXfermode(SkXfermode::Make(op_to_mode(op))); | 
| paint.setAntiAlias(antiAlias); | 
| paint.setColor(SkColorSetARGB(alpha, alpha, alpha, alpha)); | 
| @@ -118,35 +53,24 @@ void GrSWMaskHelper::draw(const SkRect& rect, SkRegion::Op op, | 
| /** | 
| * Draw a single path element of the clip stack into the accumulation bitmap | 
| */ | 
| -void GrSWMaskHelper::draw(const SkPath& path, const GrStyle& style, SkRegion::Op op, | 
| -                          bool antiAlias, uint8_t alpha) { | 
| +void GrSWMaskHelper::drawPath(const SkPath& path, const GrStyle& style, SkRegion::Op op, | 
| +                              bool antiAlias, uint8_t alpha) { | 
| SkPaint paint; | 
| paint.setPathEffect(sk_ref_sp(style.pathEffect())); | 
| style.strokeRec().applyToPaint(&paint); | 
| paint.setAntiAlias(antiAlias); | 
|  | 
| -    SkTBlitterAllocator allocator; | 
| -    SkBlitter* blitter = nullptr; | 
| -    if (kBlitter_CompressionMode == fCompressionMode) { | 
| -        SkASSERT(fCompressedBuffer.get()); | 
| -        blitter = SkTextureCompressor::CreateBlitterForFormat( | 
| -            fPixels.width(), fPixels.height(), fCompressedBuffer.get(), &allocator, | 
| -                                                              fCompressedFormat); | 
| -    } | 
| - | 
| if (SkRegion::kReplace_Op == op && 0xFF == alpha) { | 
| SkASSERT(0xFF == paint.getAlpha()); | 
| -        fDraw.drawPathCoverage(path, paint, blitter); | 
| +        fDraw.drawPathCoverage(path, paint); | 
| } else { | 
| paint.setXfermodeMode(op_to_mode(op)); | 
| paint.setColor(SkColorSetARGB(alpha, alpha, alpha, alpha)); | 
| -        fDraw.drawPath(path, paint, blitter); | 
| +        fDraw.drawPath(path, paint); | 
| } | 
| } | 
|  | 
| -bool GrSWMaskHelper::init(const SkIRect& resultBounds, | 
| -                          const SkMatrix* matrix, | 
| -                          bool allowCompression) { | 
| +bool GrSWMaskHelper::init(const SkIRect& resultBounds, const SkMatrix* matrix) { | 
| if (matrix) { | 
| fMatrix = *matrix; | 
| } else { | 
| @@ -154,54 +78,16 @@ bool GrSWMaskHelper::init(const SkIRect& resultBounds, | 
| } | 
|  | 
| // Now translate so the bound's UL corner is at the origin | 
| -    fMatrix.postTranslate(-resultBounds.fLeft * SK_Scalar1, | 
| -                          -resultBounds.fTop * SK_Scalar1); | 
| -    SkIRect bounds = SkIRect::MakeWH(resultBounds.width(), | 
| -                                     resultBounds.height()); | 
| - | 
| -    if (allowCompression && | 
| -        fContext->caps()->drawPathMasksToCompressedTexturesSupport() && | 
| -        choose_compressed_fmt(fContext->caps(), &fCompressedFormat)) { | 
| -        fCompressionMode = kCompress_CompressionMode; | 
| -    } | 
| +    fMatrix.postTranslate(-SkIntToScalar(resultBounds.fLeft), -SkIntToScalar(resultBounds.fTop)); | 
| +    SkIRect bounds = SkIRect::MakeWH(resultBounds.width(), resultBounds.height()); | 
|  | 
| -    // Make sure that the width is a multiple of the desired block dimensions | 
| -    // to allow for specialized SIMD instructions that compress multiple blocks at a time. | 
| -    int cmpWidth = bounds.fRight; | 
| -    int cmpHeight = bounds.fBottom; | 
| -    if (kCompress_CompressionMode == fCompressionMode) { | 
| -        int dimX, dimY; | 
| -        SkTextureCompressor::GetBlockDimensions(fCompressedFormat, &dimX, &dimY); | 
| -        cmpWidth = dimX * ((cmpWidth + (dimX - 1)) / dimX); | 
| -        cmpHeight = dimY * ((cmpHeight + (dimY - 1)) / dimY); | 
| - | 
| -        // Can we create a blitter? | 
| -        if (SkTextureCompressor::ExistsBlitterForFormat(fCompressedFormat)) { | 
| -            int cmpSz = SkTextureCompressor::GetCompressedDataSize( | 
| -                fCompressedFormat, cmpWidth, cmpHeight); | 
| - | 
| -            SkASSERT(cmpSz > 0); | 
| -            SkASSERT(nullptr == fCompressedBuffer.get()); | 
| -            fCompressedBuffer.reset(cmpSz); | 
| -            fCompressionMode = kBlitter_CompressionMode; | 
| -        } | 
| +    const SkImageInfo bmImageInfo = SkImageInfo::MakeA8(bounds.width(), bounds.height()); | 
| +    if (!fPixels.tryAlloc(bmImageInfo)) { | 
| +        return false; | 
| } | 
| +    fPixels.erase(0); | 
|  | 
| sk_bzero(&fDraw, sizeof(fDraw)); | 
| - | 
| -    // If we don't have a custom blitter, then we either need a bitmap to compress | 
| -    // from or a bitmap that we're going to use as a texture. In any case, we should | 
| -    // allocate the pixels for a bitmap | 
| -    const SkImageInfo bmImageInfo = SkImageInfo::MakeA8(cmpWidth, cmpHeight); | 
| -    if (kBlitter_CompressionMode != fCompressionMode) { | 
| -        if (!fPixels.tryAlloc(bmImageInfo)) { | 
| -            return false; | 
| -        } | 
| -        fPixels.erase(0); | 
| -    } else { | 
| -        // Otherwise, we just need to remember how big the buffer is... | 
| -        fPixels.reset(bmImageInfo); | 
| -    } | 
| fDraw.fDst      = fPixels; | 
| fRasterClip.setRect(bounds); | 
| fDraw.fRC       = &fRasterClip; | 
| @@ -218,67 +104,20 @@ GrTexture* GrSWMaskHelper::createTexture() { | 
| desc.fHeight = fPixels.height(); | 
| desc.fConfig = kAlpha_8_GrPixelConfig; | 
|  | 
| -    if (kNone_CompressionMode != fCompressionMode) { | 
| - | 
| -#ifdef SK_DEBUG | 
| -        int dimX, dimY; | 
| -        SkTextureCompressor::GetBlockDimensions(fCompressedFormat, &dimX, &dimY); | 
| -        SkASSERT((desc.fWidth % dimX) == 0); | 
| -        SkASSERT((desc.fHeight % dimY) == 0); | 
| -#endif | 
| - | 
| -        desc.fConfig = fmt_to_config(fCompressedFormat); | 
| -        SkASSERT(fContext->caps()->isConfigTexturable(desc.fConfig)); | 
| -    } | 
| - | 
| return fContext->textureProvider()->createApproxTexture(desc); | 
| } | 
|  | 
| -void GrSWMaskHelper::sendTextureData(GrTexture *texture, const GrSurfaceDesc& desc, | 
| -                                     const void *data, size_t rowbytes) { | 
| -    // Since we're uploading to it, and it's compressed, 'texture' shouldn't | 
| -    // have a render target. | 
| -    SkASSERT(nullptr == texture->asRenderTarget()); | 
| - | 
| -    texture->writePixels(0, 0, desc.fWidth, desc.fHeight, desc.fConfig, data, rowbytes); | 
| -} | 
| - | 
| -void GrSWMaskHelper::compressTextureData(GrTexture *texture, const GrSurfaceDesc& desc) { | 
| - | 
| -    SkASSERT(GrPixelConfigIsCompressed(desc.fConfig)); | 
| -    SkASSERT(fmt_to_config(fCompressedFormat) == desc.fConfig); | 
| - | 
| -    SkAutoDataUnref cmpData(SkTextureCompressor::CompressBitmapToFormat(fPixels, | 
| -                                                                        fCompressedFormat)); | 
| -    SkASSERT(cmpData); | 
| - | 
| -    this->sendTextureData(texture, desc, cmpData->data(), 0); | 
| -} | 
| - | 
| /** | 
| * Move the result of the software mask generation back to the gpu | 
| */ | 
| void GrSWMaskHelper::toTexture(GrTexture *texture) { | 
| -    GrSurfaceDesc desc; | 
| -    desc.fWidth = fPixels.width(); | 
| -    desc.fHeight = fPixels.height(); | 
| -    desc.fConfig = texture->config(); | 
| - | 
| -    // First see if we should compress this texture before uploading. | 
| -    switch (fCompressionMode) { | 
| -        case kNone_CompressionMode: | 
| -            this->sendTextureData(texture, desc, fPixels.addr(), fPixels.rowBytes()); | 
| -            break; | 
| - | 
| -        case kCompress_CompressionMode: | 
| -            this->compressTextureData(texture, desc); | 
| -            break; | 
| - | 
| -        case kBlitter_CompressionMode: | 
| -            SkASSERT(fCompressedBuffer.get()); | 
| -            this->sendTextureData(texture, desc, fCompressedBuffer.get(), 0); | 
| -            break; | 
| -    } | 
| +    // Since we're uploading to it, and it's compressed, 'texture' shouldn't | 
| +    // have a render target. | 
| +    SkASSERT(!texture->asRenderTarget()); | 
| + | 
| +    texture->writePixels(0, 0, fPixels.width(), fPixels.height(), texture->config(), | 
| +                         fPixels.addr(), fPixels.rowBytes()); | 
| + | 
| } | 
|  | 
| /** | 
| @@ -307,7 +146,7 @@ GrTexture* GrSWMaskHelper::DrawPathMaskToTexture(GrContext* context, | 
| return nullptr; | 
| } | 
|  | 
| -    helper.draw(path, style, SkRegion::kReplace_Op, antiAlias, 0xFF); | 
| +    helper.drawPath(path, style, SkRegion::kReplace_Op, antiAlias, 0xFF); | 
|  | 
| GrTexture* texture(helper.createTexture()); | 
| if (!texture) { | 
|  |