aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/GrProcOptInfo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpu/GrProcOptInfo.cpp')
-rw-r--r--src/gpu/GrProcOptInfo.cpp10
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;
}
}