Revert "Plumb the full dst color info through color filters in SkVM"
This reverts commit 61c7888dfad8c1b9ddc127ac932d3d0199b2c10a.
Reason for revert: Unexpected gm diffs
Original change's description:
> Plumb the full dst color info through color filters in SkVM
>
> Used in https://skia-review.googlesource.com/c/skia/+/406296
> to evaluate shaders (as children of color filters) correctly.
>
> Change-Id: I2337b062da3fded9e61efe21c6cf74ef08a56753
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/416998
> Reviewed-by: Mike Reed <reed@google.com>
> Reviewed-by: Michael Ludwig <michaelludwig@google.com>
> Reviewed-by: Mike Klein <mtklein@google.com>
> Commit-Queue: Brian Osman <brianosman@google.com>
TBR=mtklein@google.com,brianosman@google.com,reed@google.com,michaelludwig@google.com
Change-Id: I234282de535017db64c46aba905e54f532596de9
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/417198
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
diff --git a/src/core/SkColorFilter.cpp b/src/core/SkColorFilter.cpp
index c76f42a..87f4f27 100644
--- a/src/core/SkColorFilter.cpp
+++ b/src/core/SkColorFilter.cpp
@@ -64,10 +64,10 @@
}
skvm::Color SkColorFilterBase::program(skvm::Builder* p, skvm::Color c,
- const SkColorInfo& dst,
+ SkColorSpace* dstCS,
skvm::Uniforms* uniforms, SkArenaAlloc* alloc) const {
skvm::F32 original = c.a;
- if ((c = this->onProgram(p,c, dst, uniforms,alloc))) {
+ if ((c = this->onProgram(p,c, dstCS, uniforms,alloc))) {
if (this->isAlphaUnchanged()) {
c.a = original;
}
@@ -116,9 +116,8 @@
skvm::Builder b;
skvm::Uniforms uni(b.uniform(), 4);
SkColor4f uniColor = {color.fR, color.fG, color.fB, color.fA};
- SkColorInfo dstInfo = {kRGBA_F32_SkColorType, kPremul_SkAlphaType, sk_ref_sp(dstCS)};
if (skvm::Color filtered =
- as_CFB(this)->program(&b, b.uniformColor(uniColor, &uni), dstInfo, &uni, &alloc)) {
+ as_CFB(this)->program(&b, b.uniformColor(uniColor, &uni), dstCS, &uni, &alloc)) {
b.store({skvm::PixelFormat::FLOAT, 32,32,32,32, 0,32,64,96},
b.varying<SkColor4f>(), filtered);
@@ -151,10 +150,10 @@
}
skvm::Color onProgram(skvm::Builder* p, skvm::Color c,
- const SkColorInfo& dst,
+ SkColorSpace* dstCS,
skvm::Uniforms* uniforms, SkArenaAlloc* alloc) const override {
- c = fInner->program(p, c, dst, uniforms, alloc);
- return c ? fOuter->program(p, c, dst, uniforms, alloc) : skvm::Color{};
+ c = fInner->program(p, c, dstCS, uniforms, alloc);
+ return c ? fOuter->program(p, c, dstCS, uniforms, alloc) : skvm::Color{};
}
#if SK_SUPPORT_GPU
@@ -272,7 +271,7 @@
return true;
}
- skvm::Color onProgram(skvm::Builder* p, skvm::Color c, const SkColorInfo& dst,
+ skvm::Color onProgram(skvm::Builder* p, skvm::Color c, SkColorSpace* dstCS,
skvm::Uniforms* uniforms, SkArenaAlloc* alloc) const override {
return premul(fSteps.program(p, uniforms, unpremul(c)));
}
@@ -365,19 +364,19 @@
bool onAppendStages(const SkStageRec&, bool) const override { return false; }
- skvm::Color onProgram(skvm::Builder* p, skvm::Color c, const SkColorInfo& rawDst,
+ skvm::Color onProgram(skvm::Builder* p, skvm::Color c, SkColorSpace* rawDstCS,
skvm::Uniforms* uniforms, SkArenaAlloc* alloc) const override {
- sk_sp<SkColorSpace> dstCS = rawDst.refColorSpace();
+ sk_sp<SkColorSpace> dstCS = sk_ref_sp(rawDstCS);
if (!dstCS) { dstCS = SkColorSpace::MakeSRGB(); }
SkAlphaType workingAT;
sk_sp<SkColorSpace> workingCS = this->workingFormat(dstCS, &workingAT);
- SkColorInfo dst = {rawDst.colorType(), rawDst.alphaType(), dstCS},
- working = {rawDst.colorType(), workingAT, workingCS};
+ SkColorInfo dst = {kUnknown_SkColorType, kPremul_SkAlphaType, dstCS},
+ working = {kUnknown_SkColorType, workingAT, workingCS};
c = SkColorSpaceXformSteps{dst,working}.program(p, uniforms, c);
- c = as_CFB(fChild)->program(p, c, working, uniforms, alloc);
+ c = as_CFB(fChild)->program(p, c, working.colorSpace(), uniforms, alloc);
return c ? SkColorSpaceXformSteps{working,dst}.program(p, uniforms, c)
: c;
}
diff --git a/src/core/SkColorFilterBase.h b/src/core/SkColorFilterBase.h
index 54916df..8257427 100644
--- a/src/core/SkColorFilterBase.h
+++ b/src/core/SkColorFilterBase.h
@@ -28,7 +28,7 @@
SK_WARN_UNUSED_RESULT
skvm::Color program(skvm::Builder*, skvm::Color,
- const SkColorInfo& dst, skvm::Uniforms*, SkArenaAlloc*) const;
+ SkColorSpace* dstCS, skvm::Uniforms*, SkArenaAlloc*) const;
/** Returns the flags for this filter. Override in subclasses to return custom flags.
*/
@@ -82,7 +82,7 @@
virtual bool onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const = 0;
virtual skvm::Color onProgram(skvm::Builder*, skvm::Color,
- const SkColorInfo& dst, skvm::Uniforms*, SkArenaAlloc*) const = 0;
+ SkColorSpace* dstCS, skvm::Uniforms*, SkArenaAlloc*) const = 0;
friend class SkColorFilter;
diff --git a/src/core/SkColorFilter_Matrix.cpp b/src/core/SkColorFilter_Matrix.cpp
index 53ec044..1f2d168 100644
--- a/src/core/SkColorFilter_Matrix.cpp
+++ b/src/core/SkColorFilter_Matrix.cpp
@@ -79,7 +79,7 @@
skvm::Color SkColorFilter_Matrix::onProgram(skvm::Builder* p, skvm::Color c,
- const SkColorInfo& /*dst*/,
+ SkColorSpace* /*dstCS*/,
skvm::Uniforms* uniforms, SkArenaAlloc*) const {
auto apply_matrix = [&](auto xyzw) {
auto dot = [&](int j) {
diff --git a/src/core/SkColorFilter_Matrix.h b/src/core/SkColorFilter_Matrix.h
index 8f94503..762bf12 100644
--- a/src/core/SkColorFilter_Matrix.h
+++ b/src/core/SkColorFilter_Matrix.h
@@ -33,7 +33,7 @@
bool onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const override;
skvm::Color onProgram(skvm::Builder*, skvm::Color,
- const SkColorInfo& dst,
+ SkColorSpace* dstCS,
skvm::Uniforms* uniforms, SkArenaAlloc*) const override;
float fMatrix[20];
diff --git a/src/core/SkModeColorFilter.cpp b/src/core/SkModeColorFilter.cpp
index f844e0a..5240984 100644
--- a/src/core/SkModeColorFilter.cpp
+++ b/src/core/SkModeColorFilter.cpp
@@ -71,11 +71,11 @@
}
skvm::Color SkModeColorFilter::onProgram(skvm::Builder* p, skvm::Color c,
- const SkColorInfo& dstInfo,
+ SkColorSpace* dstCS,
skvm::Uniforms* uniforms, SkArenaAlloc*) const {
SkColor4f color = SkColor4f::FromColor(fColor);
- SkColorSpaceXformSteps( sk_srgb_singleton(), kUnpremul_SkAlphaType,
- dstInfo.colorSpace(), kPremul_SkAlphaType).apply(color.vec());
+ SkColorSpaceXformSteps(sk_srgb_singleton(), kUnpremul_SkAlphaType,
+ dstCS, kPremul_SkAlphaType).apply(color.vec());
skvm::Color dst = c,
src = p->uniformColor(color, uniforms);
return p->blend(fMode, src,dst);
diff --git a/src/core/SkModeColorFilter.h b/src/core/SkModeColorFilter.h
index c66f0b4..39acefb 100644
--- a/src/core/SkModeColorFilter.h
+++ b/src/core/SkModeColorFilter.h
@@ -33,7 +33,7 @@
bool onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const override;
skvm::Color onProgram(skvm::Builder*, skvm::Color,
- const SkColorInfo&, skvm::Uniforms*, SkArenaAlloc*) const override;
+ SkColorSpace*, skvm::Uniforms*, SkArenaAlloc*) const override;
private:
SkColor fColor;
diff --git a/src/core/SkRuntimeEffect.cpp b/src/core/SkRuntimeEffect.cpp
index 4f62435..3442a30 100644
--- a/src/core/SkRuntimeEffect.cpp
+++ b/src/core/SkRuntimeEffect.cpp
@@ -649,9 +649,9 @@
}
skvm::Color onProgram(skvm::Builder* p, skvm::Color c,
- const SkColorInfo& dst,
+ SkColorSpace* dstCS,
skvm::Uniforms* uniforms, SkArenaAlloc* alloc) const override {
- sk_sp<SkData> inputs = get_xformed_uniforms(fEffect.get(), fUniforms, dst.colorSpace());
+ sk_sp<SkData> inputs = get_xformed_uniforms(fEffect.get(), fUniforms, dstCS);
SkASSERT(inputs);
// There should be no way for the color filter to use device coords, but we need to supply
@@ -660,7 +660,7 @@
auto sampleChild = [&](int ix, skvm::Coord /*coord*/, skvm::Color color) {
if (fChildren[ix]) {
- return as_CFB(fChildren[ix])->program(p, color, dst, uniforms, alloc);
+ return as_CFB(fChildren[ix])->program(p, color, dstCS, uniforms, alloc);
} else {
return color;
}
diff --git a/src/core/SkVMBlitter.cpp b/src/core/SkVMBlitter.cpp
index c7e5968..debec7c 100644
--- a/src/core/SkVMBlitter.cpp
+++ b/src/core/SkVMBlitter.cpp
@@ -324,7 +324,7 @@
struct NoopColorFilter : public SkColorFilterBase {
skvm::Color onProgram(skvm::Builder*, skvm::Color c,
- const SkColorInfo&, skvm::Uniforms*, SkArenaAlloc*) const override {
+ SkColorSpace*, skvm::Uniforms*, SkArenaAlloc*) const override {
return c;
}
diff --git a/src/effects/SkTableColorFilter.cpp b/src/effects/SkTableColorFilter.cpp
index b222373..7fc5728 100644
--- a/src/effects/SkTableColorFilter.cpp
+++ b/src/effects/SkTableColorFilter.cpp
@@ -63,7 +63,7 @@
}
skvm::Color onProgram(skvm::Builder* p, skvm::Color c,
- const SkColorInfo& dst,
+ SkColorSpace* dstCS,
skvm::Uniforms* uniforms, SkArenaAlloc*) const override {
auto apply_table_to_component = [&](skvm::F32 c, const uint8_t* bytePtr) -> skvm::F32 {
diff --git a/src/shaders/SkColorFilterShader.cpp b/src/shaders/SkColorFilterShader.cpp
index 93e39c6..3ac83b25 100644
--- a/src/shaders/SkColorFilterShader.cpp
+++ b/src/shaders/SkColorFilterShader.cpp
@@ -84,7 +84,7 @@
}
// Finally run that through the color filter.
- return fFilter->program(p,c, dst, uniforms,alloc);
+ return fFilter->program(p,c, dst.colorSpace(), uniforms,alloc);
}
#if SK_SUPPORT_GPU
diff --git a/src/utils/SkShadowUtils.cpp b/src/utils/SkShadowUtils.cpp
index 8593b0d..9e7aa70 100644
--- a/src/utils/SkShadowUtils.cpp
+++ b/src/utils/SkShadowUtils.cpp
@@ -59,7 +59,7 @@
return true;
}
- skvm::Color onProgram(skvm::Builder* p, skvm::Color c, const SkColorInfo& dst, skvm::Uniforms*,
+ skvm::Color onProgram(skvm::Builder* p, skvm::Color c, SkColorSpace* dstCS, skvm::Uniforms*,
SkArenaAlloc*) const override {
// x = 1 - x;
// exp(-x * x * 4) - 0.018f;