skia2/include/core
mtklein e617e15259 De-templatize Sk4pxXfermode code a bit.
This deduplicates a few pieces of code:
  - we end up with one copy of each xfer32() driver loop instead of one per xfermode;
  - we end up with two* copies of each xfermode implementation instead of ten**.

* For a given Mode: Mode() itself and xfer_aa<Mode>().
** From unrolling: twice at a stride of 8, once at 4, once at 2, and once at 1, then all again for when we have AA.

This decreases the size of SkXfermode.o from 1.5M to 620K on x86-64 and from 1.3M to 680K on ARMv7+NEON.

If we wanted to, we could eliminate the xfer_aa<Mode>() copy by tagging each Mode() function as __attribute__((noinline)) or its equivalent.  This would result in another ~100K space savings.

Performance is affected in proportion to the original xfermode speed:
fast modes like Plus take the largest proportional hit, and slow modes
like HardLight or SoftLight see essentially no hit at all.

This adds SK_VECTORCALL to help keep this code fast on ARMv7 and Windows.  I've looked at the ARMv7 generated code... it looks good, even pretty.

For compatibility with SK_VECTORCALL, we now pass the vector-sized arguments by value instead of by reference.  Some refactoring now allows us to declare each mode as just a static function instead of a struct, which simplifies things.

TBR=reed@google.com
No public API changes.

BUG=skia:

