| Index: src/gpu/GrPipeline.cpp
|
| diff --git a/src/gpu/GrPipeline.cpp b/src/gpu/GrPipeline.cpp
|
| index 4feddb00ab2e43c6d63a8991e0176288a4265c94..8c40438a2722effe1ede3bc95e4afcfa582d0558 100644
|
| --- a/src/gpu/GrPipeline.cpp
|
| +++ b/src/gpu/GrPipeline.cpp
|
| @@ -30,7 +30,7 @@ GrPipeline::GrPipeline(const GrPipelineBuilder& pipelineBuilder,
|
| overrideColor = colorPOI.inputColorToEffectiveStage();
|
| }
|
|
|
| - GrXferProcessor::OptFlags optFlags;
|
| + GrXferProcessor::OptFlags optFlags = GrXferProcessor::kNone_OptFlags;
|
| if (xferProcessor) {
|
| fXferProcessor.reset(xferProcessor.get());
|
|
|
| @@ -41,6 +41,11 @@ GrPipeline::GrPipeline(const GrPipelineBuilder& pipelineBuilder,
|
| caps);
|
| }
|
|
|
| + // No need to have an override color if it isn't even going to be used.
|
| + if (SkToBool(GrXferProcessor::kIgnoreColor_OptFlag & optFlags)) {
|
| + overrideColor = GrColor_ILLEGAL;
|
| + }
|
| +
|
| // When path rendering the stencil settings are not always set on the GrPipelineBuilder
|
| // so we must check the draw type. In cases where we will skip drawing we simply return a
|
| // null GrPipeline.
|
| @@ -98,13 +103,25 @@ GrPipeline::GrPipeline(const GrPipelineBuilder& pipelineBuilder,
|
| pipelineBuilder.fCoverageStages[i].processor()->usesLocalCoords();
|
| }
|
|
|
| - // let the GP init the batch tracker
|
| - fInitBT.fColorIgnored = SkToBool(optFlags & GrXferProcessor::kIgnoreColor_OptFlag);
|
| - fInitBT.fOverrideColor = fInitBT.fColorIgnored ? GrColor_ILLEGAL : overrideColor;
|
| - fInitBT.fCoverageIgnored = SkToBool(optFlags & GrXferProcessor::kIgnoreCoverage_OptFlag);
|
| - fInitBT.fUsesLocalCoords = usesLocalCoords;
|
| - fInitBT.fCanTweakAlphaForCoverage =
|
| - SkToBool(optFlags & GrXferProcessor::kCanTweakAlphaForCoverage_OptFlag);
|
| + // Setup info we need to pass to GrPrimitiveProcessors that are used with this GrPipeline.
|
| + fInfoForPrimitiveProcessor.fFlags = 0;
|
| + if (!SkToBool(optFlags & GrXferProcessor::kIgnoreColor_OptFlag)) {
|
| + fInfoForPrimitiveProcessor.fFlags |= GrPipelineInfo::kReadsColor_GrPipelineInfoFlag;
|
| + }
|
| + if (GrColor_ILLEGAL != overrideColor) {
|
| + fInfoForPrimitiveProcessor.fFlags |= GrPipelineInfo::kUseOverrideColor_GrPipelineInfoFlag;
|
| + fInfoForPrimitiveProcessor.fOverrideColor = overrideColor;
|
| + }
|
| + if (!SkToBool(optFlags & GrXferProcessor::kIgnoreCoverage_OptFlag)) {
|
| + fInfoForPrimitiveProcessor.fFlags |= GrPipelineInfo::kReadsCoverage_GrPipelineInfoFlag;
|
| + }
|
| + if (usesLocalCoords) {
|
| + fInfoForPrimitiveProcessor.fFlags |= GrPipelineInfo::kReadsLocalCoords_GrPipelineInfoFlag;
|
| + }
|
| + if (SkToBool(optFlags & GrXferProcessor::kCanTweakAlphaForCoverage_OptFlag)) {
|
| + fInfoForPrimitiveProcessor.fFlags |=
|
| + GrPipelineInfo::kCanTweakAlphaForCoverage_GrPipelineInfoFlag;
|
| + }
|
| }
|
|
|
| void GrPipeline::adjustProgramFromOptimizations(const GrPipelineBuilder& pipelineBuilder,
|
|
|