Index: src/gpu/GrPipeline.cpp |
diff --git a/src/gpu/GrPipeline.cpp b/src/gpu/GrPipeline.cpp |
index c3b8e77c1aa5317ca7337b0d047535ab5510044a..fbdd84bda5ea1e0066f927fdedc672a6f19c7a81 100644 |
--- a/src/gpu/GrPipeline.cpp |
+++ b/src/gpu/GrPipeline.cpp |
@@ -87,20 +87,20 @@ GrPipeline::GrPipeline(const GrPipelineBuilder& pipelineBuilder, |
// Copy Stages from PipelineBuilder to Pipeline |
for (int i = firstColorStageIdx; i < pipelineBuilder.numColorFragmentStages(); ++i) { |
- SkNEW_APPEND_TO_TARRAY(&fFragmentStages, |
- GrPendingFragmentStage, |
- (pipelineBuilder.fColorStages[i])); |
- usesLocalCoords = usesLocalCoords || |
- pipelineBuilder.fColorStages[i].processor()->usesLocalCoords(); |
+ const GrFragmentStage& fps = pipelineBuilder.fColorStages[i]; |
+ const GrFragmentProcessor* fp = fps.processor(); |
+ SkNEW_APPEND_TO_TARRAY(&fFragmentStages, GrPendingFragmentStage, (fps)); |
+ usesLocalCoords = usesLocalCoords || fp->usesLocalCoords(); |
+ fp->gatherCoordTransforms(&fCoordTransforms); |
} |
fNumColorStages = fFragmentStages.count(); |
for (int i = firstCoverageStageIdx; i < pipelineBuilder.numCoverageFragmentStages(); ++i) { |
- SkNEW_APPEND_TO_TARRAY(&fFragmentStages, |
- GrPendingFragmentStage, |
- (pipelineBuilder.fCoverageStages[i])); |
- usesLocalCoords = usesLocalCoords || |
- pipelineBuilder.fCoverageStages[i].processor()->usesLocalCoords(); |
+ const GrFragmentStage& fps = pipelineBuilder.fCoverageStages[i]; |
+ const GrFragmentProcessor* fp = fps.processor(); |
+ SkNEW_APPEND_TO_TARRAY(&fFragmentStages, GrPendingFragmentStage, (fps)); |
+ usesLocalCoords = usesLocalCoords || fp->usesLocalCoords(); |
+ fp->gatherCoordTransforms(&fCoordTransforms); |
} |
// Setup info we need to pass to GrPrimitiveProcessors that are used with this GrPipeline. |
@@ -152,7 +152,7 @@ void GrPipeline::adjustProgramFromOptimizations(const GrPipelineBuilder& pipelin |
//////////////////////////////////////////////////////////////////////////////// |
-bool GrPipeline::isEqual(const GrPipeline& that) const { |
+bool GrPipeline::isEqual(const GrPipeline& that, bool ignoreCoordTransforms) const { |
// If we point to the same pipeline, then we are necessarily equal |
if (this == &that) { |
return true; |
@@ -172,11 +172,9 @@ bool GrPipeline::isEqual(const GrPipeline& that) const { |
return false; |
} |
- // The program desc comparison should have already assured that the stage counts match. |
- SkASSERT(this->numFragmentStages() == that.numFragmentStages()); |
for (int i = 0; i < this->numFragmentStages(); i++) { |
- |
- if (this->getFragmentStage(i) != that.getFragmentStage(i)) { |
+ if (!this->getFragmentStage(i).processor()->isEqual(*that.getFragmentStage(i).processor(), |
+ ignoreCoordTransforms)) { |
return false; |
} |
} |