GrMagnifierEffect uses child for src
Bug: skia:10139
Change-Id: I07b95233c7a7892be8b70e7b640c71ce438545f1
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/296803
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
diff --git a/src/gpu/effects/generated/GrMagnifierEffect.cpp b/src/gpu/effects/generated/GrMagnifierEffect.cpp
index 0746fbf..aabcb15 100644
--- a/src/gpu/effects/generated/GrMagnifierEffect.cpp
+++ b/src/gpu/effects/generated/GrMagnifierEffect.cpp
@@ -65,14 +65,11 @@
args.fUniformHandler->getUniformCStr(boundsUniformVar),
args.fUniformHandler->getUniformCStr(xInvInsetVar),
args.fUniformHandler->getUniformCStr(yInvInsetVar));
- fragBuilder->codeAppendf(
- "d.y), 1.0);\n}\n%s = sample(%s, mix(coord, zoom_coord, weight)).%s;\n",
- args.fOutputColor,
- fragBuilder->getProgramBuilder()->samplerVariable(args.fTexSamplers[0]),
- fragBuilder->getProgramBuilder()
- ->samplerSwizzle(args.fTexSamplers[0])
- .asString()
- .c_str());
+ fragBuilder->codeAppendf("d.y), 1.0);\n}");
+ SkString _sample1112;
+ SkString _coords1112("mix(coord, zoom_coord, weight)");
+ _sample1112 = this->invokeChild(_outer.src_index, args, _coords1112.c_str());
+ fragBuilder->codeAppendf("\n%s = %s;\n", args.fOutputColor, _sample1112.c_str());
}
private:
@@ -85,9 +82,6 @@
pdman.set1f(xInvInsetVar, (_outer.xInvInset));
pdman.set1f(yInvInsetVar, (_outer.yInvInset));
}
- const GrSurfaceProxyView& srcView = _outer.textureSampler(0).view();
- GrTexture& src = *srcView.proxy()->peekTexture();
- (void)src;
auto bounds = _outer.bounds;
(void)bounds;
UniformHandle& boundsUniform = boundsUniformVar;
@@ -105,32 +99,9 @@
UniformHandle& offset = offsetVar;
(void)offset;
- SkScalar invW = 1.0f / src.width();
- SkScalar invH = 1.0f / src.height();
-
- {
- SkScalar y = srcRect.y() * invH;
- if (srcView.origin() != kTopLeft_GrSurfaceOrigin) {
- y = 1.0f - (srcRect.height() / bounds.height()) - y;
- }
-
- pdman.set2f(offset, srcRect.x() * invW, y);
- }
-
- {
- SkScalar y = bounds.y() * invH;
- SkScalar hSign = 1.f;
- if (srcView.origin() != kTopLeft_GrSurfaceOrigin) {
- y = 1.0f - bounds.y() * invH;
- hSign = -1.f;
- }
-
- pdman.set4f(boundsUniform,
- bounds.x() * invW,
- y,
- SkIntToScalar(src.width()) / bounds.width(),
- hSign * SkIntToScalar(src.height()) / bounds.height());
- }
+ pdman.set2f(offset, srcRect.x(), srcRect.y());
+ pdman.set4f(
+ boundsUniform, bounds.x(), bounds.y(), 1.f / bounds.width(), 1.f / bounds.height());
}
UniformHandle boundsUniformVar;
UniformHandle offsetVar;
@@ -147,7 +118,6 @@
bool GrMagnifierEffect::onIsEqual(const GrFragmentProcessor& other) const {
const GrMagnifierEffect& that = other.cast<GrMagnifierEffect>();
(void)that;
- if (src != that.src) return false;
if (bounds != that.bounds) return false;
if (srcRect != that.srcRect) return false;
if (xInvZoom != that.xInvZoom) return false;
@@ -158,27 +128,22 @@
}
GrMagnifierEffect::GrMagnifierEffect(const GrMagnifierEffect& src)
: INHERITED(kGrMagnifierEffect_ClassID, src.optimizationFlags())
- , srcCoordTransform(src.srcCoordTransform)
- , src(src.src)
+ , fCoordTransform0(src.fCoordTransform0)
, bounds(src.bounds)
, srcRect(src.srcRect)
, xInvZoom(src.xInvZoom)
, yInvZoom(src.yInvZoom)
, xInvInset(src.xInvInset)
, yInvInset(src.yInvInset) {
- this->setTextureSamplerCnt(1);
- this->addCoordTransform(&srcCoordTransform);
+ { src_index = this->cloneAndRegisterChildProcessor(src.childProcessor(src.src_index)); }
+ this->addCoordTransform(&fCoordTransform0);
}
std::unique_ptr<GrFragmentProcessor> GrMagnifierEffect::clone() const {
return std::unique_ptr<GrFragmentProcessor>(new GrMagnifierEffect(*this));
}
-const GrFragmentProcessor::TextureSampler& GrMagnifierEffect::onTextureSampler(int index) const {
- return IthTextureSampler(index, src);
-}
GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrMagnifierEffect);
#if GR_TEST_UTILS
std::unique_ptr<GrFragmentProcessor> GrMagnifierEffect::TestCreate(GrProcessorTestData* d) {
- auto[view, ct, at] = d->randomView();
const int kMaxWidth = 200;
const int kMaxHeight = 200;
const SkScalar kMaxInset = 20.0f;
@@ -189,7 +154,8 @@
SkIRect bounds = SkIRect::MakeWH(SkIntToScalar(kMaxWidth), SkIntToScalar(kMaxHeight));
SkRect srcRect = SkRect::MakeWH(SkIntToScalar(width), SkIntToScalar(height));
- auto effect = GrMagnifierEffect::Make(std::move(view),
+ auto src = GrProcessorUnitTest::MakeChildFP(d);
+ auto effect = GrMagnifierEffect::Make(std::move(src),
bounds,
srcRect,
srcRect.width() / bounds.width(),