Bring back SkRasterPipeline::run() for one-off uses.
authorMike Klein <mtklein@chromium.org>
Wed, 30 Nov 2016 18:45:06 +0000 (13:45 -0500)
committerSkia Commit-Bot <skia-commit-bot@chromium.org>
Wed, 30 Nov 2016 20:16:49 +0000 (20:16 +0000)
CQ_INCLUDE_TRYBOTS=skia.primary:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD

Change-Id: I308b6d75f2987a667eead9a55760a2ff6aec2984
Reviewed-on: https://skia-review.googlesource.com/5353
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Mike Klein <mtklein@chromium.org>
src/core/SkColorSpaceXform_A2B.cpp
src/core/SkOpts.cpp
src/core/SkOpts.h
src/core/SkPM4fPriv.h
src/core/SkRasterPipeline.cpp
src/core/SkRasterPipeline.h
src/core/SkRasterPipelineBlitter.cpp
src/opts/SkOpts_hsw.cpp
src/opts/SkOpts_sse41.cpp
src/opts/SkRasterPipeline_opts.h
tests/SkRasterPipelineTest.cpp

index d10453cb67890b679e893d0047226ba99c11fac3..f2f694349f86b6b2802832c452406bc43076363a 100644 (file)
@@ -64,10 +64,7 @@ bool SkColorSpaceXform_A2B::onApply(ColorFormat dstFormat, void* dst, ColorForma
             pipeline.append(SkRasterPipeline::store_f32, &dst);
             break;
     }
-
-    auto p = pipeline.compile();
-
-    p(0,0, count);
+    pipeline.run(0,0, count);
 
     return true;
 }
index 6c13dd05e1c245d1c038a10ee25705407a8c0da2..45fb2890f25eb8d169ec27158801ec87f58bf8d2 100644 (file)
@@ -90,6 +90,7 @@ namespace SkOpts {
 
     DEFINE_DEFAULT(hash_fn);
 
+    DEFINE_DEFAULT(run_pipeline);
     DEFINE_DEFAULT(compile_pipeline);
 
     DEFINE_DEFAULT(convolve_vertically);
index 22be97c332394d6ae03dc86dd5c55de28e6452ce..b09d8cfd9f61dfa109a4a012d3df806739c57ee7 100644 (file)
@@ -75,6 +75,7 @@ namespace SkOpts {
         return hash_fn(data, bytes, seed);
     }
 
+    extern void (*run_pipeline)(size_t, size_t, size_t, const SkRasterPipeline::Stage*, int);
     extern std::function<void(size_t, size_t, size_t)>
     (*compile_pipeline)(const SkRasterPipeline::Stage*, int);
 
index 13c1fd9ab78a8cd1d94a95ef2b73a0fe78e9ac4d..db8d478f136db08103037e89b850a3c9992e2a32 100644 (file)
@@ -126,7 +126,7 @@ static inline SkColor4f SkColor4f_from_SkColor(SkColor color, SkColorSpace* dst)
                                SkColorSpace::MakeNamed(SkColorSpace::kSRGB_Named).get(), dst);
         p.append(SkRasterPipeline::store_f32, &color4f_ptr);
 
-        p.compile()(0,0,1);
+        p.run(0,0,1);
     } else {
         // Linear gamma, dst gamut.
         swizzle_rb(SkNx_cast<float>(Sk4b::Load(&color)) * (1/255.0f)).store(&color4f);
index 7c4c95f4809ee461615a5997666b11a06e7f2480..27856fd576db34794f4bd65f2e1a59fd338c61c1 100644 (file)
@@ -27,6 +27,10 @@ void SkRasterPipeline::extend(const SkRasterPipeline& src) {
     }
 }
 
+void SkRasterPipeline::run(size_t x, size_t y, size_t n) const {
+    SkOpts::run_pipeline(x,y,n, fStages, fNum);
+}
+
 std::function<void(size_t, size_t, size_t)> SkRasterPipeline::compile() const {
     return SkOpts::compile_pipeline(fStages, fNum);
 }
