diff options
author | Mike Klein <mtklein@chromium.org> | 2016-10-07 11:21:06 -0400 |
---|---|---|
committer | Mike Klein <mtklein@chromium.org> | 2016-10-07 16:28:16 +0000 |
commit | a71e151c6f0be68dc96ad2d169bbc31edca8f946 (patch) | |
tree | 56c67a12eb299f814bb3d1f197e21512a38e3d82 /src/opts/SkOpts_hsw.cpp | |
parent | 49df8d17c56ee08ecf860289d501913d356f67dc (diff) |
SkRasterPipeline: 8x pipelines, attempt 2
Original review here: https://skia-review.googlesource.com/c/2990/
Changes since:
- simpler implementations of load_tail() / store_tail(): slower, but more obviously correct to all compilers
- fleshed out math ops on Sk8i and Sk8u to make unit tests happy on -Fast bot (where we always have AVX2)
- now storing stage functions as void(*)() to avoid undefined behavior and/or linker problems. This restores 32-bit Windows.
- all AVX2 Sk8x methods are marked always-inline, to avoid linking the "wrong" version on Debug builds.
CQ_INCLUDE_TRYBOTS=master.client.skia:Perf-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Debug-ASAN-Trybot,Perf-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Debug-GN,Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot,Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Fast-Trybot;master.client.skia.compile:Build-Win-MSVC-x86_64-Debug-Trybot
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=3064
Change-Id: Id0ba250037e271a9475fe2f0989d64f0aa909bae
Reviewed-on: https://skia-review.googlesource.com/3064
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Mike Klein <mtklein@chromium.org>
Diffstat (limited to 'src/opts/SkOpts_hsw.cpp')
-rw-r--r-- | src/opts/SkOpts_hsw.cpp | 63 |
1 files changed, 62 insertions, 1 deletions
diff --git a/src/opts/SkOpts_hsw.cpp b/src/opts/SkOpts_hsw.cpp index 53e2e5acdd..9f724805a6 100644 --- a/src/opts/SkOpts_hsw.cpp +++ b/src/opts/SkOpts_hsw.cpp @@ -7,9 +7,70 @@ #include "SkOpts.h" + #define SK_OPTS_NS hsw +#include "SkRasterPipeline_opts.h" namespace SkOpts { - void Init_hsw() { } + void Init_hsw() { + + run_pipeline = SK_OPTS_NS::run_pipeline; + + #define STAGE(stage) \ + body[SkRasterPipeline::stage] = (SkOpts::VoidFn)SK_OPTS_NS::stage; \ + tail[SkRasterPipeline::stage] = (SkOpts::VoidFn)SK_OPTS_NS::stage##_tail + + STAGE(store_565); + STAGE(store_srgb); + STAGE(store_f16); + + STAGE(load_s_565); + STAGE(load_s_srgb); + STAGE(load_s_f16); + + STAGE(load_d_565); + STAGE(load_d_srgb); + STAGE(load_d_f16); + + STAGE(scale_u8); + + STAGE(lerp_u8); + STAGE(lerp_565); + #undef STAGE + + #define STAGE(stage) \ + body[SkRasterPipeline::stage] = (SkOpts::VoidFn)SK_OPTS_NS::stage; \ + tail[SkRasterPipeline::stage] = (SkOpts::VoidFn)SK_OPTS_NS::stage + + STAGE(lerp_constant_float); + STAGE(constant_color); + + STAGE(dst); + STAGE(dstatop); + STAGE(dstin); + STAGE(dstout); + STAGE(dstover); + STAGE(srcatop); + STAGE(srcin); + STAGE(srcout); + STAGE(srcover); + STAGE(clear); + STAGE(modulate); + STAGE(multiply); + STAGE(plus_); + STAGE(screen); + STAGE(xor_); + STAGE(colorburn); + STAGE(colordodge); + STAGE(darken); + STAGE(difference); + STAGE(exclusion); + STAGE(hardlight); + STAGE(lighten); + STAGE(overlay); + STAGE(softlight); + #undef STAGE + + } } |