Bump stored lowp uniform color to 16-bit storage.

This makes loading into 16-bit channels more natural in _lowp.cpp.

Change-Id: I1ed393873654060ef52f4632d670465528006bbd
Reviewed-on: https://skia-review.googlesource.com/47261
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
This commit is contained in:
Mike Klein 2017-09-15 14:57:02 -04:00 committed by Skia Commit-Bot
parent 57372152b2
commit d286bfbd96
5 changed files with 5355 additions and 5377 deletions

View File

@ -92,7 +92,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;

View File

@ -118,7 +118,7 @@ struct SkJumper_2PtConicalCtx {
struct SkJumper_UniformColorCtx {
float r,g,b,a;
uint32_t rgba;
uint16_t rgba[4]; // [0,255] in a 16-bit lane.
};
struct SkJumper_ColorLookupTableCtx {

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -137,11 +137,10 @@ SI D join(S lo, S hi) {
// ~~~~~~ Basic / misc. stages ~~~~~~ //
STAGE(uniform_color, const SkJumper_UniformColorCtx* c) {
auto rgba = (const uint8_t*)&c->rgba;
r = rgba[0];
g = rgba[1];
b = rgba[2];
a = rgba[3];
r = c->rgba[0];
g = c->rgba[1];
b = c->rgba[2];
a = c->rgba[3];
}
STAGE(black_color, Ctx::None) { r = g = b = 0; a = 255; }
STAGE(white_color, Ctx::None) { r = g = b = 255; a = 255; }