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: