Index: src/gpu/GrPipeline.cpp |
diff --git a/src/gpu/GrPipeline.cpp b/src/gpu/GrPipeline.cpp |
index bd508e9dc1a737dd7aa6299b16e5ddc8e0d747b9..911169e3368f6a2c30203d73a226813357d8c509 100644 |
--- a/src/gpu/GrPipeline.cpp |
+++ b/src/gpu/GrPipeline.cpp |
@@ -48,7 +48,7 @@ void GrPipeline::internalConstructor(const GrPipelineBuilder& pipelineBuilder, |
const GrDeviceCoordTexture* dstCopy) { |
// Create XferProcessor from DS's XPFactory |
SkAutoTUnref<GrXferProcessor> xferProcessor( |
- pipelineBuilder.getXPFactory()->createXferProcessor(colorPOI, coveragePOI, dstCopy, caps)); |
+ pipelineBuilder.getXPFactory()->createXferProcessor(colorPOI, coveragePOI)); |
GrColor overrideColor = GrColor_ILLEGAL; |
if (colorPOI.firstEffectiveStageIndex() != 0) { |
@@ -82,6 +82,10 @@ void GrPipeline::internalConstructor(const GrPipelineBuilder& pipelineBuilder, |
fScissorState = scissorState; |
fStencilSettings = pipelineBuilder.getStencil(); |
fDrawFace = pipelineBuilder.getDrawFace(); |
+ // TODO move this out of GrPipeline |
+ if (dstCopy) { |
+ fDstCopy = *dstCopy; |
+ } |
fFlags = 0; |
if (pipelineBuilder.isHWAntialias()) { |
@@ -103,6 +107,8 @@ void GrPipeline::internalConstructor(const GrPipelineBuilder& pipelineBuilder, |
this->adjustProgramFromOptimizations(pipelineBuilder, optFlags, colorPOI, coveragePOI, |
&firstColorStageIdx, &firstCoverageStageIdx); |
+ fDescInfo.fReadsDst = fXferProcessor->willReadDstColor(); |
+ |
bool usesLocalCoords = false; |
// Copy Stages from PipelineBuilder to Pipeline |
@@ -136,20 +142,20 @@ void GrPipeline::adjustProgramFromOptimizations(const GrPipelineBuilder& pipelin |
const GrProcOptInfo& coveragePOI, |
int* firstColorStageIdx, |
int* firstCoverageStageIdx) { |
- fReadsFragPosition = false; |
+ fDescInfo.fReadsFragPosition = false; |
if ((flags & GrXferProcessor::kIgnoreColor_OptFlag) || |
(flags & GrXferProcessor::kOverrideColor_OptFlag)) { |
*firstColorStageIdx = pipelineBuilder.numColorStages(); |
} else { |
- fReadsFragPosition = colorPOI.readsFragPosition(); |
+ fDescInfo.fReadsFragPosition = colorPOI.readsFragPosition(); |
} |
if (flags & GrXferProcessor::kIgnoreCoverage_OptFlag) { |
*firstCoverageStageIdx = pipelineBuilder.numCoverageStages(); |
} else { |
if (coveragePOI.readsFragPosition()) { |
- fReadsFragPosition = true; |
+ fDescInfo.fReadsFragPosition = true; |
} |
} |
} |
@@ -163,7 +169,8 @@ bool GrPipeline::isEqual(const GrPipeline& that) const { |
this->fScissorState != that.fScissorState || |
this->fFlags != that.fFlags || |
this->fStencilSettings != that.fStencilSettings || |
- this->fDrawFace != that.fDrawFace) { |
+ this->fDrawFace != that.fDrawFace || |
+ this->fDstCopy.texture() != that.fDstCopy.texture()) { |
return false; |
} |