Re-re-land sksl fragment processor support

This reverts commit 5ce397205528f82084fc650c2ce27d246c01da33.

Bug: skia:
Change-Id: I88260c90004610a1cf8ad1a87c2b4b222525bbb6
Reviewed-on: https://skia-review.googlesource.com/21108
Reviewed-by: Ben Wagner <benjaminwagner@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
diff --git a/src/gpu/effects/GrDitherEffect.cpp b/src/gpu/effects/GrDitherEffect.cpp
index 0686750..de04c8c 100644
--- a/src/gpu/effects/GrDitherEffect.cpp
+++ b/src/gpu/effects/GrDitherEffect.cpp
@@ -1,91 +1,48 @@
 /*
- * Copyright 2014 Google Inc.
+ * Copyright 2017 Google Inc.
  *
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
 
+/*
+ * This file was autogenerated from GrDitherEffect.fp; do not modify.
+ */
 #include "GrDitherEffect.h"
-#include "GrFragmentProcessor.h"
-#include "SkRect.h"
+#include "glsl/GrGLSLColorSpaceXformHelper.h"
 #include "glsl/GrGLSLFragmentProcessor.h"
 #include "glsl/GrGLSLFragmentShaderBuilder.h"
-#include "../private/GrGLSL.h"
-
-//////////////////////////////////////////////////////////////////////////////
-
-class DitherEffect : public GrFragmentProcessor {
+#include "glsl/GrGLSLProgramBuilder.h"
+#include "GrResourceProvider.h"
+#include "SkSLCPP.h"
+#include "SkSLUtil.h"
+class GrGLSLDitherEffect : public GrGLSLFragmentProcessor {
 public:
-    static sk_sp<GrFragmentProcessor> Make() {
-        return sk_sp<GrFragmentProcessor>(new DitherEffect);
+    GrGLSLDitherEffect() {}
+    void emitCode(EmitArgs& args) override {
+        GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder;
+        const GrDitherEffect& _outer = args.fFp.cast<GrDitherEffect>();
+        (void) _outer;
+        fragBuilder->codeAppendf("float r = fract(sin(dot(sk_FragCoord.xy, vec2(12.989800000000001, 78.233000000000004))) * 43758.545299999998);\n%s = clamp(0.0039215686274509803 * vec4(r) + %s, 0.0, 1.0);\n", args.fOutputColor, args.fInputColor ? args.fInputColor : "vec4(1)");
     }
-
-    ~DitherEffect() override {}
-
-    const char* name() const override { return "Dither"; }
-
 private:
-    DitherEffect() : INHERITED(kNone_OptimizationFlags) { this->initClassID<DitherEffect>(); }
-
-    GrGLSLFragmentProcessor* onCreateGLSLInstance() const override;
-
-    void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override;
-
-    // All dither effects are equal
-    bool onIsEqual(const GrFragmentProcessor&) const override { return true; }
-
-    GR_DECLARE_FRAGMENT_PROCESSOR_TEST;
-
-    typedef GrFragmentProcessor INHERITED;
+    void onSetData(const GrGLSLProgramDataManager& pdman, const GrFragmentProcessor& _proc) override {
+    }
 };
-
-//////////////////////////////////////////////////////////////////////////////
-
-GR_DEFINE_FRAGMENT_PROCESSOR_TEST(DitherEffect);
-
+GrGLSLFragmentProcessor* GrDitherEffect::onCreateGLSLInstance() const {
+    return new GrGLSLDitherEffect();
+}
+void GrDitherEffect::onGetGLSLProcessorKey(const GrShaderCaps& caps, GrProcessorKeyBuilder* b) const {
+}
+bool GrDitherEffect::onIsEqual(const GrFragmentProcessor& other) const {
+    const GrDitherEffect& that = other.cast<GrDitherEffect>();
+    (void) that;
+    return true;
+}
+GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrDitherEffect);
 #if GR_TEST_UTILS
-sk_sp<GrFragmentProcessor> DitherEffect::TestCreate(GrProcessorTestData*) {
-    return DitherEffect::Make();
+sk_sp<GrFragmentProcessor> GrDitherEffect::TestCreate(GrProcessorTestData* testData) {
+
+    return GrDitherEffect::Make();
 }
 #endif
-
-//////////////////////////////////////////////////////////////////////////////
-
-class GLDitherEffect : public GrGLSLFragmentProcessor {
-public:
-    void emitCode(EmitArgs& args) override;
-
-private:
-    typedef GrGLSLFragmentProcessor INHERITED;
-};
-
-void GLDitherEffect::emitCode(EmitArgs& args) {
-    GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder;
-    // Generate a random number based on the fragment position. For this
-    // random number generator, we use the "GLSL rand" function
-    // that seems to be floating around on the internet. It works under
-    // the assumption that sin(<big number>) oscillates with high frequency
-    // and sampling it will generate "randomness". Since we're using this
-    // for rendering and not cryptography it should be OK.
-
-    // For each channel c, add the random offset to the pixel to either bump
-    // it up or let it remain constant during quantization.
-    fragBuilder->codeAppendf("\t\tfloat r = "
-                             "fract(sin(dot(sk_FragCoord.xy, vec2(12.9898,78.233))) * "
-                                                            "43758.5453);\n");
-    fragBuilder->codeAppendf("\t\t%s = clamp((1.0/255.0) * vec4(r, r, r, r) + %s, 0, 1);\n",
-                             args.fOutputColor, args.fInputColor);
-}
-
-//////////////////////////////////////////////////////////////////////////////
-
-void DitherEffect::onGetGLSLProcessorKey(const GrShaderCaps& caps,
-                                         GrProcessorKeyBuilder* b) const {
-    GLDitherEffect::GenKey(*this, caps, b);
-}
-
-GrGLSLFragmentProcessor* DitherEffect::onCreateGLSLInstance() const  {
-    return new GLDitherEffect;
-}
-
-sk_sp<GrFragmentProcessor> GrDitherEffect::Make() { return DitherEffect::Make(); }