Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(181)

Unified Diff: src/effects/gradients/SkLinearGradient.cpp

Issue 1553103003: remove 565 effects shaders (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: remove more hasspan16 checks Created 4 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/effects/gradients/SkLinearGradient.h ('k') | src/effects/gradients/SkRadialGradient.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/effects/gradients/SkLinearGradient.cpp
diff --git a/src/effects/gradients/SkLinearGradient.cpp b/src/effects/gradients/SkLinearGradient.cpp
index 8760029795fa2af063f2aa0c10838d315db1ed5b..298466c8a6500bdda29905a93dbbd7b24b4d5939 100644
--- a/src/effects/gradients/SkLinearGradient.cpp
+++ b/src/effects/gradients/SkLinearGradient.cpp
@@ -9,10 +9,6 @@
static const float kInv255Float = 1.0f / 255;
-static inline int repeat_bits(int x, const int bits) {
- return x & ((1 << bits) - 1);
-}
-
static inline int repeat_8bits(int x) {
return x & 0xFF;
}
@@ -23,13 +19,6 @@ static inline int repeat_8bits(int x) {
#pragma optimize("", off)
#endif
-static inline int mirror_bits(int x, const int bits) {
- if (x & (1 << bits)) {
- x = ~x;
- }
- return x & ((1 << bits) - 1);
-}
-
static inline int mirror_8bits(int x) {
if (x & 256) {
x = ~x;
@@ -102,17 +91,6 @@ SkLinearGradient::LinearGradientContext::LinearGradientContext(
const SkLinearGradient& shader, const ContextRec& ctx)
: INHERITED(shader, ctx)
{
- unsigned mask = SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask;
- if ((fDstToIndex.getType() & ~mask) == 0) {
- // when we dither, we are (usually) not const-in-Y
- if ((fFlags & SkShader::kHasSpan16_Flag) && !ctx.fPaint->isDither()) {
- // only claim this if we do have a 16bit mode (i.e. none of our
- // colors have alpha), and if we are not dithering (which obviously
- // is not const in Y).
- fFlags |= SkShader::kConstInY16_Flag;
- }
- }
-
// setup for Sk4f
int count = shader.fColorCount;
fRecs.setCount(count);
@@ -347,173 +325,6 @@ SkShader::GradientType SkLinearGradient::asAGradient(GradientInfo* info) const {
return kLinear_GradientType;
}
-static void dither_memset16(uint16_t dst[], uint16_t value, uint16_t other,
- int count) {
- if (reinterpret_cast<uintptr_t>(dst) & 2) {
- *dst++ = value;
- count -= 1;
- SkTSwap(value, other);
- }
-
- sk_memset32((uint32_t*)dst, (value << 16) | other, count >> 1);
-
- if (count & 1) {
- dst[count - 1] = value;
- }
-}
-
-#define NO_CHECK_ITER_16 \
- do { \
- unsigned fi = SkGradFixedToFixed(fx) >> SkGradientShaderBase::kCache16Shift; \
- SkASSERT(fi < SkGradientShaderBase::kCache16Count); \
- fx += dx; \
- *dstC++ = cache[toggle + fi]; \
- toggle = next_dither_toggle16(toggle); \
- } while (0)
-
-namespace {
-
-typedef void (*LinearShade16Proc)(TileProc proc, SkGradFixed dx, SkGradFixed fx,
- uint16_t* dstC, const uint16_t* cache,
- int toggle, int count);
-
-void shadeSpan16_linear_vertical(TileProc proc, SkGradFixed dx, SkGradFixed fx,
- uint16_t* SK_RESTRICT dstC,
- const uint16_t* SK_RESTRICT cache,
- int toggle, int count) {
- // we're a vertical gradient, so no change in a span
- unsigned fi = proc(SkGradFixedToFixed(fx)) >> SkGradientShaderBase::kCache16Shift;
- SkASSERT(fi < SkGradientShaderBase::kCache16Count);
- dither_memset16(dstC, cache[toggle + fi],
- cache[next_dither_toggle16(toggle) + fi], count);
-}
-
-void shadeSpan16_linear_clamp(TileProc proc, SkGradFixed dx, SkGradFixed fx,
- uint16_t* SK_RESTRICT dstC,
- const uint16_t* SK_RESTRICT cache,
- int toggle, int count) {
- SkClampRange range;
- range.init(fx, dx, count, 0, SkGradientShaderBase::kCache32Count - 1);
- range.validate(count);
-
- if ((count = range.fCount0) > 0) {
- dither_memset16(dstC,
- cache[toggle + range.fV0],
- cache[next_dither_toggle16(toggle) + range.fV0],
- count);
- dstC += count;
- }
- if ((count = range.fCount1) > 0) {
- int unroll = count >> 3;
- fx = range.fFx1;
- for (int i = 0; i < unroll; i++) {
- NO_CHECK_ITER_16; NO_CHECK_ITER_16;
- NO_CHECK_ITER_16; NO_CHECK_ITER_16;
- NO_CHECK_ITER_16; NO_CHECK_ITER_16;
- NO_CHECK_ITER_16; NO_CHECK_ITER_16;
- }
- if ((count &= 7) > 0) {
- do {
- NO_CHECK_ITER_16;
- } while (--count != 0);
- }
- }
- if ((count = range.fCount2) > 0) {
- dither_memset16(dstC,
- cache[toggle + range.fV1],
- cache[next_dither_toggle16(toggle) + range.fV1],
- count);
- }
-}
-
-void shadeSpan16_linear_mirror(TileProc proc, SkGradFixed dx, SkGradFixed fx,
- uint16_t* SK_RESTRICT dstC,
- const uint16_t* SK_RESTRICT cache,
- int toggle, int count) {
- do {
- unsigned fi = mirror_bits(SkGradFixedToFixed(fx) >> SkGradientShaderBase::kCache16Shift,
- SkGradientShaderBase::kCache16Bits);
- SkASSERT(fi < SkGradientShaderBase::kCache16Count);
- fx += dx;
- *dstC++ = cache[toggle + fi];
- toggle = next_dither_toggle16(toggle);
- } while (--count != 0);
-}
-
-void shadeSpan16_linear_repeat(TileProc proc, SkGradFixed dx, SkGradFixed fx,
- uint16_t* SK_RESTRICT dstC,
- const uint16_t* SK_RESTRICT cache,
- int toggle, int count) {
- do {
- unsigned fi = repeat_bits(SkGradFixedToFixed(fx) >> SkGradientShaderBase::kCache16Shift,
- SkGradientShaderBase::kCache16Bits);
- SkASSERT(fi < SkGradientShaderBase::kCache16Count);
- fx += dx;
- *dstC++ = cache[toggle + fi];
- toggle = next_dither_toggle16(toggle);
- } while (--count != 0);
-}
-}
-
-static bool fixed_nearly_zero(SkFixed x) {
- return SkAbs32(x) < (SK_Fixed1 >> 12);
-}
-
-void SkLinearGradient::LinearGradientContext::shadeSpan16(int x, int y,
- uint16_t* SK_RESTRICT dstC, int count) {
- SkASSERT(count > 0);
-
- const SkLinearGradient& linearGradient = static_cast<const SkLinearGradient&>(fShader);
-
- SkPoint srcPt;
- SkMatrix::MapXYProc dstProc = fDstToIndexProc;
- TileProc proc = linearGradient.fTileProc;
- const uint16_t* SK_RESTRICT cache = fCache->getCache16();
- int toggle = init_dither_toggle16(x, y);
-
- if (fDstToIndexClass != kPerspective_MatrixClass) {
- dstProc(fDstToIndex, SkIntToScalar(x) + SK_ScalarHalf,
- SkIntToScalar(y) + SK_ScalarHalf, &srcPt);
- SkGradFixed dx, fx = SkScalarToGradFixed(srcPt.fX);
-
- if (fDstToIndexClass == kFixedStepInX_MatrixClass) {
- SkFixed dxStorage[1];
- (void)fDstToIndex.fixedStepInX(SkIntToScalar(y), dxStorage, nullptr);
- // todo: do we need a real/high-precision value for dx here?
- dx = SkFixedToGradFixed(dxStorage[0]);
- } else {
- SkASSERT(fDstToIndexClass == kLinear_MatrixClass);
- dx = SkScalarToGradFixed(fDstToIndex.getScaleX());
- }
-
- LinearShade16Proc shadeProc = shadeSpan16_linear_repeat;
- if (fixed_nearly_zero(SkGradFixedToFixed(dx))) {
- shadeProc = shadeSpan16_linear_vertical;
- } else if (SkShader::kClamp_TileMode == linearGradient.fTileMode) {
- shadeProc = shadeSpan16_linear_clamp;
- } else if (SkShader::kMirror_TileMode == linearGradient.fTileMode) {
- shadeProc = shadeSpan16_linear_mirror;
- } else {
- SkASSERT(SkShader::kRepeat_TileMode == linearGradient.fTileMode);
- }
- (*shadeProc)(proc, dx, fx, dstC, cache, toggle, count);
- } else {
- SkScalar dstX = SkIntToScalar(x);
- SkScalar dstY = SkIntToScalar(y);
- do {
- dstProc(fDstToIndex, dstX, dstY, &srcPt);
- unsigned fi = proc(SkScalarToFixed(srcPt.fX));
- SkASSERT(fi <= 0xFFFF);
-
- int index = fi >> kCache16Shift;
- *dstC++ = cache[toggle + index];
- toggle = next_dither_toggle16(toggle);
-
- dstX += SK_Scalar1;
- } while (--count != 0);
- }
-}
-
#if SK_SUPPORT_GPU
#include "glsl/GrGLSLCaps.h"
« no previous file with comments | « src/effects/gradients/SkLinearGradient.h ('k') | src/effects/gradients/SkRadialGradient.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698