aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Brian Salomon <bsalomon@google.com>2017-08-09 16:02:19 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-08-09 20:42:45 +0000
commit91326c34ee1f1531d62caa153746821b58e6e55d (patch)
tree0d5ca763efa6807b1f352d9ae9bc0537f9ed12f1
parent6a14edc8d8762a54a174c2df1bee5715fc0a0526 (diff)
Move GrProcessorSet into GrPipeline
Change-Id: Ibfa5e1adda3c32140590aa62a31d35654cef79dd Reviewed-on: https://skia-review.googlesource.com/28187 Commit-Queue: Brian Salomon <bsalomon@google.com> Reviewed-by: Robert Phillips <robertphillips@google.com>
-rw-r--r--gm/beziereffects.cpp10
-rw-r--r--gm/convexpolyeffect.cpp4
-rw-r--r--src/gpu/GrOpFlushState.h9
-rw-r--r--src/gpu/GrPipeline.cpp19
-rw-r--r--src/gpu/GrPipeline.h3
-rw-r--r--src/gpu/GrProcessorSet.cpp19
-rw-r--r--src/gpu/GrProcessorSet.h14
-rw-r--r--src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp3
-rw-r--r--src/gpu/instanced/InstancedOp.cpp3
-rw-r--r--src/gpu/ops/GrAAConvexPathRenderer.cpp4
-rw-r--r--src/gpu/ops/GrAAFillRectOp.cpp2
-rw-r--r--src/gpu/ops/GrAAHairLinePathRenderer.cpp4
-rw-r--r--src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp2
-rw-r--r--src/gpu/ops/GrAAStrokeRectOp.cpp4
-rw-r--r--src/gpu/ops/GrAtlasTextOp.cpp4
-rw-r--r--src/gpu/ops/GrAtlasTextOp.h2
-rw-r--r--src/gpu/ops/GrDashOp.cpp4
-rw-r--r--src/gpu/ops/GrDefaultPathRenderer.cpp2
-rw-r--r--src/gpu/ops/GrDrawAtlasOp.cpp2
-rw-r--r--src/gpu/ops/GrDrawAtlasOp.h2
-rw-r--r--src/gpu/ops/GrDrawPathOp.cpp5
-rw-r--r--src/gpu/ops/GrDrawPathOp.h1
-rw-r--r--src/gpu/ops/GrDrawVerticesOp.cpp2
-rw-r--r--src/gpu/ops/GrDrawVerticesOp.h2
-rw-r--r--src/gpu/ops/GrLatticeOp.cpp2
-rw-r--r--src/gpu/ops/GrMSAAPathRenderer.cpp2
-rw-r--r--src/gpu/ops/GrMeshDrawOp.h2
-rw-r--r--src/gpu/ops/GrNonAAFillRectOp.cpp4
-rw-r--r--src/gpu/ops/GrNonAAStrokeRectOp.cpp2
-rw-r--r--src/gpu/ops/GrOvalOpFactory.cpp10
-rw-r--r--src/gpu/ops/GrRegionOp.cpp2
-rw-r--r--src/gpu/ops/GrShadowRRectOp.cpp4
-rw-r--r--src/gpu/ops/GrSimpleMeshDrawOpHelper.cpp17
-rw-r--r--src/gpu/ops/GrSimpleMeshDrawOpHelper.h11
-rw-r--r--src/gpu/ops/GrSmallPathRenderer.cpp2
-rw-r--r--src/gpu/ops/GrTessellatingPathRenderer.cpp10
-rw-r--r--tests/OnFlushCallbackTest.cpp2
-rw-r--r--tests/PrimitiveProcessorTest.cpp5
-rw-r--r--tests/ProcessorTest.cpp2
39 files changed, 116 insertions, 87 deletions
diff --git a/gm/beziereffects.cpp b/gm/beziereffects.cpp
index 77f86c5ea4..b4225db0b4 100644
--- a/gm/beziereffects.cpp
+++ b/gm/beziereffects.cpp
@@ -43,8 +43,8 @@ protected:
this->setBounds(rect, HasAABloat::kYes, IsZeroArea::kNo);
}
- const GrPipeline* makePipeline(Target* target) const {
- return target->makePipeline(0, &fProcessorSet);
+ const GrPipeline* makePipeline(Target* target) {
+ return target->makePipeline(0, std::move(fProcessorSet));
}
const GrGeometryProcessor* gp() const { return fGeometryProcessor.get(); }
@@ -78,7 +78,7 @@ private:
BezierCubicTestOp(sk_sp<GrGeometryProcessor> gp, const SkRect& rect, GrColor color)
: INHERITED(std::move(gp), rect, color, ClassID()) {}
- void onPrepareDraws(Target* target) const override {
+ void onPrepareDraws(Target* target) override {
QuadHelper helper;
size_t vertexStride = this->gp()->getVertexStride();
SkASSERT(vertexStride == sizeof(SkPoint));
@@ -253,7 +253,7 @@ private:
float fKLM[4]; // The last value is ignored. The effect expects a vec4f.
};
- void onPrepareDraws(Target* target) const override {
+ void onPrepareDraws(Target* target) override {
QuadHelper helper;
size_t vertexStride = this->gp()->getVertexStride();
SkASSERT(vertexStride == sizeof(Vertex));
@@ -467,7 +467,7 @@ private:
float fKLM[4]; // The last value is ignored. The effect expects a vec4f.
};
- void onPrepareDraws(Target* target) const override {
+ void onPrepareDraws(Target* target) override {
QuadHelper helper;
size_t vertexStride = this->gp()->getVertexStride();
SkASSERT(vertexStride == sizeof(Vertex));
diff --git a/gm/convexpolyeffect.cpp b/gm/convexpolyeffect.cpp
index 0d05d10487..9c437e2ffa 100644
--- a/gm/convexpolyeffect.cpp
+++ b/gm/convexpolyeffect.cpp
@@ -65,7 +65,7 @@ private:
this->setBounds(sorted_rect(fRect), HasAABloat::kNo, IsZeroArea::kNo);
}
- void onPrepareDraws(Target* target) const override {
+ void onPrepareDraws(Target* target) override {
using namespace GrDefaultGeoProcFactory;
Color color(fColor);
@@ -82,7 +82,7 @@ private:
fRect.toQuad(verts);
- helper.recordDraw(target, gp.get(), target->makePipeline(0, &fProcessors));
+ helper.recordDraw(target, gp.get(), target->makePipeline(0, std::move(fProcessors)));
}
bool onCombineIfPossible(GrOp* op, const GrCaps& caps) override { return false; }
diff --git a/src/gpu/GrOpFlushState.h b/src/gpu/GrOpFlushState.h
index 4d1685638f..2c860f9b81 100644
--- a/src/gpu/GrOpFlushState.h
+++ b/src/gpu/GrOpFlushState.h
@@ -113,7 +113,7 @@ public:
}
template <typename... Args>
- GrPipeline* allocPipeline(Args... args) {
+ GrPipeline* allocPipeline(Args&&... args) {
return fPipelines.make<GrPipeline>(std::forward<Args>(args)...);
}
@@ -244,7 +244,7 @@ public:
}
template <typename... Args>
- GrPipeline* allocPipeline(Args... args) {
+ GrPipeline* allocPipeline(Args&&... args) {
return this->state()->allocPipeline(std::forward<Args>(args)...);
}
@@ -252,16 +252,15 @@ public:
* Helper that makes a pipeline targeting the op's render target that incorporates the op's
* GrAppliedClip.
* */
- GrPipeline* makePipeline(uint32_t pipelineFlags, const GrProcessorSet* processorSet) {
+ GrPipeline* makePipeline(uint32_t pipelineFlags, GrProcessorSet&& processorSet) {
GrPipeline::InitArgs pipelineArgs;
pipelineArgs.fFlags = pipelineFlags;
- pipelineArgs.fProcessors = processorSet;
pipelineArgs.fProxy = this->proxy();
pipelineArgs.fAppliedClip = this->clip();
pipelineArgs.fDstProxy = this->dstProxy();
pipelineArgs.fCaps = &this->caps();
pipelineArgs.fResourceProvider = this->resourceProvider();
- return this->allocPipeline(pipelineArgs);
+ return this->allocPipeline(pipelineArgs, std::move(processorSet));
}
private:
diff --git a/src/gpu/GrPipeline.cpp b/src/gpu/GrPipeline.cpp
index 8e91d8133b..f6848962b8 100644
--- a/src/gpu/GrPipeline.cpp
+++ b/src/gpu/GrPipeline.cpp
@@ -17,10 +17,9 @@
#include "ops/GrOp.h"
-GrPipeline::GrPipeline(const InitArgs& args) {
+GrPipeline::GrPipeline(const InitArgs& args, GrProcessorSet&& processors) {
SkASSERT(args.fProxy);
- SkASSERT(args.fProcessors);
- SkASSERT(args.fProcessors->isFinalized());
+ SkASSERT(processors.isFinalized());
fProxy.reset(args.fProxy);
@@ -38,7 +37,7 @@ GrPipeline::GrPipeline(const InitArgs& args) {
fUserStencilSettings = args.fUserStencil;
- fXferProcessor = args.fProcessors->refXferProcessor();
+ fXferProcessor = processors.refXferProcessor();
if (args.fDstProxy.proxy()) {
if (!args.fDstProxy.proxy()->instantiate(args.fResourceProvider)) {
@@ -50,24 +49,24 @@ GrPipeline::GrPipeline(const InitArgs& args) {
}
// Copy GrFragmentProcessors from GrProcessorSet to Pipeline
- fNumColorProcessors = args.fProcessors->numColorFragmentProcessors();
+ fNumColorProcessors = processors.numColorFragmentProcessors();
int numTotalProcessors =
- fNumColorProcessors + args.fProcessors->numCoverageFragmentProcessors();
+ fNumColorProcessors + processors.numCoverageFragmentProcessors();
if (args.fAppliedClip && args.fAppliedClip->clipCoverageFragmentProcessor()) {
++numTotalProcessors;
}
fFragmentProcessors.reset(numTotalProcessors);
int currFPIdx = 0;
- for (int i = 0; i < args.fProcessors->numColorFragmentProcessors(); ++i, ++currFPIdx) {
- const GrFragmentProcessor* fp = args.fProcessors->colorFragmentProcessor(i);
+ for (int i = 0; i < processors.numColorFragmentProcessors(); ++i, ++currFPIdx) {
+ const GrFragmentProcessor* fp = processors.colorFragmentProcessor(i);
fFragmentProcessors[currFPIdx].reset(fp);
if (!fp->instantiate(args.fResourceProvider)) {
this->markAsBad();
}
}
- for (int i = 0; i < args.fProcessors->numCoverageFragmentProcessors(); ++i, ++currFPIdx) {
- const GrFragmentProcessor* fp = args.fProcessors->coverageFragmentProcessor(i);
+ for (int i = 0; i < processors.numCoverageFragmentProcessors(); ++i, ++currFPIdx) {
+ const GrFragmentProcessor* fp = processors.coverageFragmentProcessor(i);
fFragmentProcessors[currFPIdx].reset(fp);
if (!fp->instantiate(args.fResourceProvider)) {
this->markAsBad();
diff --git a/src/gpu/GrPipeline.h b/src/gpu/GrPipeline.h
index 075f09cf63..c4c7599527 100644
--- a/src/gpu/GrPipeline.h
+++ b/src/gpu/GrPipeline.h
@@ -76,7 +76,6 @@ public:
struct InitArgs {
uint32_t fFlags = 0;
- const GrProcessorSet* fProcessors = nullptr; // Must be finalized
const GrUserStencilSettings* fUserStencil = &GrUserStencilSettings::kUnused;
const GrAppliedClip* fAppliedClip = nullptr;
GrRenderTargetProxy* fProxy = nullptr;
@@ -102,7 +101,7 @@ public:
**/
GrPipeline(GrRenderTargetProxy*, ScissorState, SkBlendMode);
- GrPipeline(const InitArgs& args);
+ GrPipeline(const InitArgs& args, GrProcessorSet&& processors);
GrPipeline(const GrPipeline&) = delete;
GrPipeline& operator=(const GrPipeline&) = delete;
diff --git a/src/gpu/GrProcessorSet.cpp b/src/gpu/GrProcessorSet.cpp
index 21e5fc3391..20d6745cad 100644
--- a/src/gpu/GrProcessorSet.cpp
+++ b/src/gpu/GrProcessorSet.cpp
@@ -13,10 +13,14 @@
#include "effects/GrPorterDuffXferProcessor.h"
const GrProcessorSet& GrProcessorSet::EmptySet() {
- static const GrProcessorSet gEmpty(GrProcessorSet::Empty::kEmpty);
+ static GrProcessorSet gEmpty(GrProcessorSet::Empty::kEmpty);
return gEmpty;
}
+GrProcessorSet GrProcessorSet::MakeEmptySet() {
+ return GrProcessorSet(GrProcessorSet::Empty::kEmpty);
+}
+
GrProcessorSet::GrProcessorSet(GrPaint&& paint) : fXP(paint.getXPFactory()) {
fFlags = 0;
if (paint.numColorFragmentProcessors() <= kMaxColorProcessors) {
@@ -53,6 +57,19 @@ GrProcessorSet::GrProcessorSet(sk_sp<GrFragmentProcessor> colorFP)
fFragmentProcessors[0] = colorFP.release();
}
+GrProcessorSet::GrProcessorSet(GrProcessorSet&& that)
+ : fXP(std::move(that.fXP))
+ , fColorFragmentProcessorCnt(that.fColorFragmentProcessorCnt)
+ , fFragmentProcessorOffset(0)
+ , fFlags(that.fFlags) {
+ fFragmentProcessors.reset(that.fFragmentProcessors.count() - that.fFragmentProcessorOffset);
+ for (int i = 0; i < fFragmentProcessors.count(); ++i) {
+ fFragmentProcessors[i] = that.fFragmentProcessors[i + that.fFragmentProcessorOffset];
+ }
+ that.fColorFragmentProcessorCnt = 0;
+ that.fFragmentProcessors.reset(0);
+}
+
GrProcessorSet::~GrProcessorSet() {
for (int i = fFragmentProcessorOffset; i < fFragmentProcessors.count(); ++i) {
if (this->isFinalized()) {
diff --git a/src/gpu/GrProcessorSet.h b/src/gpu/GrProcessorSet.h
index e3fe4c64b2..d3aaf6dd61 100644
--- a/src/gpu/GrProcessorSet.h
+++ b/src/gpu/GrProcessorSet.h
@@ -17,15 +17,18 @@
class GrAppliedClip;
class GrXPFactory;
-class GrProcessorSet : private SkNoncopyable {
+class GrProcessorSet {
private:
// Arbitrary constructor arg for empty set and analysis
enum class Empty { kEmpty };
public:
- GrProcessorSet(GrPaint&& paint);
- GrProcessorSet(SkBlendMode mode);
+ GrProcessorSet(GrPaint&&);
+ GrProcessorSet(SkBlendMode);
GrProcessorSet(sk_sp<GrFragmentProcessor> colorFP);
+ GrProcessorSet(GrProcessorSet&&);
+ GrProcessorSet(const GrProcessorSet&) = delete;
+ GrProcessorSet& operator=(const GrProcessorSet&) = delete;
~GrProcessorSet();
@@ -136,6 +139,7 @@ public:
/** These are valid only for non-LCD coverage. */
static const GrProcessorSet& EmptySet();
+ static GrProcessorSet MakeEmptySet();
static constexpr const Analysis EmptySetAnalysis() { return Analysis(Empty::kEmpty); }
SkString dumpProcessors() const;
@@ -151,6 +155,10 @@ private:
union XP {
XP(const GrXPFactory* factory) : fFactory(factory) {}
XP(const GrXferProcessor* processor) : fProcessor(processor) {}
+ explicit XP(XP&& that) : fProcessor(that.fProcessor) {
+ SkASSERT(fProcessor == that.fProcessor);
+ that.fProcessor = nullptr;
+ }
const GrXPFactory* fFactory;
const GrXferProcessor* fProcessor;
};
diff --git a/src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp b/src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp
index 78d8347709..c067e3a34e 100644
--- a/src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp
+++ b/src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp
@@ -295,11 +295,10 @@ void DrawPathsOp::onExecute(GrOpFlushState* flushState) {
GrPipeline::InitArgs args;
args.fAppliedClip = flushState->drawOpArgs().fAppliedClip;
args.fCaps = &flushState->caps();
- args.fProcessors = &fProcessors;
args.fFlags = fSRGBFlags;
args.fProxy = flushState->drawOpArgs().fProxy;
args.fDstProxy = flushState->drawOpArgs().fDstProxy;
- GrPipeline pipeline(args);
+ GrPipeline pipeline(args, std::move(fProcessors));
int baseInstance = fBaseInstance;
diff --git a/src/gpu/instanced/InstancedOp.cpp b/src/gpu/instanced/InstancedOp.cpp
index 229a144f07..f13a1dc47b 100644
--- a/src/gpu/instanced/InstancedOp.cpp
+++ b/src/gpu/instanced/InstancedOp.cpp
@@ -229,7 +229,6 @@ void InstancedOp::onExecute(GrOpFlushState* state) {
args.fAppliedClip = state->drawOpArgs().fAppliedClip;
args.fCaps = &state->caps();
args.fResourceProvider = state->resourceProvider();
- args.fProcessors = &fProcessors;
args.fFlags = GrAATypeIsHW(fInfo.aaType()) ? GrPipeline::kHWAntialias_Flag : 0;
if (fAllowsSRGBInputs) {
args.fFlags |= GrPipeline::kAllowSRGBInputs_Flag;
@@ -239,7 +238,7 @@ void InstancedOp::onExecute(GrOpFlushState* state) {
}
args.fProxy = state->drawOpArgs().fProxy;
args.fDstProxy = state->drawOpArgs().fDstProxy;
- GrPipeline pipeline(args);
+ GrPipeline pipeline(args, std::move(fProcessors));
if (GrXferBarrierType barrierType = pipeline.xferBarrierType(*state->gpu()->caps())) {
state->gpu()->xferBarrier(pipeline.renderTarget(), barrierType);
diff --git a/src/gpu/ops/GrAAConvexPathRenderer.cpp b/src/gpu/ops/GrAAConvexPathRenderer.cpp
index 22b2b5980f..af32a14bd5 100644
--- a/src/gpu/ops/GrAAConvexPathRenderer.cpp
+++ b/src/gpu/ops/GrAAConvexPathRenderer.cpp
@@ -762,7 +762,7 @@ public:
}
private:
- void prepareLinesOnlyDraws(Target* target) const {
+ void prepareLinesOnlyDraws(Target* target) {
// Setup GrGeometryProcessor
sk_sp<GrGeometryProcessor> gp(make_lines_only_gp(fHelper.compatibleWithAlphaAsCoverage(),
fPaths.back().fViewMatrix,
@@ -821,7 +821,7 @@ private:
}
}
- void onPrepareDraws(Target* target) const override {
+ void onPrepareDraws(Target* target) override {
#ifndef SK_IGNORE_LINEONLY_AA_CONVEX_PATH_OPTS
if (fLinesOnly) {
this->prepareLinesOnlyDraws(target);
diff --git a/src/gpu/ops/GrAAFillRectOp.cpp b/src/gpu/ops/GrAAFillRectOp.cpp
index 9d328c92f2..d0976a0b21 100644
--- a/src/gpu/ops/GrAAFillRectOp.cpp
+++ b/src/gpu/ops/GrAAFillRectOp.cpp
@@ -228,7 +228,7 @@ public:
}
private:
- void onPrepareDraws(Target* target) const override {
+ void onPrepareDraws(Target* target) override {
using namespace GrDefaultGeoProcFactory;
Color color(Color::kPremulGrColorAttribute_Type);
diff --git a/src/gpu/ops/GrAAHairLinePathRenderer.cpp b/src/gpu/ops/GrAAHairLinePathRenderer.cpp
index 5d12fdfdbf..c5479b7849 100644
--- a/src/gpu/ops/GrAAHairLinePathRenderer.cpp
+++ b/src/gpu/ops/GrAAHairLinePathRenderer.cpp
@@ -801,7 +801,7 @@ public:
}
private:
- void onPrepareDraws(Target*) const override;
+ void onPrepareDraws(Target*) override;
typedef SkTArray<SkPoint, true> PtArray;
typedef SkTArray<int, true> IntArray;
@@ -865,7 +865,7 @@ private:
} // anonymous namespace
-void AAHairlineOp::onPrepareDraws(Target* target) const {
+void AAHairlineOp::onPrepareDraws(Target* target) {
// Setup the viewmatrix and localmatrix for the GrGeometryProcessor.
SkMatrix invert;
if (!this->viewMatrix().invert(&invert)) {
diff --git a/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp b/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp
index 356c7ac4aa..c1fd4f7e65 100644
--- a/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp
+++ b/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp
@@ -221,7 +221,7 @@ private:
target->draw(gp, pipeline, mesh);
}
- void onPrepareDraws(Target* target) const override {
+ void onPrepareDraws(Target* target) override {
const GrPipeline* pipeline = fHelper.makePipeline(target);
// Setup GrGeometryProcessor
diff --git a/src/gpu/ops/GrAAStrokeRectOp.cpp b/src/gpu/ops/GrAAStrokeRectOp.cpp
index e3e2b23b37..07d8f30e62 100644
--- a/src/gpu/ops/GrAAStrokeRectOp.cpp
+++ b/src/gpu/ops/GrAAStrokeRectOp.cpp
@@ -197,7 +197,7 @@ public:
}
private:
- void onPrepareDraws(Target*) const override;
+ void onPrepareDraws(Target*) override;
static const int kMiterIndexCnt = 3 * 24;
static const int kMiterVertexCnt = 16;
@@ -246,7 +246,7 @@ private:
} // anonymous namespace
-void AAStrokeRectOp::onPrepareDraws(Target* target) const {
+void AAStrokeRectOp::onPrepareDraws(Target* target) {
sk_sp<GrGeometryProcessor> gp(create_stroke_rect_gp(fHelper.compatibleWithAlphaAsCoverage(),
this->viewMatrix(),
fHelper.usesLocalCoords()));
diff --git a/src/gpu/ops/GrAtlasTextOp.cpp b/src/gpu/ops/GrAtlasTextOp.cpp
index 8c49e6dd19..e8d3caf7d6 100644
--- a/src/gpu/ops/GrAtlasTextOp.cpp
+++ b/src/gpu/ops/GrAtlasTextOp.cpp
@@ -75,7 +75,7 @@ GrDrawOp::RequiresDstTexture GrAtlasTextOp::finalize(const GrCaps& caps,
return analysis.requiresDstTexture() ? RequiresDstTexture::kYes : RequiresDstTexture::kNo;
}
-void GrAtlasTextOp::onPrepareDraws(Target* target) const {
+void GrAtlasTextOp::onPrepareDraws(Target* target) {
// if we have RGB, then we won't have any SkShaders so no need to use a localmatrix.
// TODO actually only invert if we don't have RGBA
SkMatrix localMatrix;
@@ -93,7 +93,7 @@ void GrAtlasTextOp::onPrepareDraws(Target* target) const {
GrMaskFormat maskFormat = this->maskFormat();
FlushInfo flushInfo;
- flushInfo.fPipeline = target->makePipeline(fSRGBFlags, &fProcessors);
+ flushInfo.fPipeline = target->makePipeline(fSRGBFlags, std::move(fProcessors));
if (this->usesDistanceFields()) {
flushInfo.fGeometryProcessor =
this->setupDfProcessor(this->viewMatrix(),
diff --git a/src/gpu/ops/GrAtlasTextOp.h b/src/gpu/ops/GrAtlasTextOp.h
index 3456fe0dcc..5c37d45ea2 100644
--- a/src/gpu/ops/GrAtlasTextOp.h
+++ b/src/gpu/ops/GrAtlasTextOp.h
@@ -119,7 +119,7 @@ private:
int fVertexOffset;
};
- void onPrepareDraws(Target* target) const override;
+ void onPrepareDraws(Target*) override;
GrMaskFormat maskFormat() const {
switch (fMaskType) {
diff --git a/src/gpu/ops/GrDashOp.cpp b/src/gpu/ops/GrDashOp.cpp
index 7a23b5ac32..6ca55b0058 100644
--- a/src/gpu/ops/GrDashOp.cpp
+++ b/src/gpu/ops/GrDashOp.cpp
@@ -356,7 +356,7 @@ private:
bool fHasEndRect;
};
- void onPrepareDraws(Target* target) const override {
+ void onPrepareDraws(Target* target) override {
int instanceCount = fLines.count();
SkPaint::Cap cap = this->cap();
bool isRoundCap = SkPaint::kRound_Cap == cap;
@@ -662,7 +662,7 @@ private:
if (fAllowsSRGBInputs) {
pipelineFlags |= GrPipeline::kAllowSRGBInputs_Flag;
}
- const GrPipeline* pipeline = target->makePipeline(pipelineFlags, &fProcessorSet);
+ const GrPipeline* pipeline = target->makePipeline(pipelineFlags, std::move(fProcessorSet));
helper.recordDraw(target, gp.get(), pipeline);
}
diff --git a/src/gpu/ops/GrDefaultPathRenderer.cpp b/src/gpu/ops/GrDefaultPathRenderer.cpp
index 891c5a5a1e..fb720850c0 100644
--- a/src/gpu/ops/GrDefaultPathRenderer.cpp
+++ b/src/gpu/ops/GrDefaultPathRenderer.cpp
@@ -380,7 +380,7 @@ public:
}
private:
- void onPrepareDraws(Target* target) const override {
+ void onPrepareDraws(Target* target) override {
sk_sp<GrGeometryProcessor> gp;
{
using namespace GrDefaultGeoProcFactory;
diff --git a/src/gpu/ops/GrDrawAtlasOp.cpp b/src/gpu/ops/GrDrawAtlasOp.cpp
index f5d636cf9d..6659c6a633 100644
--- a/src/gpu/ops/GrDrawAtlasOp.cpp
+++ b/src/gpu/ops/GrDrawAtlasOp.cpp
@@ -117,7 +117,7 @@ SkString GrDrawAtlasOp::dumpInfo() const {
return string;
}
-void GrDrawAtlasOp::onPrepareDraws(Target* target) const {
+void GrDrawAtlasOp::onPrepareDraws(Target* target) {
// Setup geometry processor
sk_sp<GrGeometryProcessor> gp(make_gp(this->hasColors(), this->color(), this->viewMatrix()));
diff --git a/src/gpu/ops/GrDrawAtlasOp.h b/src/gpu/ops/GrDrawAtlasOp.h
index bec2eb1541..7c3bceb1e0 100644
--- a/src/gpu/ops/GrDrawAtlasOp.h
+++ b/src/gpu/ops/GrDrawAtlasOp.h
@@ -40,7 +40,7 @@ public:
RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip) override;
private:
- void onPrepareDraws(Target*) const override;
+ void onPrepareDraws(Target*) override;
GrColor color() const { return fColor; }
const SkMatrix& viewMatrix() const { return fViewMatrix; }
diff --git a/src/gpu/ops/GrDrawPathOp.cpp b/src/gpu/ops/GrDrawPathOp.cpp
index fa7fc157d0..9cf6116b99 100644
--- a/src/gpu/ops/GrDrawPathOp.cpp
+++ b/src/gpu/ops/GrDrawPathOp.cpp
@@ -39,7 +39,6 @@ GrPipeline::InitArgs GrDrawPathOpBase::pipelineInitArgs(const GrOpFlushState& st
0xffff>()
};
GrPipeline::InitArgs args;
- args.fProcessors = &this->processors();
args.fFlags = fPipelineSRGBFlags;
if (GrAATypeIsHW(fAAType)) {
args.fFlags |= GrPipeline::kHWAntialias_Flag;
@@ -66,7 +65,7 @@ void init_stencil_pass_settings(const GrOpFlushState& flushState,
//////////////////////////////////////////////////////////////////////////////
void GrDrawPathOp::onExecute(GrOpFlushState* state) {
- GrPipeline pipeline(this->pipelineInitArgs(*state));
+ GrPipeline pipeline(this->pipelineInitArgs(*state), this->detachProcessors());
sk_sp<GrPathProcessor> pathProc(GrPathProcessor::Create(this->color(), this->viewMatrix()));
GrStencilSettings stencil;
@@ -178,7 +177,7 @@ void GrDrawPathRangeOp::onExecute(GrOpFlushState* state) {
sk_sp<GrPathProcessor> pathProc(
GrPathProcessor::Create(this->color(), drawMatrix, localMatrix));
- GrPipeline pipeline(this->pipelineInitArgs(*state));
+ GrPipeline pipeline(this->pipelineInitArgs(*state), this->detachProcessors());
GrStencilSettings stencil;
init_stencil_pass_settings(*state, this->fillType(), &stencil);
if (fDraws.count() == 1) {
diff --git a/src/gpu/ops/GrDrawPathOp.h b/src/gpu/ops/GrDrawPathOp.h
index dcd8997f97..2df5f3482e 100644
--- a/src/gpu/ops/GrDrawPathOp.h
+++ b/src/gpu/ops/GrDrawPathOp.h
@@ -40,6 +40,7 @@ protected:
GrColor color() const { return fInputColor; }
GrPathRendering::FillType fillType() const { return fFillType; }
const GrProcessorSet& processors() const { return fProcessorSet; }
+ GrProcessorSet detachProcessors() { return std::move(fProcessorSet); }
uint32_t pipelineSRGBFlags() const { return fPipelineSRGBFlags; }
inline GrPipeline::InitArgs pipelineInitArgs(const GrOpFlushState&);
const GrProcessorSet::Analysis& doProcessorAnalysis(const GrCaps& caps,
diff --git a/src/gpu/ops/GrDrawVerticesOp.cpp b/src/gpu/ops/GrDrawVerticesOp.cpp
index 771bd4ffb0..f00a8c2a79 100644
--- a/src/gpu/ops/GrDrawVerticesOp.cpp
+++ b/src/gpu/ops/GrDrawVerticesOp.cpp
@@ -138,7 +138,7 @@ sk_sp<GrGeometryProcessor> GrDrawVerticesOp::makeGP(bool* hasColorAttribute,
return GrDefaultGeoProcFactory::Make(color, Coverage::kSolid_Type, localCoordsType, vm);
}
-void GrDrawVerticesOp::onPrepareDraws(Target* target) const {
+void GrDrawVerticesOp::onPrepareDraws(Target* target) {
bool hasColorAttribute;
bool hasLocalCoordsAttribute;
sk_sp<GrGeometryProcessor> gp = this->makeGP(&hasColorAttribute, &hasLocalCoordsAttribute);
diff --git a/src/gpu/ops/GrDrawVerticesOp.h b/src/gpu/ops/GrDrawVerticesOp.h
index 1242ffe4d0..4e12d2d50d 100644
--- a/src/gpu/ops/GrDrawVerticesOp.h
+++ b/src/gpu/ops/GrDrawVerticesOp.h
@@ -58,7 +58,7 @@ private:
kSkColor,
};
- void onPrepareDraws(Target*) const override;
+ void onPrepareDraws(Target*) override;
sk_sp<GrGeometryProcessor> makeGP(bool* hasColorAttribute, bool* hasLocalCoordAttribute) const;
diff --git a/src/gpu/ops/GrLatticeOp.cpp b/src/gpu/ops/GrLatticeOp.cpp
index fce1f972dd..ba4733d04e 100644
--- a/src/gpu/ops/GrLatticeOp.cpp
+++ b/src/gpu/ops/GrLatticeOp.cpp
@@ -82,7 +82,7 @@ public:
}
private:
- void onPrepareDraws(Target* target) const override {
+ void onPrepareDraws(Target* target) override {
sk_sp<GrGeometryProcessor> gp(create_gp());
if (!gp) {
SkDebugf("Couldn't create GrGeometryProcessor\n");
diff --git a/src/gpu/ops/GrMSAAPathRenderer.cpp b/src/gpu/ops/GrMSAAPathRenderer.cpp
index f1503fcd9f..425e675e89 100644
--- a/src/gpu/ops/GrMSAAPathRenderer.cpp
+++ b/src/gpu/ops/GrMSAAPathRenderer.cpp
@@ -329,7 +329,7 @@ private:
*outQuadPointCount = quadPointCount;
}
- void onPrepareDraws(Target* target) const override {
+ void onPrepareDraws(Target* target) override {
if (fMaxLineVertices == 0) {
SkASSERT(fMaxQuadVertices == 0);
return;
diff --git a/src/gpu/ops/GrMeshDrawOp.h b/src/gpu/ops/GrMeshDrawOp.h
index 916806ce74..dc09e0c765 100644
--- a/src/gpu/ops/GrMeshDrawOp.h
+++ b/src/gpu/ops/GrMeshDrawOp.h
@@ -67,7 +67,7 @@ private:
void onPrepare(GrOpFlushState* state) final;
void onExecute(GrOpFlushState* state) final;
- virtual void onPrepareDraws(Target*) const = 0;
+ virtual void onPrepareDraws(Target*) = 0;
// A set of contiguous draws that share a draw token and primitive processor. The draws all use
// the op's pipeline. The meshes for the draw are stored in the fMeshes array and each
diff --git a/src/gpu/ops/GrNonAAFillRectOp.cpp b/src/gpu/ops/GrNonAAFillRectOp.cpp
index 1f61e0c68c..07994aa510 100644
--- a/src/gpu/ops/GrNonAAFillRectOp.cpp
+++ b/src/gpu/ops/GrNonAAFillRectOp.cpp
@@ -164,7 +164,7 @@ public:
DEFINE_OP_CLASS_ID
private:
- void onPrepareDraws(Target* target) const override {
+ void onPrepareDraws(Target* target) override {
sk_sp<GrGeometryProcessor> gp = make_gp();
if (!gp) {
SkDebugf("Couldn't create GrGeometryProcessor\n");
@@ -282,7 +282,7 @@ public:
DEFINE_OP_CLASS_ID
private:
- void onPrepareDraws(Target* target) const override {
+ void onPrepareDraws(Target* target) override {
sk_sp<GrGeometryProcessor> gp = make_perspective_gp(
fViewMatrix, fHasLocalRect, fHasLocalMatrix ? &fLocalMatrix : nullptr);
if (!gp) {
diff --git a/src/gpu/ops/GrNonAAStrokeRectOp.cpp b/src/gpu/ops/GrNonAAStrokeRectOp.cpp
index cf533a19c1..badcf070f4 100644
--- a/src/gpu/ops/GrNonAAStrokeRectOp.cpp
+++ b/src/gpu/ops/GrNonAAStrokeRectOp.cpp
@@ -131,7 +131,7 @@ public:
}
private:
- void onPrepareDraws(Target* target) const override {
+ void onPrepareDraws(Target* target) override {
sk_sp<GrGeometryProcessor> gp;
{
using namespace GrDefaultGeoProcFactory;
diff --git a/src/gpu/ops/GrOvalOpFactory.cpp b/src/gpu/ops/GrOvalOpFactory.cpp
index 770a54f512..b175786177 100644
--- a/src/gpu/ops/GrOvalOpFactory.cpp
+++ b/src/gpu/ops/GrOvalOpFactory.cpp
@@ -809,7 +809,7 @@ public:
FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); }
private:
- void onPrepareDraws(Target* target) const override {
+ void onPrepareDraws(Target* target) override {
SkMatrix localMatrix;
if (!fViewMatrixIfUsingLocalCoords.invert(&localMatrix)) {
return;
@@ -1272,7 +1272,7 @@ public:
FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); }
private:
- void onPrepareDraws(Target* target) const override {
+ void onPrepareDraws(Target* target) override {
SkMatrix localMatrix;
if (!fViewMatrixIfUsingLocalCoords.invert(&localMatrix)) {
return;
@@ -1498,7 +1498,7 @@ public:
FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); }
private:
- void onPrepareDraws(Target* target) const override {
+ void onPrepareDraws(Target* target) override {
// Setup geometry processor
sk_sp<GrGeometryProcessor> gp(
new DIEllipseGeometryProcessor(this->viewMatrix(), this->style()));
@@ -1886,7 +1886,7 @@ private:
(*verts)++;
}
- void onPrepareDraws(Target* target) const override {
+ void onPrepareDraws(Target* target) override {
// Invert the view matrix as a local matrix (if any other processors require coords).
SkMatrix localMatrix;
if (!fViewMatrixIfUsingLocalCoords.invert(&localMatrix)) {
@@ -2165,7 +2165,7 @@ public:
FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); }
private:
- void onPrepareDraws(Target* target) const override {
+ void onPrepareDraws(Target* target) override {
SkMatrix localMatrix;
if (!fViewMatrixIfUsingLocalCoords.invert(&localMatrix)) {
return;
diff --git a/src/gpu/ops/GrRegionOp.cpp b/src/gpu/ops/GrRegionOp.cpp
index 7e2879c01d..f9cc61fc9b 100644
--- a/src/gpu/ops/GrRegionOp.cpp
+++ b/src/gpu/ops/GrRegionOp.cpp
@@ -100,7 +100,7 @@ public:
}
private:
- void onPrepareDraws(Target* target) const override {
+ void onPrepareDraws(Target* target) override {
sk_sp<GrGeometryProcessor> gp = make_gp(fViewMatrix);
if (!gp) {
SkDebugf("Couldn't create GrGeometryProcessor\n");
diff --git a/src/gpu/ops/GrShadowRRectOp.cpp b/src/gpu/ops/GrShadowRRectOp.cpp
index 07281f2389..0032329df0 100644
--- a/src/gpu/ops/GrShadowRRectOp.cpp
+++ b/src/gpu/ops/GrShadowRRectOp.cpp
@@ -558,7 +558,7 @@ private:
}
- void onPrepareDraws(Target* target) const override {
+ void onPrepareDraws(Target* target) override {
// Setup geometry processor
sk_sp<GrGeometryProcessor> gp = GrRRectShadowGeoProc::Make();
@@ -614,7 +614,7 @@ private:
static const uint32_t kPipelineFlags = 0;
const GrPipeline* pipeline =
- target->makePipeline(kPipelineFlags, &GrProcessorSet::EmptySet());
+ target->makePipeline(kPipelineFlags, GrProcessorSet::MakeEmptySet());
GrMesh mesh(GrPrimitiveType::kTriangles);
mesh.setIndexed(indexBuffer, fIndexCount, firstIndex, 0, fVertCount - 1);
diff --git a/src/gpu/ops/GrSimpleMeshDrawOpHelper.cpp b/src/gpu/ops/GrSimpleMeshDrawOpHelper.cpp
index ee59a8e26b..f6a005bece 100644
--- a/src/gpu/ops/GrSimpleMeshDrawOpHelper.cpp
+++ b/src/gpu/ops/GrSimpleMeshDrawOpHelper.cpp
@@ -101,7 +101,8 @@ GrDrawOp::RequiresDstTexture GrSimpleMeshDrawOpHelper::xpRequiresDstTexture(
}
SkString GrSimpleMeshDrawOpHelper::dumpInfo() const {
- SkString result = this->processors().dumpProcessors();
+ const GrProcessorSet& processors = fProcessors ? *fProcessors : GrProcessorSet::EmptySet();
+ SkString result = processors.dumpProcessors();
result.append("AA Type: ");
switch (this->aaType()) {
case GrAAType::kNone:
@@ -125,7 +126,6 @@ GrPipeline::InitArgs GrSimpleMeshDrawOpHelper::pipelineInitArgs(
GrMeshDrawOp::Target* target) const {
GrPipeline::InitArgs args;
args.fFlags = this->pipelineFlags();
- args.fProcessors = &this->processors();
args.fProxy = target->proxy();
args.fAppliedClip = target->clip();
args.fDstProxy = target->dstProxy();
@@ -134,6 +134,15 @@ GrPipeline::InitArgs GrSimpleMeshDrawOpHelper::pipelineInitArgs(
return args;
}
+GrPipeline* GrSimpleMeshDrawOpHelper::internalMakePipeline(GrMeshDrawOp::Target* target,
+ const GrPipeline::InitArgs& args) {
+ if (fProcessors) {
+ return target->allocPipeline(args, std::move(*fProcessors));
+ } else {
+ return target->allocPipeline(args, GrProcessorSet::MakeEmptySet());
+ }
+}
+
GrSimpleMeshDrawOpHelperWithStencil::GrSimpleMeshDrawOpHelperWithStencil(
const MakeArgs& args, GrAAType aaType, const GrUserStencilSettings* stencilSettings,
Flags flags)
@@ -156,10 +165,10 @@ bool GrSimpleMeshDrawOpHelperWithStencil::isCompatible(
}
const GrPipeline* GrSimpleMeshDrawOpHelperWithStencil::makePipeline(
- GrMeshDrawOp::Target* target) const {
+ GrMeshDrawOp::Target* target) {
auto args = INHERITED::pipelineInitArgs(target);
args.fUserStencil = fStencilSettings;
- return target->allocPipeline(args);
+ return this->internalMakePipeline(target, args);
}
SkString GrSimpleMeshDrawOpHelperWithStencil::dumpInfo() const {
diff --git a/src/gpu/ops/GrSimpleMeshDrawOpHelper.h b/src/gpu/ops/GrSimpleMeshDrawOpHelper.h
index 2efd57c76e..7dfd130c86 100644
--- a/src/gpu/ops/GrSimpleMeshDrawOpHelper.h
+++ b/src/gpu/ops/GrSimpleMeshDrawOpHelper.h
@@ -82,8 +82,8 @@ public:
bool compatibleWithAlphaAsCoverage() const { return fCompatibleWithAlphaAsCoveage; }
- GrPipeline* makePipeline(GrMeshDrawOp::Target* target) const {
- return target->allocPipeline(this->pipelineInitArgs(target));
+ GrPipeline* makePipeline(GrMeshDrawOp::Target* target) {
+ return this->internalMakePipeline(target, this->pipelineInitArgs(target));
}
struct MakeArgs {
@@ -101,12 +101,11 @@ public:
protected:
GrAAType aaType() const { return static_cast<GrAAType>(fAAType); }
uint32_t pipelineFlags() const { return fPipelineFlags; }
- const GrProcessorSet& processors() const {
- return fProcessors ? *fProcessors : GrProcessorSet::EmptySet();
- }
GrPipeline::InitArgs pipelineInitArgs(GrMeshDrawOp::Target* target) const;
+ GrPipeline* internalMakePipeline(GrMeshDrawOp::Target*, const GrPipeline::InitArgs&);
+
private:
GrProcessorSet* fProcessors;
unsigned fPipelineFlags : 8;
@@ -146,7 +145,7 @@ public:
bool isCompatible(const GrSimpleMeshDrawOpHelperWithStencil& that, const GrCaps&,
const SkRect& thisBounds, const SkRect& thatBounds) const;
- const GrPipeline* makePipeline(GrMeshDrawOp::Target*) const;
+ const GrPipeline* makePipeline(GrMeshDrawOp::Target*);
SkString dumpInfo() const;
diff --git a/src/gpu/ops/GrSmallPathRenderer.cpp b/src/gpu/ops/GrSmallPathRenderer.cpp
index ddb28488a4..d39e458cf3 100644
--- a/src/gpu/ops/GrSmallPathRenderer.cpp
+++ b/src/gpu/ops/GrSmallPathRenderer.cpp
@@ -217,7 +217,7 @@ private:
int fInstancesToFlush;
};
- void onPrepareDraws(Target* target) const override {
+ void onPrepareDraws(Target* target) override {
int instanceCount = fShapes.count();
const SkMatrix& ctm = this->viewMatrix();
diff --git a/src/gpu/ops/GrTessellatingPathRenderer.cpp b/src/gpu/ops/GrTessellatingPathRenderer.cpp
index d65e57e374..641a037bbe 100644
--- a/src/gpu/ops/GrTessellatingPathRenderer.cpp
+++ b/src/gpu/ops/GrTessellatingPathRenderer.cpp
@@ -225,7 +225,7 @@ private:
return path;
}
- void draw(Target* target, const GrGeometryProcessor* gp) const {
+ void draw(Target* target, const GrGeometryProcessor* gp) {
SkASSERT(!fAntiAlias);
GrResourceProvider* rp = target->resourceProvider();
bool inverseFill = fShape.inverseFilled();
@@ -276,7 +276,7 @@ private:
rp->assignUniqueKeyToResource(key, allocator.vertexBuffer());
}
- void drawAA(Target* target, const GrGeometryProcessor* gp) const {
+ void drawAA(Target* target, const GrGeometryProcessor* gp) {
SkASSERT(fAntiAlias);
SkPath path = getPath();
if (path.isEmpty()) {
@@ -293,10 +293,10 @@ private:
if (count == 0) {
return;
}
- drawVertices(target, gp, allocator.vertexBuffer(), allocator.firstVertex(), count);
+ this->drawVertices(target, gp, allocator.vertexBuffer(), allocator.firstVertex(), count);
}
- void onPrepareDraws(Target* target) const override {
+ void onPrepareDraws(Target* target) override {
sk_sp<GrGeometryProcessor> gp;
{
using namespace GrDefaultGeoProcFactory;
@@ -335,7 +335,7 @@ private:
}
void drawVertices(Target* target, const GrGeometryProcessor* gp, const GrBuffer* vb,
- int firstVertex, int count) const {
+ int firstVertex, int count) {
GrMesh mesh(TESSELLATOR_WIREFRAME ? GrPrimitiveType::kLines : GrPrimitiveType::kTriangles);
mesh.setNonIndexedNonInstanced(count);
mesh.setVertexData(vb, firstVertex);
diff --git a/tests/OnFlushCallbackTest.cpp b/tests/OnFlushCallbackTest.cpp
index e5dc4cc32f..388f770150 100644
--- a/tests/OnFlushCallbackTest.cpp
+++ b/tests/OnFlushCallbackTest.cpp
@@ -78,7 +78,7 @@ protected:
private:
bool onCombineIfPossible(GrOp*, const GrCaps&) override { return false; }
- void onPrepareDraws(Target* target) const override {
+ void onPrepareDraws(Target* target) override {
using namespace GrDefaultGeoProcFactory;
// The vertex attrib order is always pos, color, local coords.
diff --git a/tests/PrimitiveProcessorTest.cpp b/tests/PrimitiveProcessorTest.cpp
index d2e851d9d1..83aa3516eb 100644
--- a/tests/PrimitiveProcessorTest.cpp
+++ b/tests/PrimitiveProcessorTest.cpp
@@ -49,7 +49,7 @@ private:
bool onCombineIfPossible(GrOp*, const GrCaps&) override { return false; }
- void onPrepareDraws(Target* target) const override {
+ void onPrepareDraws(Target* target) override {
class GP : public GrGeometryProcessor {
public:
GP(int numAttribs) {
@@ -94,7 +94,8 @@ private:
size_t vertexStride = gp->getVertexStride();
SkPoint* vertices = reinterpret_cast<SkPoint*>(helper.init(target, vertexStride, 1));
vertices->setRectFan(0.f, 0.f, 1.f, 1.f, vertexStride);
- helper.recordDraw(target, gp.get(), target->makePipeline(0, &GrProcessorSet::EmptySet()));
+ helper.recordDraw(target, gp.get(),
+ target->makePipeline(0, GrProcessorSet::MakeEmptySet()));
}
int fNumAttribs;
diff --git a/tests/ProcessorTest.cpp b/tests/ProcessorTest.cpp
index 8354225ce7..4cc7780d06 100644
--- a/tests/ProcessorTest.cpp
+++ b/tests/ProcessorTest.cpp
@@ -46,7 +46,7 @@ private:
this->setBounds(SkRect::MakeWH(100, 100), HasAABloat::kNo, IsZeroArea::kNo);
}
- void onPrepareDraws(Target* target) const override { return; }
+ void onPrepareDraws(Target* target) override { return; }
bool onCombineIfPossible(GrOp* op, const GrCaps& caps) override { return false; }