clean up low-hanging swap_rb

There are two remaining swap_rb uses that both look non-trivial to
replace:
   - sampling out of index8 when the color table is bgra
   - table transforms on bgra inputs in SkColorSpaceXform

I don't think it's a big deal to just leave swap_rb around,
just a little sad.

Change-Id: I3d30200cf867cbf37d6f86572b1574d3e22e3490
Reviewed-on: https://skia-review.googlesource.com/21040
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
diff --git a/src/codec/SkWebpCodec.cpp b/src/codec/SkWebpCodec.cpp
index 68301b9..d94011a 100644
--- a/src/codec/SkWebpCodec.cpp
+++ b/src/codec/SkWebpCodec.cpp
@@ -320,10 +320,13 @@
             if (store) *store = SkRasterPipeline::store_565;
             break;
         case kRGBA_8888_SkColorType:
-        case kBGRA_8888_SkColorType:
             if (load) *load = SkRasterPipeline::load_8888;
             if (store) *store = SkRasterPipeline::store_8888;
             break;
+        case kBGRA_8888_SkColorType:
+            if (load) *load = SkRasterPipeline::load_bgra;
+            if (store) *store = SkRasterPipeline::store_bgra;
+            break;
         case kRGBA_F16_SkColorType:
             if (load) *load = SkRasterPipeline::load_f16;
             if (store) *store = SkRasterPipeline::store_f16;
@@ -358,10 +361,6 @@
     SkRasterPipeline::StockStage load_src;
     pick_memory_stages(srcCT, &load_src, nullptr);
     p.append(load_src, src);
-    if (dstCT != srcCT) {
-        SkASSERT(kBGRA_8888_SkColorType == srcCT);
-        p.append(SkRasterPipeline::swap_rb);
-    }
     p.extend(convert_to_linear_premul);
 
     p.append(SkRasterPipeline::srcover);
diff --git a/src/core/SkBlitter_Sprite.cpp b/src/core/SkBlitter_Sprite.cpp
index 20ec357..9b1ee29 100644
--- a/src/core/SkBlitter_Sprite.cpp
+++ b/src/core/SkBlitter_Sprite.cpp
@@ -122,8 +122,8 @@
             case kGray_8_SkColorType:    p.append(SkRasterPipeline::load_g8,   &fSrcPtr); break;
             case kRGB_565_SkColorType:   p.append(SkRasterPipeline::load_565,  &fSrcPtr); break;
             case kARGB_4444_SkColorType: p.append(SkRasterPipeline::load_4444, &fSrcPtr); break;
-            case kRGBA_8888_SkColorType:
-            case kBGRA_8888_SkColorType: p.append(SkRasterPipeline::load_8888, &fSrcPtr); break;
+            case kBGRA_8888_SkColorType: p.append(SkRasterPipeline::load_bgra, &fSrcPtr); break;
+            case kRGBA_8888_SkColorType: p.append(SkRasterPipeline::load_8888, &fSrcPtr); break;
             case kRGBA_F16_SkColorType:  p.append(SkRasterPipeline::load_f16,  &fSrcPtr); break;
             default: SkASSERT(false);
         }
@@ -131,9 +131,6 @@
                 (!fSource.colorSpace() || fSource.colorSpace()->gammaCloseToSRGB())) {
             p.append_from_srgb(fSource.alphaType());
         }
