diff options
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/SkBlitter.cpp | 13 | ||||
-rw-r--r-- | src/core/SkRasterPipeline.h | 1 | ||||
-rw-r--r-- | src/core/SkRasterPipelineBlitter.cpp | 5 |
3 files changed, 13 insertions, 6 deletions
diff --git a/src/core/SkBlitter.cpp b/src/core/SkBlitter.cpp index c97956c20f..86c49d08ae 100644 --- a/src/core/SkBlitter.cpp +++ b/src/core/SkBlitter.cpp @@ -857,6 +857,12 @@ SkBlitter* SkBlitter::Choose(const SkPixmap& device, p->setColor(0); } + if (kAlpha_8_SkColorType == device.colorType() && drawCoverage) { + SkASSERT(nullptr == shader); + SkASSERT(paint->isSrcOver()); + return allocator->createT<SkA8_Coverage_Blitter>(device, *paint); + } + if (SkBlitter* blitter = SkCreateRasterPipelineBlitter(device, *paint, matrix, allocator)) { return blitter; } @@ -913,11 +919,8 @@ SkBlitter* SkBlitter::Choose(const SkPixmap& device, SkBlitter* blitter = nullptr; switch (device.colorType()) { case kAlpha_8_SkColorType: - if (drawCoverage) { - SkASSERT(nullptr == shader); - SkASSERT(paint->isSrcOver()); - blitter = allocator->createT<SkA8_Coverage_Blitter>(device, *paint); - } else if (shader) { + SkASSERT(!drawCoverage); // Handled above. + if (shader) { blitter = allocator->createT<SkA8_Shader_Blitter>(device, *paint, shaderContext); } else { blitter = allocator->createT<SkA8_Blitter>(device, *paint); diff --git a/src/core/SkRasterPipeline.h b/src/core/SkRasterPipeline.h index 887e535e79..949146cc2d 100644 --- a/src/core/SkRasterPipeline.h +++ b/src/core/SkRasterPipeline.h @@ -65,6 +65,7 @@ M(from_srgb) M(to_srgb) \ M(from_2dot2) M(to_2dot2) \ M(constant_color) M(store_f32) \ + M(load_a8) M(store_a8) \ M(load_565) M(store_565) \ M(load_f16) M(store_f16) \ M(load_8888) M(store_8888) \ diff --git a/src/core/SkRasterPipelineBlitter.cpp b/src/core/SkRasterPipelineBlitter.cpp index 9fad0b4752..4d21b19bf0 100644 --- a/src/core/SkRasterPipelineBlitter.cpp +++ b/src/core/SkRasterPipelineBlitter.cpp @@ -79,9 +79,10 @@ SkBlitter* SkCreateRasterPipelineBlitter(const SkPixmap& dst, static bool supported(const SkImageInfo& info) { switch (info.colorType()) { + case kAlpha_8_SkColorType: return true; + case kRGB_565_SkColorType: return true; case kN32_SkColorType: return info.gammaCloseToSRGB(); case kRGBA_F16_SkColorType: return true; - case kRGB_565_SkColorType: return true; default: return false; } } @@ -188,6 +189,7 @@ void SkRasterPipelineBlitter::append_load_d(SkRasterPipeline* p) const { p->append(SkRasterPipeline::move_src_dst); switch (fDst.info().colorType()) { + case kAlpha_8_SkColorType: p->append(SkRasterPipeline::load_a8, &fDstPtr); break; case kRGB_565_SkColorType: p->append(SkRasterPipeline::load_565, &fDstPtr); break; case kBGRA_8888_SkColorType: case kRGBA_8888_SkColorType: p->append(SkRasterPipeline::load_8888, &fDstPtr); break; @@ -213,6 +215,7 @@ void SkRasterPipelineBlitter::append_store(SkRasterPipeline* p) const { SkASSERT(supported(fDst.info())); switch (fDst.info().colorType()) { + case kAlpha_8_SkColorType: p->append(SkRasterPipeline::store_a8, &fDstPtr); break; case kRGB_565_SkColorType: p->append(SkRasterPipeline::store_565, &fDstPtr); break; case kBGRA_8888_SkColorType: case kRGBA_8888_SkColorType: p->append(SkRasterPipeline::store_8888, &fDstPtr); break; |