aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkOpts.cpp
diff options
context:
space:
mode:
authorGravatar Mike Klein <mtklein@chromium.org>2016-10-12 09:52:55 -0400
committerGravatar Mike Klein <mtklein@chromium.org>2016-10-12 14:41:29 +0000
commit04adfda9c74481d0b640c0ce18864588babfcdf6 (patch)
tree034c424be3beb3da149766f7015726ef5af5545c /src/core/SkOpts.cpp
parent65a09274184ffd25d446352a96d3890ea7e625fa (diff)
SkRasterPipeline: 8x pipelines, without any 8x code enabled.
Original review here: https://skia-review.googlesource.com/c/2990/ Second attempt here: https://skia-review.googlesource.com/c/3064/ This is the same as the second attempt, but with the change to SkOpts_hsw.cpp left out. That omitted part is the key piece... this just lands the refactoring. 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=3242 Change-Id: Iaafa793a4854c2c9cd7e85cca3701bf871253f71 Reviewed-on: https://skia-review.googlesource.com/3242 Reviewed-by: Mike Klein <mtklein@chromium.org> Commit-Queue: Mike Klein <mtklein@chromium.org>
Diffstat (limited to 'src/core/SkOpts.cpp')
-rw-r--r--src/core/SkOpts.cpp194
1 files changed, 99 insertions, 95 deletions
diff --git a/src/core/SkOpts.cpp b/src/core/SkOpts.cpp
index 7784e7fcf1..88261f65bd 100644
--- a/src/core/SkOpts.cpp
+++ b/src/core/SkOpts.cpp
@@ -88,105 +88,109 @@ namespace SkOpts {
DEFINE_DEFAULT(srcover_srgb_srgb);
DEFINE_DEFAULT(hash_fn);
+
+ DEFINE_DEFAULT(run_pipeline);
#undef DEFINE_DEFAULT
- // TODO: might be nice to only create one instance of tail-insensitive stages.
-
- SkRasterPipeline::Fn stages_4[] = {
- stage_4<SK_OPTS_NS::store_565 , false>,
- stage_4<SK_OPTS_NS::store_srgb, false>,
- stage_4<SK_OPTS_NS::store_f16 , false>,
-
- stage_4<SK_OPTS_NS::load_s_565 , true>,
- stage_4<SK_OPTS_NS::load_s_srgb, true>,
- stage_4<SK_OPTS_NS::load_s_f16 , true>,
-
- stage_4<SK_OPTS_NS::load_d_565 , true>,
- stage_4<SK_OPTS_NS::load_d_srgb, true>,
- stage_4<SK_OPTS_NS::load_d_f16 , true>,
-
- stage_4<SK_OPTS_NS::scale_u8, true>,
-
- stage_4<SK_OPTS_NS::lerp_u8 , true>,
- stage_4<SK_OPTS_NS::lerp_565 , true>,
- stage_4<SK_OPTS_NS::lerp_constant_float, true>,
-
- stage_4<SK_OPTS_NS::constant_color, 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,
+ SkOpts::VoidFn body[] = {
+ (SkOpts::VoidFn)SK_OPTS_NS::just_return,
+
+ (SkOpts::VoidFn)SK_OPTS_NS::store_565,
+ (SkOpts::VoidFn)SK_OPTS_NS::store_srgb,
+ (SkOpts::VoidFn)SK_OPTS_NS::store_f16,
+
+ (SkOpts::VoidFn)SK_OPTS_NS::load_s_565,
+ (SkOpts::VoidFn)SK_OPTS_NS::load_s_srgb,
+ (SkOpts::VoidFn)SK_OPTS_NS::load_s_f16,
+
+ (SkOpts::VoidFn)SK_OPTS_NS::load_d_565,
+ (SkOpts::VoidFn)SK_OPTS_NS::load_d_srgb,
+ (SkOpts::VoidFn)SK_OPTS_NS::load_d_f16,
+
+ (SkOpts::VoidFn)SK_OPTS_NS::scale_u8,
+
+ (SkOpts::VoidFn)SK_OPTS_NS::lerp_u8,
+ (SkOpts::VoidFn)SK_OPTS_NS::lerp_565,
+ (SkOpts::VoidFn)SK_OPTS_NS::lerp_constant_float,
+
+ (SkOpts::VoidFn)SK_OPTS_NS::constant_color,
+
+ (SkOpts::VoidFn)SK_OPTS_NS::dst,
+ (SkOpts::VoidFn)SK_OPTS_NS::dstatop,
+ (SkOpts::VoidFn)SK_OPTS_NS::dstin,
+ (SkOpts::VoidFn)SK_OPTS_NS::dstout,
+ (SkOpts::VoidFn)SK_OPTS_NS::dstover,
+ (SkOpts::VoidFn)SK_OPTS_NS::srcatop,
+ (SkOpts::VoidFn)SK_OPTS_NS::srcin,
+ (SkOpts::VoidFn)SK_OPTS_NS::srcout,
+ (SkOpts::VoidFn)SK_OPTS_NS::srcover,
+ (SkOpts::VoidFn)SK_OPTS_NS::clear,
+ (SkOpts::VoidFn)SK_OPTS_NS::modulate,
+ (SkOpts::VoidFn)SK_OPTS_NS::multiply,
+ (SkOpts::VoidFn)SK_OPTS_NS::plus_,
+ (SkOpts::VoidFn)SK_OPTS_NS::screen,
+ (SkOpts::VoidFn)SK_OPTS_NS::xor_,
+ (SkOpts::VoidFn)SK_OPTS_NS::colorburn,
+ (SkOpts::VoidFn)SK_OPTS_NS::colordodge,
+ (SkOpts::VoidFn)SK_OPTS_NS::darken,
+ (SkOpts::VoidFn)SK_OPTS_NS::difference,
+ (SkOpts::VoidFn)SK_OPTS_NS::exclusion,
+ (SkOpts::VoidFn)SK_OPTS_NS::hardlight,
+ (SkOpts::VoidFn)SK_OPTS_NS::lighten,
+ (SkOpts::VoidFn)SK_OPTS_NS::overlay,
+ (SkOpts::VoidFn)SK_OPTS_NS::softlight,
};
- static_assert(SK_ARRAY_COUNT(stages_4) == SkRasterPipeline::kNumStockStages, "");
-
- SkRasterPipeline::Fn stages_1_3[] = {
- stage_1_3<SK_OPTS_NS::store_565 , false>,
- stage_1_3<SK_OPTS_NS::store_srgb, false>,
- stage_1_3<SK_OPTS_NS::store_f16 , false>,
-
- stage_1_3<SK_OPTS_NS::load_s_565 , true>,
- stage_1_3<SK_OPTS_NS::load_s_srgb, true>,
- stage_1_3<SK_OPTS_NS::load_s_f16 , true>,
-
- stage_1_3<SK_OPTS_NS::load_d_565 , true>,
- stage_1_3<SK_OPTS_NS::load_d_srgb, true>,
- stage_1_3<SK_OPTS_NS::load_d_f16 , true>,
-
- stage_1_3<SK_OPTS_NS::scale_u8, true>,
-
- stage_1_3<SK_OPTS_NS::lerp_u8 , true>,
- stage_1_3<SK_OPTS_NS::lerp_565 , true>,
- stage_1_3<SK_OPTS_NS::lerp_constant_float, true>,
-
- stage_1_3<SK_OPTS_NS::constant_color, 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(body) == SkRasterPipeline::kNumStockStages, "");
+
+ SkOpts::VoidFn tail[] = {
+ (SkOpts::VoidFn)SK_OPTS_NS::just_return,
+
+ (SkOpts::VoidFn)SK_OPTS_NS::store_565_tail,
+ (SkOpts::VoidFn)SK_OPTS_NS::store_srgb_tail,
+ (SkOpts::VoidFn)SK_OPTS_NS::store_f16_tail,
+
+ (SkOpts::VoidFn)SK_OPTS_NS::load_s_565_tail,
+ (SkOpts::VoidFn)SK_OPTS_NS::load_s_srgb_tail,
+ (SkOpts::VoidFn)SK_OPTS_NS::load_s_f16_tail,
+
+ (SkOpts::VoidFn)SK_OPTS_NS::load_d_565_tail,
+ (SkOpts::VoidFn)SK_OPTS_NS::load_d_srgb_tail,
+ (SkOpts::VoidFn)SK_OPTS_NS::load_d_f16_tail,
+
+ (SkOpts::VoidFn)SK_OPTS_NS::scale_u8_tail,
+
+ (SkOpts::VoidFn)SK_OPTS_NS::lerp_u8_tail,
+ (SkOpts::VoidFn)SK_OPTS_NS::lerp_565_tail,
+ (SkOpts::VoidFn)SK_OPTS_NS::lerp_constant_float,
+
+ (SkOpts::VoidFn)SK_OPTS_NS::constant_color,
+
+ (SkOpts::VoidFn)SK_OPTS_NS::dst,
+ (SkOpts::VoidFn)SK_OPTS_NS::dstatop,
+ (SkOpts::VoidFn)SK_OPTS_NS::dstin,
+ (SkOpts::VoidFn)SK_OPTS_NS::dstout,
+ (SkOpts::VoidFn)SK_OPTS_NS::dstover,
+ (SkOpts::VoidFn)SK_OPTS_NS::srcatop,
+ (SkOpts::VoidFn)SK_OPTS_NS::srcin,
+ (SkOpts::VoidFn)SK_OPTS_NS::srcout,
+ (SkOpts::VoidFn)SK_OPTS_NS::srcover,
+ (SkOpts::VoidFn)SK_OPTS_NS::clear,
+ (SkOpts::VoidFn)SK_OPTS_NS::modulate,
+ (SkOpts::VoidFn)SK_OPTS_NS::multiply,
+ (SkOpts::VoidFn)SK_OPTS_NS::plus_,
+ (SkOpts::VoidFn)SK_OPTS_NS::screen,
+ (SkOpts::VoidFn)SK_OPTS_NS::xor_,
+ (SkOpts::VoidFn)SK_OPTS_NS::colorburn,
+ (SkOpts::VoidFn)SK_OPTS_NS::colordodge,
+ (SkOpts::VoidFn)SK_OPTS_NS::darken,
+ (SkOpts::VoidFn)SK_OPTS_NS::difference,
+ (SkOpts::VoidFn)SK_OPTS_NS::exclusion,
+ (SkOpts::VoidFn)SK_OPTS_NS::hardlight,
+ (SkOpts::VoidFn)SK_OPTS_NS::lighten,
+ (SkOpts::VoidFn)SK_OPTS_NS::overlay,
+ (SkOpts::VoidFn)SK_OPTS_NS::softlight,
};
- static_assert(SK_ARRAY_COUNT(stages_1_3) == SkRasterPipeline::kNumStockStages, "");
+ static_assert(SK_ARRAY_COUNT(tail) == SkRasterPipeline::kNumStockStages, "");
// Each Init_foo() is defined in src/opts/SkOpts_foo.cpp.
void Init_ssse3();