Pass origin into GrCoordTransform.
This allows us to not need to read the origin from the stored proxy
Bug: skia:9556
Change-Id: I1c09805201518db2aac2279d02e20b20fc2c0084
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/270374
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
diff --git a/src/effects/imagefilters/SkDisplacementMapEffect.cpp b/src/effects/imagefilters/SkDisplacementMapEffect.cpp
index 2b68324..fbac8fa 100644
--- a/src/effects/imagefilters/SkDisplacementMapEffect.cpp
+++ b/src/effects/imagefilters/SkDisplacementMapEffect.cpp
@@ -486,9 +486,10 @@
, fDisplacementTransform(
SkMatrix::Concat(SkMatrix::MakeTrans(displSubset.x(), displSubset.y()),
offsetMatrix),
- displacement.proxy())
+ displacement.proxy(), displacement.origin())
, fDisplacementSampler(std::move(displacement))
- , fColorTransform(SkMatrix::MakeTrans(colorSubset.x(), colorSubset.y()), color.proxy())
+ , fColorTransform(SkMatrix::MakeTrans(colorSubset.x(), colorSubset.y()), color.proxy(),
+ color.origin())
, fDomain(color.proxy(),
GrTextureDomain::MakeTexelDomain(colorSubset,
GrTextureDomain::kDecal_Mode),
diff --git a/src/effects/imagefilters/SkLightingImageFilter.cpp b/src/effects/imagefilters/SkLightingImageFilter.cpp
index 8765e7c..abcf3ac 100644
--- a/src/effects/imagefilters/SkLightingImageFilter.cpp
+++ b/src/effects/imagefilters/SkLightingImageFilter.cpp
@@ -1615,7 +1615,7 @@
const SkIRect* srcBounds)
// Perhaps this could advertise the opaque or coverage-as-alpha optimizations?
: INHERITED(classID, kNone_OptimizationFlags)
- , fCoordTransform(view.proxy())
+ , fCoordTransform(view.proxy(), view.origin())
, fDomain(create_domain(view.proxy(), srcBounds, GrTextureDomain::kDecal_Mode))
, fTextureSampler(std::move(view))
, fLight(std::move(light))
diff --git a/src/effects/imagefilters/SkMorphologyImageFilter.cpp b/src/effects/imagefilters/SkMorphologyImageFilter.cpp
index 113c763..03087e8 100644
--- a/src/effects/imagefilters/SkMorphologyImageFilter.cpp
+++ b/src/effects/imagefilters/SkMorphologyImageFilter.cpp
@@ -400,7 +400,7 @@
MorphType type,
const float range[2])
: INHERITED(kGrMorphologyEffect_ClassID, ModulateForClampedSamplerOptFlags(srcAlphaType))
- , fCoordTransform(view.proxy())
+ , fCoordTransform(view.proxy(), view.origin())
, fTextureSampler(std::move(view))
, fDirection(direction)
, fRadius(radius)
diff --git a/src/gpu/GrCoordTransform.h b/src/gpu/GrCoordTransform.h
index 130d170..73f09ba 100644
--- a/src/gpu/GrCoordTransform.h
+++ b/src/gpu/GrCoordTransform.h
@@ -29,13 +29,15 @@
* Create a transformation that maps [0, proxy->width()] x [0, proxy->height()] to a proxy's
* extent.
*/
- GrCoordTransform(GrSurfaceProxy* proxy) : fProxy(proxy) {}
+ GrCoordTransform(GrSurfaceProxy* proxy, GrSurfaceOrigin origin)
+ : fProxy(proxy), fOrigin(origin) {}
/**
- * Create a transformation from a matrix. The proxy origin also implies whether a y-reversal
- * should be performed.
+ * Create a transformation from a matrix. The origin implies whether a y-reversal should be
+ * performed.
*/
- GrCoordTransform(const SkMatrix& m, GrSurfaceProxy* proxy) : fProxy(proxy), fMatrix(m) {
+ GrCoordTransform(const SkMatrix& m, GrSurfaceProxy* proxy, GrSurfaceOrigin origin)
+ : fProxy(proxy), fOrigin(origin), fMatrix(m) {
SkASSERT(proxy);
}
@@ -75,7 +77,7 @@
bool normalize() const {
return fProxy && fProxy->backendFormat().textureType() != GrTextureType::kRectangle;
}
- bool reverseY() const { return fProxy && fProxy->origin() == kBottomLeft_GrSurfaceOrigin; }
+ bool reverseY() const { return fProxy && fOrigin == kBottomLeft_GrSurfaceOrigin; }
bool isNoOp() const { return fMatrix.isIdentity() && !this->normalize() && !this->reverseY(); }
// This should only ever be called at flush time after the backing texture has been
@@ -84,6 +86,7 @@
private:
const GrSurfaceProxy* fProxy = nullptr;
+ GrSurfaceOrigin fOrigin = kTopLeft_GrSurfaceOrigin;
SkMatrix fMatrix = SkMatrix::I();
};
diff --git a/src/gpu/effects/GrBicubicEffect.cpp b/src/gpu/effects/GrBicubicEffect.cpp
index 2855d79..ad48d1c 100644
--- a/src/gpu/effects/GrBicubicEffect.cpp
+++ b/src/gpu/effects/GrBicubicEffect.cpp
@@ -169,7 +169,7 @@
: INHERITED{kGrBicubicEffect_ClassID,
ModulateForSamplerOptFlags(
alphaType, GrTextureDomain::IsDecalSampled(wrapModes, modeX, modeY))}
- , fCoordTransform(matrix, view.proxy())
+ , fCoordTransform(matrix, view.proxy(), view.origin())
, fDomain(view.proxy(), domain, modeX, modeY)
, fTextureSampler(std::move(view),
GrSamplerState(wrapModes, GrSamplerState::Filter::kNearest))
diff --git a/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.cpp b/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.cpp
index 9eb4d97..b11015a 100644
--- a/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.cpp
+++ b/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.cpp
@@ -224,7 +224,7 @@
int bounds[2])
: INHERITED(kGrGaussianConvolutionFragmentProcessor_ClassID,
ModulateForSamplerOptFlags(alphaType, mode == GrTextureDomain::kDecal_Mode))
- , fCoordTransform(view.proxy())
+ , fCoordTransform(view.proxy(), view.origin())
, fTextureSampler(std::move(view))
, fRadius(radius)
, fDirection(direction)
diff --git a/src/gpu/effects/GrMatrixConvolutionEffect.cpp b/src/gpu/effects/GrMatrixConvolutionEffect.cpp
index 236c5d3..207917a 100644
--- a/src/gpu/effects/GrMatrixConvolutionEffect.cpp
+++ b/src/gpu/effects/GrMatrixConvolutionEffect.cpp
@@ -155,7 +155,7 @@
// To advertise either the modulation or opaqueness optimizations we'd have to examine the
// parameters.
: INHERITED(kGrMatrixConvolutionEffect_ClassID, kNone_OptimizationFlags)
- , fCoordTransform(srcView.proxy())
+ , fCoordTransform(srcView.proxy(), srcView.origin())
, fDomain(srcView.proxy(), GrTextureDomain::MakeTexelDomain(srcBounds, tileMode),
tileMode, tileMode)
, fTextureSampler(std::move(srcView))
diff --git a/src/gpu/effects/GrTextureEffect.cpp b/src/gpu/effects/GrTextureEffect.cpp
index 5f1c788..7a16cc4 100644
--- a/src/gpu/effects/GrTextureEffect.cpp
+++ b/src/gpu/effects/GrTextureEffect.cpp
@@ -414,7 +414,7 @@
const SkMatrix& matrix, const Sampling& sampling)
: GrFragmentProcessor(kGrTextureEffect_ClassID,
ModulateForSamplerOptFlags(alphaType, sampling.usesDecal()))
- , fCoordTransform(matrix, view.proxy())
+ , fCoordTransform(matrix, view.proxy(), view.origin())
, fSampler(std::move(view), sampling.fHWSampler)
, fSubset(sampling.fShaderSubset)
, fShaderModes{sampling.fShaderModes[0], sampling.fShaderModes[1]} {
diff --git a/src/gpu/effects/generated/GrAlphaThresholdFragmentProcessor.h b/src/gpu/effects/generated/GrAlphaThresholdFragmentProcessor.h
index 05ceb9f..b7bcc8d 100644
--- a/src/gpu/effects/generated/GrAlphaThresholdFragmentProcessor.h
+++ b/src/gpu/effects/generated/GrAlphaThresholdFragmentProcessor.h
@@ -40,7 +40,7 @@
: INHERITED(kGrAlphaThresholdFragmentProcessor_ClassID, kNone_OptimizationFlags)
, maskCoordTransform(
SkMatrix::MakeTrans(SkIntToScalar(-bounds.x()), SkIntToScalar(-bounds.y())),
- mask.proxy())
+ mask.proxy(), mask.origin())
, mask(std::move(mask))
, innerThreshold(innerThreshold)
, outerThreshold(outerThreshold) {
diff --git a/src/gpu/effects/generated/GrMagnifierEffect.h b/src/gpu/effects/generated/GrMagnifierEffect.h
index e774b0c..753a2e6 100644
--- a/src/gpu/effects/generated/GrMagnifierEffect.h
+++ b/src/gpu/effects/generated/GrMagnifierEffect.h
@@ -39,7 +39,7 @@
GrMagnifierEffect(GrSurfaceProxyView src, SkIRect bounds, SkRect srcRect, float xInvZoom,
float yInvZoom, float xInvInset, float yInvInset)
: INHERITED(kGrMagnifierEffect_ClassID, kNone_OptimizationFlags)
- , srcCoordTransform(SkMatrix::I(), src.proxy())
+ , srcCoordTransform(SkMatrix::I(), src.proxy(), src.origin())
, src(std::move(src))
, bounds(bounds)
, srcRect(srcRect)
diff --git a/src/sksl/SkSLHCodeGenerator.cpp b/src/sksl/SkSLHCodeGenerator.cpp
index 6d40b61..3898c05 100644
--- a/src/sksl/SkSLHCodeGenerator.cpp
+++ b/src/sksl/SkSLHCodeGenerator.cpp
@@ -242,7 +242,8 @@
const Section& s = *transforms[i];
String field = CoordTransformName(s.fArgument.c_str(), i);
if (s.fArgument.size()) {
- this->writef("\n , %s(%s, %s.proxy())", field.c_str(), s.fText.c_str(),
+ this->writef("\n , %s(%s, %s.proxy(), %s.origin())", field.c_str(), s.fText.c_str(),
+ FieldName(s.fArgument.c_str()).c_str(),
FieldName(s.fArgument.c_str()).c_str());
}
else {