Remove arithmetic mode GrXP code.
The arithmetic mode xfermode is only used as an implementation detail of SkXfermodeImageFilter which always uses the arithmetic FP.
Change-Id: I5f9607aa9731a21e6666d9c749dfa705d40d5775
Reviewed-on: https://skia-review.googlesource.com/6688
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
diff --git a/src/effects/SkArithmeticMode.cpp b/src/effects/SkArithmeticMode.cpp
index 62595cf..3eaf3cc 100644
--- a/src/effects/SkArithmeticMode.cpp
+++ b/src/effects/SkArithmeticMode.cpp
@@ -36,7 +36,10 @@
#if SK_SUPPORT_GPU
sk_sp<GrFragmentProcessor> makeFragmentProcessorForImageFilter(
sk_sp<GrFragmentProcessor> dst) const override;
- sk_sp<GrXPFactory> asXPFactory() const override;
+ sk_sp<GrXPFactory> asXPFactory() const override {
+ SkFAIL("This should only be used as a FP.");
+ return nullptr;
+ }
#endif
bool isArithmetic(SkArithmeticParams* params) const override {
@@ -146,14 +149,6 @@
std::move(dst));
}
-sk_sp<GrXPFactory> SkArithmeticMode_scalar::asXPFactory() const {
- return GrArithmeticXPFactory::Make(SkScalarToFloat(fK[0]),
- SkScalarToFloat(fK[1]),
- SkScalarToFloat(fK[2]),
- SkScalarToFloat(fK[3]),
- fEnforcePMColor);
-}
-
#endif
SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkArithmeticMode)
diff --git a/src/effects/SkArithmeticMode_gpu.cpp b/src/effects/SkArithmeticMode_gpu.cpp
index 9f08736..a6c7866 100644
--- a/src/effects/SkArithmeticMode_gpu.cpp
+++ b/src/effects/SkArithmeticMode_gpu.cpp
@@ -177,119 +177,4 @@
typedef GrXferProcessor INHERITED;
};
-///////////////////////////////////////////////////////////////////////////////
-
-class GLArithmeticXP : public GrGLSLXferProcessor {
-public:
- GLArithmeticXP(const ArithmeticXP& arithmeticXP)
- : fEnforcePMColor(arithmeticXP.enforcePMColor()) {
- }
-
- ~GLArithmeticXP() override {}
-
- static void GenKey(const GrProcessor& processor, const GrShaderCaps& caps,
- GrProcessorKeyBuilder* b) {
- const ArithmeticXP& arith = processor.cast<ArithmeticXP>();
- uint32_t key = arith.enforcePMColor() ? 1 : 0;
- b->add32(key);
- }
-
-private:
- void emitBlendCodeForDstRead(GrGLSLXPFragmentBuilder* fragBuilder,
- GrGLSLUniformHandler* uniformHandler,
- const char* srcColor,
- const char* srcCoverage,
- const char* dstColor,
- const char* outColor,
- const char* outColorSecondary,
- const GrXferProcessor& proc) override {
- fKUni = uniformHandler->addUniform(kFragment_GrShaderFlag,
- kVec4f_GrSLType, kDefault_GrSLPrecision,
- "k");
- const char* kUni = uniformHandler->getUniformCStr(fKUni);
-
- add_arithmetic_code(fragBuilder, srcColor, dstColor, outColor, kUni, fEnforcePMColor);
-
- // Apply coverage.
- INHERITED::DefaultCoverageModulation(fragBuilder, srcCoverage, dstColor, outColor,
- outColorSecondary, proc);
- }
-
- void onSetData(const GrGLSLProgramDataManager& pdman,
- const GrXferProcessor& processor) override {
- const ArithmeticXP& arith = processor.cast<ArithmeticXP>();
- pdman.set4f(fKUni, arith.k1(), arith.k2(), arith.k3(), arith.k4());
- fEnforcePMColor = arith.enforcePMColor();
- }
-
- GrGLSLProgramDataManager::UniformHandle fKUni;
- bool fEnforcePMColor;
-
- typedef GrGLSLXferProcessor INHERITED;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-
-ArithmeticXP::ArithmeticXP(const DstTexture* dstTexture, bool hasMixedSamples,
- float k1, float k2, float k3, float k4, bool enforcePMColor)
- : INHERITED(dstTexture, true, hasMixedSamples)
- , fK1(k1)
- , fK2(k2)
- , fK3(k3)
- , fK4(k4)
- , fEnforcePMColor(enforcePMColor) {
- this->initClassID<ArithmeticXP>();
-}
-
-void ArithmeticXP::onGetGLSLProcessorKey(const GrShaderCaps& caps, GrProcessorKeyBuilder* b) const {
- GLArithmeticXP::GenKey(*this, caps, b);
-}
-
-GrGLSLXferProcessor* ArithmeticXP::createGLSLInstance() const { return new GLArithmeticXP(*this); }
-
-GrXferProcessor::OptFlags ArithmeticXP::onGetOptimizations(const GrPipelineAnalysis&,
- bool doesStencilWrite,
- GrColor* overrideColor,
- const GrCaps& caps) const {
- return GrXferProcessor::kNone_OptFlags;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-GrArithmeticXPFactory::GrArithmeticXPFactory(float k1, float k2, float k3, float k4,
- bool enforcePMColor)
- : fK1(k1), fK2(k2), fK3(k3), fK4(k4), fEnforcePMColor(enforcePMColor) {
- this->initClassID<GrArithmeticXPFactory>();
-}
-
-GrXferProcessor* GrArithmeticXPFactory::onCreateXferProcessor(const GrCaps& caps,
- const GrPipelineAnalysis&,
- bool hasMixedSamples,
- const DstTexture* dstTexture) const {
- return new ArithmeticXP(dstTexture, hasMixedSamples, fK1, fK2, fK3, fK4, fEnforcePMColor);
-}
-
-
-void GrArithmeticXPFactory::getInvariantBlendedColor(const GrProcOptInfo& colorPOI,
- InvariantBlendedColor* blendedColor) const {
- blendedColor->fWillBlendWithDst = true;
-
- // TODO: We could try to optimize this more. For example if fK1 and fK3 are zero, then we won't
- // be blending the color with dst at all so we can know what the output color is (up to the
- // valid color components passed in).
- blendedColor->fKnownColorFlags = kNone_GrColorComponentFlags;
-}
-
-GR_DEFINE_XP_FACTORY_TEST(GrArithmeticXPFactory);
-
-sk_sp<GrXPFactory> GrArithmeticXPFactory::TestCreate(GrProcessorTestData* d) {
- float k1 = d->fRandom->nextF();
- float k2 = d->fRandom->nextF();
- float k3 = d->fRandom->nextF();
- float k4 = d->fRandom->nextF();
- bool enforcePMColor = d->fRandom->nextBool();
-
- return GrArithmeticXPFactory::Make(k1, k2, k3, k4, enforcePMColor);
-}
-
#endif
diff --git a/src/effects/SkArithmeticMode_gpu.h b/src/effects/SkArithmeticMode_gpu.h
index ffd986b..f7ded9b 100644
--- a/src/effects/SkArithmeticMode_gpu.h
+++ b/src/effects/SkArithmeticMode_gpu.h
@@ -71,50 +71,5 @@
typedef GrFragmentProcessor INHERITED;
};
-///////////////////////////////////////////////////////////////////////////////
-// Xfer Processor
-///////////////////////////////////////////////////////////////////////////////
-
-class GrArithmeticXPFactory : public GrXPFactory {
-public:
- static sk_sp<GrXPFactory> Make(float k1, float k2, float k3, float k4, bool enforcePMColor) {
- return sk_sp<GrXPFactory>(new GrArithmeticXPFactory(k1, k2, k3, k4, enforcePMColor));
- }
-
- void getInvariantBlendedColor(const GrProcOptInfo& colorPOI,
- GrXPFactory::InvariantBlendedColor*) const override;
-
-private:
- GrArithmeticXPFactory(float k1, float k2, float k3, float k4, bool enforcePMColor);
-
- GrXferProcessor* onCreateXferProcessor(const GrCaps& caps,
- const GrPipelineAnalysis&,
- bool hasMixedSamples,
- const DstTexture*) const override;
-
- bool onWillReadDstColor(const GrCaps&, const GrPipelineAnalysis&) const override {
- return true;
- }
-
- bool onIsEqual(const GrXPFactory& xpfBase) const override {
- const GrArithmeticXPFactory& xpf = xpfBase.cast<GrArithmeticXPFactory>();
- if (fK1 != xpf.fK1 ||
- fK2 != xpf.fK2 ||
- fK3 != xpf.fK3 ||
- fK4 != xpf.fK4 ||
- fEnforcePMColor != xpf.fEnforcePMColor) {
- return false;
- }
- return true;
- }
-
- GR_DECLARE_XP_FACTORY_TEST;
-
- float fK1, fK2, fK3, fK4;
- bool fEnforcePMColor;
-
- typedef GrXPFactory INHERITED;
-};
-
#endif
#endif
diff --git a/src/gpu/GrProcessor.cpp b/src/gpu/GrProcessor.cpp
index f4f7ccb..991aa90 100644
--- a/src/gpu/GrProcessor.cpp
+++ b/src/gpu/GrProcessor.cpp
@@ -52,7 +52,7 @@
*/
static const int kFPFactoryCount = 40;
static const int kGPFactoryCount = 14;
-static const int kXPFactoryCount = 5;
+static const int kXPFactoryCount = 4;
template<>
void GrProcessorTestFactory<GrFragmentProcessor>::VerifyFactoryCount() {