Try again with SkOpts_hsw and 8x pipelines.

All SkNx are now in anonymous namespaces and all their methods are force-inlined.  We should not have any ODR problems.

This is still a near 2x speedup, more so for f16.

BUG=skia:

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=3667

Change-Id: I6db9a46f7164f49827ab4d7983e80bf8cea99995
Reviewed-on: https://skia-review.googlesource.com/3667
Reviewed-by: Matt Sarett <msarett@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
This commit is contained in:
Mike Klein 2016-10-19 14:15:15 -04:00 committed by Skia Commit-Bot
parent aef247af0a
commit 4f02ce7995

View File

@ -8,8 +8,69 @@
#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(just_return);
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
}
}