Revert "Revert "Reland "Make textures used with alpha-only color-types produce 0s for RGB""""
This reverts commit 1fb7ecb744ee4ffce1761eb8e249c5ee83d83613.
Cq-Include-Trybots: luci.chromium.try:linux-blink-rel,linux-rel
Change-Id: If6692949edd7722e23bc3b64213e75bc15b91a13
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/350026
Commit-Queue: Greg Daniel <egdaniel@google.com>
Auto-Submit: Brian Salomon <bsalomon@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
diff --git a/src/gpu/SkGpuDevice_drawTexture.cpp b/src/gpu/SkGpuDevice_drawTexture.cpp
index 285bd17..c9c8ff3 100644
--- a/src/gpu/SkGpuDevice_drawTexture.cpp
+++ b/src/gpu/SkGpuDevice_drawTexture.cpp
@@ -351,6 +351,9 @@
SkCanvas::SrcRectConstraint constraint,
GrSurfaceProxyView view,
const GrColorInfo& srcColorInfo) {
+ if (GrColorTypeIsAlphaOnly(srcColorInfo.colorType())) {
+ view.concatSwizzle(GrSwizzle("aaaa"));
+ }
const GrColorInfo& dstInfo(rtc->colorInfo());
auto textureXform =
GrColorSpaceXform::Make(srcColorInfo.colorSpace(), srcColorInfo.alphaType(),
@@ -448,7 +451,9 @@
aaFlags,
constraint,
std::move(view),
- producer->colorInfo());
+ {producer->colorType(),
+ producer->alphaType(),
+ sk_ref_sp(producer->colorSpace())});
return;
}
@@ -509,7 +514,11 @@
}
fp = GrColorSpaceXformEffect::Make(std::move(fp), producer->colorSpace(), producer->alphaType(),
rtc->colorInfo().colorSpace(), kPremul_SkAlphaType);
- fp = GrBlendFragmentProcessor::Make(std::move(fp), nullptr, SkBlendMode::kModulate);
+ if (producer->isAlphaOnly()) {
+ fp = GrBlendFragmentProcessor::Make(std::move(fp), nullptr, SkBlendMode::kDstIn);
+ } else {
+ fp = GrBlendFragmentProcessor::Make(std::move(fp), nullptr, SkBlendMode::kSrcIn);
+ }
GrPaint grPaint;
if (!SkPaintToGrPaintWithTexture(context, rtc->colorInfo(), paint, matrixProvider,
@@ -894,6 +903,10 @@
if (!view) {
view = image->refView(this->recordingContext(), GrMipmapped::kNo);
}
+ if (image->isAlphaOnly()) {
+ GrSwizzle swizzle = GrSwizzle::Concat(view.swizzle(), GrSwizzle("aaaa"));
+ view = {view.detachProxy(), view.origin(), swizzle};
+ }
}
if (!view) {