| Index: src/gpu/GrOptDrawState.cpp
|
| diff --git a/src/gpu/GrOptDrawState.cpp b/src/gpu/GrOptDrawState.cpp
|
| deleted file mode 100644
|
| index a11100711486490f9b586bc317c3abb4cb6ec050..0000000000000000000000000000000000000000
|
| --- a/src/gpu/GrOptDrawState.cpp
|
| +++ /dev/null
|
| @@ -1,166 +0,0 @@
|
| -/*
|
| - * Copyright 2014 Google Inc.
|
| - *
|
| - * Use of this source code is governed by a BSD-style license that can be
|
| - * found in the LICENSE file.
|
| - */
|
| -
|
| -#include "GrOptDrawState.h"
|
| -
|
| -#include "GrDrawState.h"
|
| -#include "GrDrawTargetCaps.h"
|
| -#include "GrGpu.h"
|
| -#include "GrProcOptInfo.h"
|
| -#include "GrXferProcessor.h"
|
| -
|
| -GrOptDrawState::GrOptDrawState(const GrDrawState& drawState,
|
| - const GrPrimitiveProcessor* primProc,
|
| - const GrDrawTargetCaps& caps,
|
| - const GrScissorState& scissorState,
|
| - const GrDeviceCoordTexture* dstCopy) {
|
| - const GrProcOptInfo& colorPOI = drawState.colorProcInfo(primProc);
|
| - const GrProcOptInfo& coveragePOI = drawState.coverageProcInfo(primProc);
|
| -
|
| - // Create XferProcessor from DS's XPFactory
|
| - SkAutoTUnref<GrXferProcessor> xferProcessor(
|
| - drawState.getXPFactory()->createXferProcessor(colorPOI, coveragePOI));
|
| -
|
| - GrColor overrideColor = GrColor_ILLEGAL;
|
| - if (colorPOI.firstEffectiveStageIndex() != 0) {
|
| - overrideColor = colorPOI.inputColorToEffectiveStage();
|
| - }
|
| -
|
| - GrXferProcessor::OptFlags optFlags;
|
| - if (xferProcessor) {
|
| - fXferProcessor.reset(xferProcessor.get());
|
| -
|
| - optFlags = xferProcessor->getOptimizations(colorPOI,
|
| - coveragePOI,
|
| - drawState.getStencil().doesWrite(),
|
| - &overrideColor,
|
| - caps);
|
| - }
|
| -
|
| - // When path rendering the stencil settings are not always set on the draw state
|
| - // so we must check the draw type. In cases where we will skip drawing we simply return a
|
| - // null GrOptDrawState.
|
| - if (!xferProcessor || (GrXferProcessor::kSkipDraw_OptFlag & optFlags)) {
|
| - // Set the fields that don't default init and return. The lack of a render target will
|
| - // indicate that this can be skipped.
|
| - fFlags = 0;
|
| - fDrawFace = GrDrawState::kInvalid_DrawFace;
|
| - return;
|
| - }
|
| -
|
| - fRenderTarget.reset(drawState.fRenderTarget.get());
|
| - SkASSERT(fRenderTarget);
|
| - fScissorState = scissorState;
|
| - fStencilSettings = drawState.getStencil();
|
| - fDrawFace = drawState.getDrawFace();
|
| - // TODO move this out of optDrawState
|
| - if (dstCopy) {
|
| - fDstCopy = *dstCopy;
|
| - }
|
| -
|
| - fFlags = 0;
|
| - if (drawState.isHWAntialias()) {
|
| - fFlags |= kHWAA_Flag;
|
| - }
|
| - if (drawState.isDither()) {
|
| - fFlags |= kDither_Flag;
|
| - }
|
| -
|
| - int firstColorStageIdx = colorPOI.firstEffectiveStageIndex();
|
| -
|
| - // TODO: Once we can handle single or four channel input into coverage stages then we can use
|
| - // drawState's coverageProcInfo (like color above) to set this initial information.
|
| - int firstCoverageStageIdx = 0;
|
| -
|
| - GrXferProcessor::BlendInfo blendInfo;
|
| - fXferProcessor->getBlendInfo(&blendInfo);
|
| -
|
| - this->adjustProgramFromOptimizations(drawState, optFlags, colorPOI, coveragePOI,
|
| - &firstColorStageIdx, &firstCoverageStageIdx);
|
| -
|
| - fDescInfo.fReadsDst = fXferProcessor->willReadDstColor();
|
| -
|
| - bool usesLocalCoords = false;
|
| -
|
| - // Copy Stages from DS to ODS
|
| - for (int i = firstColorStageIdx; i < drawState.numColorStages(); ++i) {
|
| - SkNEW_APPEND_TO_TARRAY(&fFragmentStages,
|
| - GrPendingFragmentStage,
|
| - (drawState.fColorStages[i]));
|
| - usesLocalCoords = usesLocalCoords ||
|
| - drawState.fColorStages[i].processor()->usesLocalCoords();
|
| - }
|
| -
|
| - fNumColorStages = fFragmentStages.count();
|
| - for (int i = firstCoverageStageIdx; i < drawState.numCoverageStages(); ++i) {
|
| - SkNEW_APPEND_TO_TARRAY(&fFragmentStages,
|
| - GrPendingFragmentStage,
|
| - (drawState.fCoverageStages[i]));
|
| - usesLocalCoords = usesLocalCoords ||
|
| - drawState.fCoverageStages[i].processor()->usesLocalCoords();
|
| - }
|
| -
|
| - // let the GP init the batch tracker
|
| - fInitBT.fColorIgnored = SkToBool(optFlags & GrXferProcessor::kIgnoreColor_OptFlag);
|
| - fInitBT.fOverrideColor = fInitBT.fColorIgnored ? GrColor_ILLEGAL : overrideColor;
|
| - fInitBT.fCoverageIgnored = SkToBool(optFlags & GrXferProcessor::kIgnoreCoverage_OptFlag);
|
| - fInitBT.fUsesLocalCoords = usesLocalCoords;
|
| -}
|
| -
|
| -void GrOptDrawState::adjustProgramFromOptimizations(const GrDrawState& ds,
|
| - GrXferProcessor::OptFlags flags,
|
| - const GrProcOptInfo& colorPOI,
|
| - const GrProcOptInfo& coveragePOI,
|
| - int* firstColorStageIdx,
|
| - int* firstCoverageStageIdx) {
|
| - fDescInfo.fReadsFragPosition = false;
|
| -
|
| - if ((flags & GrXferProcessor::kIgnoreColor_OptFlag) ||
|
| - (flags & GrXferProcessor::kOverrideColor_OptFlag)) {
|
| - *firstColorStageIdx = ds.numColorStages();
|
| - } else {
|
| - fDescInfo.fReadsFragPosition = colorPOI.readsFragPosition();
|
| - }
|
| -
|
| - if (flags & GrXferProcessor::kIgnoreCoverage_OptFlag) {
|
| - *firstCoverageStageIdx = ds.numCoverageStages();
|
| - } else {
|
| - if (coveragePOI.readsFragPosition()) {
|
| - fDescInfo.fReadsFragPosition = true;
|
| - }
|
| - }
|
| -}
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -
|
| -bool GrOptDrawState::isEqual(const GrOptDrawState& that) const {
|
| - if (this->getRenderTarget() != that.getRenderTarget() ||
|
| - this->fFragmentStages.count() != that.fFragmentStages.count() ||
|
| - this->fNumColorStages != that.fNumColorStages ||
|
| - this->fScissorState != that.fScissorState ||
|
| - this->fFlags != that.fFlags ||
|
| - this->fStencilSettings != that.fStencilSettings ||
|
| - this->fDrawFace != that.fDrawFace ||
|
| - this->fDstCopy.texture() != that.fDstCopy.texture()) {
|
| - return false;
|
| - }
|
| -
|
| - if (!this->getXferProcessor()->isEqual(*that.getXferProcessor())) {
|
| - 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)) {
|
| - return false;
|
| - }
|
| - }
|
| - return true;
|
| -}
|
| -
|
|
|