aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/gpu/GrProcessorAnalysis.h4
-rw-r--r--src/gpu/GrProcessorSet.cpp10
-rw-r--r--src/gpu/GrProcessorSet.h1
-rw-r--r--tests/ProcessorTest.cpp35
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;