Index: src/gpu/GrOptDrawState.h |
diff --git a/src/gpu/GrOptDrawState.h b/src/gpu/GrOptDrawState.h |
index c44bb6f8aa90afdd4fa7cd0e6828d4033db65275..ab531eed5eb7ebcb70020d263d2512d4ec70d472 100644 |
--- a/src/gpu/GrOptDrawState.h |
+++ b/src/gpu/GrOptDrawState.h |
@@ -10,7 +10,7 @@ |
#include "GrColor.h" |
#include "GrGpu.h" |
-#include "GrProcessorStage.h" |
+#include "GrPendingFragmentStage.h" |
#include "GrProgramDesc.h" |
#include "GrStencil.h" |
#include "GrTypesPriv.h" |
@@ -26,6 +26,8 @@ class GrDrawState; |
*/ |
class GrOptDrawState : public SkRefCnt { |
public: |
+ SK_DECLARE_INST_COUNT(GrOptDrawState) |
+ |
/** |
* Returns a snapshot of the current optimized state. The GrOptDrawState is reffed and ownership |
* is given to the caller. |
@@ -36,6 +38,7 @@ public: |
GrGpu::DrawType drawType); |
bool operator== (const GrOptDrawState& that) const; |
+ bool operator!= (const GrOptDrawState& that) const { return !(*this == that); } |
/////////////////////////////////////////////////////////////////////////// |
/// @name Vertex Attributes |
@@ -87,9 +90,6 @@ public: |
/// The input color to the first color-stage is either the constant color or interpolated |
/// per-vertex colors. The input to the first coverage stage is either a constant coverage |
/// (usually full-coverage) or interpolated per-vertex coverage. |
- /// |
- /// See the documentation of kCoverageDrawing_StateBit for information about disabling the |
- /// the color / coverage distinction. |
//// |
int numColorStages() const { return fNumColorStages; } |
@@ -101,15 +101,17 @@ public: |
bool hasGeometryProcessor() const { return SkToBool(fGeometryProcessor.get()); } |
const GrGeometryProcessor* getGeometryProcessor() const { return fGeometryProcessor.get(); } |
- const GrFragmentStage& getColorStage(int idx) const { |
+ const GrPendingFragmentStage& getColorStage(int idx) const { |
SkASSERT(idx < this->numColorStages()); |
return fFragmentStages[idx]; |
} |
- const GrFragmentStage& getCoverageStage(int idx) const { |
+ const GrPendingFragmentStage& getCoverageStage(int idx) const { |
SkASSERT(idx < this->numCoverageStages()); |
return fFragmentStages[fNumColorStages + idx]; |
} |
- const GrFragmentStage& getFragmentStage(int idx) const { return fFragmentStages[idx]; } |
+ const GrPendingFragmentStage& getFragmentStage(int idx) const { |
+ return fFragmentStages[idx]; |
+ } |
/// @} |
@@ -138,26 +140,6 @@ public: |
*/ |
const SkMatrix& getViewMatrix() const { return fViewMatrix; } |
- /** |
- * Retrieves the inverse of the current view matrix. |
- * |
- * If the current view matrix is invertible, return true, and if matrix |
- * is non-null, copy the inverse into it. If the current view matrix is |
- * non-invertible, return false and ignore the matrix parameter. |
- * |
- * @param matrix if not null, will receive a copy of the current inverse. |
- */ |
- bool getViewInverse(SkMatrix* matrix) const { |
- SkMatrix inverse; |
- if (fViewMatrix.invert(&inverse)) { |
- if (matrix) { |
- *matrix = inverse; |
- } |
- return true; |
- } |
- return false; |
- } |
- |
/// @} |
/////////////////////////////////////////////////////////////////////////// |
@@ -185,51 +167,8 @@ public: |
/// @name State Flags |
//// |
- /** |
- * Flags that affect rendering. Controlled using enable/disableState(). All |
- * default to disabled. |
- */ |
- 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, |
- |
- // Users of the class may add additional bits to the vector |
- kDummyStateBit, |
- kLastPublicStateBit = kDummyStateBit-1, |
- }; |
- |
- bool isStateFlagEnabled(uint32_t stateBit) const { return 0 != (stateBit & fFlagBits); } |
- |
bool isDitherState() const { return 0 != (fFlagBits & kDither_StateBit); } |
bool isHWAntialiasState() const { return 0 != (fFlagBits & kHWAntialias_StateBit); } |
- bool isClipState() const { return 0 != (fFlagBits & kClip_StateBit); } |
bool isColorWriteDisabled() const { return 0 != (fFlagBits & kNoColorWrites_StateBit); } |
bool isCoverageDrawing() const { return 0 != (fFlagBits & kCoverageDrawing_StateBit); } |
@@ -258,23 +197,43 @@ public: |
/////////////////////////////////////////////////////////////////////////// |
- /** Return type for CombineIfPossible. */ |
- enum CombinedState { |
- /** The GrDrawStates cannot be combined. */ |
- kIncompatible_CombinedState, |
- /** Either draw state can be used in place of the other. */ |
- kAOrB_CombinedState, |
- /** Use the first draw state. */ |
- kA_CombinedState, |
- /** Use the second draw state. */ |
- kB_CombinedState, |
- }; |
- |
- /// @} |
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. |
*/ |
@@ -358,11 +317,10 @@ private: |
void setOutputStateInfo(const GrDrawState& ds, const GrDrawTargetCaps&, |
GrProgramDesc::DescInfo*); |
- bool isEqual(const GrOptDrawState& that) const; |
- |
- // These fields are roughly sorted by decreasing likelihood of being different in op== |
- typedef GrTGpuResourceRef<GrRenderTarget> ProgramRenderTarget; |
- ProgramRenderTarget fRenderTarget; |
+ typedef GrPendingIOResource<GrRenderTarget, kWrite_GrIOType> RenderTarget; |
+ typedef SkSTArray<8, GrPendingFragmentStage> FragmentStageArray; |
+ typedef GrPendingProgramElement<const GrGeometryProcessor> ProgramGeometryProcessor; |
+ RenderTarget fRenderTarget; |
GrColor fColor; |
SkMatrix fViewMatrix; |
GrColor fBlendConstant; |
@@ -376,8 +334,6 @@ private: |
GrBlendCoeff fSrcBlend; |
GrBlendCoeff fDstBlend; |
- typedef SkSTArray<8, GrFragmentStage> FragmentStageArray; |
- typedef GrProgramElementRef<const GrGeometryProcessor> ProgramGeometryProcessor; |
ProgramGeometryProcessor fGeometryProcessor; |
FragmentStageArray fFragmentStages; |