split apart uniformPremul()
It's doing two or three separate things, and I think it's clearer to do
the color conversions and premul up front, leaving just uniformColor().
Change-Id: I65a2f5eac86129924bf30f00a879ae01a1e737a5
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/319764
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
diff --git a/src/core/SkModeColorFilter.cpp b/src/core/SkModeColorFilter.cpp
index 79ffeda..02f9c47 100644
--- a/src/core/SkModeColorFilter.cpp
+++ b/src/core/SkModeColorFilter.cpp
@@ -75,9 +75,11 @@
skvm::Color SkModeColorFilter::onProgram(skvm::Builder* p, skvm::Color c,
SkColorSpace* dstCS,
skvm::Uniforms* uniforms, SkArenaAlloc*) const {
+ SkColor4f color = SkColor4f::FromColor(fColor);
+ SkColorSpaceXformSteps(sk_srgb_singleton(), kUnpremul_SkAlphaType,
+ dstCS, kPremul_SkAlphaType).apply(color.vec());
skvm::Color dst = c,
- src = p->uniformPremul(SkColor4f::FromColor(fColor), sk_srgb_singleton(),
- uniforms, dstCS);
+ src = p->uniformColor(color, uniforms);
return p->blend(fMode, src,dst);
}
diff --git a/src/core/SkVM.cpp b/src/core/SkVM.cpp
index 28ecec1..a602b20 100644
--- a/src/core/SkVM.cpp
+++ b/src/core/SkVM.cpp
@@ -1473,15 +1473,13 @@
*b *= a;
}
- Color Builder::uniformPremul(SkColor4f color, SkColorSpace* src,
- Uniforms* uniforms, SkColorSpace* dst) {
- SkColorSpaceXformSteps(src, kUnpremul_SkAlphaType,
- dst, kPremul_SkAlphaType).apply(color.vec());
+ Color Builder::uniformColor(SkColor4f color, Uniforms* uniforms) {
+ auto [r,g,b,a] = color;
return {
- uniformF(uniforms->pushF(color.fR)),
- uniformF(uniforms->pushF(color.fG)),
- uniformF(uniforms->pushF(color.fB)),
- uniformF(uniforms->pushF(color.fA)),
+ uniformF(uniforms->pushF(r)),
+ uniformF(uniforms->pushF(g)),
+ uniformF(uniforms->pushF(b)),
+ uniformF(uniforms->pushF(a)),
};
}
diff --git a/src/core/SkVM.h b/src/core/SkVM.h
index b036462..ad53d46 100644
--- a/src/core/SkVM.h
+++ b/src/core/SkVM.h
@@ -646,9 +646,8 @@
I32 uniform32(Arg ptr, int offset);
F32 uniformF (Arg ptr, int offset) { return this->bit_cast(this->uniform32(ptr,offset)); }
- // Load this color as a uniform, premultiplied and converted to dst SkColorSpace.
- Color uniformPremul(SkColor4f, SkColorSpace* src,
- Uniforms*, SkColorSpace* dst);
+ // Push and load this color as a uniform.
+ Color uniformColor(SkColor4f, Uniforms*);
// Gather u8,u16,i32 with varying element-count index from *(ptr + byte-count offset).
I32 gather8 (Arg ptr, int offset, I32 index);
diff --git a/src/shaders/SkColorShader.cpp b/src/shaders/SkColorShader.cpp
index 169f9b8..53c0d43 100644
--- a/src/shaders/SkColorShader.cpp
+++ b/src/shaders/SkColorShader.cpp
@@ -97,8 +97,10 @@
const SkMatrixProvider&, const SkMatrix* /*localM*/,
SkFilterQuality /*quality*/, const SkColorInfo& dst,
skvm::Uniforms* uniforms, SkArenaAlloc*) const {
- return p->uniformPremul(SkColor4f::FromColor(fColor), sk_srgb_singleton(),
- uniforms, dst.colorSpace());
+ SkColor4f color = SkColor4f::FromColor(fColor);
+ SkColorSpaceXformSteps(sk_srgb_singleton(), kUnpremul_SkAlphaType,
+ dst.colorSpace(), kPremul_SkAlphaType).apply(color.vec());
+ return p->uniformColor(color, uniforms);
}
skvm::Color SkColor4Shader::onProgram(skvm::Builder* p,
skvm::Coord /*device*/, skvm::Coord /*local*/,
@@ -106,8 +108,10 @@
const SkMatrixProvider&, const SkMatrix* /*localM*/,
SkFilterQuality /*quality*/, const SkColorInfo& dst,
skvm::Uniforms* uniforms, SkArenaAlloc*) const {
- return p->uniformPremul(fColor, fColorSpace.get(),
- uniforms, dst.colorSpace());
+ SkColor4f color = fColor;
+ SkColorSpaceXformSteps(fColorSpace.get(), kUnpremul_SkAlphaType,
+ dst.colorSpace(), kPremul_SkAlphaType).apply(color.vec());
+ return p->uniformColor(color, uniforms);
}
#if SK_SUPPORT_GPU