Remove early-out from color analysis pass.
This early-out was a useful optimization when the passed-in count could
be large, but the analysis pass only takes 1-2 inputs nowadays, so it
doesn't add value. (Even if we did have a lot of inputs, most of the
checks in this loop correspond directly to a flag-bit check on an FP;
they aren't expensive either way.)
Also, did some minor polish/variable renaming for readability.
Change-Id: I556db3269fd2f1781b4b0ff26a252ba4c76a1d4b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/415378
Commit-Queue: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
diff --git a/src/gpu/GrProcessorAnalysis.cpp b/src/gpu/GrProcessorAnalysis.cpp
index df3f426..76f52da 100644
--- a/src/gpu/GrProcessorAnalysis.cpp
+++ b/src/gpu/GrProcessorAnalysis.cpp
@@ -12,37 +12,33 @@
GrColorFragmentProcessorAnalysis::GrColorFragmentProcessorAnalysis(
const GrProcessorAnalysisColor& input,
std::unique_ptr<GrFragmentProcessor> const fps[],
- int cnt) {
+ int count) {
fCompatibleWithCoverageAsAlpha = true;
fIsOpaque = input.isOpaque();
fUsesLocalCoords = false;
fProcessorsToEliminate = 0;
- fKnowOutputColor = input.isConstant(&fLastKnownOutputColor);
- for (int i = 0; i < cnt; ++i) {
- if (fUsesLocalCoords && !fKnowOutputColor && !fCompatibleWithCoverageAsAlpha &&
- !fIsOpaque) {
- break;
- }
- const auto& fp = fps[i];
- if (fKnowOutputColor &&
- fp->hasConstantOutputForConstantInput(fLastKnownOutputColor, &fLastKnownOutputColor)) {
+ fOutputColorKnown = input.isConstant(&fLastKnownOutputColor);
+ for (int i = 0; i < count; ++i) {
+ const GrFragmentProcessor* fp = fps[i].get();
+ if (fOutputColorKnown && fp->hasConstantOutputForConstantInput(fLastKnownOutputColor,
+ &fLastKnownOutputColor)) {
++fProcessorsToEliminate;
fIsOpaque = fLastKnownOutputColor.isOpaque();
- // We reset these since the caller is expected to not use the earlier fragment
- // processors.
+ // We reset these flags since the earlier fragment processors are being eliminated.
fCompatibleWithCoverageAsAlpha = true;
fUsesLocalCoords = false;
- } else {
- fKnowOutputColor = false;
- if (fIsOpaque && !fp->preservesOpaqueInput()) {
- fIsOpaque = false;
- }
- if (fCompatibleWithCoverageAsAlpha && !fp->compatibleWithCoverageAsAlpha()) {
- fCompatibleWithCoverageAsAlpha = false;
- }
- if (fp->usesVaryingCoords()) {
- fUsesLocalCoords = true;
- }
+ continue;
+ }
+
+ fOutputColorKnown = false;
+ if (fIsOpaque && !fp->preservesOpaqueInput()) {
+ fIsOpaque = false;
+ }
+ if (fCompatibleWithCoverageAsAlpha && !fp->compatibleWithCoverageAsAlpha()) {
+ fCompatibleWithCoverageAsAlpha = false;
+ }
+ if (fp->usesVaryingCoords()) {
+ fUsesLocalCoords = true;
}
}
}