| Index: src/gpu/GrProgramDesc.h
|
| diff --git a/src/gpu/GrProgramDesc.h b/src/gpu/GrProgramDesc.h
|
| index 3d53842e43ae2cab3a9ddaee0062c353c25593db..a20b99f74948c91377c7127ef12a17ff683b019b 100644
|
| --- a/src/gpu/GrProgramDesc.h
|
| +++ b/src/gpu/GrProgramDesc.h
|
| @@ -54,6 +54,36 @@
|
| return memcmp(a.asKey(), b.asKey(), a.keyLength() & ~0x3) < 0;
|
| }
|
|
|
| +
|
| + ///////////////////////////////////////////////////////////////////////////
|
| + /// @name Stage Output Types
|
| + ////
|
| +
|
| + enum PrimaryOutputType {
|
| + // Modulate color and coverage, write result as the color output.
|
| + kModulate_PrimaryOutputType,
|
| + // Combines the coverage, dst, and color as coverage * color + (1 - coverage) * dst. This
|
| + // can only be set if fDstReadKey is non-zero.
|
| + kCombineWithDst_PrimaryOutputType,
|
| +
|
| + kPrimaryOutputTypeCnt,
|
| + };
|
| +
|
| + enum SecondaryOutputType {
|
| + // There is no secondary output
|
| + kNone_SecondaryOutputType,
|
| + // Writes coverage as the secondary output. Only set if dual source blending is supported
|
| + // and primary output is kModulate.
|
| + kCoverage_SecondaryOutputType,
|
| + // Writes coverage * (1 - colorA) as the secondary output. Only set if dual source blending
|
| + // is supported and primary output is kModulate.
|
| + kCoverageISA_SecondaryOutputType,
|
| + // Writes coverage * (1 - colorRGBA) as the secondary output. Only set if dual source
|
| + // blending is supported and primary output is kModulate.
|
| + kCoverageISC_SecondaryOutputType,
|
| +
|
| + kSecondaryOutputTypeCnt,
|
| + };
|
|
|
| // Specifies where the initial color comes from before the stages are applied.
|
| enum ColorInput {
|
| @@ -74,6 +104,9 @@
|
|
|
| ColorInput fColorInput : 8;
|
| ColorInput fCoverageInput : 8;
|
| +
|
| + PrimaryOutputType fPrimaryOutputType : 8;
|
| + SecondaryOutputType fSecondaryOutputType : 8;
|
|
|
| SkBool8 fHasGeometryProcessor;
|
| int8_t fColorEffectCnt;
|
| @@ -107,7 +140,10 @@
|
| fInputCoverageIsUsed == that.fInputCoverageIsUsed &&
|
| fReadsDst == that.fReadsDst &&
|
| fReadsFragPosition == that.fReadsFragPosition &&
|
| - fRequiresLocalCoordAttrib == that.fRequiresLocalCoordAttrib;
|
| + fRequiresLocalCoordAttrib == that.fRequiresLocalCoordAttrib &&
|
| + fPrimaryOutputType == that.fPrimaryOutputType &&
|
| + fSecondaryOutputType == that.fSecondaryOutputType;
|
| +
|
| }
|
| bool operator!=(const DescInfo& that) const { return !(*this == that); };
|
| // TODO when GPs control uniform / attribute handling of color / coverage, then we can
|
| @@ -126,6 +162,9 @@
|
| bool fReadsFragPosition;
|
| bool fRequiresLocalCoordAttrib;
|
|
|
| + // Fragment shader color outputs
|
| + GrProgramDesc::PrimaryOutputType fPrimaryOutputType : 8;
|
| + GrProgramDesc::SecondaryOutputType fSecondaryOutputType : 8;
|
| };
|
|
|
| private:
|
|
|