diff options
author | Mike Klein <mtklein@chromium.org> | 2016-10-04 14:03:27 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2016-10-04 18:33:52 +0000 |
commit | 9161ef012fb22d1b76122cb95dbfddb72f02ef02 (patch) | |
tree | ef8bc78b52f1f17431003ac1f7300b15d96ebb2d /src/core/SkOpts.cpp | |
parent | 38911a7cb53474575e1cd1cb545902b50ee00889 (diff) |
Make all SkRasterPipeline stages stock stages in SkOpts.
If we want to support VEX-encoded instructions (AVX, F16C, etc.) without a ridiculous slowdown, we need to make sure we're running either all VEX-encoded instructions or all non-VEX-encoded instructions. That means we cannot mix arbitrary user-defined SkRasterPipeline::Fn (never VEX) with those living in SkOpts (maybe VEX)... it's SkOpts or bust.
This ports the existing user-defined SkRasterPipeline::Fn use cases over to use stock stages from SkOpts. I rewrote the unit test to use stock stages, and moved the SkXfermode implementations to SkOpts. The code deleted for SkArithmeticMode_scalar should already be dead.
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2940
CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot
Change-Id: I94dbe766b2d65bfec6e544d260f71d721f0f5cb0
Reviewed-on: https://skia-review.googlesource.com/2940
Commit-Queue: Mike Klein <mtklein@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Diffstat (limited to 'src/core/SkOpts.cpp')
-rw-r--r-- | src/core/SkOpts.cpp | 50 |
1 files changed, 48 insertions, 2 deletions
diff --git a/src/core/SkOpts.cpp b/src/core/SkOpts.cpp index 4d600797f7..7784e7fcf1 100644 --- a/src/core/SkOpts.cpp +++ b/src/core/SkOpts.cpp @@ -113,7 +113,30 @@ namespace SkOpts { stage_4<SK_OPTS_NS::constant_color, true>, - stage_4<SK_OPTS_NS::srcover, true>, + SK_OPTS_NS::dst, + SK_OPTS_NS::dstatop, + SK_OPTS_NS::dstin, + SK_OPTS_NS::dstout, + SK_OPTS_NS::dstover, + SK_OPTS_NS::srcatop, + SK_OPTS_NS::srcin, + SK_OPTS_NS::srcout, + SK_OPTS_NS::srcover, + SK_OPTS_NS::clear, + SK_OPTS_NS::modulate, + SK_OPTS_NS::multiply, + SK_OPTS_NS::plus_, + SK_OPTS_NS::screen, + SK_OPTS_NS::xor_, + SK_OPTS_NS::colorburn, + SK_OPTS_NS::colordodge, + SK_OPTS_NS::darken, + SK_OPTS_NS::difference, + SK_OPTS_NS::exclusion, + SK_OPTS_NS::hardlight, + SK_OPTS_NS::lighten, + SK_OPTS_NS::overlay, + SK_OPTS_NS::softlight, }; static_assert(SK_ARRAY_COUNT(stages_4) == SkRasterPipeline::kNumStockStages, ""); @@ -138,7 +161,30 @@ namespace SkOpts { stage_1_3<SK_OPTS_NS::constant_color, true>, - stage_1_3<SK_OPTS_NS::srcover, true>, + SK_OPTS_NS::dst, + SK_OPTS_NS::dstatop, + SK_OPTS_NS::dstin, + SK_OPTS_NS::dstout, + SK_OPTS_NS::dstover, + SK_OPTS_NS::srcatop, + SK_OPTS_NS::srcin, + SK_OPTS_NS::srcout, + SK_OPTS_NS::srcover, + SK_OPTS_NS::clear, + SK_OPTS_NS::modulate, + SK_OPTS_NS::multiply, + SK_OPTS_NS::plus_, + SK_OPTS_NS::screen, + SK_OPTS_NS::xor_, + SK_OPTS_NS::colorburn, + SK_OPTS_NS::colordodge, + SK_OPTS_NS::darken, + SK_OPTS_NS::difference, + SK_OPTS_NS::exclusion, + SK_OPTS_NS::hardlight, + SK_OPTS_NS::lighten, + SK_OPTS_NS::overlay, + SK_OPTS_NS::softlight, }; static_assert(SK_ARRAY_COUNT(stages_1_3) == SkRasterPipeline::kNumStockStages, ""); |