Review URL: https://codereview.chromium.org/1242743004
2015-07-21 12:03:37 -07:00
..
SkAnnotation.h Factory methods for heap-allocated SkAnnotation objects. 2014-02-27 11:47:36 +00:00
SkAtomics.h Modernize atomics in SkTaskGroup's threadpool. 2015-06-17 07:53:22 -07:00
SkBBHFactory.h C++11 override should now be supported by all of {bots,Chrome,Android,Mozilla} 2015-03-25 18:17:32 -07:00
SkBitmap.h remove SkInstCnt 2015-06-26 11:45:03 -07:00
SkBitmapDevice.h add src-rect-constraint to drawImageRect 2015-07-14 10:54:12 -07:00
SkBlitRow.h Re-proc SkBlitRow::Color32 for ARM. 2015-05-22 06:08:29 -07:00
SkBlurTypes.h move common blur types into central header 2014-04-28 16:25:35 +00:00
SkCanvas.h Revert[2] of guard to remove DrawBitmapRectFlags 2015-07-17 07:09:43 -07:00
SkChunkAlloc.h Add rewind capability to SkChunkAlloc 2015-02-27 08:31:57 -08:00
SkClipStack.h Clean up clipping code a bit 2015-02-10 08:16:55 -08:00
SkColor.h SkAlpha constant defs 2013-07-19 17:43:27 +00:00
SkColorFilter.h rename GrShaderDataManager -> GrProcessorDataManager 2015-07-09 06:28:14 -07:00
SkColorPriv.h Replace buggy_blend_modes GM with an exhaustive test. 2015-07-16 07:01:40 -07:00
SkColorTable.h remove SkInstCnt 2015-06-26 11:45:03 -07:00
SkComposeShader.h C++11 override should now be supported by all of {bots,Chrome,Android,Mozilla} 2015-03-25 18:17:32 -07:00
SkData.h remove SkInstCnt 2015-06-26 11:45:03 -07:00
SkDataTable.h remove SkInstCnt 2015-06-26 11:45:03 -07:00
SkDeque.h This CL addresses "SkCanvas::save flags are not respected by GPU backend" (https://code.google.com/p/skia/issues/detail?id=1503). 2013-08-16 00:53:34 +00:00
SkDevice.h add src-rect-constraint to drawImageRect 2015-07-14 10:54:12 -07:00
SkDither.h Result of running tools/sanitize_source_files.py (which was added in https://codereview.appspot.com/6465078/) 2012-08-23 18:09:54 +00:00
SkDocument.h remove SkInstCnt 2015-06-26 11:45:03 -07:00
SkDraw.h Revert[2] SkDraw and all Blitters to use pixmap instead of bitmapi 2015-06-09 12:16:53 -07:00
SkDrawable.h add matrix options to drawDrawable 2015-07-07 10:22:31 -07:00
SkDrawFilter.h remove SkInstCnt 2015-06-26 11:45:03 -07:00
SkDrawLooper.h remove SkInstCnt 2015-06-26 11:45:03 -07:00
SkEndian.h fix size_t/int warnings 2014-04-23 19:19:44 +00:00
SkError.h Sanitizing source files in Housekeeper-Nightly 2013-09-05 07:01:19 +00:00
SkFilterQuality.h add newImage API 2015-01-23 05:58:07 -08:00
SkFixed.h Correct SkFixedToDouble. 2015-04-17 10:05:43 -07:00
SkFlattenable.h remove SkInstCnt 2015-06-26 11:45:03 -07:00
SkFlattenableSerialization.h Removed unnecessary define 2013-11-08 15:24:12 +00:00
SkFloatBits.h remove unused SkIntToFloatCast_NoOverflowCheck 2014-08-19 07:39:41 -07:00
SkFloatingPoint.h A bunch of little SkMScalar-as-float build fixes. 2015-06-09 11:47:01 -07:00
SkFont.h Treat embedded bitmaps as a hinting method. 2014-08-19 13:18:58 -07:00
SkFontHost.h Remove a layer of indirection and code from SkFontHost. 2014-09-10 15:49:48 -07:00
SkFontLCDConfig.h Sanitizing source files in Skia_Periodic_House_Keeping 2013-03-13 07:01:04 +00:00
SkFontStyle.h Replace SkTypeface::Style with SkFontStyle. 2014-10-20 13:33:19 -07:00
SkGraphics.h remove getter for imagegenerator factory, update test 2015-07-09 14:08:49 -07:00
SkImage.h Add image->bitmap 2015-07-08 12:46:23 -07:00
SkImageDecoder.h remove SkInstCnt 2015-06-26 11:45:03 -07:00
SkImageEncoder.h Add SkEncodedFormat, used by SkCodec. 2015-03-20 11:55:55 -07:00
SkImageFilter.h Remove SK_LEGACY_IMAGE_FILTER_CROP_RECT_EDGES code. 2015-07-21 11:11:17 -07:00
SkImageGenerator.h remove getter for imagegenerator factory, update test 2015-07-09 14:08:49 -07:00
SkImageInfo.h Add Rec709 YUV color space support to GrYUVtoRGBEffect. 2015-07-20 15:00:03 -07:00
SkLazyPtr.h Clean up SkDynamicAnnotations. 2015-03-12 05:27:46 -07:00
SkMallocPixelRef.h remove SkInstCnt 2015-06-26 11:45:03 -07:00
SkMask.h remove unused kLCD_MaskFormat 2014-11-13 14:39:58 -08:00
SkMaskFilter.h remove SkInstCnt 2015-06-26 11:45:03 -07:00
SkMath.h Disable the noisiest /analyze warning in Chrome. ~3,700/12,000 2015-01-30 12:57:50 -08:00
SkMatrix.h Fix up SkMatrix::isFinite call 2015-07-06 12:15:34 -07:00
SkMetaData.h "NULL !=" = NULL 2014-09-05 13:34:00 -07:00
SkMultiPictureDraw.h Add sk_parallel_for() 2015-06-17 15:26:15 -07:00
SkMutex.h Create a template AutoTAcquire, and specialize an SkMutex version. 2015-07-09 13:44:32 -07:00
SkOnce.h Move instanced index buffer creation to flush time 2015-05-04 10:36:43 -07:00
SkOSFile.h Move SkOSFile::Iter impls into ports. 2015-02-12 07:18:27 -08:00
SkPackBits.h Remove unused PackBits methods and fix length checks 2015-06-04 15:10:37 -07:00
SkPaint.h Make SkPaint::glyphsToUnichars use explicit SkSurfaceProps 2015-06-26 12:17:59 -07:00
SkPath.h Very tiny paths are subsumed by the Convexicator 2015-07-14 11:19:26 -07:00
SkPathEffect.h remove SkInstCnt 2015-06-26 11:45:03 -07:00
SkPathMeasure.h use conics 2014-12-17 08:21:05 -08:00
SkPathRef.h remove SkInstCnt 2015-06-26 11:45:03 -07:00
SkPicture.h change old picture serialization to really handle images 2015-06-22 12:48:26 -07:00
SkPictureRecorder.h Allow reset of the SkPictureRecorder cull rect and other parameters during endRecording. 2015-07-07 14:27:10 -07:00
SkPixelRef.h remove SkInstCnt 2015-06-26 11:45:03 -07:00
SkPixelSerializer.h add const to encodePixels pixel parameter 2014-12-19 12:26:07 -08:00
SkPixmap.h Revert "Revert of move erase into SkPixmap (patchset #1 id:1 of https://codereview.chromium.org/1161033005/)" 2015-06-08 10:22:22 -07:00
SkPoint.h Revert of Revert of stop calling SkScalarDiv (patchset #1 id:1 of https://codereview.chromium.org/1138263002/) 2015-05-12 10:37:34 -07:00
SkPostConfig.h De-templatize Sk4pxXfermode code a bit. 2015-07-21 12:03:37 -07:00
SkPreConfig.h Revert of Allow NEON on iOS. (patchset #3 id:40001 of https://codereview.chromium.org/1091823002/) 2015-04-17 14:02:40 -07:00
SkRasterizer.h remove SkInstCnt 2015-06-26 11:45:03 -07:00
SkRect.h Simple CL to add a joinWithPossiblyEmptyArg to SkRect 2015-05-01 08:51:48 -07:00
SkRefCnt.h remove SkInstCnt 2015-06-26 11:45:03 -07:00
SkRegion.h Remove useless SkASSERT in SkRect.h and SkRegion.h 2015-04-28 12:47:48 -07:00
SkRRect.h Fill SkRRect::fType proactively. 2014-12-18 13:29:54 -08:00
SkRSXform.h add SkCanvas::drawAtlas 2015-06-24 10:29:18 -07:00
SkScalar.h Revert of Revert of stop calling SkScalarDiv (patchset #1 id:1 of https://codereview.chromium.org/1138263002/) 2015-05-12 10:37:34 -07:00
SkShader.h rename GrShaderDataManager -> GrProcessorDataManager 2015-07-09 06:28:14 -07:00
SkSize.h deprecate SkScalarRound (and its ilk), use SkScalarRound[ToInt,ToScalar]. #define SK_SUPPORT_DEPRECATED_SCALARROUND for legacy clients 2013-12-17 19:22:07 +00:00
SkSpinlock.h Fix componene debug build failure in chromium 2015-07-10 08:32:23 -07:00
SkStream.h remove SkInstCnt 2015-06-26 11:45:03 -07:00
SkString.h SkString: remove fStr member 2015-04-08 13:01:22 -07:00
SkStrokeRec.h Make GrStrokeInfo inherit from SkStrokeRec 2015-05-18 22:23:54 -07:00
SkSurface.h add ability to get FBO ID to Surface 2015-07-08 12:54:04 -07:00
SkSurfaceProps.h Clean up usage of SkSurfaceProps 2015-06-22 12:06:08 -07:00
SkTArray.h Cleanup: Remove unnecessary double-semicolons. 2015-04-27 07:01:45 -07:00
SkTDArray.h Fix some lingering typos 2015-04-24 11:10:51 -07:00
SkTDict.h move some headers out of public 2014-06-17 09:04:45 -07:00
SkTDStack.h Sanitizing source files in Skia_Periodic_House_Keeping 2013-01-26 07:06:02 +00:00
SkTemplates.h refactor bitmapshader to use a controller 2015-06-04 06:31:31 -07:00
SkTextBlob.h Start canonicalizing color for all A8 textblobs 2015-04-14 12:17:27 -07:00
SkTime.h SkTime: return timezone information; format in ISO-8601 2015-05-01 07:06:23 -07:00
SkTInternalLList.h "NULL !=" = NULL 2014-09-05 13:34:00 -07:00
SkTLazy.h "NULL !=" = NULL 2014-09-05 13:34:00 -07:00
SkTRegistry.h Rewrite SkTRegistry to take any trivially-copyable type. 2013-09-04 17:20:18 +00:00
SkTSearch.h One SkTSearch to rule them all. Allow key to be of different type than the array. 2013-05-17 19:05:03 +00:00
SkTypeface.h remove SkInstCnt 2015-06-26 11:45:03 -07:00
SkTypes.h SK_ARRAY_COUNT shouldn't work on pointers. 2015-05-07 10:58:44 -07:00
SkUnPreMultiply.h Factor out UnPreMultiplyPreservingByteOrder 2014-01-15 22:24:58 +00:00
SkUtils.h Rewrite memset benches, then use results to add a small-N optimization. 2015-04-09 14:05:17 -07:00
SkWeakRefCnt.h Remove SkThread.h, include SkMutex.h or SkAtomics.h as appropriate. 2015-07-07 12:21:22 -07:00
SkWriteBuffer.h change old picture serialization to really handle images 2015-06-22 12:48:26 -07:00
SkWriter32.h Make SkWriter32::snapshotAsData() a dumb copy. 2015-01-29 12:03:53 -08:00
SkXfermode.h rename GrShaderDataManager -> GrProcessorDataManager 2015-07-09 06:28:14 -07:00