Cache runtime color filter alpha-unchanged flag on the effect
This reuses the work we're already doing to compute the one-at-a-time
program, and lets us share the result across color filter instances
created from the same effect.
When we added caching of the flag to filter creation, pinpoint found a
performance regression. I expect this to resolve that.
Bug: chromium:1187432
Change-Id: Ie4f8551fa432d298ce950cba8642b9de28f19b81
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/396758
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
diff --git a/tests/SkRuntimeEffectTest.cpp b/tests/SkRuntimeEffectTest.cpp
index 0326ece..23f312d 100644
--- a/tests/SkRuntimeEffectTest.cpp
+++ b/tests/SkRuntimeEffectTest.cpp
@@ -418,19 +418,17 @@
DEF_TEST(SkRuntimeColorFilterFlags, r) {
{ // Here's a non-trivial filter that doesn't change alpha.
auto [effect, err] = SkRuntimeEffect::Make(SkString{
- "uniform shader input; half4 main() { return sample(input) + half4(1,1,1,0); }"});
+ "half4 main(half4 color) { return color + half4(1,1,1,0); }"});
REPORTER_ASSERT(r, effect && err.isEmpty());
- sk_sp<SkColorFilter> input = nullptr,
- filter = effect->makeColorFilter(SkData::MakeEmpty(), &input, 1);
+ sk_sp<SkColorFilter> filter = effect->makeColorFilter(SkData::MakeEmpty());
REPORTER_ASSERT(r, filter && filter->isAlphaUnchanged());
}
{ // Here's one that definitely changes alpha.
auto [effect, err] = SkRuntimeEffect::Make(SkString{
- "uniform shader input; half4 main() { return sample(input) + half4(0,0,0,4); }"});
+ "half4 main(half4 color) { return color + half4(0,0,0,4); }"});
REPORTER_ASSERT(r, effect && err.isEmpty());
- sk_sp<SkColorFilter> input = nullptr,
- filter = effect->makeColorFilter(SkData::MakeEmpty(), &input, 1);
+ sk_sp<SkColorFilter> filter = effect->makeColorFilter(SkData::MakeEmpty());
REPORTER_ASSERT(r, filter && !filter->isAlphaUnchanged());
}
}