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);