Index: src/gpu/GrProcOptInfo.cpp |
diff --git a/src/gpu/GrProcOptInfo.cpp b/src/gpu/GrProcOptInfo.cpp |
index bfd9e9ec8ceabd638a3e50179bdfe1aff9216348..4410d7136c710caf7039d9ac017b6beef114f786 100644 |
--- a/src/gpu/GrProcOptInfo.cpp |
+++ b/src/gpu/GrProcOptInfo.cpp |
@@ -23,7 +23,7 @@ void GrProcOptInfo::calcWithInitialValues(const GrFragmentProcessor * const proc |
out.fValidFlags = flags; |
out.fIsLCDCoverage = isLCD; |
fInOut.reset(out); |
- this->internalCalc(processors, cnt, false); |
+ this->internalCalc(processors, cnt); |
} |
void GrProcOptInfo::initUsingInvariantOutput(GrInitInvariantOutput invOutput) { |
@@ -31,16 +31,14 @@ void GrProcOptInfo::initUsingInvariantOutput(GrInitInvariantOutput invOutput) { |
} |
void GrProcOptInfo::completeCalculations(const GrFragmentProcessor * const processors[], int cnt) { |
- this->internalCalc(processors, cnt, false); |
+ this->internalCalc(processors, cnt); |
} |
-void GrProcOptInfo::internalCalc(const GrFragmentProcessor* const processors[], |
- int cnt, |
- bool initWillReadFragmentPosition) { |
+void GrProcOptInfo::internalCalc(const GrFragmentProcessor* const processors[], int cnt) { |
fFirstEffectiveProcessorIndex = 0; |
fInputColorIsUsed = true; |
fInputColor = fInOut.color(); |
- fReadsFragPosition = initWillReadFragmentPosition; |
+ fBuiltInState = GrProcessor::kNone_BuiltInState; |
for (int i = 0; i < cnt; ++i) { |
const GrFragmentProcessor* processor = processors[i]; |
@@ -50,12 +48,10 @@ void GrProcOptInfo::internalCalc(const GrFragmentProcessor* const processors[], |
if (!fInOut.willUseInputColor()) { |
fFirstEffectiveProcessorIndex = i; |
fInputColorIsUsed = false; |
- // Reset these since we don't care if previous stages read these values |
- fReadsFragPosition = initWillReadFragmentPosition; |
- } |
- if (processor->willReadFragmentPosition()) { |
- fReadsFragPosition = true; |
+ // Reset these since we will be removing any previous stages that read these values. |
+ fBuiltInState = GrProcessor::kNone_BuiltInState; |
} |
+ fBuiltInState |= processor->builtInState(); |
if (kRGBA_GrColorComponentFlags == fInOut.validFlags()) { |
fFirstEffectiveProcessorIndex = i + 1; |
fInputColor = fInOut.color(); |
@@ -63,8 +59,8 @@ void GrProcOptInfo::internalCalc(const GrFragmentProcessor* const processors[], |
// Since we are clearing all previous color stages we are in a state where we have found |
// zero stages that don't multiply the inputColor. |
fInOut.resetNonMulStageFound(); |
- // Reset these since we don't care if previous stages read these values |
- fReadsFragPosition = initWillReadFragmentPosition; |
+ // Reset these since we will be removing all processors. |
+ fBuiltInState = GrProcessor::kNone_BuiltInState; |
Chris Dalton
2016/02/25 19:19:03
FYI, this is bad news for a processor that modifie
joshualitt
2016/02/25 20:50:27
Yea, we don't actually remove processors from the
bsalomon
2016/02/25 21:11:03
Yeah, querying willModifySampleMask could be the i
|
} |
} |
} |