diff options
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/SkRasterPipeline.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/core/SkRasterPipeline.cpp b/src/core/SkRasterPipeline.cpp index a8c4c0de73..0e56fc4810 100644 --- a/src/core/SkRasterPipeline.cpp +++ b/src/core/SkRasterPipeline.cpp @@ -82,6 +82,11 @@ void SkRasterPipeline::dump() const { #endif void SkRasterPipeline::append_constant_color(SkArenaAlloc* alloc, const float rgba[4]) { + SkASSERT(0 <= rgba[0] && rgba[0] <= 1); + SkASSERT(0 <= rgba[1] && rgba[1] <= 1); + SkASSERT(0 <= rgba[2] && rgba[2] <= 1); + SkASSERT(0 <= rgba[3] && rgba[3] <= 1); + if (rgba[0] == 0 && rgba[1] == 0 && rgba[2] == 0 && rgba[3] == 1) { this->append(black_color); INC_BLACK; @@ -92,7 +97,13 @@ void SkRasterPipeline::append_constant_color(SkArenaAlloc* alloc, const float rg auto ctx = alloc->make<SkJumper_UniformColorCtx>(); Sk4f color = Sk4f::Load(rgba); color.store(&ctx->r); - ctx->rgba = Sk4f_toL32(color); + + // To make loads more direct, we store 8-bit values in 16-bit slots. + color = color * 255.0f + 0.5f; + ctx->rgba[0] = (uint16_t)color[0]; + ctx->rgba[1] = (uint16_t)color[1]; + ctx->rgba[2] = (uint16_t)color[2]; + ctx->rgba[3] = (uint16_t)color[3]; this->unchecked_append(uniform_color, ctx); INC_COLOR; |