pass paint color and full dst info to shaders

  - SkImageShader and SkRuntimeEffect will need the paint color
  - SkPictureShader will want the dst color type

Most of the interesting changes are in SkVMBlitter.cpp.

Incidentally factors Builder::uniformPremul() out of SkColorShader.
I thought I'd use it in SkVMBlitter, but ended up not using it.

For now I pass the real SkAlphaType to shaders, not a masked version.
Probably harmless, maybe useful... let's find out.

No diffs.

Change-Id: I49c2639f6a8d2d6a45eaceed9d8c33dbc0d9a538
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/278484
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
diff --git a/src/shaders/SkLocalMatrixShader.cpp b/src/shaders/SkLocalMatrixShader.cpp
index eb8387c..59d9804 100644
--- a/src/shaders/SkLocalMatrixShader.cpp
+++ b/src/shaders/SkLocalMatrixShader.cpp
@@ -75,15 +75,16 @@
 }
 
 
-skvm::Color SkLocalMatrixShader::onProgram(skvm::Builder* p, skvm::F32 x, skvm::F32 y,
+skvm::Color SkLocalMatrixShader::onProgram(skvm::Builder* p,
+                                           skvm::F32 x, skvm::F32 y, skvm::Color paint,
                                            const SkMatrix& ctm, const SkMatrix* localM,
-                                           SkFilterQuality quality, SkColorSpace* dstCS,
+                                           SkFilterQuality quality, const SkColorInfo& dst,
                                            skvm::Uniforms* uniforms, SkArenaAlloc* alloc) const {
     SkTCopyOnFirstWrite<SkMatrix> lm(this->getLocalMatrix());
     if (localM) {
         lm.writable()->preConcat(*localM);
     }
-    return as_SB(fProxyShader)->program(p, x,y, ctm,lm.get(), quality,dstCS, uniforms,alloc);
+    return as_SB(fProxyShader)->program(p, x,y, paint, ctm,lm.get(), quality,dst, uniforms,alloc);
 }
 
 sk_sp<SkShader> SkShader::makeWithLocalMatrix(const SkMatrix& localMatrix) const {
@@ -149,11 +150,11 @@
         return as_SB(fProxyShader)->appendStages(newRec);
     }
 
-    skvm::Color onProgram(skvm::Builder* p, skvm::F32 x, skvm::F32 y,
+    skvm::Color onProgram(skvm::Builder* p, skvm::F32 x, skvm::F32 y, skvm::Color paint,
                           const SkMatrix& ctm, const SkMatrix* localM,
-                          SkFilterQuality quality, SkColorSpace* dstCS,
+                          SkFilterQuality quality, const SkColorInfo& dst,
                           skvm::Uniforms* uniforms, SkArenaAlloc* alloc) const override {
-        return as_SB(fProxyShader)->program(p, x,y, fCTM,localM, quality,dstCS, uniforms,alloc);
+        return as_SB(fProxyShader)->program(p, x,y,paint, fCTM,localM, quality,dst, uniforms,alloc);
     }
 
 private: