SkRasterPipeline: simplify impl and remove need to rewire stages
This builds the stages correctly wired from the get-go. With a little clever
setup, we can also design around the previous error cases like having no stages
or pipelines that call st->next() off the end.
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2149443002
Review-Url: https://codereview.chromium.org/2149443002
diff --git a/src/core/SkRasterPipeline.h b/src/core/SkRasterPipeline.h
index 8ae7bb1..186ee65 100644
--- a/src/core/SkRasterPipeline.h
+++ b/src/core/SkRasterPipeline.h
@@ -96,9 +96,16 @@
private:
using Stages = SkSTArray<10, Stage, /*MEM_COPY=*/true>;
+ // This no-op default makes fBodyStart and fTailStart unconditionally safe to call,
+ // and is always the last stage's fNext as a sort of safety net to make sure even a
+ // buggy pipeline can't walk off its own end.
+ static void SK_VECTORCALL JustReturn(Stage*, size_t, Sk4f,Sk4f,Sk4f,Sk4f,
+ Sk4f,Sk4f,Sk4f,Sk4f);
+
Stages fBody,
fTail;
- bool fReadyToRun = false;
+ Fn fBodyStart = &JustReturn,
+ fTailStart = &JustReturn;
};
#endif//SkRasterPipeline_DEFINED