-        if (fSource.colorType() == kBGRA_8888_SkColorType) {
-            p.append(SkRasterPipeline::swap_rb);
-        }
         if (fSource.colorType() == kAlpha_8_SkColorType) {
             p.append(SkRasterPipeline::set_rgb, &fPaintColor);
             p.append(SkRasterPipeline::premul);
diff --git a/src/core/SkColorSpaceXform.cpp b/src/core/SkColorSpaceXform.cpp
index 8887bc2..ff177d4 100644
--- a/src/core/SkColorSpaceXform.cpp
+++ b/src/core/SkColorSpaceXform.cpp
@@ -1173,16 +1173,16 @@
             break;
         case kBGRA_8888_ColorFormat:
             if (kLinear_SrcGamma == fSrcGamma) {
-                pipeline.append(SkRasterPipeline::load_8888, &src);
+                pipeline.append(SkRasterPipeline::load_bgra, &src);
             } else {
                 loadTables.fSrc = src;
                 loadTables.fR = fSrcGammaTables[2];
                 loadTables.fG = fSrcGammaTables[1];
                 loadTables.fB = fSrcGammaTables[0];
                 pipeline.append(SkRasterPipeline::load_tables, &loadTables);
+                pipeline.append(SkRasterPipeline::swap_rb);
             }
 
-            pipeline.append(SkRasterPipeline::swap_rb);
             break;
         case kRGBA_F16_ColorFormat:
             if (kLinear_SrcGamma != fSrcGamma) {
@@ -1288,8 +1288,7 @@
              pipeline.append(SkRasterPipeline::store_8888, &dst);
             break;
         case kBGRA_8888_ColorFormat:
-            pipeline.append(SkRasterPipeline::swap_rb);
-            pipeline.append(SkRasterPipeline::store_8888, &dst);
+            pipeline.append(SkRasterPipeline::store_bgra, &dst);
             break;
         case kRGBA_F16_ColorFormat:
             if (kLinear_DstGamma != fDstGamma) {
diff --git a/src/core/SkColorSpaceXform_A2B.cpp b/src/core/SkColorSpaceXform_A2B.cpp
index 2e710f5..4cfb05d 100644
--- a/src/core/SkColorSpaceXform_A2B.cpp
+++ b/src/core/SkColorSpaceXform_A2B.cpp
@@ -23,8 +23,7 @@
     SkRasterPipeline_<256> pipeline;
     switch (srcFormat) {
         case kBGRA_8888_ColorFormat:
-            pipeline.append(SkRasterPipeline::load_8888, &src);
-            pipeline.append(SkRasterPipeline::swap_rb);
+            pipeline.append(SkRasterPipeline::load_bgra, &src);
             break;
         case kRGBA_8888_ColorFormat:
             pipeline.append(SkRasterPipeline::load_8888, &src);
@@ -48,8 +47,7 @@
 
     switch (dstFormat) {
         case kBGRA_8888_ColorFormat:
-            pipeline.append(SkRasterPipeline::swap_rb);
-            pipeline.append(SkRasterPipeline::store_8888, &dst);
+            pipeline.append(SkRasterPipeline::store_bgra, &dst);
             break;
         case kRGBA_8888_ColorFormat:
             pipeline.append(SkRasterPipeline::store_8888, &dst);
diff --git a/src/core/SkConvertPixels.cpp b/src/core/SkConvertPixels.cpp
index b3a6a06..7859972 100644
--- a/src/core/SkConvertPixels.cpp
+++ b/src/core/SkConvertPixels.cpp
@@ -283,8 +283,7 @@
             pipeline.append(SkRasterPipeline::load_8888, &srcRow);
             break;
         case kBGRA_8888_SkColorType:
-            pipeline.append(SkRasterPipeline::load_8888, &srcRow);
-            pipeline.append(SkRasterPipeline::swap_rb);
+            pipeline.append(SkRasterPipeline::load_bgra, &srcRow);
             break;
         case kRGB_565_SkColorType:
             pipeline.append(SkRasterPipeline::load_565, &srcRow);
@@ -376,8 +375,7 @@
             pipeline.append(SkRasterPipeline::store_8888, &dstRow);
             break;
         case kBGRA_8888_SkColorType:
-            pipeline.append(SkRasterPipeline::swap_rb);
-            pipeline.append(SkRasterPipeline::store_8888, &dstRow);
+            pipeline.append(SkRasterPipeline::store_bgra, &dstRow);
             break;
         case kRGB_565_SkColorType:
             pipeline.append(SkRasterPipeline::store_565, &dstRow);
diff --git a/src/core/SkModeColorFilter.cpp b/src/core/SkModeColorFilter.cpp
index bca23c6..0b55333 100644
--- a/src/core/SkModeColorFilter.cpp
+++ b/src/core/SkModeColorFilter.cpp
@@ -87,15 +87,17 @@
             SkSTArenaAlloc<256> alloc;
             SkRasterPipeline p(&alloc);
 
-            p.append(SkRasterPipeline::load_8888, &shader);
             if (kN32_SkColorType == kBGRA_8888_SkColorType) {
-                p.append(SkRasterPipeline::swap_rb);
+                p.append(SkRasterPipeline::load_bgra, &shader);
+            } else {
+                p.append(SkRasterPipeline::load_8888, &shader);
             }
             this->appendStages(&p, nullptr, &alloc, false);
             if (kN32_SkColorType == kBGRA_8888_SkColorType) {
-                p.append(SkRasterPipeline::swap_rb);
+                p.append(SkRasterPipeline::store_bgra, &result);
+            } else {
+                p.append(SkRasterPipeline::store_8888, &result);
             }
-            p.append(SkRasterPipeline::store_8888, &result);
             p.run(0, 0, count);
         } break;
     }
diff --git a/src/core/SkXfermode.cpp b/src/core/SkXfermode.cpp
index 54ac589..e96d2f4 100644
--- a/src/core/SkXfermode.cpp
+++ b/src/core/SkXfermode.cpp
@@ -34,19 +34,14 @@
                 const SkAlpha aa[]) const override {
         SkASSERT(dst && src && count >= 0);
 
-        bool needs_swap = (kN32_SkColorType == kBGRA_8888_SkColorType) &&
-                          SkBlendMode_CaresAboutRBOrder(fMode);
-
         SkRasterPipeline_<256> p;
 
-        p.append(SkRasterPipeline::load_8888, &dst);
-        if (needs_swap) {
-            p.append(SkRasterPipeline::swap_rb);
-        }
-        p.append(SkRasterPipeline::move_src_dst);
-        p.append(SkRasterPipeline::load_8888, &src);
-        if (needs_swap) {
-            p.append(SkRasterPipeline::swap_rb);
+        if (kN32_SkColorType == kBGRA_8888_SkColorType) {
+            p.append(SkRasterPipeline::load_bgra_dst, &dst);
+            p.append(SkRasterPipeline::load_bgra    , &src);
+        } else {
+            p.append(SkRasterPipeline::load_8888_dst, &dst);
+            p.append(SkRasterPipeline::load_8888,     &src);
         }
 
         SkBlendMode_AppendStagesNoClamp(fMode, &p);
@@ -55,10 +50,11 @@
         }
         SkBlendMode_AppendClampIfNeeded(fMode, &p);
 
-        if (needs_swap) {
-            p.append(SkRasterPipeline::swap_rb);
+        if (kN32_SkColorType == kBGRA_8888_SkColorType) {
+            p.append(SkRasterPipeline::store_bgra, &dst);
+        } else {
+            p.append(SkRasterPipeline::store_8888, &dst);
         }
-        p.append(SkRasterPipeline::store_8888, &dst);
         p.run(0, 0, count);
     }
 
diff --git a/src/images/SkImageEncoderFns.h b/src/images/SkImageEncoderFns.h
index 6012a45..4e73e4f 100644
--- a/src/images/SkImageEncoderFns.h
+++ b/src/images/SkImageEncoderFns.h
@@ -154,9 +154,10 @@
 template <bool kIsRGBA>
 static inline void transform_scanline_unpremultiply_sRGB(void* dst, const void* src, int width) {
     SkRasterPipeline_<256> p;
-    p.append(SkRasterPipeline::load_8888, &src);
-    if (!kIsRGBA) {
-        p.append(SkRasterPipeline::swap_rb);
+    if (kIsRGBA) {
+        p.append(SkRasterPipeline::load_8888, &src);
+    } else {
+        p.append(SkRasterPipeline::load_bgra, &src);
     }
 
     p.append_from_srgb(kPremul_SkAlphaType);