Add a basic constructor to GrPipeline
Adds a simple constructor for when we just need to set up basic
internal rendering.
BUG=skia:
Change-Id: Ib046c62e9a759aa7d0a3345e16ccf6e6af9342ea
Reviewed-on: https://skia-review.googlesource.com/8121
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
diff --git a/src/gpu/GrPipeline.cpp b/src/gpu/GrPipeline.cpp
index af8529a..d0c198f 100644
--- a/src/gpu/GrPipeline.cpp
+++ b/src/gpu/GrPipeline.cpp
@@ -192,6 +192,18 @@
}
}
+GrPipeline::GrPipeline(GrRenderTarget* rt, SkBlendMode blendmode)
+ : fRenderTarget(rt)
+ , fScissorState()
+ , fWindowRectsState()
+ , fUserStencilSettings(&GrUserStencilSettings::kUnused)
+ , fDrawFace(static_cast<uint16_t>(GrDrawFace::kBoth))
+ , fFlags()
+ , fXferProcessor(GrPorterDuffXPFactory::CreateNoCoverageXP(blendmode).get())
+ , fFragmentProcessors()
+ , fNumColorProcessors(0) {
+}
+
////////////////////////////////////////////////////////////////////////////////
bool GrPipeline::AreEqual(const GrPipeline& a, const GrPipeline& b) {
diff --git a/src/gpu/GrPipeline.h b/src/gpu/GrPipeline.h
index 3949a75..11de747 100644
--- a/src/gpu/GrPipeline.h
+++ b/src/gpu/GrPipeline.h
@@ -100,6 +100,12 @@
/** Creates a pipeline into a pre-allocated buffer */
static GrPipeline* CreateAt(void* memory, const CreateArgs&, GrPipelineOptimizations*);
+ /**
+ * Creates a simple pipeline with default settings and no processors. The provided blend mode
+ * must be "Porter Duff" (<= kLastCoeffMode).
+ **/
+ GrPipeline(GrRenderTarget*, SkBlendMode);
+
/// @}
///////////////////////////////////////////////////////////////////////////
diff --git a/src/gpu/effects/GrPorterDuffXferProcessor.cpp b/src/gpu/effects/GrPorterDuffXferProcessor.cpp
index 8289561..73c6ef4 100644
--- a/src/gpu/effects/GrPorterDuffXferProcessor.cpp
+++ b/src/gpu/effects/GrPorterDuffXferProcessor.cpp
@@ -900,6 +900,11 @@
return new PorterDuffXferProcessor(blendFormula);
}
+sk_sp<GrXferProcessor> GrPorterDuffXPFactory::CreateNoCoverageXP(SkBlendMode blendmode) {
+ BlendFormula formula = get_blend_formula(false, false, false, blendmode);
+ return sk_make_sp<PorterDuffXferProcessor>(formula);
+}
+
bool GrPorterDuffXPFactory::SrcOverWillNeedDstTexture(const GrCaps& caps,
const GrPipelineAnalysis& analysis) {
if (caps.shaderCaps()->dstReadInShaderSupport() ||