diff options
author | 2016-11-29 12:57:22 -0500 | |
---|---|---|
committer | 2016-11-29 18:48:50 +0000 | |
commit | f7657e9a2a2be2c892ece03fd65d0f85f033bc6d (patch) | |
tree | f899564cb4c9ecc89718a259d3e623aedb3e4b6c /src/image | |
parent | d1042662413b61f138e621b60818e41b5d916bde (diff) |
gather_i8
CQ_INCLUDE_TRYBOTS=skia.primary:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD
Change-Id: Ia7a133f515e29e16700aabc0633c77a703425f41
Reviewed-on: https://skia-review.googlesource.com/5239
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
Diffstat (limited to 'src/image')
-rw-r--r-- | src/image/SkImageShader.cpp | 18 | ||||
-rw-r--r-- | src/image/SkImageShaderContext.h | 19 |
2 files changed, 22 insertions, 15 deletions
diff --git a/src/image/SkImageShader.cpp b/src/image/SkImageShader.cpp index 134cc1cd67..3def5ec345 100644 --- a/src/image/SkImageShader.cpp +++ b/src/image/SkImageShader.cpp @@ -289,7 +289,6 @@ bool SkImageShader::onAppendStages(SkRasterPipeline* p, SkColorSpace* dst, SkFal // TODO: all formats switch (info.colorType()) { case kAlpha_8_SkColorType: - case kIndex_8_SkColorType: return false; default: break; } @@ -319,11 +318,11 @@ bool SkImageShader::onAppendStages(SkRasterPipeline* p, SkColorSpace* dst, SkFal } auto ctx = scratch->make<SkImageShaderContext>(); - - ctx->pixels = pm.addr(); - ctx->stride = pm.rowBytesAsPixels(); - ctx->width = pm.width(); - ctx->height = pm.height(); + ctx->pixels = pm.addr(); + ctx->ctable = pm.ctable(); + ctx->stride = pm.rowBytesAsPixels(); + ctx->width = pm.width(); + ctx->height = pm.height(); if (matrix.asAffine(ctx->matrix)) { p->append(SkRasterPipeline::matrix_2x3, ctx->matrix); } else { @@ -343,6 +342,7 @@ bool SkImageShader::onAppendStages(SkRasterPipeline* p, SkColorSpace* dst, SkFal case kRepeat_TileMode: p->append(SkRasterPipeline::repeat_y, &ctx->height); break; } switch (info.colorType()) { + case kIndex_8_SkColorType: p->append(SkRasterPipeline::gather_i8, ctx); break; case kGray_8_SkColorType: p->append(SkRasterPipeline::gather_g8, ctx); break; case kRGB_565_SkColorType: p->append(SkRasterPipeline::gather_565, ctx); break; case kARGB_4444_SkColorType: p->append(SkRasterPipeline::gather_4444, ctx); break; @@ -379,7 +379,11 @@ bool SkImageShader::onAppendStages(SkRasterPipeline* p, SkColorSpace* dst, SkFal p->append(SkRasterPipeline::move_dst_src); } - if (info.colorType() == kBGRA_8888_SkColorType) { + auto effective_color_type = [](SkColorType ct) { + return ct == kIndex_8_SkColorType ? kN32_SkColorType : ct; + }; + + if (effective_color_type(info.colorType()) == kBGRA_8888_SkColorType) { p->append(SkRasterPipeline::swap_rb); } if (info.alphaType() == kUnpremul_SkAlphaType) { diff --git a/src/image/SkImageShaderContext.h b/src/image/SkImageShaderContext.h index 96b30b0a26..cb562369a9 100644 --- a/src/image/SkImageShaderContext.h +++ b/src/image/SkImageShaderContext.h @@ -8,18 +8,21 @@ #ifndef SkImageShaderContext_DEFINED #define SkImageShaderContext_DEFINED +class SkColorTable; + // Definition used by SkImageShader.cpp and SkRasterPipeline_opts.h. // Otherwise, completely uninteresting. struct SkImageShaderContext { - const void* pixels; - int stride; - int width; - int height; - float matrix[9]; - float x[8]; - float y[8]; - float scale[8]; + const void* pixels; + SkColorTable* ctable; + int stride; + int width; + int height; + float matrix[9]; + float x[8]; + float y[8]; + float scale[8]; }; #endif//SkImageShaderContext_DEFINED |