DescriptionColor dodge and burn with SkPMFloat.
Both 25-35% faster with SSE.
With NEON, Burn measures as a ~10% regression, Dodge a huge 2.9x improvement.
The Burn regression is somewhat artificial: we're drawing random colored rects onto an opaque white dst, so we're heavily biased toward the (d==da) fast path in the serial code. In the vector code there's no short-circuiting and we always pay a fixed cost for ColorBurn regardless of src or dst content.
Dodge's fast paths, in contrast, only trigger when (s==sa) or (d==0), neither of which happens any more than randomly in our benchmark. I don't think (d==0) should happen at all. Similarly, the (s==0) Burn fast path is really only going to happen as often as SkRandom allows.
In practice, the existing Burn benchmark is hitting its fast path 100% of the time. So I actually feel really great that this only dings the benchmark by 10%.
Chrome's still guarded by SK_SUPPORT_LEGACY_XFERMODES, which I'll lift after finishing the last xfermode, SoftLight.
BUG=skia:
Committed: https://skia.googlesource.com/skia/+/2aab22a58a366df4752c1cf0f004092c6e7be335
Patch Set 1 #Patch Set 2 : NEON. Burn is a small regression, Dodge a huge improvement. #Patch Set 3 : alphas(). 41/39 + 231/241 #
Total comments: 1
Patch Set 4 : tweaks #
Total comments: 3
Patch Set 5 : reed #
Messages
Total messages: 15 (7 generated)
|