Revert "Revert "Use bitmap subset for comparison in texture_domain_effect GMs.""
This reverts commit a6b7c523b2f088aeddcd19c47bbdb03c3de17d00.
Change-Id: Id88ac29a77c234189e7652eadae08ed5aef886a5
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/266679
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
diff --git a/gm/texturedomaineffect.cpp b/gm/texturedomaineffect.cpp
index ee06e6b..ff4dfec 100644
--- a/gm/texturedomaineffect.cpp
+++ b/gm/texturedomaineffect.cpp
@@ -110,6 +110,13 @@
fBitmap.width() / 2 + 2, fBitmap.height() / 2 + 2),
};
+ sk_sp<GrTextureProxy> subsetProxies[SK_ARRAY_COUNT(texelDomains)];
+ for (size_t d = 0; d < SK_ARRAY_COUNT(texelDomains); ++d) {
+ SkBitmap subset;
+ fBitmap.extractSubset(&subset, texelDomains[d]);
+ subsetProxies[d] = proxyProvider->createProxyFromBitmap(subset, mipMapped);
+ }
+
SkRect localRect = SkRect::Make(fBitmap.bounds()).makeOutset(kDrawPad, kDrawPad);
SkScalar y = kDrawPad + kTestPad;
@@ -136,26 +143,33 @@
if (!fp1) {
continue;
}
- auto fp2 = fp1->clone();
- SkASSERT(fp2);
auto drawRect = localRect.makeOffset(x, y);
- if (auto op = sk_gpu_test::test_ops::MakeRect(
- context, std::move(fp1), drawRect, localRect)) {
- renderTargetContext->priv().testingOnly_addDrawOp(std::move(op));
- }
- x += localRect.width() + kTestPad;
- // Draw again with a translated local rect and compensating translate matrix.
- drawRect = localRect.makeOffset(x, y);
+ // Throw a translate in the local matrix just to test having something other
+ // than identity. Compensate with an offset local rect.
static constexpr SkVector kT = {-100, 300};
-
if (auto op = sk_gpu_test::test_ops::MakeRect(context,
- std::move(fp2),
+ std::move(fp1),
drawRect,
localRect.makeOffset(kT),
SkMatrix::MakeTrans(-kT))) {
renderTargetContext->priv().testingOnly_addDrawOp(std::move(op));
}
x += localRect.width() + kTestPad;
+
+ SkMatrix subsetTextureMatrix = SkMatrix::Concat(
+ SkMatrix::MakeTrans(-texelDomains[d].topLeft()), textureMatrices[tm]);
+
+ // Now draw with a subsetted proxy using fixed function texture sampling rather
+ // than a texture subset as a comparison.
+ drawRect = localRect.makeOffset(x, y);
+ auto fp2 = GrTextureEffect::Make(subsetProxies[d], fBitmap.alphaType(),
+ subsetTextureMatrix,
+ GrSamplerState(wm, fFilter), caps);
+ if (auto op = sk_gpu_test::test_ops::MakeRect(context, std::move(fp2), drawRect,
+ localRect)) {
+ renderTargetContext->priv().testingOnly_addDrawOp(std::move(op));
+ }
+ x += localRect.width() + kTestPad;
}
y += localRect.height() + kTestPad;
}