Revert "Revert "Make FP optimizations helpers use SkAlphaType not GrColorType""
This reverts commit 078e8faa26d8b1f33a92e57f587be011150d1776.
Change-Id: I67b2970584db5a1afbf9928b77c5444947ef71a3
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/255897
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
diff --git a/src/gpu/ops/GrShadowRRectOp.cpp b/src/gpu/ops/GrShadowRRectOp.cpp
index 6eada79..d899954 100644
--- a/src/gpu/ops/GrShadowRRectOp.cpp
+++ b/src/gpu/ops/GrShadowRRectOp.cpp
@@ -719,35 +719,42 @@
#if GR_TEST_UTILS
GR_DRAW_OP_TEST_DEFINE(ShadowRRectOp) {
- // create a similarity matrix
- SkScalar rotate = random->nextSScalar1() * 360.f;
- SkScalar translateX = random->nextSScalar1() * 1000.f;
- SkScalar translateY = random->nextSScalar1() * 1000.f;
- SkScalar scale;
+ // We may choose matrix and inset values that cause the factory to fail. We loop until we find
+ // an acceptable combination.
do {
- scale = random->nextSScalar1() * 100.f;
- } while (scale == 0);
- SkMatrix viewMatrix;
- viewMatrix.setRotate(rotate);
- viewMatrix.postTranslate(translateX, translateY);
- viewMatrix.postScale(scale, scale);
- SkScalar insetWidth = random->nextSScalar1() * 72.f;
- SkScalar blurWidth = random->nextSScalar1() * 72.f;
- bool isCircle = random->nextBool();
- // This op doesn't use a full GrPaint, just a color.
- GrColor color = paint.getColor4f().toBytes_RGBA();
- if (isCircle) {
- SkRect circle = GrTest::TestSquare(random);
- SkRRect rrect = SkRRect::MakeOval(circle);
- return GrShadowRRectOp::Make(context, color, viewMatrix, rrect, blurWidth, insetWidth);
- } else {
- SkRRect rrect;
- do {
- // This may return a rrect with elliptical corners, which we don't support.
- rrect = GrTest::TestRRectSimple(random);
- } while (!SkRRectPriv::IsSimpleCircular(rrect));
- return GrShadowRRectOp::Make(context, color, viewMatrix, rrect, blurWidth, insetWidth);
- }
+ // create a similarity matrix
+ SkScalar rotate = random->nextSScalar1() * 360.f;
+ SkScalar translateX = random->nextSScalar1() * 1000.f;
+ SkScalar translateY = random->nextSScalar1() * 1000.f;
+ SkScalar scale = random->nextSScalar1() * 100.f;
+ SkMatrix viewMatrix;
+ viewMatrix.setRotate(rotate);
+ viewMatrix.postTranslate(translateX, translateY);
+ viewMatrix.postScale(scale, scale);
+ SkScalar insetWidth = random->nextSScalar1() * 72.f;
+ SkScalar blurWidth = random->nextSScalar1() * 72.f;
+ bool isCircle = random->nextBool();
+ // This op doesn't use a full GrPaint, just a color.
+ GrColor color = paint.getColor4f().toBytes_RGBA();
+ if (isCircle) {
+ SkRect circle = GrTest::TestSquare(random);
+ SkRRect rrect = SkRRect::MakeOval(circle);
+ if (auto op = GrShadowRRectOp::Make(
+ context, color, viewMatrix, rrect, blurWidth, insetWidth)) {
+ return op;
+ }
+ } else {
+ SkRRect rrect;
+ do {
+ // This may return a rrect with elliptical corners, which will cause an assert.
+ rrect = GrTest::TestRRectSimple(random);
+ } while (!SkRRectPriv::IsSimpleCircular(rrect));
+ if (auto op = GrShadowRRectOp::Make(
+ context, color, viewMatrix, rrect, blurWidth, insetWidth)) {
+ return op;
+ }
+ }
+ } while (true);
}
#endif
diff --git a/src/gpu/ops/GrTextureOp.cpp b/src/gpu/ops/GrTextureOp.cpp
index 0b687dd..2016ca7 100644
--- a/src/gpu/ops/GrTextureOp.cpp
+++ b/src/gpu/ops/GrTextureOp.cpp
@@ -943,7 +943,7 @@
std::unique_ptr<GrDrawOp> GrTextureOp::Make(GrRecordingContext* context,
GrSurfaceProxyView proxyView,
- GrColorType srcColorType,
+ SkAlphaType alphaType,
sk_sp<GrColorSpaceXform> textureXform,
GrSamplerState::Filter filter,
const SkPMColor4f& color,
@@ -979,10 +979,10 @@
// Update domain to match what GrTextureOp would do for bilerp, but don't do any
// normalization since GrTextureDomainEffect handles that and the origin.
SkRect correctedDomain = normalize_domain(filter, {1.f, 1.f, 0.f}, domain);
- fp = GrTextureDomainEffect::Make(sk_ref_sp(proxy), srcColorType, SkMatrix::I(),
+ fp = GrTextureDomainEffect::Make(sk_ref_sp(proxy), alphaType, SkMatrix::I(),
correctedDomain, GrTextureDomain::kClamp_Mode, filter);
} else {
- fp = GrSimpleTextureEffect::Make(sk_ref_sp(proxy), srcColorType, SkMatrix::I(), filter);
+ fp = GrSimpleTextureEffect::Make(sk_ref_sp(proxy), alphaType, SkMatrix::I(), filter);
}
fp = GrColorSpaceXformEffect::Make(std::move(fp), std::move(textureXform));
paint.addColorFragmentProcessor(std::move(fp));
@@ -1090,7 +1090,7 @@
const SkRect* domain = constraint == SkCanvas::kStrict_SrcRectConstraint
? &set[i].fSrcRect : nullptr;
- auto op = Make(context, set[i].fProxyView, set[i].fSrcColorType, textureColorSpaceXform,
+ auto op = Make(context, set[i].fProxyView, set[i].fSrcAlphaType, textureColorSpaceXform,
filter, {alpha, alpha, alpha, alpha}, saturate, blendMode, aaType,
set[i].fAAFlags, quad, srcQuad, domain);
rtc->addDrawOp(clip, std::move(op));
@@ -1224,11 +1224,13 @@
GrSurfaceProxyView proxyView(
std::move(proxy), origin,
context->priv().caps()->getTextureSwizzle(format, GrColorType::kRGBA_8888));
+ auto alphaType = static_cast<SkAlphaType>(
+ random->nextRangeU(kUnknown_SkAlphaType + 1, kLastEnum_SkAlphaType));
- return GrTextureOp::Make(context, std::move(proxyView), GrColorType::kRGBA_8888,
- std::move(texXform), filter, color, saturate, SkBlendMode::kSrcOver,
- aaType, aaFlags, GrQuad::MakeFromRect(rect, viewMatrix),
- GrQuad(srcRect), useDomain ? &srcRect : nullptr);
+ return GrTextureOp::Make(context, std::move(proxyView), alphaType, std::move(texXform), filter,
+ color, saturate, SkBlendMode::kSrcOver, aaType, aaFlags,
+ GrQuad::MakeFromRect(rect, viewMatrix), GrQuad(srcRect),
+ useDomain ? &srcRect : nullptr);
}
#endif
diff --git a/src/gpu/ops/GrTextureOp.h b/src/gpu/ops/GrTextureOp.h
index d15d231..7fd545b 100644
--- a/src/gpu/ops/GrTextureOp.h
+++ b/src/gpu/ops/GrTextureOp.h
@@ -42,7 +42,7 @@
*/
static std::unique_ptr<GrDrawOp> Make(GrRecordingContext*,
GrSurfaceProxyView,
- GrColorType srcColorType,
+ SkAlphaType srcAlphaType,
sk_sp<GrColorSpaceXform>,
GrSamplerState::Filter,
const SkPMColor4f&,