Don't use color type derived from GrPixelConfig to determine proxy texture swizzle.
Change-Id: Ib19e378d7dd8243cbbee68e97bcb3b6159943500
Bug: skia:6718
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/233898
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
diff --git a/src/gpu/ccpr/GrCCAtlas.cpp b/src/gpu/ccpr/GrCCAtlas.cpp
index 89eff1a..aff4644 100644
--- a/src/gpu/ccpr/GrCCAtlas.cpp
+++ b/src/gpu/ccpr/GrCCAtlas.cpp
@@ -55,21 +55,19 @@
GrPixelConfig pixelConfig;
int sampleCount;
- GrBackendFormat format;
+ auto colorType = CoverageTypeToColorType(coverageType);
+ GrBackendFormat format = caps.getDefaultBackendFormat(colorType, GrRenderable::kYes);
switch (coverageType) {
case CoverageType::kFP16_CoverageCount:
- format = caps.getDefaultBackendFormat(GrColorType::kAlpha_F16, GrRenderable::kYes);
pixelConfig = kAlpha_half_GrPixelConfig;
sampleCount = 1;
break;
case CoverageType::kA8_Multisample:
- format = caps.getDefaultBackendFormat(GrColorType::kAlpha_8, GrRenderable::kYes);
SkASSERT(caps.internalMultisampleCount(format) > 1);
pixelConfig = kAlpha_8_GrPixelConfig;
sampleCount = (caps.mixedSamplesSupport()) ? 1 : caps.internalMultisampleCount(format);
break;
case CoverageType::kA8_LiteralCoverage:
- format = caps.getDefaultBackendFormat(GrColorType::kAlpha_8, GrRenderable::kYes);
pixelConfig = kAlpha_8_GrPixelConfig;
sampleCount = 1;
break;
diff --git a/src/gpu/ccpr/GrCCAtlas.h b/src/gpu/ccpr/GrCCAtlas.h
index 125f41a..724a017 100644
--- a/src/gpu/ccpr/GrCCAtlas.h
+++ b/src/gpu/ccpr/GrCCAtlas.h
@@ -53,6 +53,17 @@
kA8_LiteralCoverage
};
+ static constexpr GrColorType CoverageTypeToColorType(CoverageType coverageType) {
+ switch (coverageType) {
+ case CoverageType::kFP16_CoverageCount:
+ return GrColorType::kAlpha_F16;
+ case CoverageType::kA8_Multisample:
+ case CoverageType::kA8_LiteralCoverage:
+ return GrColorType::kAlpha_8;
+ }
+ SkUNREACHABLE;
+ }
+
using LazyInstantiateAtlasCallback = std::function<sk_sp<GrTexture>(
GrResourceProvider*, GrPixelConfig, const GrBackendFormat&, int sampleCount)>;
diff --git a/src/gpu/ccpr/GrCCPathCache.cpp b/src/gpu/ccpr/GrCCPathCache.cpp
index 30400cb..5c5237d 100644
--- a/src/gpu/ccpr/GrCCPathCache.cpp
+++ b/src/gpu/ccpr/GrCCPathCache.cpp
@@ -229,8 +229,9 @@
SkASSERT(SkToBool(entry->fCachedAtlas->peekOnFlushRefCnt()) ==
SkToBool(entry->fCachedAtlas->getOnFlushProxy()));
if (!entry->fCachedAtlas->getOnFlushProxy()) {
+ auto ct = GrCCAtlas::CoverageTypeToColorType(entry->fCachedAtlas->coverageType());
if (sk_sp<GrTextureProxy> onFlushProxy = onFlushRP->findOrCreateProxyByUniqueKey(
- entry->fCachedAtlas->textureKey(), GrCCAtlas::kTextureOrigin)) {
+ entry->fCachedAtlas->textureKey(), ct, GrCCAtlas::kTextureOrigin)) {
onFlushProxy->priv().setIgnoredByResourceAllocator();
entry->fCachedAtlas->setOnFlushProxy(std::move(onFlushProxy));
}