emptyshader should fail onProgram

Change-Id: I285d3cc3ef66dc10d2bcabea15a38958075d24b8
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/279257
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Reed <reed@google.com>
diff --git a/src/shaders/SkEmptyShader.h b/src/shaders/SkEmptyShader.h
index 439082b..edd1e27 100644
--- a/src/shaders/SkEmptyShader.h
+++ b/src/shaders/SkEmptyShader.h
@@ -37,6 +37,10 @@
         return false;
     }
 
+    skvm::Color onProgram(skvm::Builder*, skvm::F32, skvm::F32, skvm::Color, const SkMatrix&,
+                          const SkMatrix*, SkFilterQuality, const SkColorInfo&, skvm::Uniforms*,
+                          SkArenaAlloc*) const override;
+
 private:
     SK_FLATTENABLE_HOOKS(SkEmptyShader)
 
diff --git a/src/shaders/SkShader.cpp b/src/shaders/SkShader.cpp
index a7c2003..d69dabd 100644
--- a/src/shaders/SkShader.cpp
+++ b/src/shaders/SkShader.cpp
@@ -259,6 +259,12 @@
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
+skvm::Color SkEmptyShader::onProgram(skvm::Builder*, skvm::F32, skvm::F32, skvm::Color,
+                                     const SkMatrix&, const SkMatrix*, SkFilterQuality,
+                                     const SkColorInfo&, skvm::Uniforms*, SkArenaAlloc*) const {
+    return {};  // signal failure
+}
+
 sk_sp<SkFlattenable> SkEmptyShader::CreateProc(SkReadBuffer&) {
     return SkShaders::Empty();
 }