SSE2 optimizations for 32bit Color operation.
authorsenorblanco@chromium.org <senorblanco@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>
Mon, 13 Dec 2010 15:27:20 +0000 (15:27 +0000)
committersenorblanco@chromium.org <senorblanco@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>
Mon, 13 Dec 2010 15:27:20 +0000 (15:27 +0000)
commitc3856384e4ab9a7ad5902696a5c972ab595b8467
tree0025aae7299eb0025598d8a647b4479598941859
parentec7a30cc8688923e0ccfff4c8f81c5e577c4c9ab
SSE2 optimizations for 32bit Color operation.

[Patch from weiwei.li@intel.com]

SSE2 optimization has been added by Stephen White before, this improves the skia
performance on SSE2-supporting platform. (please refer to below issues)

Issue 171055: More SSE2ification
Issue 157141: More SSE2ification
Issue 150060: minor tweaks to SSE2 code for -fPIC
Issue 144072: SSE2 optimizations for 32bit blending blitters

This CL implements SSE2 optimizations for the 32bit Color operation. Like above
issues, it uses CPUID to detect for SSE2 and changes the platform procs at
runtime as well. The 32bit Color operation is heavily used on Chrome HTML5
canvas operations. Take Microsoft IE test drives Pulsating Bubbles as example
(http://ie.microsoft.com/testdrive/Performance/PulsatingBubbles/Default.xhtml),
if running this cases on Chrome, the overhead of 32bit Color operation is about
40~50%. So this CL will make skia performance more better, and also make Chrome
HTML5 canvas performance more better.

Additional, this CL has passed the skia bench & tests validation, the result is
pretty good. We also apply this CL to the latest chromium, and re-run Microsoft
IE test drives Pulsating Bubbles, the performance is improved by almost 9~10%.

git-svn-id: http://skia.googlecode.com/svn/trunk@633 2bbb7eff-a529-9590-31e7-b0007b416f81
include/core/SkBlitRow.h
src/core/SkBlitRow_D32.cpp
src/opts/SkBitmapProcState_opts_SSE2.h
src/opts/SkBlitRow_opts_SSE2.cpp
src/opts/SkBlitRow_opts_none.cpp
src/opts/opts_check_SSE2.cpp