diff options
author | Matt Sarett <msarett@google.com> | 2016-11-16 16:07:15 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2016-11-16 22:08:34 +0000 |
commit | db4d406e7e311113e56663b1f2286c18adcee985 (patch) | |
tree | c0c85c2cfb5146138a8debd869a07317a8c693ad /src/opts | |
parent | d930752957aaa26077870ebc7fb1c05307f4c27e (diff) |
Hook into parametric and table raster pipeline stages
BUG:664864
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=4913
CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot
Change-Id: I909152f1abba60803f0ce2f970eec1f8f1816d78
Reviewed-on: https://skia-review.googlesource.com/4913
Commit-Queue: Matt Sarett <msarett@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
Diffstat (limited to 'src/opts')
-rw-r--r-- | src/opts/SkRasterPipeline_opts.h | 50 |
1 files changed, 15 insertions, 35 deletions
diff --git a/src/opts/SkRasterPipeline_opts.h b/src/opts/SkRasterPipeline_opts.h index 087a63025f..f1aa250d21 100644 --- a/src/opts/SkRasterPipeline_opts.h +++ b/src/opts/SkRasterPipeline_opts.h @@ -10,6 +10,8 @@ #include "SkColorPriv.h" #include "SkColorLookUpTable.h" +#include "SkColorSpaceXform_A2B.h" +#include "SkColorSpaceXformPriv.h" #include "SkHalf.h" #include "SkPM4f.h" #include "SkPM4fPriv.h" @@ -232,6 +234,13 @@ STAGE(clamp_a, true) { b = SkNf::Min(b, a); } +STAGE(clamp_1, true) { + a = SkNf::Min(a, 1.0f); + r = SkNf::Min(r, 1.0f); + g = SkNf::Min(g, 1.0f); + b = SkNf::Min(b, 1.0f); +} + STAGE(unpremul, true) { r *= a.invert(); g *= a.invert(); @@ -585,51 +594,22 @@ STAGE(parametric_b, true) { b = parametric(b, *(const SkColorSpaceTransferFn*)ctx); } -SI SkNf table(const SkNf& v, const float t[1024]) { - SkNi ix = SkNx_cast<int>(SkNf::Max(0, SkNf::Min(v, 1)) * 1023 + 0.5); - - float result[N]; // TODO: vgatherdps? +SI SkNf table(const SkNf& v, const SkTableTransferFn& table) { + float result[N]; for (int i = 0; i < N; i++) { - result[i] = t[ix[i]]; + result[i] = interp_lut(v[i], table.fData, table.fSize); } return SkNf::Load(result); } STAGE(table_r, true) { - r = table(r, (const float*)ctx); + r = table(r, *(const SkTableTransferFn*)ctx); } STAGE(table_g, true) { - g = table(g, (const float*)ctx); + g = table(g, *(const SkTableTransferFn*)ctx); } STAGE(table_b, true) { - b = table(b, (const float*)ctx); -} - -STAGE(fn_1_r, true) { - auto fn = (const std::function<float(float)>*)ctx; - float result[N]; - for (int i = 0; i < N; ++i) { - result[i] = (*fn)(r[i]); - } - r = SkNf::Load(result); -} - -STAGE(fn_1_g, true) { - auto fn = (const std::function<float(float)>*)ctx; - float result[N]; - for (int i = 0; i < N; ++i) { - result[i] = (*fn)(g[i]); - } - g = SkNf::Load(result); -} - -STAGE(fn_1_b, true) { - auto fn = (const std::function<float(float)>*)ctx; - float result[N]; - for (int i = 0; i < N; ++i) { - result[i] = (*fn)(b[i]); - } - b = SkNf::Load(result); + b = table(b, *(const SkTableTransferFn*)ctx); } STAGE(color_lookup_table, true) { |