Pass color types when creating texture with initial data.
One describes the color type use case for the texture and the other
the color type of the texel data, a la writePixels().
Bug: skia:6718
Change-Id: I3ca2ab9f76aaeca4b2861a171b1aaacaa0709d1e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/240679
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
diff --git a/src/gpu/GrProxyProvider.cpp b/src/gpu/GrProxyProvider.cpp
index 46ea7b7..e4e0e84 100644
--- a/src/gpu/GrProxyProvider.cpp
+++ b/src/gpu/GrProxyProvider.cpp
@@ -150,7 +150,7 @@
isProtected);
} else {
tex = resourceProvider->createTexture(desc, format, renderable, renderTargetSampleCnt,
- budgeted, isProtected);
+ GrMipMapped::kNo, budgeted, isProtected);
}
if (!tex) {
return nullptr;
@@ -297,8 +297,8 @@
GrMipLevel mipLevel = { pixMap.addr(), pixMap.rowBytes() };
return LazyCallbackResult(resourceProvider->createTexture(
- desc, format, GrRenderable::kNo, sampleCnt, budgeted, fit, GrProtected::kNo,
- ct, mipLevel));
+ desc, format, ct, GrRenderable::kNo, sampleCnt, budgeted, fit,
+ GrProtected::kNo, mipLevel));
},
format, desc, GrRenderable::kNo, sampleCnt, kTopLeft_GrSurfaceOrigin, GrMipMapped::kNo,
GrMipMapsStatus::kNotAllocated, surfaceFlags, fit, budgeted, GrProtected::kNo,
@@ -360,8 +360,8 @@
GrSurfaceDesc desc = GrImageInfoToSurfaceDesc(bitmap.info());
- GrColorType grColorType = SkColorTypeToGrColorType(bitmap.info().colorType());
- GrBackendFormat format = this->caps()->getDefaultBackendFormat(grColorType, GrRenderable::kNo);
+ GrBackendFormat format = this->caps()->getDefaultBackendFormat(
+ SkColorTypeToGrColorType(bitmap.info().colorType()), GrRenderable::kNo);
if (!format.isValid()) {
SkBitmap copy8888;
if (!copy8888.tryAllocPixels(bitmap.info().makeColorType(kRGBA_8888_SkColorType)) ||
@@ -371,8 +371,7 @@
copy8888.setImmutable();
baseLevel = SkMakeImageFromRasterBitmap(copy8888, kNever_SkCopyPixelsMode);
desc.fConfig = kRGBA_8888_GrPixelConfig;
- grColorType = GrColorType::kRGBA_8888;
- format = this->caps()->getDefaultBackendFormat(grColorType, GrRenderable::kNo);
+ format = this->caps()->getDefaultBackendFormat(GrColorType::kRGBA_8888, GrRenderable::kNo);
if (!format.isValid()) {
return nullptr;
}
@@ -393,22 +392,21 @@
SkPixmap pixmap;
SkAssertResult(baseLevel->peekPixels(&pixmap));
- // DDL TODO: Instead of copying all this info into GrMipLevels we should just plumb
- // the use of SkMipMap down through Ganesh.
texels[0].fPixels = pixmap.addr();
texels[0].fRowBytes = pixmap.rowBytes();
+ auto colorType = SkColorTypeToGrColorType(pixmap.colorType());
for (int i = 1; i < mipLevelCount; ++i) {
SkMipMap::Level generatedMipLevel;
mipmaps->getLevel(i - 1, &generatedMipLevel);
texels[i].fPixels = generatedMipLevel.fPixmap.addr();
texels[i].fRowBytes = generatedMipLevel.fPixmap.rowBytes();
SkASSERT(texels[i].fPixels);
+ SkASSERT(generatedMipLevel.fPixmap.colorType() == pixmap.colorType());
}
-
return LazyCallbackResult(resourceProvider->createTexture(
- desc, format, GrRenderable::kNo, 1, SkBudgeted::kYes, GrProtected::kNo,
- texels.get(), mipLevelCount));
+ desc, format, colorType, GrRenderable::kNo, 1, SkBudgeted::kYes,
+ GrProtected::kNo, texels.get(), mipLevelCount));
},
format, desc, GrRenderable::kNo, 1, kTopLeft_GrSurfaceOrigin, GrMipMapped::kYes,
GrMipMapsStatus::kValid, GrInternalSurfaceFlags::kNone, SkBackingFit::kExact,