aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/image
diff options
context:
space:
mode:
authorGravatar Mike Klein <mtklein@chromium.org>2016-11-29 12:57:22 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2016-11-29 18:48:50 +0000
commitf7657e9a2a2be2c892ece03fd65d0f85f033bc6d (patch)
treef899564cb4c9ecc89718a259d3e623aedb3e4b6c /src/image
parentd1042662413b61f138e621b60818e41b5d916bde (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.cpp18
-rw-r--r--src/image/SkImageShaderContext.h19
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