Initial change to create GeometryProcessor
BUG=skia:
R=bsalomon@google.com, robertphillips@google.com, egdaniel@google.com, jvanverth@google.com
Author: joshualitt@chromium.org
Review URL: https://codereview.chromium.org/509153002
diff --git a/src/gpu/GrDrawState.h b/src/gpu/GrDrawState.h
index 00bec9f..a1b07de 100644
--- a/src/gpu/GrDrawState.h
+++ b/src/gpu/GrDrawState.h
@@ -165,6 +165,20 @@
/// @}
+ /**
+ * The geometry processor is the sole element of the skia pipeline which can use the vertex,
+ * geometry, and tesselation shaders. The GP may also compute a coverage in its fragment shader
+ * but is never put in the color processing pipeline.
+ */
+
+ const GrEffect* setGeometryProcessor(const GrEffect* effect, int attr0 = -1, int attr1 = -1) {
+ SkASSERT(NULL != effect);
+ SkASSERT(!this->hasGeometryProcessor());
+ fGeometryProcessor.reset(new GrEffectStage(effect, attr0, attr1));
+ this->invalidateBlendOptFlags();
+ return effect;
+ }
+
///////////////////////////////////////////////////////////////////////////
/// @name Effect Stages
/// Each stage hosts a GrEffect. The effect produces an output color or coverage in the fragment
@@ -242,6 +256,7 @@
private:
GrDrawState* fDrawState;
+ SkAutoTDelete<GrEffectStage> fGeometryProcessor;
int fColorEffectCnt;
int fCoverageEffectCnt;
};
@@ -364,6 +379,7 @@
GrDrawState* fDrawState;
SkMatrix fViewMatrix;
int fNumColorStages;
+ bool fHasGeometryProcessor;
SkAutoSTArray<8, GrEffectStage::SavedCoordChange> fSavedCoordChanges;
};