diff --git a/include/effects/SkRuntimeEffect.h b/include/effects/SkRuntimeEffect.h
index 9ae7374..3df8173 100644
--- a/include/effects/SkRuntimeEffect.h
+++ b/include/effects/SkRuntimeEffect.h
@@ -153,8 +153,7 @@
 
 #if SK_SUPPORT_GPU
     // For internal use.
-    std::unique_ptr<GrFragmentProcessor> makeFP(GrRecordingContext*,
-                                                sk_sp<SkData> uniforms,
+    std::unique_ptr<GrFragmentProcessor> makeFP(sk_sp<SkData> uniforms,
                                                 std::unique_ptr<GrFragmentProcessor> children[],
                                                 size_t childCount) const;
 #endif
diff --git a/src/core/SkRuntimeEffect.cpp b/src/core/SkRuntimeEffect.cpp
index 3f5c2ec..ef22722 100644
--- a/src/core/SkRuntimeEffect.cpp
+++ b/src/core/SkRuntimeEffect.cpp
@@ -517,7 +517,7 @@
             return GrFPFailure(nullptr);
         }
 
-        auto fp = GrSkSLFP::Make(context, fEffect, "Runtime_Color_Filter", std::move(uniforms));
+        auto fp = GrSkSLFP::Make(fEffect, "Runtime_Color_Filter", std::move(uniforms));
         for (const auto& child : fChildren) {
             std::unique_ptr<GrFragmentProcessor> childFP;
             if (child) {
@@ -687,7 +687,7 @@
             return nullptr;
         }
 
-        auto fp = GrSkSLFP::Make(args.fContext, fEffect, "runtime_shader", std::move(uniforms));
+        auto fp = GrSkSLFP::Make(fEffect, "runtime_shader", std::move(uniforms));
         for (const auto& child : fChildren) {
             auto childFP = child ? as_SB(child)->asFragmentProcessor(args) : nullptr;
             fp->addChild(std::move(childFP));
@@ -837,14 +837,13 @@
 
 #if SK_SUPPORT_GPU
 std::unique_ptr<GrFragmentProcessor> SkRuntimeEffect::makeFP(
-        GrRecordingContext* recordingContext,
         sk_sp<SkData> uniforms,
         std::unique_ptr<GrFragmentProcessor> children[],
         size_t childCount) const {
     if (!uniforms) {
         uniforms = SkData::MakeEmpty();
     }
-    auto fp = GrSkSLFP::Make(recordingContext, sk_ref_sp(this), "make_fp", std::move(uniforms));
+    auto fp = GrSkSLFP::Make(sk_ref_sp(this), "make_fp", std::move(uniforms));
     for (size_t i = 0; i < childCount; ++i) {
         fp->addChild(std::move(children[i]));
     }
@@ -895,8 +894,7 @@
             return nullptr;
         }
 
-        auto fp = GrSkSLFP::Make(recordingContext,
-                                 sk_ref_sp(this),
+        auto fp = GrSkSLFP::Make(sk_ref_sp(this),
                                  "runtime_image",
                                  std::move(uniforms));
         GrColorInfo colorInfo(resultInfo.colorInfo());
diff --git a/src/gpu/effects/GrSkSLFP.cpp b/src/gpu/effects/GrSkSLFP.cpp
index 1cd90a0..dd8f7c9 100644
--- a/src/gpu/effects/GrSkSLFP.cpp
+++ b/src/gpu/effects/GrSkSLFP.cpp
@@ -161,23 +161,21 @@
     std::vector<UniformHandle> fUniformHandles;
 };
 
-std::unique_ptr<GrSkSLFP> GrSkSLFP::Make(GrContext_Base* context, sk_sp<SkRuntimeEffect> effect,
-                                         const char* name, sk_sp<SkData> uniforms) {
+std::unique_ptr<GrSkSLFP> GrSkSLFP::Make(sk_sp<SkRuntimeEffect> effect,
+                                         const char* name,
+                                         sk_sp<SkData> uniforms) {
     if (uniforms->size() != effect->uniformSize()) {
         return nullptr;
     }
-    return std::unique_ptr<GrSkSLFP>(new GrSkSLFP(context->priv().getShaderErrorHandler(),
-                                                  std::move(effect), name, std::move(uniforms)));
+    return std::unique_ptr<GrSkSLFP>(new GrSkSLFP(std::move(effect), name, std::move(uniforms)));
 }
 
-GrSkSLFP::GrSkSLFP(ShaderErrorHandler* shaderErrorHandler,
-                   sk_sp<SkRuntimeEffect> effect,
+GrSkSLFP::GrSkSLFP(sk_sp<SkRuntimeEffect> effect,
                    const char* name,
                    sk_sp<SkData> uniforms)
         : INHERITED(kGrSkSLFP_ClassID,
                     effect->fAllowColorFilter ? kConstantOutputForConstantInput_OptimizationFlag
                                               : kNone_OptimizationFlags)
-        , fShaderErrorHandler(shaderErrorHandler)
         , fEffect(std::move(effect))
         , fName(name)
         , fUniforms(std::move(uniforms)) {
@@ -188,7 +186,6 @@
 
 GrSkSLFP::GrSkSLFP(const GrSkSLFP& other)
         : INHERITED(kGrSkSLFP_ClassID, other.optimizationFlags())
-        , fShaderErrorHandler(other.fShaderErrorHandler)
         , fEffect(other.fEffect)
         , fName(other.fName)
         , fUniforms(other.fUniforms) {
@@ -278,10 +275,8 @@
 
 GrRuntimeFPBuilder::~GrRuntimeFPBuilder() = default;
 
-std::unique_ptr<GrFragmentProcessor> GrRuntimeFPBuilder::makeFP(
-        GrRecordingContext* recordingContext) {
-    return this->effect()->makeFP(recordingContext,
-                                  this->uniforms(),
+std::unique_ptr<GrFragmentProcessor> GrRuntimeFPBuilder::makeFP() {
+    return this->effect()->makeFP(this->uniforms(),
                                   this->children(),
                                   this->numChildren());
 }
diff --git a/src/gpu/effects/GrSkSLFP.h b/src/gpu/effects/GrSkSLFP.h
index a1b0bba..e24d738 100644
--- a/src/gpu/effects/GrSkSLFP.h
+++ b/src/gpu/effects/GrSkSLFP.h
@@ -14,7 +14,6 @@
 #include "src/gpu/GrFragmentProcessor.h"
 #include <atomic>
 
-class GrContext_Base;
 class GrShaderCaps;
 class SkData;
 class SkRuntimeEffect;
@@ -26,8 +25,7 @@
      * for all of the 'uniform' variables in the SkSL source. The layout of the uniforms blob is
      * dictated by the SkRuntimeEffect.
      */
-    static std::unique_ptr<GrSkSLFP> Make(GrContext_Base* context,
-                                          sk_sp<SkRuntimeEffect> effect,
+    static std::unique_ptr<GrSkSLFP> Make(sk_sp<SkRuntimeEffect> effect,
                                           const char* name,
                                           sk_sp<SkData> uniforms);
 
@@ -38,10 +36,7 @@
     std::unique_ptr<GrFragmentProcessor> clone() const override;
 
 private:
-    using ShaderErrorHandler = GrContextOptions::ShaderErrorHandler;
-
-    GrSkSLFP(ShaderErrorHandler* shaderErrorHandler, sk_sp<SkRuntimeEffect> effect,
-             const char* name, sk_sp<SkData> uniforms);
+    GrSkSLFP(sk_sp<SkRuntimeEffect> effect, const char* name, sk_sp<SkData> uniforms);
 
     GrSkSLFP(const GrSkSLFP& other);
 
@@ -53,8 +48,6 @@
 
     SkPMColor4f constantOutputForConstantInput(const SkPMColor4f&) const override;
 
-    ShaderErrorHandler*       fShaderErrorHandler;
-
     sk_sp<SkRuntimeEffect> fEffect;
     const char*            fName;
     sk_sp<SkData>          fUniforms;
@@ -82,7 +75,7 @@
         return GrRuntimeFPBuilder(gResult.effect);
     }
 
-    std::unique_ptr<GrFragmentProcessor> makeFP(GrRecordingContext*);
+    std::unique_ptr<GrFragmentProcessor> makeFP();
 
 private:
     explicit GrRuntimeFPBuilder(sk_sp<SkRuntimeEffect>);
diff --git a/src/shaders/SkComposeShader.cpp b/src/shaders/SkComposeShader.cpp
index 0bc012d..a2ed52f 100644
--- a/src/shaders/SkComposeShader.cpp
+++ b/src/shaders/SkComposeShader.cpp
@@ -234,6 +234,6 @@
     builder.uniform("w") = fWeight;
     builder.child("a") = std::move(fpA);
     builder.child("b") = std::move(fpB);
-    return builder.makeFP(args.fContext);
+    return builder.makeFP();
 }
 #endif
