| Index: src/gpu/GrDrawState.h
|
| diff --git a/src/gpu/GrDrawState.h b/src/gpu/GrDrawState.h
|
| index 4e226c5eb01327e389bbf398187609a0dde5e3d3..11a5af9870b2056d509b5ea6048574ab48fbbc23 100644
|
| --- a/src/gpu/GrDrawState.h
|
| +++ b/src/gpu/GrDrawState.h
|
| @@ -902,7 +902,7 @@ private:
|
| fCommon.fDrawFace = kBoth_DrawFace;
|
| }
|
|
|
| - /** Fields that are identical in GrDrawState and GrDrawState::DeferredState. */
|
| + /** This will be removed soon. The fields will become members of GrDrawState. */
|
| struct CommonState {
|
| // These fields are roughly sorted by decreasing likelihood of being different in op==
|
| GrColor fColor;
|
| @@ -941,101 +941,6 @@ private:
|
| bool operator!= (const CommonState& other) const { return !(*this == other); }
|
| };
|
|
|
| - /** GrDrawState uses GrEffectStages to hold stage state which holds a ref on GrEffectRef.
|
| - DeferredState must directly reference GrEffects, however. */
|
| - struct SavedEffectStage {
|
| - SavedEffectStage() : fEffect(NULL) {}
|
| - const GrEffect* fEffect;
|
| - GrEffectStage::SavedCoordChange fCoordChange;
|
| - };
|
| -
|
| -public:
|
| - /**
|
| - * DeferredState contains all of the data of a GrDrawState but does not hold refs on GrResource
|
| - * objects. Resources are allowed to hit zero ref count while in DeferredStates. Their internal
|
| - * dispose mechanism returns them to the cache. This allows recycling resources through the
|
| - * the cache while they are in a deferred draw queue.
|
| - */
|
| - class DeferredState {
|
| - public:
|
| - DeferredState() : fRenderTarget(NULL) {
|
| - SkDEBUGCODE(fInitialized = false;)
|
| - }
|
| - // TODO: Remove this when DeferredState no longer holds a ref to the RT
|
| - ~DeferredState() { SkSafeUnref(fRenderTarget); }
|
| -
|
| - void saveFrom(const GrDrawState& drawState) {
|
| - fCommon = drawState.fCommon;
|
| - // TODO: Here we will copy the GrRenderTarget pointer without taking a ref.
|
| - fRenderTarget = drawState.fRenderTarget.get();
|
| - SkSafeRef(fRenderTarget);
|
| - // Here we ref the effects directly rather than the effect-refs. TODO: When the effect-
|
| - // ref gets fully unref'ed it will cause the underlying effect to unref its resources
|
| - // and recycle them to the cache (if no one else is holding a ref to the resources).
|
| - fStages.reset(drawState.fColorStages.count() + drawState.fCoverageStages.count());
|
| - fColorStageCnt = drawState.fColorStages.count();
|
| - for (int i = 0; i < fColorStageCnt; ++i) {
|
| - fStages[i].saveFrom(drawState.fColorStages[i]);
|
| - }
|
| - for (int i = 0; i < drawState.fCoverageStages.count(); ++i) {
|
| - fStages[i + fColorStageCnt].saveFrom(drawState.fCoverageStages[i]);
|
| - }
|
| - SkDEBUGCODE(fInitialized = true;)
|
| - }
|
| -
|
| - void restoreTo(GrDrawState* drawState) const {
|
| - SkASSERT(fInitialized);
|
| - drawState->fCommon = fCommon;
|
| - drawState->setRenderTarget(fRenderTarget);
|
| - // reinflate color/cov stage arrays.
|
| - drawState->fColorStages.reset();
|
| - for (int i = 0; i < fColorStageCnt; ++i) {
|
| - SkNEW_APPEND_TO_TARRAY(&drawState->fColorStages, GrEffectStage, (fStages[i]));
|
| - }
|
| - int coverageStageCnt = fStages.count() - fColorStageCnt;
|
| - drawState->fCoverageStages.reset();
|
| - for (int i = 0; i < coverageStageCnt; ++i) {
|
| - SkNEW_APPEND_TO_TARRAY(&drawState->fCoverageStages,
|
| - GrEffectStage, (fStages[i + fColorStageCnt]));
|
| - }
|
| - }
|
| -
|
| - bool isEqual(const GrDrawState& state) const {
|
| - int numCoverageStages = fStages.count() - fColorStageCnt;
|
| - if (fRenderTarget != state.fRenderTarget.get() ||
|
| - fColorStageCnt != state.fColorStages.count() ||
|
| - numCoverageStages != state.fCoverageStages.count() ||
|
| - fCommon != state.fCommon) {
|
| - return false;
|
| - }
|
| - bool explicitLocalCoords = state.hasLocalCoordAttribute();
|
| - for (int i = 0; i < fColorStageCnt; ++i) {
|
| - if (!fStages[i].isEqual(state.fColorStages[i], explicitLocalCoords)) {
|
| - return false;
|
| - }
|
| - }
|
| - for (int i = 0; i < numCoverageStages; ++i) {
|
| - int s = fColorStageCnt + i;
|
| - if (!fStages[s].isEqual(state.fCoverageStages[i], explicitLocalCoords)) {
|
| - return false;
|
| - }
|
| - }
|
| - return true;
|
| - }
|
| -
|
| - private:
|
| - typedef SkAutoSTArray<8, GrEffectStage::DeferredStage> DeferredStageArray;
|
| -
|
| - GrRenderTarget* fRenderTarget;
|
| - CommonState fCommon;
|
| - int fColorStageCnt;
|
| - DeferredStageArray fStages;
|
| -
|
| - SkDEBUGCODE(bool fInitialized;)
|
| - };
|
| -
|
| -private:
|
| -
|
| SkAutoTUnref<GrRenderTarget> fRenderTarget;
|
| CommonState fCommon;
|
|
|
|
|