Use sk_memset* in GrFillBufferWithColor
Change-Id: I6ead74a61884967f9a60eba614414bc42079d28b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/216343
Commit-Queue: Robert Phillips <robertphillips@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
diff --git a/src/gpu/GrDataUtils.cpp b/src/gpu/GrDataUtils.cpp
index 40d69e0..05c80fa 100644
--- a/src/gpu/GrDataUtils.cpp
+++ b/src/gpu/GrDataUtils.cpp
@@ -8,6 +8,7 @@
#include "GrDataUtils.h"
#include "include/private/GrColor.h"
+#include "src/core/SkUtils.h"
static const int kNumModifierTables = 8;
static const int kNumPixelIndices = 4;
@@ -127,7 +128,6 @@
uint8_t b = GrColorUnpackB(color);
uint8_t a = GrColorUnpackA(color);
- // TODO: use sk_memset32, sk_memset16, and SkOpts::rect_memset16/32/64
switch (config) {
case kAlpha_8_GrPixelConfig: // fall through
case kAlpha_8_as_Alpha_GrPixelConfig: // fall through
@@ -139,19 +139,17 @@
case kGray_8_as_Lum_GrPixelConfig: // fall through
case kGray_8_as_Red_GrPixelConfig: {
uint8_t gray8 = SkComputeLuminance(r, g, b);
+
memset(dest, gray8, width * height);
break;
}
case kRGB_565_GrPixelConfig: {
- uint16_t* dest16 = (uint16_t*) dest;
uint16_t rgb565 = SkPack888ToRGB16(r, g, b);
- for (int i = 0; i < width * height; ++i) {
- dest16[i] = rgb565;
- }
+
+ sk_memset16((uint16_t*) dest, rgb565, width * height);
break;
}
case kRGBA_4444_GrPixelConfig: {
- uint16_t* dest16 = (uint16_t*) dest;
uint8_t r4 = (r >> 4) & 0xF;
uint8_t g4 = (g >> 4) & 0xF;
uint8_t b4 = (b >> 4) & 0xF;
@@ -160,16 +158,11 @@
uint16_t rgba4444 = r4 << SK_R4444_SHIFT | g4 << SK_G4444_SHIFT |
b4 << SK_B4444_SHIFT | a4 << SK_A4444_SHIFT;
- for (int i = 0; i < width * height; ++i) {
- dest16[i] = rgba4444;
- }
+ sk_memset16((uint16_t*) dest, rgba4444, width * height);
break;
}
case kRGBA_8888_GrPixelConfig: {
- GrColor* destColor = (GrColor *) dest;
- for (int i = 0; i < width * height; ++i) {
- destColor[i] = color;
- }
+ sk_memset32((uint32_t *) dest, color, width * height);
break;
}
case kRGB_888_GrPixelConfig: {
@@ -184,45 +177,29 @@
case kRGB_888X_GrPixelConfig: {
GrColor opaque = GrColorPackRGBA(r, g, b, 0xFF);
- GrColor* destColor = (GrColor *) dest;
- for (int i = 0; i < width * height; ++i) {
- destColor[i] = opaque;
- }
+ sk_memset32((uint32_t *) dest, opaque, width * height);
break;
}
case kRG_88_GrPixelConfig: {
- uint8_t* dest8 = (uint8_t*) dest;
- for (int i = 0; i < width * height; ++i, dest8 += 2) {
- dest8[0] = r;
- dest8[1] = g;
- }
+ uint16_t rg88 = (r << 8) | g;
+
+ sk_memset16((uint16_t*) dest, rg88, width * height);
break;
}
case kBGRA_8888_GrPixelConfig: {
GrColor swizzled = GrColorPackRGBA(b, g, r, a);
- GrColor* destColor = (GrColor *) dest;
- for (int i = 0; i < width * height; ++i) {
- destColor[i] = swizzled;
- }
+ sk_memset32((uint32_t *) dest, swizzled, width * height);
break;
}
case kSRGBA_8888_GrPixelConfig: {
- // TODO: ask Brian O. what to do here
- GrColor* destColor = (GrColor *) dest;
- for (int i = 0; i < width * height; ++i) {
- destColor[i] = color;
- }
+ sk_memset32((uint32_t *) dest, color, width * height);
break;
}
case kSBGRA_8888_GrPixelConfig: {
- // TODO: ask Brian O. what to do here
GrColor swizzled = GrColorPackRGBA(b, g, r, a);
- GrColor* destColor = (GrColor *) dest;
- for (int i = 0; i < width * height; ++i) {
- destColor[i] = swizzled;
- }
+ sk_memset32((uint32_t *) dest, swizzled, width * height);
break;
}
case kRGBA_1010102_GrPixelConfig: {
@@ -233,10 +210,7 @@
uint32_t rgba1010102 = a2 << 30 | b10 << 20 | g10 << 10 | r10;
- uint32_t* destColor = (uint32_t *) dest;
- for (int i = 0; i < width * height; ++i) {
- destColor[i] = rgba1010102;
- }
+ sk_memset32((uint32_t *) dest, rgba1010102, width * height);
break;
}
case kRGBA_float_GrPixelConfig: {
@@ -256,26 +230,21 @@
}
case kAlpha_half_as_Red_GrPixelConfig: // fall through
case kAlpha_half_GrPixelConfig: {
- SkHalf* destHalf = (SkHalf*) dest;
SkHalf alphaHalf = SkFloatToHalf(colorf.fA);
- for (int i = 0; i < width * height; ++i) {
- destHalf[i] = alphaHalf;
- }
+
+ sk_memset16((uint16_t *) dest, alphaHalf, width * height);
break;
}
case kRGBA_half_GrPixelConfig: // fall through
case kRGBA_half_Clamped_GrPixelConfig: {
- SkHalf* destHalf = (SkHalf*) dest;
- SkHalf rHalf = SkFloatToHalf(colorf.fR);
- SkHalf gHalf = SkFloatToHalf(colorf.fG);
- SkHalf bHalf = SkFloatToHalf(colorf.fB);
- SkHalf aHalf = SkFloatToHalf(colorf.fA);
- for (int i = 0; i < width * height; ++i, destHalf += 4) {
- destHalf[0] = rHalf;
- destHalf[1] = gHalf;
- destHalf[2] = bHalf;
- destHalf[3] = aHalf;
- }
+ uint64_t rHalf = SkFloatToHalf(colorf.fR);
+ uint64_t gHalf = SkFloatToHalf(colorf.fG);
+ uint64_t bHalf = SkFloatToHalf(colorf.fB);
+ uint64_t aHalf = SkFloatToHalf(colorf.fA);
+
+ uint64_t rgbaHalf = (aHalf << 48) | (bHalf << 32) | (gHalf << 16) | rHalf;
+
+ sk_memset64((uint64_t *) dest, rgbaHalf, width * height);
break;
}
default: