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>
diff --git a/src/gpu/GrOpFlushState.h b/src/gpu/GrOpFlushState.h
index 4d16856..2c860f9 100644
--- a/src/gpu/GrOpFlushState.h
+++ b/src/gpu/GrOpFlushState.h
@@ -113,7 +113,7 @@
}
template <typename... Args>
- GrPipeline* allocPipeline(Args... args) {
+ GrPipeline* allocPipeline(Args&&... args) {
return fPipelines.make<GrPipeline>(std::forward<Args>(args)...);
}
@@ -244,7 +244,7 @@
}
template <typename... Args>
- GrPipeline* allocPipeline(Args... args) {
+ GrPipeline* allocPipeline(Args&&... args) {
return this->state()->allocPipeline(std::forward<Args>(args)...);
}
@@ -252,16 +252,15 @@
* 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 8e91d81..f684896 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 @@
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 @@
}
// 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 075f09c..c4c7599 100644
--- a/src/gpu/GrPipeline.h
+++ b/src/gpu/GrPipeline.h
@@ -76,7 +76,6 @@
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 @@
**/
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 21e5fc3..20d6745 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 @@
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 e3fe4c6..d3aaf6d 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 @@
/** 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 @@
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 78d8347..c067e3a 100644
--- a/src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp
+++ b/src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp
@@ -295,11 +295,10 @@
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 229a144..f13a1dc 100644
--- a/src/gpu/instanced/InstancedOp.cpp
+++ b/src/gpu/instanced/InstancedOp.cpp
@@ -229,7 +229,6 @@
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 @@
}
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 22b2b59..af32a14 100644
--- a/src/gpu/ops/GrAAConvexPathRenderer.cpp
+++ b/src/gpu/ops/GrAAConvexPathRenderer.cpp
@@ -762,7 +762,7 @@
}
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 @@
}
}
- 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 9d328c9..d0976a0 100644
--- a/src/gpu/ops/GrAAFillRectOp.cpp
+++ b/src/gpu/ops/GrAAFillRectOp.cpp
@@ -228,7 +228,7 @@
}
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 5d12fdf..c5479b7 100644
--- a/src/gpu/ops/GrAAHairLinePathRenderer.cpp
+++ b/src/gpu/ops/GrAAHairLinePathRenderer.cpp
@@ -801,7 +801,7 @@
}
private:
- void onPrepareDraws(Target*) const override;
+ void onPrepareDraws(Target*) override;
typedef SkTArray<SkPoint, true> PtArray;
typedef SkTArray<int, true> IntArray;
@@ -865,7 +865,7 @@
} // 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 356c7ac..c1fd4f7 100644
--- a/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp
+++ b/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp
@@ -221,7 +221,7 @@
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 e3e2b23..07d8f30 100644
--- a/src/gpu/ops/GrAAStrokeRectOp.cpp
+++ b/src/gpu/ops/GrAAStrokeRectOp.cpp
@@ -197,7 +197,7 @@
}
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 @@
} // 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 8c49e6d..e8d3caf 100644
--- a/src/gpu/ops/GrAtlasTextOp.cpp
+++ b/src/gpu/ops/GrAtlasTextOp.cpp
@@ -75,7 +75,7 @@
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 @@
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 3456fe0..5c37d45 100644
--- a/src/gpu/ops/GrAtlasTextOp.h
+++ b/src/gpu/ops/GrAtlasTextOp.h
@@ -119,7 +119,7 @@
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 7a23b5a..6ca55b0 100644
--- a/src/gpu/ops/GrDashOp.cpp
+++ b/src/gpu/ops/GrDashOp.cpp
@@ -356,7 +356,7 @@
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 @@
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 891c5a5..fb72085 100644
--- a/src/gpu/ops/GrDefaultPathRenderer.cpp
+++ b/src/gpu/ops/GrDefaultPathRenderer.cpp
@@ -380,7 +380,7 @@
}
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 f5d636c..6659c6a 100644
--- a/src/gpu/ops/GrDrawAtlasOp.cpp
+++ b/src/gpu/ops/GrDrawAtlasOp.cpp
@@ -117,7 +117,7 @@
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 bec2eb1..7c3bceb 100644
--- a/src/gpu/ops/GrDrawAtlasOp.h
+++ b/src/gpu/ops/GrDrawAtlasOp.h
@@ -40,7 +40,7 @@
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 fa7fc15..9cf6116 100644
--- a/src/gpu/ops/GrDrawPathOp.cpp
+++ b/src/gpu/ops/GrDrawPathOp.cpp
@@ -39,7 +39,6 @@
0xffff>()
};
GrPipeline::InitArgs args;
- args.fProcessors = &this->processors();
args.fFlags = fPipelineSRGBFlags;
if (GrAATypeIsHW(fAAType)) {
args.fFlags |= GrPipeline::kHWAntialias_Flag;
@@ -66,7 +65,7 @@
//////////////////////////////////////////////////////////////////////////////
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 @@
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 dcd8997..2df5f34 100644
--- a/src/gpu/ops/GrDrawPathOp.h
+++ b/src/gpu/ops/GrDrawPathOp.h
@@ -40,6 +40,7 @@
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 771bd4f..f00a8c2 100644
--- a/src/gpu/ops/GrDrawVerticesOp.cpp
+++ b/src/gpu/ops/GrDrawVerticesOp.cpp
@@ -138,7 +138,7 @@
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 1242ffe..4e12d2d 100644
--- a/src/gpu/ops/GrDrawVerticesOp.h
+++ b/src/gpu/ops/GrDrawVerticesOp.h
@@ -58,7 +58,7 @@
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 fce1f97..ba4733d 100644
--- a/src/gpu/ops/GrLatticeOp.cpp
+++ b/src/gpu/ops/GrLatticeOp.cpp
@@ -82,7 +82,7 @@
}
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 f1503fc..425e675 100644
--- a/src/gpu/ops/GrMSAAPathRenderer.cpp
+++ b/src/gpu/ops/GrMSAAPathRenderer.cpp
@@ -329,7 +329,7 @@
*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 916806c..dc09e0c 100644
--- a/src/gpu/ops/GrMeshDrawOp.h
+++ b/src/gpu/ops/GrMeshDrawOp.h
@@ -67,7 +67,7 @@
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 1f61e0c..07994aa 100644
--- a/src/gpu/ops/GrNonAAFillRectOp.cpp
+++ b/src/gpu/ops/GrNonAAFillRectOp.cpp
@@ -164,7 +164,7 @@
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 @@
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 cf533a1..badcf07 100644
--- a/src/gpu/ops/GrNonAAStrokeRectOp.cpp
+++ b/src/gpu/ops/GrNonAAStrokeRectOp.cpp
@@ -131,7 +131,7 @@
}
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 770a54f..b175786 100644
--- a/src/gpu/ops/GrOvalOpFactory.cpp
+++ b/src/gpu/ops/GrOvalOpFactory.cpp
@@ -809,7 +809,7 @@
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 @@
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 @@
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 @@
(*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 @@
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 7e2879c..f9cc61f 100644
--- a/src/gpu/ops/GrRegionOp.cpp
+++ b/src/gpu/ops/GrRegionOp.cpp
@@ -100,7 +100,7 @@
}
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 07281f2..0032329 100644
--- a/src/gpu/ops/GrShadowRRectOp.cpp
+++ b/src/gpu/ops/GrShadowRRectOp.cpp
@@ -558,7 +558,7 @@
}
- void onPrepareDraws(Target* target) const override {
+ void onPrepareDraws(Target* target) override {
// Setup geometry processor
sk_sp<GrGeometryProcessor> gp = GrRRectShadowGeoProc::Make();
@@ -614,7 +614,7 @@
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 ee59a8e..f6a005b 100644
--- a/src/gpu/ops/GrSimpleMeshDrawOpHelper.cpp
+++ b/src/gpu/ops/GrSimpleMeshDrawOpHelper.cpp
@@ -101,7 +101,8 @@
}
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 @@
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 @@
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 @@
}
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 2efd57c..7dfd130 100644
--- a/src/gpu/ops/GrSimpleMeshDrawOpHelper.h
+++ b/src/gpu/ops/GrSimpleMeshDrawOpHelper.h
@@ -82,8 +82,8 @@
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 @@
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 @@
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 ddb2848..d39e458 100644
--- a/src/gpu/ops/GrSmallPathRenderer.cpp
+++ b/src/gpu/ops/GrSmallPathRenderer.cpp
@@ -217,7 +217,7 @@
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 d65e57e..641a037 100644
--- a/src/gpu/ops/GrTessellatingPathRenderer.cpp
+++ b/src/gpu/ops/GrTessellatingPathRenderer.cpp
@@ -225,7 +225,7 @@
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 @@
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 @@
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 @@
}
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);