Index: src/gpu/GrPipeline.cpp |
diff --git a/src/gpu/GrPipeline.cpp b/src/gpu/GrPipeline.cpp |
index 073349be1ed900062964098d85773e416eedd75b..73b20a9042065f3d99b4b1cc67f8131fb6286329 100644 |
--- a/src/gpu/GrPipeline.cpp |
+++ b/src/gpu/GrPipeline.cpp |
@@ -21,10 +21,23 @@ GrPipeline* GrPipeline::CreateAt(void* memory, const CreateArgs& args, |
const GrPipelineBuilder& builder = *args.fPipelineBuilder; |
// Create XferProcessor from DS's XPFactory |
- SkAutoTUnref<GrXferProcessor> xferProcessor( |
- builder.getXPFactory()->createXferProcessor(args.fColorPOI, args.fCoveragePOI, |
- builder.hasMixedSamples(), &args.fDstTexture, |
- *args.fCaps)); |
+ const GrXPFactory* xpFactory = builder.getXPFactory(); |
+ SkAutoTUnref<GrXferProcessor> xferProcessor; |
+ if (xpFactory) { |
+ xferProcessor.reset(xpFactory->createXferProcessor(args.fColorPOI, |
+ args.fCoveragePOI, |
+ builder.hasMixedSamples(), |
+ &args.fDstTexture, |
+ *args.fCaps)); |
+ } else { |
+ xferProcessor.reset(GrPorterDuffXPFactory::CreateSrcOverXferProcessor( |
+ *args.fCaps, |
+ args.fColorPOI, |
+ args.fCoveragePOI, |
+ builder.hasMixedSamples(), |
+ &args.fDstTexture)); |
+ } |
+ |
if (!xferProcessor) { |
return nullptr; |
} |
@@ -55,7 +68,7 @@ GrPipeline* GrPipeline::CreateAt(void* memory, const CreateArgs& args, |
} |
GrPipeline* pipeline = new (memory) GrPipeline; |
- pipeline->fXferProcessor.reset(xferProcessor.get()); |
+ pipeline->fXferProcessor.reset(xferProcessor); |
pipeline->fRenderTarget.reset(builder.fRenderTarget.get()); |
SkASSERT(pipeline->fRenderTarget); |
@@ -123,7 +136,14 @@ GrPipeline* GrPipeline::CreateAt(void* memory, const CreateArgs& args, |
} |
GrXPFactory::InvariantBlendedColor blendedColor; |
- builder.fXPFactory->getInvariantBlendedColor(args.fColorPOI, &blendedColor); |
+ if (xpFactory) { |
+ xpFactory->getInvariantBlendedColor(args.fColorPOI, &blendedColor); |
+ } else { |
+ GrPorterDuffXPFactory::SrcOverInvariantBlendedColor(args.fColorPOI.color(), |
+ args.fColorPOI.validFlags(), |
+ args.fColorPOI.isOpaque(), |
+ &blendedColor); |
+ } |
if (blendedColor.fWillBlendWithDst) { |
opts->fFlags |= GrPipelineOptimizations::kWillColorBlendWithDst_Flag; |
} |