diff options
-rw-r--r-- | src/gpu/GrProcessorAnalysis.h | 4 | ||||
-rw-r--r-- | src/gpu/GrProcessorSet.cpp | 10 | ||||
-rw-r--r-- | src/gpu/GrProcessorSet.h | 1 | ||||
-rw-r--r-- | tests/ProcessorTest.cpp | 35 |
4 files changed, 37 insertions, 13 deletions
diff --git a/src/gpu/GrProcessorAnalysis.h b/src/gpu/GrProcessorAnalysis.h index f5e4065ac2..a635e65e6c 100644 --- a/src/gpu/GrProcessorAnalysis.h +++ b/src/gpu/GrProcessorAnalysis.h @@ -21,8 +21,8 @@ public: kYes, }; - GrProcessorAnalysisColor(Opaque opaque = Opaque::kNo) - : fFlags(opaque == Opaque::kYes ? kIsOpaque_Flag : 0) {} + constexpr GrProcessorAnalysisColor(Opaque opaque = Opaque::kNo) + : fFlags(opaque == Opaque::kYes ? kIsOpaque_Flag : 0), fColor(0) {} GrProcessorAnalysisColor(GrColor color) { this->setToConstant(color); } diff --git a/src/gpu/GrProcessorSet.cpp b/src/gpu/GrProcessorSet.cpp index 152b97db53..c476f64fd6 100644 --- a/src/gpu/GrProcessorSet.cpp +++ b/src/gpu/GrProcessorSet.cpp @@ -43,6 +43,16 @@ GrProcessorSet::GrProcessorSet(SkBlendMode mode) , fFragmentProcessorOffset(0) , fFlags(0) {} +GrProcessorSet::GrProcessorSet(sk_sp<GrFragmentProcessor> colorFP) + : fFragmentProcessors(1) + , fXP((const GrXPFactory*)nullptr) + , fColorFragmentProcessorCnt(1) + , fFragmentProcessorOffset(0) + , fFlags(0) { + SkASSERT(colorFP); + fFragmentProcessors[0] = colorFP.release(); +} + 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 a12a2ce43f..666e1c332b 100644 --- a/src/gpu/GrProcessorSet.h +++ b/src/gpu/GrProcessorSet.h @@ -25,6 +25,7 @@ private: public: GrProcessorSet(GrPaint&& paint); GrProcessorSet(SkBlendMode mode); + GrProcessorSet(sk_sp<GrFragmentProcessor> colorFP); ~GrProcessorSet(); diff --git a/tests/ProcessorTest.cpp b/tests/ProcessorTest.cpp index 63543647c2..56ec0a6979 100644 --- a/tests/ProcessorTest.cpp +++ b/tests/ProcessorTest.cpp @@ -19,25 +19,41 @@ #include "GrResourceProvider.h" #include "glsl/GrGLSLFragmentProcessor.h" #include "glsl/GrGLSLFragmentShaderBuilder.h" +#include "ops/GrMeshDrawOp.h" #include "ops/GrRectOpFactory.h" -#include "ops/GrTestMeshDrawOp.h" namespace { -class TestOp : public GrTestMeshDrawOp { +class TestOp : public GrMeshDrawOp { public: DEFINE_OP_CLASS_ID const char* name() const override { return "TestOp"; } - static std::unique_ptr<GrLegacyMeshDrawOp> Make() { - return std::unique_ptr<GrLegacyMeshDrawOp>(new TestOp); + static std::unique_ptr<GrDrawOp> Make(sk_sp<GrFragmentProcessor> fp) { + return std::unique_ptr<GrDrawOp>(new TestOp(std::move(fp))); + } + + FixedFunctionFlags fixedFunctionFlags() const override { return FixedFunctionFlags::kNone; } + + RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip) override { + static constexpr GrProcessorAnalysisColor kUnknownColor; + GrColor overrideColor; + fProcessors.finalize(kUnknownColor, GrProcessorAnalysisCoverage::kNone, clip, false, caps, + &overrideColor); + return RequiresDstTexture::kNo; } private: - TestOp() : INHERITED(ClassID(), SkRect::MakeWH(100, 100), 0xFFFFFFFF) {} + TestOp(sk_sp<GrFragmentProcessor> fp) : INHERITED(ClassID()), fProcessors(std::move(fp)) { + this->setBounds(SkRect::MakeWH(100, 100), HasAABloat::kNo, IsZeroArea::kNo); + } void onPrepareDraws(Target* target) const override { return; } - typedef GrTestMeshDrawOp INHERITED; + bool onCombineIfPossible(GrOp* op, const GrCaps& caps) override { return false; } + + GrProcessorSet fProcessors; + + typedef GrMeshDrawOp INHERITED; }; /** @@ -171,15 +187,12 @@ DEF_GPUTEST_FOR_ALL_CONTEXTS(ProcessorRefTest, reporter, ctxInfo) { images.emplace_back(proxy3, GrIOType::kWrite_GrIOType); images.emplace_back(proxy4, GrIOType::kRW_GrIOType); } - std::unique_ptr<GrLegacyMeshDrawOp> op(TestOp::Make()); - GrPaint paint; auto fp = TestFP::Make(std::move(proxies), std::move(buffers), std::move(images)); for (int i = 0; i < parentCnt; ++i) { fp = TestFP::Make(std::move(fp)); } - paint.addColorFragmentProcessor(std::move(fp)); - renderTargetContext->priv().testingOnly_addLegacyMeshDrawOp( - std::move(paint), GrAAType::kNone, std::move(op)); + std::unique_ptr<GrDrawOp> op(TestOp::Make(std::move(fp))); + renderTargetContext->priv().testingOnly_addDrawOp(std::move(op)); } int refCnt, readCnt, writeCnt; |