Chromium Code Reviews| Index: src/gpu/GrSWMaskHelper.cpp |
| diff --git a/src/gpu/GrSWMaskHelper.cpp b/src/gpu/GrSWMaskHelper.cpp |
| index 547a05e79be8388df9d3811a470b01b3faa4de40..8df2033e06eea9d5094dbb6063b7e50a1d630467 100644 |
| --- a/src/gpu/GrSWMaskHelper.cpp |
| +++ b/src/gpu/GrSWMaskHelper.cpp |
| @@ -13,7 +13,6 @@ |
| #include "SkData.h" |
| #include "SkStrokeRec.h" |
| -#include "SkTextureCompressor.h" |
| // TODO: try to remove this #include |
| #include "GrContext.h" |
| @@ -37,6 +36,16 @@ SkXfermode::Mode op_to_mode(SkRegion::Op op) { |
| return modeMap[op]; |
| } |
|
robertphillips
2014/07/29 16:16:03
static ?
krajcevski
2014/07/29 17:49:50
Done.
|
| +GrPixelConfig fmt_to_config(SkTextureCompressor::Format fmt) { |
| + static const GrPixelConfig configMap[] = { |
| + kLATC_GrPixelConfig, // kLATC_Format, |
| + kR11_EAC_GrPixelConfig, // kR11_EAC_Format, |
| + kASTC_12x12_GrPixelConfig // kASTC_12x12_Format, |
| + }; |
| + |
|
robertphillips
2014/07/29 16:16:03
Seems like there should be some static asserts her
krajcevski
2014/07/29 17:49:51
Done.
|
| + return configMap[fmt]; |
| +} |
| + |
| } |
| /** |
| @@ -102,11 +111,16 @@ bool GrSWMaskHelper::init(const SkIRect& resultBounds, |
| -resultBounds.fTop * SK_Scalar1); |
| SkIRect bounds = SkIRect::MakeWH(resultBounds.width(), |
| resultBounds.height()); |
| + |
| #if GR_COMPRESS_ALPHA_MASK |
| + fCompressedFormat = SkTextureCompressor::kR11_EAC_Format; |
| + |
| // Make sure that the width is a multiple of 16 so that we can use |
| // specialized SIMD instructions that compress 4 blocks at a time. |
| - const int cmpWidth = (bounds.fRight + 15) & ~15; |
| - const int cmpHeight = (bounds.fBottom + 3) & ~3; |
| + int dimX, dimY; |
| + SkTextureCompressor::GetBlockDimensions(fCompressedFormat, &dimX, &dimY); |
| + const int cmpWidth = dimX * ((bounds.fRight + (dimX - 1)) / dimX); |
| + const int cmpHeight = dimY * ((bounds.fRight + (dimY - 1)) / dimY); |
| #else |
| const int cmpWidth = bounds.fRight; |
| const int cmpHeight = bounds.fBottom; |
| @@ -135,21 +149,24 @@ bool GrSWMaskHelper::getTexture(GrAutoScratchTexture* texture) { |
| GrTextureDesc desc; |
| desc.fWidth = fBM.width(); |
| desc.fHeight = fBM.height(); |
| - desc.fConfig = kAlpha_8_GrPixelConfig; |
| #if GR_COMPRESS_ALPHA_MASK |
| - static const int kCompressedBlockSize = 4; |
| - static const GrPixelConfig kCompressedConfig = kR11_EAC_GrPixelConfig; |
|
robertphillips
2014/07/29 16:16:03
#ifdef SK_DEBUG
krajcevski
2014/07/29 17:49:51
Done.
|
| - if (desc.fWidth % kCompressedBlockSize == 0 && |
| - desc.fHeight % kCompressedBlockSize == 0) { |
| - desc.fConfig = kCompressedConfig; |
| - } |
| +#ifndef NDEBUG |
| + 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); |
| // If this config isn't supported then we should fall back to A8 |
| if (!(fContext->getGpu()->caps()->isConfigTexturable(desc.fConfig))) { |
| desc.fConfig = kAlpha_8_GrPixelConfig; |
| } |
| +#else |
| + desc.fConfig = kAlpha_8_GrPixelConfig; |
| #endif |
| texture->set(fContext, desc); |