Convert several effects to use color space xform FP
Starting with oddball image filters, etc: Arithmetic, Displacement,
Magnifier, Xfermode.
Bug: skia:
Change-Id: Iacf14be1c936eef2ac0c5e3ba08f228e3a45c177
Reviewed-on: https://skia-review.googlesource.com/61281
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
diff --git a/src/effects/SkDisplacementMapEffect.cpp b/src/effects/SkDisplacementMapEffect.cpp
index 67db24e..b97a0c2 100644
--- a/src/effects/SkDisplacementMapEffect.cpp
+++ b/src/effects/SkDisplacementMapEffect.cpp
@@ -23,7 +23,6 @@
#include "GrTextureProxy.h"
#include "SkGr.h"
#include "effects/GrTextureDomain.h"
-#include "glsl/GrGLSLColorSpaceXformHelper.h"
#include "glsl/GrGLSLFragmentProcessor.h"
#include "glsl/GrGLSLFragmentShaderBuilder.h"
#include "glsl/GrGLSLProgramDataManager.h"
@@ -168,11 +167,10 @@
SkDisplacementMapEffect::ChannelSelectorType xChannelSelector,
SkDisplacementMapEffect::ChannelSelectorType yChannelSelector, SkVector scale,
sk_sp<GrTextureProxy> displacement, const SkMatrix& offsetMatrix,
- sk_sp<GrTextureProxy> color, sk_sp<GrColorSpaceXform> colorSpaceXform,
- const SkISize& colorDimensions) {
+ sk_sp<GrTextureProxy> color, const SkISize& colorDimensions) {
return std::unique_ptr<GrFragmentProcessor>(new GrDisplacementMapEffect(
xChannelSelector, yChannelSelector, scale, std::move(displacement), offsetMatrix,
- std::move(color), std::move(colorSpaceXform), colorDimensions));
+ std::move(color), colorDimensions));
}
~GrDisplacementMapEffect() override;
@@ -187,7 +185,6 @@
const char* name() const override { return "DisplacementMap"; }
const GrTextureDomain& domain() const { return fDomain; }
- GrColorSpaceXform* colorSpaceXform() const { return fColorSpaceXform.get(); }
std::unique_ptr<GrFragmentProcessor> clone() const override;
@@ -206,8 +203,7 @@
SkDisplacementMapEffect::ChannelSelectorType yChannelSelector,
const SkVector& scale,
sk_sp<GrTextureProxy> displacement, const SkMatrix& offsetMatrix,
- sk_sp<GrTextureProxy> color, sk_sp<GrColorSpaceXform> colorSpaceXform,
- const SkISize& colorDimensions);
+ sk_sp<GrTextureProxy> color, const SkISize& colorDimensions);
GR_DECLARE_FRAGMENT_PROCESSOR_TEST
@@ -216,7 +212,6 @@
GrCoordTransform fColorTransform;
GrTextureDomain fDomain;
TextureSampler fColorSampler;
- sk_sp<GrColorSpaceXform> fColorSpaceXform;
SkDisplacementMapEffect::ChannelSelectorType fXChannelSelector;
SkDisplacementMapEffect::ChannelSelectorType fYChannelSelector;
SkVector fScale;
@@ -289,18 +284,19 @@
SkMatrix offsetMatrix = SkMatrix::MakeTrans(SkIntToScalar(colorOffset.fX - displOffset.fX),
SkIntToScalar(colorOffset.fY - displOffset.fY));
SkColorSpace* colorSpace = ctx.outputProperties().colorSpace();
- sk_sp<GrColorSpaceXform> colorSpaceXform = GrColorSpaceXform::Make(color->getColorSpace(),
- colorSpace);
+
+ std::unique_ptr<GrFragmentProcessor> fp =
+ GrDisplacementMapEffect::Make(fXChannelSelector,
+ fYChannelSelector,
+ scale,
+ std::move(displProxy),
+ offsetMatrix,
+ std::move(colorProxy),
+ SkISize::Make(color->width(), color->height()));
+ fp = GrColorSpaceXformEffect::Make(std::move(fp), color->getColorSpace(), colorSpace);
+
GrPaint paint;
- paint.addColorFragmentProcessor(
- GrDisplacementMapEffect::Make(fXChannelSelector,
- fYChannelSelector,
- scale,
- std::move(displProxy),
- offsetMatrix,
- std::move(colorProxy),
- std::move(colorSpaceXform),
- SkISize::Make(color->width(), color->height())));
+ paint.addColorFragmentProcessor(std::move(fp));
paint.setPorterDuffXPFactory(SkBlendMode::kSrc);
SkMatrix matrix;
matrix.setTranslate(-SkIntToScalar(colorBounds.x()), -SkIntToScalar(colorBounds.y()));
@@ -431,7 +427,6 @@
typedef GrGLSLProgramDataManager::UniformHandle UniformHandle;
UniformHandle fScaleUni;
- GrGLSLColorSpaceXformHelper fColorSpaceHelper;
GrTextureDomain::GLDomain fGLDomain;
typedef GrGLSLFragmentProcessor INHERITED;
@@ -462,7 +457,6 @@
sk_sp<GrTextureProxy> displacement,
const SkMatrix& offsetMatrix,
sk_sp<GrTextureProxy> color,
- sk_sp<GrColorSpaceXform> colorSpaceXform,
const SkISize& colorDimensions)
: INHERITED(kGrDisplacementMapEffect_ClassID, OptimizationFlags(color->config()))
, fDisplacementTransform(offsetMatrix, displacement.get())
@@ -471,7 +465,6 @@
, fDomain(color.get(), GrTextureDomain::MakeTexelDomain(SkIRect::MakeSize(colorDimensions)),
GrTextureDomain::kDecal_Mode)
, fColorSampler(color)
- , fColorSpaceXform(std::move(colorSpaceXform))
, fXChannelSelector(xChannelSelector)
, fYChannelSelector(yChannelSelector)
, fScale(scale) {
@@ -489,7 +482,6 @@
, fColorTransform(that.fColorTransform)
, fDomain(that.fDomain)
, fColorSampler(that.fColorSampler)
- , fColorSpaceXform(that.fColorSpaceXform)
, fXChannelSelector(that.fXChannelSelector)
, fYChannelSelector(that.fYChannelSelector)
, fScale(that.fScale) {
@@ -536,11 +528,9 @@
SkISize colorDimensions;
colorDimensions.fWidth = d->fRandom->nextRangeU(0, colorProxy->width());
colorDimensions.fHeight = d->fRandom->nextRangeU(0, colorProxy->height());
- auto colorSpaceXform = GrTest::TestColorXform(d->fRandom);
return GrDisplacementMapEffect::Make(xChannelSelector, yChannelSelector, scale,
std::move(dispProxy), SkMatrix::I(),
- std::move(colorProxy), colorSpaceXform,
- colorDimensions);
+ std::move(colorProxy), colorDimensions);
}
#endif
@@ -559,8 +549,6 @@
// a number smaller than that to approximate 0, but
// leave room for 32-bit float GPU rounding errors.
- fColorSpaceHelper.emitCode(args.fUniformHandler, displacementMap.colorSpaceXform());
-
GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder;
fragBuilder->codeAppendf("\t\thalf4 %s = ", dColor);
fragBuilder->appendTextureLookup(args.fTexSamplers[0], args.fTransformedCoords[0].c_str(),
@@ -618,9 +606,7 @@
domain,
args.fOutputColor,
SkString(cCoords),
- args.fTexSamplers[1],
- nullptr,
- &fColorSpaceHelper);
+ args.fTexSamplers[1]);
fragBuilder->codeAppend(";\n");
}
@@ -636,9 +622,6 @@
proxy->origin() == kTopLeft_GrSurfaceOrigin ?
SkScalarToFloat(scaleY) : SkScalarToFloat(-scaleY));
fGLDomain.setData(pdman, displacementMap.domain(), proxy);
- if (SkToBool(displacementMap.colorSpaceXform())) {
- fColorSpaceHelper.setData(pdman, displacementMap.colorSpaceXform());
- }
}
void GrGLDisplacementMapEffect::GenKey(const GrProcessor& proc,
@@ -649,6 +632,5 @@
uint32_t yKey = displacementMap.yChannelSelector() << kChannelSelectorKeyBits;
b->add32(xKey | yKey);
- b->add32(GrColorSpaceXform::XformKey(displacementMap.colorSpaceXform()));
}
#endif