index 0495ebc3e7c8c76b929063a8d60e2496ada3fb4d..01b581f3bbf312e8eef5e263d93ef4e231bf6401 100644 (file)
@@ -104,6 +104,9 @@ public:
     void extend(const SkRasterPipeline&);
 
     // Runs the pipeline walking x through [x,x+n), holding y constant.
+    void run(size_t x, size_t y, size_t n) const;
+
+    // If you're going to run() the pipeline more than once, it's best to compile it.
     std::function<void(size_t x, size_t y, size_t n)> compile() const;
 
     void dump() const;
index d1796f5766bbd077d5b1f4e60ce9ab031cebbe8d..075da1a754dc821c85e0d88b10c0d8616705f85d 100644 (file)
@@ -140,7 +140,7 @@ SkBlitter* SkRasterPipelineBlitter::Create(const SkPixmap& dst,
 
     if (is_constant) {
         pipeline->append(SkRasterPipeline::store_f32, &paintColor);
-        pipeline->compile()(0,0, 1);
+        pipeline->run(0,0, 1);
 
         *pipeline = SkRasterPipeline();
         pipeline->append(SkRasterPipeline::constant_color, paintColor);
index 96465b8a07bc296726cc6a1c2eff45926eeb6fdf..12bc49444fd9f0ce8a61ae82e400db9f709bf068 100644 (file)
@@ -17,6 +17,7 @@
 
 namespace SkOpts {
     void Init_hsw() {
+        run_pipeline     = hsw::run_pipeline;
         compile_pipeline = hsw::compile_pipeline;
     }
 }
index 0d771bdbef82d31114038605f067c32170de29bc..e29fcde7227fb1e1f86d015256ac74274c22cad5 100644 (file)
@@ -20,6 +20,7 @@ namespace SkOpts {
         box_blur_yx          = sse41::box_blur_yx;
         srcover_srgb_srgb    = sse41::srcover_srgb_srgb;
         blit_row_s32a_opaque = sse41::blit_row_s32a_opaque;
+        run_pipeline         = sse41::run_pipeline;
         compile_pipeline     = sse41::compile_pipeline;
     }
 }
index 163b9ebbf0305f6003e9eaaf145d7b13ca0f603e..5be1b0c309b7d0a77e22083edfe45f5b31922641 100644 (file)
@@ -960,6 +960,11 @@ namespace SK_OPTS_NS {
         return fn;
     }
 
+    SI void run_pipeline(size_t x, size_t y, size_t n,
+                         const SkRasterPipeline::Stage* stages, int nstages) {
+        compile_pipeline(stages, nstages)(x,y,n);
+    }
+
 }  // namespace SK_OPTS_NS
 
 #undef SI
index 427bc93015aae346c1370a8cd6c02653c0fe90e8..50c417f5f015c01d4654b7a66f7252d306d2bf65 100644 (file)
@@ -25,7 +25,7 @@ DEF_TEST(SkRasterPipeline, r) {
     p.append(SkRasterPipeline::load_f16_d, &load_d_ctx);
     p.append(SkRasterPipeline::srcover);
     p.append(SkRasterPipeline::store_f16, &store_ctx);
-    p.compile()(0,0, 1);
+    p.run(0,0, 1);
 
     // We should see half-intensity magenta.
     REPORTER_ASSERT(r, ((result >>  0) & 0xffff) == 0x3800);
@@ -37,7 +37,7 @@ DEF_TEST(SkRasterPipeline, r) {
 DEF_TEST(SkRasterPipeline_empty, r) {
     // No asserts... just a test that this is safe to run.
     SkRasterPipeline p;
-    p.compile()(0,0, 20);
+    p.run(0,0, 20);
 }
 
 DEF_TEST(SkRasterPipeline_nonsense, r) {
@@ -45,5 +45,5 @@ DEF_TEST(SkRasterPipeline_nonsense, r) {
     // srcover() calls st->next(); this makes sure we've always got something there to call.
     SkRasterPipeline p;
     p.append(SkRasterPipeline::srcover);
-    p.compile()(0,0, 20);
+    p.run(0,0, 20);
 }