WIP: experimental bilerp pipeline.

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1775963002

Review URL: https://codereview.chromium.org/1775963002
diff --git a/src/core/SkBitmapProcShader.cpp b/src/core/SkBitmapProcShader.cpp
index 4813e01..fb58f54 100644
--- a/src/core/SkBitmapProcShader.cpp
+++ b/src/core/SkBitmapProcShader.cpp
@@ -46,7 +46,7 @@
     ~BitmapProcInfoContext() override {
         fInfo->~SkBitmapProcInfo();
     }
-    
+
     uint32_t getFlags() const override { return fFlags; }
 
 private:
@@ -123,8 +123,10 @@
     {
         // Need to ensure that our pipeline is created at a 16byte aligned address
         fPipeline = (SkLinearBitmapPipeline*)SkAlign16((intptr_t)fStorage);
-        new (fPipeline) SkLinearBitmapPipeline(info->fInvMatrix, info->fFilterQuality,
+        float alpha = SkColorGetA(info->fPaintColor) / 255.0f;
+        new (fPipeline) SkLinearBitmapPipeline(info->fRealInvMatrix, info->fFilterQuality,
                                                info->fTileModeX, info->fTileModeY,
+                                               alpha,
                                                info->fPixmap);
 
         // To implement the old shadeSpan entry-point, we need to efficiently convert our native
@@ -175,7 +177,8 @@
     // These src attributes are not supported in the new 4f context (yet)
     //
     if (srcInfo.bytesPerPixel() < 4 ||
-        kRGBA_F16_SkColorType == srcInfo.colorType()) {
+        kRGBA_F16_SkColorType == srcInfo.colorType() ||
+        kIndex_8_SkColorType == srcInfo.colorType()) {
         return false;
     }
 
@@ -211,25 +214,13 @@
         return nullptr;
     }
 
-    // Decide if we can/want to use the new linear pipeine
+    // Decide if we can/want to use the new linear pipeline
     bool useLinearPipeline = choose_linear_pipeline(rec, provider.info());
 
-    // New code doesn't support Mirror (YET), so we detect that here.
-    //
-    if (SkShader::kMirror_TileMode == tmx || SkShader::kMirror_TileMode == tmy) {
-        useLinearPipeline = false;
-    }
-
-    // New code doesn't support Mirror (YET), so we detect that here.
-    //
-    if (totalInverse.hasPerspective()) {
-        useLinearPipeline = false;
-    }
-
     //
     // For now, only enable locally since we are hitting some crashers on the test bots
     //
-    useLinearPipeline = false;
+    //useLinearPipeline = false;
 
     if (useLinearPipeline) {
         void* infoStorage = (char*)storage + sizeof(LinearPipelineContext);
@@ -238,6 +229,10 @@
             info->~SkBitmapProcInfo();
             return nullptr;
         }
+        if (info->fPixmap.colorType() != kRGBA_8888_SkColorType
+            && info->fPixmap.colorType() != kBGRA_8888_SkColorType) {
+            return nullptr;
+        }
         return new (storage) LinearPipelineContext(shader, rec, info);
     } else {
         void* stateStorage = (char*)storage + sizeof(BitmapProcShaderContext);