Convert several effects to use color space xform FP

Starting with oddball image filters, etc: Arithmetic, Displacement,
Magnifier, Xfermode.

Bug: skia:
Change-Id: Iacf14be1c936eef2ac0c5e3ba08f228e3a45c177
Reviewed-on: https://skia-review.googlesource.com/61281
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
diff --git a/src/effects/SkDisplacementMapEffect.cpp b/src/effects/SkDisplacementMapEffect.cpp
index 67db24e..b97a0c2 100644
--- a/src/effects/SkDisplacementMapEffect.cpp
+++ b/src/effects/SkDisplacementMapEffect.cpp
@@ -23,7 +23,6 @@
 #include "GrTextureProxy.h"
 #include "SkGr.h"
 #include "effects/GrTextureDomain.h"
-#include "glsl/GrGLSLColorSpaceXformHelper.h"
 #include "glsl/GrGLSLFragmentProcessor.h"
 #include "glsl/GrGLSLFragmentShaderBuilder.h"
 #include "glsl/GrGLSLProgramDataManager.h"
@@ -168,11 +167,10 @@
             SkDisplacementMapEffect::ChannelSelectorType xChannelSelector,
             SkDisplacementMapEffect::ChannelSelectorType yChannelSelector, SkVector scale,
             sk_sp<GrTextureProxy> displacement, const SkMatrix& offsetMatrix,
-            sk_sp<GrTextureProxy> color, sk_sp<GrColorSpaceXform> colorSpaceXform,
-            const SkISize& colorDimensions) {
+            sk_sp<GrTextureProxy> color, const SkISize& colorDimensions) {
         return std::unique_ptr<GrFragmentProcessor>(new GrDisplacementMapEffect(
                 xChannelSelector, yChannelSelector, scale, std::move(displacement), offsetMatrix,
-                std::move(color), std::move(colorSpaceXform), colorDimensions));
+                std::move(color), colorDimensions));
     }
 
     ~GrDisplacementMapEffect() override;
@@ -187,7 +185,6 @@
 
     const char* name() const override { return "DisplacementMap"; }
     const GrTextureDomain& domain() const { return fDomain; }
-    GrColorSpaceXform* colorSpaceXform() const { return fColorSpaceXform.get(); }
 
     std::unique_ptr<GrFragmentProcessor> clone() const override;
 
@@ -206,8 +203,7 @@
                             SkDisplacementMapEffect::ChannelSelectorType yChannelSelector,
                             const SkVector& scale,
                             sk_sp<GrTextureProxy> displacement, const SkMatrix& offsetMatrix,
-                            sk_sp<GrTextureProxy> color, sk_sp<GrColorSpaceXform> colorSpaceXform,
-                            const SkISize& colorDimensions);
+                            sk_sp<GrTextureProxy> color, const SkISize& colorDimensions);
 
     GR_DECLARE_FRAGMENT_PROCESSOR_TEST
 
@@ -216,7 +212,6 @@
     GrCoordTransform            fColorTransform;
     GrTextureDomain             fDomain;
     TextureSampler              fColorSampler;
-    sk_sp<GrColorSpaceXform>    fColorSpaceXform;
     SkDisplacementMapEffect::ChannelSelectorType fXChannelSelector;
     SkDisplacementMapEffect::ChannelSelectorType fYChannelSelector;
     SkVector fScale;
@@ -289,18 +284,19 @@
         SkMatrix offsetMatrix = SkMatrix::MakeTrans(SkIntToScalar(colorOffset.fX - displOffset.fX),
                                                     SkIntToScalar(colorOffset.fY - displOffset.fY));
         SkColorSpace* colorSpace = ctx.outputProperties().colorSpace();
-        sk_sp<GrColorSpaceXform> colorSpaceXform = GrColorSpaceXform::Make(color->getColorSpace(),
-                                                                           colorSpace);
+
+        std::unique_ptr<GrFragmentProcessor> fp =
+                GrDisplacementMapEffect::Make(fXChannelSelector,
+                                              fYChannelSelector,
+                                              scale,
+                                              std::move(displProxy),
+                                              offsetMatrix,
+                                              std::move(colorProxy),
+                                              SkISize::Make(color->width(), color->height()));
+        fp = GrColorSpaceXformEffect::Make(std::move(fp), color->getColorSpace(), colorSpace);
+
         GrPaint paint;
