aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkOpts.cpp
diff options
context:
space:
mode:
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();