Switch GrFillInData to use GrColorType instead of GrPixelConfig.
Bug: skia:6718
Change-Id: Ic705a102bf1d84a800a856c9b1cfd614cf461500
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/248997
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
diff --git a/src/gpu/GrDataUtils.cpp b/src/gpu/GrDataUtils.cpp
index b86a6c3..6265aae 100644
--- a/src/gpu/GrDataUtils.cpp
+++ b/src/gpu/GrDataUtils.cpp
@@ -154,10 +154,8 @@
}
// Fill in the width x height 'dest' with the munged version of 'colorf' that matches 'config'
-static bool fill_buffer_with_color(GrPixelConfig config, int width, int height,
+static bool fill_buffer_with_color(GrColorType colorType, int width, int height,
const SkColor4f& colorf, void* dest) {
- SkASSERT(kRGB_ETC1_GrPixelConfig != config);
-
GrColor color = colorf.toBytes_RGBA();
uint8_t r = GrColorUnpackR(color);
@@ -165,28 +163,24 @@
uint8_t b = GrColorUnpackB(color);
uint8_t a = GrColorUnpackA(color);
- switch (config) {
- case kAlpha_8_GrPixelConfig: // fall through
- case kAlpha_8_as_Alpha_GrPixelConfig: // fall through
- case kAlpha_8_as_Red_GrPixelConfig: {
+ switch (colorType) {
+ case GrColorType::kAlpha_8: {
memset(dest, a, width * height);
break;
}
- case kGray_8_GrPixelConfig: // fall through
- case kGray_8_as_Lum_GrPixelConfig: // fall through
- case kGray_8_as_Red_GrPixelConfig: {
+ case GrColorType::kGray_8: {
uint8_t gray8 = SkComputeLuminance(r, g, b);
memset(dest, gray8, width * height);
break;
}
- case kRGB_565_GrPixelConfig: {
+ case GrColorType::kBGR_565: {
uint16_t rgb565 = SkPack888ToRGB16(r, g, b);
sk_memset16((uint16_t*) dest, rgb565, width * height);
break;
}
- case kRGBA_4444_GrPixelConfig: {
+ case GrColorType::kABGR_4444: {
uint8_t r4 = (r >> 4) & 0xF;
uint8_t g4 = (g >> 4) & 0xF;
uint8_t b4 = (b >> 4) & 0xF;
@@ -198,42 +192,33 @@
sk_memset16((uint16_t*) dest, rgba4444, width * height);
break;
}
- case kRGBA_8888_GrPixelConfig: {
+ case GrColorType::kRGBA_8888: {
sk_memset32((uint32_t *) dest, color, width * height);
break;
}
- case kRGB_888_GrPixelConfig: {
- uint8_t* dest8 = (uint8_t*) dest;
- for (int i = 0; i < width * height; ++i, dest8 += 3) {
- dest8[0] = r;
- dest8[1] = g;
- dest8[2] = b;
- }
- break;
- }
- case kRGB_888X_GrPixelConfig: {
+ case GrColorType::kRGB_888x: {
GrColor opaque = GrColorPackRGBA(r, g, b, 0xFF);
sk_memset32((uint32_t *) dest, opaque, width * height);
break;
}
- case kRG_88_GrPixelConfig: {
+ case GrColorType::kRG_88: {
uint16_t rg88 = (g << 8) | r;
sk_memset16((uint16_t*) dest, rg88, width * height);
break;
}
- case kBGRA_8888_GrPixelConfig: {
+ case GrColorType::kBGRA_8888: {
GrColor swizzled = GrColorPackRGBA(b, g, r, a);
sk_memset32((uint32_t *) dest, swizzled, width * height);
break;
}
- case kSRGBA_8888_GrPixelConfig: {
+ case GrColorType::kRGBA_8888_SRGB: {
sk_memset32((uint32_t *) dest, color, width * height);
break;
}
- case kRGBA_1010102_GrPixelConfig: {
+ case GrColorType::kRGBA_1010102: {
uint32_t r10 = SkScalarRoundToInt(colorf.fR * 1023.0f);
uint32_t g10 = SkScalarRoundToInt(colorf.fG * 1023.0f);
uint32_t b10 = SkScalarRoundToInt(colorf.fB * 1023.0f);
@@ -244,16 +229,14 @@
sk_memset32((uint32_t *) dest, rgba1010102, width * height);
break;
}
- case kAlpha_half_as_Lum_GrPixelConfig: // fall through
- case kAlpha_half_as_Red_GrPixelConfig: // fall through
- case kAlpha_half_GrPixelConfig: {
+ case GrColorType::kAlpha_F16: {
SkHalf alphaHalf = SkFloatToHalf(colorf.fA);
sk_memset16((uint16_t *) dest, alphaHalf, width * height);
break;
}
- case kRGBA_half_GrPixelConfig: // fall through
- case kRGBA_half_Clamped_GrPixelConfig: {
+ case GrColorType::kRGBA_F16_Clamped: // fall through
+ case GrColorType::kRGBA_F16: {
uint64_t rHalf = SkFloatToHalf(colorf.fR);
uint64_t gHalf = SkFloatToHalf(colorf.fG);
uint64_t bHalf = SkFloatToHalf(colorf.fB);
@@ -264,12 +247,12 @@
sk_memset64((uint64_t *) dest, rgbaHalf, width * height);
break;
}
- case kAlpha_16_GrPixelConfig: {
+ case GrColorType::kAlpha_16: {
uint16_t a16 = SkScalarRoundToInt(colorf.fA * 65535.0f);
sk_memset16((uint16_t*) dest, a16, width * height);
break;
}
- case kRG_1616_GrPixelConfig: {
+ case GrColorType::kRG_1616: {
uint32_t r16 = SkScalarRoundToInt(colorf.fR * 65535.0f);
uint32_t g16 = SkScalarRoundToInt(colorf.fG * 65535.0f);
@@ -278,7 +261,7 @@
sk_memset32((uint32_t*) dest, rg1616, width * height);
break;
}
- case kRGBA_16161616_GrPixelConfig: {
+ case GrColorType::kRGBA_16161616: {
uint64_t r16 = SkScalarRoundToInt(colorf.fR * 65535.0f);
uint64_t g16 = SkScalarRoundToInt(colorf.fG * 65535.0f);
uint64_t b16 = SkScalarRoundToInt(colorf.fB * 65535.0f);
@@ -288,7 +271,7 @@
sk_memset64((uint64_t*) dest, rgba16161616, width * height);
break;
}
- case kRG_half_GrPixelConfig: {
+ case GrColorType::kRG_F16: {
uint32_t rHalf = SkFloatToHalf(colorf.fR);
uint32_t gHalf = SkFloatToHalf(colorf.fG);
@@ -341,11 +324,10 @@
return combinedBufferSize;
}
-void GrFillInData(GrPixelConfig config, int baseWidth, int baseHeight,
+void GrFillInData(GrColorType colorType, int baseWidth, int baseHeight,
const SkTArray<size_t>& individualMipOffsets, char* dstPixels,
const SkColor4f& colorf) {
TRACE_EVENT0("skia.gpu", TRACE_FUNC);
- SkASSERT(!GrPixelConfigIsCompressed(config));
int mipLevels = individualMipOffsets.count();
int currentWidth = baseWidth;
@@ -353,7 +335,8 @@
for (int currentMipLevel = 0; currentMipLevel < mipLevels; ++currentMipLevel) {
size_t offset = individualMipOffsets[currentMipLevel];
- fill_buffer_with_color(config, currentWidth, currentHeight, colorf, &(dstPixels[offset]));
+ fill_buffer_with_color(colorType, currentWidth, currentHeight, colorf,
+ &(dstPixels[offset]));
currentWidth = SkTMax(1, currentWidth / 2);
currentHeight = SkTMax(1, currentHeight / 2);
}
diff --git a/src/gpu/GrDataUtils.h b/src/gpu/GrDataUtils.h
index 2fad128..b51a4dd 100644
--- a/src/gpu/GrDataUtils.h
+++ b/src/gpu/GrDataUtils.h
@@ -26,7 +26,7 @@
size_t GrComputeTightCombinedBufferSize(size_t bytesPerPixel, int baseWidth, int baseHeight,
SkTArray<size_t>* individualMipOffsets, int mipLevelCount);
-void GrFillInData(GrPixelConfig, int baseWidth, int baseHeight,
+void GrFillInData(GrColorType, int baseWidth, int baseHeight,
const SkTArray<size_t>& individualMipOffsets, char* dest, const SkColor4f& color);
void GrFillInCompressedData(SkImage::CompressionType, int width, int height, char* dest,
diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp
index 3ba474a..937e168 100644
--- a/src/gpu/gl/GrGLGpu.cpp
+++ b/src/gpu/gl/GrGLGpu.cpp
@@ -3660,7 +3660,7 @@
char* tmpPixels = (char*)pixelStorage.reset(totalSize);
- GrFillInData(config, w, h, individualMipOffsets, tmpPixels, *color);
+ GrFillInData(textureColorType, w, h, individualMipOffsets, tmpPixels, *color);
for (int i = 0; i < mipLevelCount; ++i) {
size_t offset = individualMipOffsets[i];
diff --git a/src/gpu/mtl/GrMtlGpu.mm b/src/gpu/mtl/GrMtlGpu.mm
index 9836ae7..8e10230 100644
--- a/src/gpu/mtl/GrMtlGpu.mm
+++ b/src/gpu/mtl/GrMtlGpu.mm
@@ -869,8 +869,9 @@
srcData, numMipLevels, combinedBufferSize);
} else if (color) {
GrPixelConfig config = mtl_format_to_pixelconfig(format);
+ auto colorType = GrPixelConfigToColorType(config);
SkASSERT(kUnknown_GrPixelConfig != config);
- GrFillInData(config, w, h, individualMipOffsets, buffer, *color);
+ GrFillInData(colorType, w, h, individualMipOffsets, buffer, *color);
}
// Transfer buffer contents to texture