-        paint.addColorFragmentProcessor(
-            GrDisplacementMapEffect::Make(fXChannelSelector,
-                                          fYChannelSelector,
-                                          scale,
-                                          std::move(displProxy),
-                                          offsetMatrix,
-                                          std::move(colorProxy),
-                                          std::move(colorSpaceXform),
-                                          SkISize::Make(color->width(), color->height())));
+        paint.addColorFragmentProcessor(std::move(fp));
         paint.setPorterDuffXPFactory(SkBlendMode::kSrc);
         SkMatrix matrix;
         matrix.setTranslate(-SkIntToScalar(colorBounds.x()), -SkIntToScalar(colorBounds.y()));
@@ -431,7 +427,6 @@
     typedef GrGLSLProgramDataManager::UniformHandle UniformHandle;
 
     UniformHandle fScaleUni;
-    GrGLSLColorSpaceXformHelper fColorSpaceHelper;
     GrTextureDomain::GLDomain fGLDomain;
 
     typedef GrGLSLFragmentProcessor INHERITED;
@@ -462,7 +457,6 @@
         sk_sp<GrTextureProxy> displacement,
         const SkMatrix& offsetMatrix,
         sk_sp<GrTextureProxy> color,
-        sk_sp<GrColorSpaceXform> colorSpaceXform,
         const SkISize& colorDimensions)
         : INHERITED(kGrDisplacementMapEffect_ClassID, OptimizationFlags(color->config()))
         , fDisplacementTransform(offsetMatrix, displacement.get())
@@ -471,7 +465,6 @@
         , fDomain(color.get(), GrTextureDomain::MakeTexelDomain(SkIRect::MakeSize(colorDimensions)),
                   GrTextureDomain::kDecal_Mode)
         , fColorSampler(color)
-        , fColorSpaceXform(std::move(colorSpaceXform))
         , fXChannelSelector(xChannelSelector)
         , fYChannelSelector(yChannelSelector)
         , fScale(scale) {
@@ -489,7 +482,6 @@
         , fColorTransform(that.fColorTransform)
         , fDomain(that.fDomain)
         , fColorSampler(that.fColorSampler)
-        , fColorSpaceXform(that.fColorSpaceXform)
         , fXChannelSelector(that.fXChannelSelector)
         , fYChannelSelector(that.fYChannelSelector)
         , fScale(that.fScale) {
@@ -536,11 +528,9 @@
     SkISize colorDimensions;
     colorDimensions.fWidth = d->fRandom->nextRangeU(0, colorProxy->width());
     colorDimensions.fHeight = d->fRandom->nextRangeU(0, colorProxy->height());
-    auto colorSpaceXform = GrTest::TestColorXform(d->fRandom);
     return GrDisplacementMapEffect::Make(xChannelSelector, yChannelSelector, scale,
                                          std::move(dispProxy), SkMatrix::I(),
-                                         std::move(colorProxy), colorSpaceXform,
-                                         colorDimensions);
+                                         std::move(colorProxy), colorDimensions);
 }
 
 #endif
@@ -559,8 +549,6 @@
                                    // a number smaller than that to approximate 0, but
                                    // leave room for 32-bit float GPU rounding errors.
 
-    fColorSpaceHelper.emitCode(args.fUniformHandler, displacementMap.colorSpaceXform());
-
     GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder;
     fragBuilder->codeAppendf("\t\thalf4 %s = ", dColor);
     fragBuilder->appendTextureLookup(args.fTexSamplers[0], args.fTransformedCoords[0].c_str(),
@@ -618,9 +606,7 @@
                             domain,
                             args.fOutputColor,
                             SkString(cCoords),
-                            args.fTexSamplers[1],
-                            nullptr,
-                            &fColorSpaceHelper);
+                            args.fTexSamplers[1]);
     fragBuilder->codeAppend(";\n");
 }
 
@@ -636,9 +622,6 @@
                 proxy->origin() == kTopLeft_GrSurfaceOrigin ?
                 SkScalarToFloat(scaleY) : SkScalarToFloat(-scaleY));
     fGLDomain.setData(pdman, displacementMap.domain(), proxy);
-    if (SkToBool(displacementMap.colorSpaceXform())) {
-        fColorSpaceHelper.setData(pdman, displacementMap.colorSpaceXform());
-    }
 }
 
 void GrGLDisplacementMapEffect::GenKey(const GrProcessor& proc,
@@ -649,6 +632,5 @@
     uint32_t yKey = displacementMap.yChannelSelector() << kChannelSelectorKeyBits;
 
     b->add32(xKey | yKey);
-    b->add32(GrColorSpaceXform::XformKey(displacementMap.colorSpaceXform()));
 }
 #endif