diff options
author | Mike Klein <mtklein@chromium.org> | 2017-01-09 10:20:13 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-01-09 17:01:26 +0000 |
commit | a7080264d11235d6f469d355b14a7647cba8eb75 (patch) | |
tree | 8ee121d44a3dfd947f8bb6804aa742842afba4c5 /src/core/SkRasterPipeline.cpp | |
parent | 003312a211e65f35e402d6fe80a32e23d4c94ac4 (diff) |
SkSplicer
I think I may have cracked the compile-ahead-of-time-splice-at-runtime nut.
This compiles stages ahead of time using clang, then splices them together at runtime. This means the stages can be written in simple C++, with some mild restrictions.
This performs identically to our Xbyak experiment, and already supports more stages. As written this stands alone from SkRasterPipeline_opts.h, but I'm fairly confident that the bulk (the STAGE implementations) can ultimately be shared.
As of PS 25 or so, this also supports all the stages used by bench/SkRasterPipelineBench.cpp:
SkRasterPipeline_…
400 …f16_compile 1x …f16_run 1.38x …srgb_compile 1.89x …srgb_run 2.21x
That is, ~30% faster than baseline for f16, ~15% faster for sRGB.
Change-Id: I1ec7dcb769613713ce56978c58038f606f87d63d
Reviewed-on: https://skia-review.googlesource.com/6733
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
Diffstat (limited to 'src/core/SkRasterPipeline.cpp')
-rw-r--r-- | src/core/SkRasterPipeline.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/core/SkRasterPipeline.cpp b/src/core/SkRasterPipeline.cpp index 13a7caecbd..7c3536c39d 100644 --- a/src/core/SkRasterPipeline.cpp +++ b/src/core/SkRasterPipeline.cpp @@ -27,7 +27,7 @@ void SkRasterPipeline::run(size_t x, size_t y, size_t n) const { } std::function<void(size_t, size_t, size_t)> SkRasterPipeline::compile() const { -#ifdef SK_XBYAK +#ifdef SK_RASTER_PIPELINE_HAS_JIT if (auto fn = this->jit()) { return fn; } |