Index: src/gpu/GrOptDrawState.h |
diff --git a/src/gpu/GrOptDrawState.h b/src/gpu/GrOptDrawState.h |
index 903b227891ef18d65209e1c4337c4a44a7b3f78e..0bb3d07f89351603a7c7f4a4d750ada3fe096379 100644 |
--- a/src/gpu/GrOptDrawState.h |
+++ b/src/gpu/GrOptDrawState.h |
@@ -176,34 +176,21 @@ public: |
/////////////////////////////////////////////////////////////////////////// |
- /// @name State Flags |
+ /// @name Boolean Queries |
//// |
- bool isDitherState() const { return 0 != (fFlagBits & kDither_StateBit); } |
- bool isHWAntialiasState() const { return 0 != (fFlagBits & kHWAntialias_StateBit); } |
- bool isColorWriteDisabled() const { return 0 != (fFlagBits & kNoColorWrites_StateBit); } |
- bool isCoverageDrawing() const { return 0 != (fFlagBits & kCoverageDrawing_StateBit); } |
+ bool isDitherState() const { return SkToBool(fFlags & kDither_Flag); } |
+ bool isHWAntialiasState() const { return SkToBool(fFlags & kHWAA_Flag); } |
+ bool isColorWriteDisabled() const { return SkToBool(fFlags & kDisableColorWrite_Flag); } |
/// @} |
- /////////////////////////////////////////////////////////////////////////// |
- /// @name Face Culling |
- //// |
- |
- enum DrawFace { |
- kInvalid_DrawFace = -1, |
- |
- kBoth_DrawFace, |
- kCCW_DrawFace, |
- kCW_DrawFace, |
- }; |
- |
/** |
* Gets whether the target is drawing clockwise, counterclockwise, |
* or both faces. |
* @return the current draw face(s). |
*/ |
- DrawFace getDrawFace() const { return fDrawFace; } |
+ GrDrawState::DrawFace getDrawFace() const { return fDrawFace; } |
/// @} |
@@ -213,72 +200,10 @@ public: |
const GrProgramDesc& programDesc() const { return fDesc; } |
private: |
- // This is lifted from GrDrawState. This should be revised and made specific to this class/ |
- enum StateBits { |
- /** |
- * Perform dithering. TODO: Re-evaluate whether we need this bit |
- */ |
- kDither_StateBit = 0x01, |
- /** |
- * Perform HW anti-aliasing. This means either HW FSAA, if supported by the render target, |
- * or smooth-line rendering if a line primitive is drawn and line smoothing is supported by |
- * the 3D API. |
- */ |
- kHWAntialias_StateBit = 0x02, |
- /** |
- * Draws will respect the clip, otherwise the clip is ignored. |
- */ |
- kClip_StateBit = 0x04, |
- /** |
- * Disables writing to the color buffer. Useful when performing stencil |
- * operations. |
- */ |
- kNoColorWrites_StateBit = 0x08, |
- |
- /** |
- * Usually coverage is applied after color blending. The color is blended using the coeffs |
- * specified by setBlendFunc(). The blended color is then combined with dst using coeffs |
- * of src_coverage, 1-src_coverage. Sometimes we are explicitly drawing a coverage mask. In |
- * this case there is no distinction between coverage and color and the caller needs direct |
- * control over the blend coeffs. When set, there will be a single blend step controlled by |
- * setBlendFunc() which will use coverage*color as the src color. |
- */ |
- kCoverageDrawing_StateBit = 0x10 |
- }; |
- |
- /** |
- * Optimizations for blending / coverage to that can be applied based on the current state. |
- */ |
- enum BlendOptFlags { |
- /** |
- * No optimization |
- */ |
- kNone_BlendOpt = 0, |
- /** |
- * Don't draw at all |
- */ |
- kSkipDraw_BlendOptFlag = 0x1, |
- /** |
- * The coverage value does not have to be computed separately from alpha, the the output |
- * color can be the modulation of the two. |
- */ |
- kCoverageAsAlpha_BlendOptFlag = 0x2, |
- /** |
- * Instead of emitting a src color, emit coverage in the alpha channel and r,g,b are |
- * "don't cares". |
- */ |
- kEmitCoverage_BlendOptFlag = 0x4, |
- /** |
- * Emit transparent black instead of the src color, no need to compute coverage. |
- */ |
- kEmitTransBlack_BlendOptFlag = 0x8, |
- }; |
- GR_DECL_BITFIELD_OPS_FRIENDS(BlendOptFlags); |
- |
/** |
* Constructs and optimized drawState out of a GrRODrawState. |
*/ |
- GrOptDrawState(const GrDrawState& drawState, BlendOptFlags blendOptFlags, |
+ GrOptDrawState(const GrDrawState& drawState, GrDrawState::BlendOpt, |
GrBlendCoeff optSrcCoeff, GrBlendCoeff optDstCoeff, |
GrGpu*, const ScissorState&, const GrDeviceCoordTexture* dstCopy, |
GrGpu::DrawType); |
@@ -308,12 +233,12 @@ private: |
void removeFixedFunctionVertexAttribs(uint8_t removeVAFlags, GrProgramDesc::DescInfo*); |
/** |
- * Alter the OptDrawState (adjusting stages, vertex attribs, flags, etc.) based on the |
- * BlendOptFlags. |
+ * Alter the program desc and inputs (attribs and processors) based on the blend optimization. |
*/ |
- void adjustFromBlendOpts(const GrDrawState& ds, GrProgramDesc::DescInfo*, |
- int* firstColorStageIdx, int* firstCoverageStageIdx, |
- uint8_t* fixedFunctionVAToRemove); |
+ void adjustProgramForBlendOpt(const GrDrawState& ds, GrDrawState::BlendOpt, |
+ GrProgramDesc::DescInfo*, |
+ int* firstColorStageIdx, int* firstCoverageStageIdx, |
+ uint8_t* fixedFunctionVAToRemove); |
/** |
* Loop over the effect stages to determine various info like what data they will read and what |
@@ -327,9 +252,15 @@ private: |
* the function may adjust the blend coefficients. After this function is called the src and dst |
* blend coeffs will represent those used by backend API. |
*/ |
- void setOutputStateInfo(const GrDrawState& ds, const GrDrawTargetCaps&, |
+ void setOutputStateInfo(const GrDrawState& ds, GrDrawState::BlendOpt, const GrDrawTargetCaps&, |
GrProgramDesc::DescInfo*); |
+ enum Flags { |
+ kDither_Flag = 0x1, |
+ kHWAA_Flag = 0x2, |
+ kDisableColorWrite_Flag = 0x4, |
+ }; |
+ |
typedef GrPendingIOResource<GrRenderTarget, kWrite_GrIOType> RenderTarget; |
typedef SkSTArray<8, GrPendingFragmentStage> FragmentStageArray; |
typedef GrPendingProgramElement<const GrGeometryProcessor> ProgramGeometryProcessor; |
@@ -338,16 +269,15 @@ private: |
GrColor fColor; |
SkMatrix fViewMatrix; |
GrColor fBlendConstant; |
- uint32_t fFlagBits; |
const GrVertexAttrib* fVAPtr; |
int fVACount; |
size_t fVAStride; |
GrStencilSettings fStencilSettings; |
uint8_t fCoverage; |
- DrawFace fDrawFace; |
+ GrDrawState::DrawFace fDrawFace; |
GrBlendCoeff fSrcBlend; |
GrBlendCoeff fDstBlend; |
- |
+ uint32_t fFlags; |
ProgramGeometryProcessor fGeometryProcessor; |
FragmentStageArray fFragmentStages; |
@@ -356,14 +286,9 @@ private: |
SkAutoSTArray<4, GrVertexAttrib> fOptVA; |
- BlendOptFlags fBlendOptFlags; |
- |
GrProgramDesc fDesc; |
typedef SkRefCnt INHERITED; |
}; |
-GR_MAKE_BITFIELD_OPS(GrOptDrawState::BlendOptFlags); |
- |
#endif |
- |