diff options
Diffstat (limited to 'src/gpu/GrProcOptInfo.cpp')
-rw-r--r-- | src/gpu/GrProcOptInfo.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/gpu/GrProcOptInfo.cpp b/src/gpu/GrProcOptInfo.cpp index 9eda9bbd12..902a7c77e4 100644 --- a/src/gpu/GrProcOptInfo.cpp +++ b/src/gpu/GrProcOptInfo.cpp @@ -12,7 +12,8 @@ void GrProcOptInfo::analyzeProcessors(const GrFragmentProcessor* const* processors, int cnt) { for (int i = 0; i < cnt; ++i) { bool knowCurrentOutput = fProcessorsVisitedWithKnownOutput == fTotalProcessorsVisited; - if (!knowCurrentOutput && !fAllProcessorsCompatibleWithCoverageAsAlpha && !fIsOpaque) { + if (fUsesLocalCoords && !knowCurrentOutput && + !fAllProcessorsCompatibleWithCoverageAsAlpha && !fIsOpaque) { fTotalProcessorsVisited += cnt - i; return; } @@ -21,12 +22,19 @@ void GrProcOptInfo::analyzeProcessors(const GrFragmentProcessor* const* processo &fLastKnownOutputColor)) { ++fProcessorsVisitedWithKnownOutput; fIsOpaque = fLastKnownOutputColor.isOpaque(); + // We reset these since the caller is expected to not use the earlier fragment + // processors. + fAllProcessorsCompatibleWithCoverageAsAlpha = true; + fUsesLocalCoords = false; } else if (fIsOpaque && !fp->preservesOpaqueInput()) { fIsOpaque = false; } if (fAllProcessorsCompatibleWithCoverageAsAlpha && !fp->compatibleWithCoverageAsAlpha()) { fAllProcessorsCompatibleWithCoverageAsAlpha = false; } + if (fp->usesLocalCoords()) { + fUsesLocalCoords = true; + } ++fTotalProcessorsVisited; } } |