We can compute all 4 channels in one pass.
Created attachment 327203 [details] Patch This makes FETurbulence about 2x faster.
Created attachment 327286 [details] Patch
Comment on attachment 327286 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=327286&action=review > Source/WebCore/platform/graphics/ColorUtilities.h:42 > + FloatComponents& operator +=(const FloatComponents& rhs) We don't usually put a space after 'operator'. > Source/WebCore/platform/graphics/ColorUtilities.h:51 > + FloatComponents operator +(float rhs) const We don't usually put a space after 'operator'. > Source/WebCore/platform/graphics/ColorUtilities.h:61 > + FloatComponents operator /(float denominator) const We don't usually put a space after 'operator'. > Source/WebCore/platform/graphics/ColorUtilities.h:71 > + FloatComponents operator *(float factor) const We don't usually put a space after 'operator'.
https://trac.webkit.org/r225009
<rdar://problem/35628662>
I know I already reviewed this, but I wonder if this could get an even bigger speedup if we used something like GCC's: typedef float float4 __attribute__((__vector_size__(16))) or clangs: typedef __attribute__((__ext_vector_type__(4))) float float4;