Update VisualizeCoverageCountFP to accept an input FP.

This FP is used for debugging coverage in Viewer.

Change-Id: I2c49ab48457ac64f562d8b0ee6b09ab647f06d56
Bug: skia:10217
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/304736
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
diff --git a/samplecode/SampleCCPRGeometry.cpp b/samplecode/SampleCCPRGeometry.cpp
index 551cf92..d87c6a9 100644
--- a/samplecode/SampleCCPRGeometry.cpp
+++ b/samplecode/SampleCCPRGeometry.cpp
@@ -115,14 +115,25 @@
 
 class CCPRGeometryView::VisualizeCoverageCountFP : public GrFragmentProcessor {
 public:
-    VisualizeCoverageCountFP() : GrFragmentProcessor(kTestFP_ClassID, kNone_OptimizationFlags) {}
+    static std::unique_ptr<GrFragmentProcessor> Make(std::unique_ptr<GrFragmentProcessor> inputFP) {
+        return std::unique_ptr<GrFragmentProcessor>(
+                new VisualizeCoverageCountFP(std::move(inputFP)));
+    }
 
 private:
     const char* name() const override {
-        return "[Testing/Sample code] CCPRGeometryView::VisualizeCoverageCountFP";
+        return "VisualizeCoverageCountFP";
     }
     std::unique_ptr<GrFragmentProcessor> clone() const override {
-        return std::make_unique<VisualizeCoverageCountFP>();
+        return std::unique_ptr<GrFragmentProcessor>(new VisualizeCoverageCountFP(*this));
+    }
+    VisualizeCoverageCountFP(std::unique_ptr<GrFragmentProcessor> inputFP)
+            : GrFragmentProcessor(kTestFP_ClassID, kNone_OptimizationFlags) {
+        this->registerChild(std::move(inputFP));
+    }
+    VisualizeCoverageCountFP(const VisualizeCoverageCountFP& that)
+            : GrFragmentProcessor(kTestFP_ClassID, kNone_OptimizationFlags) {
+        this->cloneAndRegisterAllChildProcessors(that);
     }
     void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override {}
     bool onIsEqual(const GrFragmentProcessor&) const override { return true; }
@@ -130,7 +141,9 @@
     class Impl : public GrGLSLFragmentProcessor {
         void emitCode(EmitArgs& args) override {
             GrGLSLFPFragmentBuilder* f = args.fFragBuilder;
-            f->codeAppendf("half count = %s.a;", args.fInputColor);
+            static constexpr int kInputFPIndex = 0;
+            SkString inputColor = this->invokeChild(kInputFPIndex, args);
+            f->codeAppendf("half count = %s.a;", inputColor.c_str());
             f->codeAppendf("%s = half4(clamp(-count, 0, 1), clamp(+count, 0, 1), 0, abs(count));",
                            args.fOutputColor);
         }
@@ -204,10 +217,8 @@
 
         // Visualize coverage count in main canvas.
         GrPaint paint;
-        paint.addColorFragmentProcessor(
-                GrTextureEffect::Make(ccbuff->readSurfaceView(), ccbuff->colorInfo().alphaType()));
-        paint.addColorFragmentProcessor(
-                std::make_unique<VisualizeCoverageCountFP>());
+        paint.addColorFragmentProcessor(VisualizeCoverageCountFP::Make(
+                GrTextureEffect::Make(ccbuff->readSurfaceView(), ccbuff->colorInfo().alphaType())));
         paint.setPorterDuffXPFactory(SkBlendMode::kSrcOver);
         rtc->drawRect(nullptr, std::move(paint), GrAA::kNo, SkMatrix::I(),
                       SkRect::MakeIWH(this->width(), this->height()));